summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorunknown <msvensson@pilot.(none)>2007-08-28 15:32:13 +0200
committerunknown <msvensson@pilot.(none)>2007-08-28 15:32:13 +0200
commit345c18e4e18c27eb387c6cec2e252c8b91bfc302 (patch)
treead3426b253ec3392b5b91f5d4bd54a2875253ae2 /client
parent484069cf00ea15e3b690228ddf81752704fac390 (diff)
downloadmariadb-git-345c18e4e18c27eb387c6cec2e252c8b91bfc302.tar.gz
Move "analyze_testcase_failure" to mysqltest(since it knows best when
to perform this analyzis) client/mysqltest.c: Add function 'show_query' and use it to output some debug queries when "sync_with_master" has failed. mysql-test/mysql-test-run.pl: Move "analyze_testcase_failure" to mysqltest
Diffstat (limited to 'client')
-rw-r--r--client/mysqltest.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/client/mysqltest.c b/client/mysqltest.c
index 693c6d0fb65..23a23dc5719 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -605,6 +605,71 @@ void do_eval(DYNAMIC_STRING *query_eval, const char *query,
/*
+ Run query and dump the result to stdout in vertical format
+
+ NOTE! This function should be safe to call when an error
+ has occured and thus any further errors will be ignored(although logged)
+
+ SYNOPSIS
+ show_query
+ mysql - connection to use
+ query - query to run
+
+*/
+
+static void show_query(MYSQL* mysql, const char* query)
+{
+ MYSQL_RES* res;
+ DBUG_ENTER("show_query");
+
+ if (!mysql)
+ DBUG_VOID_RETURN;
+
+ if (mysql_query(mysql, query))
+ {
+ log_msg("Error running query '%s': %d %s",
+ query, mysql_errno(mysql), mysql_error(mysql));
+ DBUG_VOID_RETURN;
+ }
+
+ if ((res= mysql_store_result(mysql)) == NULL)
+ {
+ /* No result set returned */
+ DBUG_VOID_RETURN;
+ }
+
+ {
+ MYSQL_ROW row;
+ unsigned int i;
+ unsigned int row_num= 0;
+ unsigned int num_fields= mysql_num_fields(res);
+ MYSQL_FIELD *fields= mysql_fetch_fields(res);
+
+ fprintf(stderr, "=== %s ===\n", query);
+ while ((row= mysql_fetch_row(res)))
+ {
+ unsigned long *lengths= mysql_fetch_lengths(res);
+ row_num++;
+
+ fprintf(stderr, "---- %d. ----\n", row_num);
+ for(i= 0; i < num_fields; i++)
+ {
+ fprintf(stderr, "%s\t%.*s\n",
+ fields[i].name,
+ (int)lengths[i], row[i] ? row[i] : "NULL");
+ }
+ }
+ for (i= 0; i < strlen(query)+8; i++)
+ fprintf(stderr, "=");
+ fprintf(stderr, "\n\n");
+ }
+ mysql_free_result(res);
+
+ DBUG_VOID_RETURN;
+}
+
+
+/*
Show any warnings just before the error. Since the last error
is added to the warning stack, only print @@warning_count-1 warnings.
@@ -3150,7 +3215,11 @@ wait_for_position:
SLAVE has been issued ?
*/
if (tries++ == 30)
+ {
+ show_query(mysql, "SHOW MASTER STATUS");
+ show_query(mysql, "SHOW SLAVE STATUS");
die("could not sync with master ('%s' returned NULL)", query_buf);
+ }
sleep(1); /* So at most we will wait 30 seconds and make 31 tries */
mysql_free_result(res);
goto wait_for_position;