summaryrefslogtreecommitdiff
path: root/storage/spider
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2023-04-27 09:53:56 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2023-04-27 09:53:56 +0300
commitbbd261bb2eb4d2ebcfd32c67fce9d4ea6d7cb775 (patch)
tree47d65ff8bf1d5210441c37c9141694e92115db92 /storage/spider
parentc15c8ef3e357a3e01f775f20027fdac9b227099f (diff)
parentbb1d1dc84652d43f8b6b92ba722ba8f246ce7124 (diff)
downloadmariadb-git-bbd261bb2eb4d2ebcfd32c67fce9d4ea6d7cb775.tar.gz
Merge 10.6 into 10.8
Diffstat (limited to 'storage/spider')
-rw-r--r--storage/spider/mysql-test/spider/bugfix/r/self_reference_multi.result4
-rw-r--r--storage/spider/spd_db_mysql.cc60
-rw-r--r--storage/spider/spd_db_mysql.h2
3 files changed, 42 insertions, 24 deletions
diff --git a/storage/spider/mysql-test/spider/bugfix/r/self_reference_multi.result b/storage/spider/mysql-test/spider/bugfix/r/self_reference_multi.result
index 8ddf428b4ea..c4399ddf9d2 100644
--- a/storage/spider/mysql-test/spider/bugfix/r/self_reference_multi.result
+++ b/storage/spider/mysql-test/spider/bugfix/r/self_reference_multi.result
@@ -12,9 +12,9 @@ alter table t2 ENGINE=Spider COMMENT='WRAPPER "mysql", srv "srv",TABLE "t0"';
select * from t0;
ERROR HY000: An infinite loop is detected when opening table test.t0
select * from t1;
-ERROR HY000: An infinite loop is detected when opening table test.t1
+ERROR HY000: An infinite loop is detected when opening table test.t0
select * from t2;
-ERROR HY000: An infinite loop is detected when opening table test.t2
+ERROR HY000: An infinite loop is detected when opening table test.t0
drop table t0, t1, t2;
for master_1
for child2
diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc
index 452937179bb..70f5fae7cfe 100644
--- a/storage/spider/spd_db_mysql.cc
+++ b/storage/spider/spd_db_mysql.cc
@@ -2295,44 +2295,64 @@ bool spider_db_mbase::is_xa_nota_error(
DBUG_RETURN(xa_nota);
}
-void spider_db_mbase::fetch_and_print_warnings(struct tm *l_time)
+int spider_db_mbase::fetch_and_print_warnings(struct tm *l_time)
{
+ int error_num = 0;
DBUG_ENTER("spider_db_mbase::fetch_and_print_warnings");
+ DBUG_PRINT("info",("spider this=%p", this));
if (spider_param_dry_access() || db_conn->status != MYSQL_STATUS_READY ||
- db_conn->server_status & SERVER_MORE_RESULTS_EXISTS)
- DBUG_VOID_RETURN;
+ db_conn->server_status & SERVER_MORE_RESULTS_EXISTS ||
+ !db_conn->warning_count)
+ DBUG_RETURN(0);
if (mysql_real_query(db_conn, SPIDER_SQL_SHOW_WARNINGS_STR,
SPIDER_SQL_SHOW_WARNINGS_LEN))
- DBUG_VOID_RETURN;
+ DBUG_RETURN(0);
MYSQL_RES *res= mysql_store_result(db_conn);
if (!res)
- DBUG_VOID_RETURN;
+ DBUG_RETURN(0);
uint num_fields= mysql_num_fields(res);
if (num_fields != 3)
{
mysql_free_result(res);
- DBUG_VOID_RETURN;
+ DBUG_RETURN(0);
}
MYSQL_ROW row= mysql_fetch_row(res);
- while (row)
+ if (l_time)
{
- fprintf(stderr,
- "%04d%02d%02d %02d:%02d:%02d [WARN SPIDER RESULT] from [%s] %ld "
- "to %ld: %s %s %s\n",
- l_time->tm_year + 1900, l_time->tm_mon + 1, l_time->tm_mday,
- l_time->tm_hour, l_time->tm_min, l_time->tm_sec, conn->tgt_host,
- (ulong) db_conn->thread_id, (ulong) current_thd->thread_id, row[0],
- row[1], row[2]);
- row= mysql_fetch_row(res);
- }
+ while (row)
+ {
+ fprintf(stderr,
+ "%04d%02d%02d %02d:%02d:%02d [WARN SPIDER RESULT] from [%s] %ld "
+ "to %ld: %s %s %s\n",
+ l_time->tm_year + 1900, l_time->tm_mon + 1, l_time->tm_mday,
+ l_time->tm_hour, l_time->tm_min, l_time->tm_sec, conn->tgt_host,
+ (ulong) db_conn->thread_id, (ulong) current_thd->thread_id, row[0],
+ row[1], row[2]);
+ row= mysql_fetch_row(res);
+ }
+ } else {
+ while (row)
+ {
+ DBUG_PRINT("info",("spider row[0]=%s", row[0]));
+ DBUG_PRINT("info",("spider row[1]=%s", row[1]));
+ DBUG_PRINT("info",("spider row[2]=%s", row[2]));
+ longlong res_num =
+ (longlong) my_strtoll10(row[1], (char**) NULL, &error_num);
+ DBUG_PRINT("info",("spider res_num=%lld", res_num));
+ my_printf_error((int) res_num, row[2], MYF(0));
+ error_num = (int) res_num;
+ row = mysql_fetch_row(res);
+ }
+ }
+
mysql_free_result(res);
- DBUG_VOID_RETURN;
+ DBUG_RETURN(error_num);
}
spider_db_result *spider_db_mbase::store_result(
@@ -14436,11 +14456,9 @@ int spider_mbase_handler::show_table_status(
DBUG_RETURN(error_num);
}
}
+ if ((error_num = ((spider_db_mbase *) conn->db_conn)->fetch_and_print_warnings(NULL)))
{
- time_t cur_time = (time_t) time((time_t*) 0);
- struct tm lt;
- struct tm *l_time = localtime_r(&cur_time, &lt);
- ((spider_db_mbase *) conn->db_conn)->fetch_and_print_warnings(l_time);
+ DBUG_RETURN(error_num);
}
if (share->static_records_for_status != -1)
{
diff --git a/storage/spider/spd_db_mysql.h b/storage/spider/spd_db_mysql.h
index 64d523541a5..8723d51cae7 100644
--- a/storage/spider/spd_db_mysql.h
+++ b/storage/spider/spd_db_mysql.h
@@ -448,7 +448,7 @@ public:
bool is_xa_nota_error(
int error_num
);
- void fetch_and_print_warnings(struct tm *l_time);
+ int fetch_and_print_warnings(struct tm *l_time);
spider_db_result *store_result(
spider_db_result_buffer **spider_res_buf,
st_spider_db_request_key *request_key,