summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <tsmith@ramayana.hindu.god>2007-11-20 20:35:14 -0700
committerunknown <tsmith@ramayana.hindu.god>2007-11-20 20:35:14 -0700
commitdf20252cd499cd24496c59b9fe7b010d818bd662 (patch)
tree5436acc08ba66eeaebb37be8e1a991abc1923869
parent693447f2ca7585c97f6c08e5589d1b2f8f479109 (diff)
parent49b527ab648cfbcf30528b4bcfce113f1ab4e335 (diff)
downloadmariadb-git-df20252cd499cd24496c59b9fe7b010d818bd662.tar.gz
Merge ramayana.hindu.god:/home/tsmith/m/bk/build/b25146/51
into ramayana.hindu.god:/home/tsmith/m/bk/build/51 client/mysql.cc: Auto merged
-rw-r--r--client/mysql.cc52
-rw-r--r--mysql-test/r/mysql.result7
-rw-r--r--mysql-test/t/mysql.test18
3 files changed, 54 insertions, 23 deletions
diff --git a/client/mysql.cc b/client/mysql.cc
index 180bc8df848..2d4b2bcc373 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -2207,33 +2207,26 @@ com_go(String *buffer,char *line __attribute__((unused)))
}
#endif
- if (error)
- {
- executing_query= 0;
- buffer->length(0); // Remove query on error
- return error;
- }
- error=0;
buffer->length(0);
+ if (error)
+ goto end;
+
do
{
if (quick)
{
if (!(result=mysql_use_result(&mysql)) && mysql_field_count(&mysql))
{
- executing_query= 0;
- return put_error(&mysql);
+ error= put_error(&mysql);
+ goto end;
}
}
else
{
error= mysql_store_result_for_lazy(&result);
if (error)
- {
- executing_query= 0;
- return error;
- }
+ goto end;
}
if (verbose >= 3 || !opt_silent)
@@ -2310,12 +2303,10 @@ com_go(String *buffer,char *line __attribute__((unused)))
if (err >= 1)
error= put_error(&mysql);
+end:
+
if (show_warnings == 1 && warnings >= 1) /* Show warnings if any */
- {
- init_pager();
print_warnings();
- end_pager();
- }
if (!error && !status.batch &&
(mysql.server_status & SERVER_STATUS_DB_DROPPED))
@@ -2740,6 +2731,9 @@ static void print_warnings()
MYSQL_RES *result;
MYSQL_ROW cur;
my_ulonglong num_rows;
+
+ /* Save current error before calling "show warnings" */
+ uint error= mysql_errno(&mysql);
/* Get the warnings */
query= "show warnings";
@@ -2748,16 +2742,28 @@ static void print_warnings()
/* Bail out when no warnings */
if (!(num_rows= mysql_num_rows(result)))
- {
- mysql_free_result(result);
- return;
- }
+ goto end;
+
+ cur= mysql_fetch_row(result);
+
+ /*
+ Don't print a duplicate of the current error. It is possible for SHOW
+ WARNINGS to return multiple errors with the same code, but different
+ messages. To be safe, skip printing the duplicate only if it is the only
+ warning.
+ */
+ if (!cur || num_rows == 1 && error == (uint) strtoul(cur[1], NULL, 10))
+ goto end;
/* Print the warnings */
- while ((cur= mysql_fetch_row(result)))
+ init_pager();
+ do
{
tee_fprintf(PAGER, "%s (Code %s): %s\n", cur[0], cur[1], cur[2]);
- }
+ } while ((cur= mysql_fetch_row(result)));
+ end_pager();
+
+end:
mysql_free_result(result);
}
diff --git a/mysql-test/r/mysql.result b/mysql-test/r/mysql.result
index 4e39fb28454..9a920f3e196 100644
--- a/mysql-test/r/mysql.result
+++ b/mysql-test/r/mysql.result
@@ -180,3 +180,10 @@ ERROR at line 1: DELIMITER cannot contain a backslash character
1
End of 5.0 tests
WARNING: --server-arg option not supported in this configuration.
+Warning (Code 1286): Unknown table engine 'nonexistent'
+Warning (Code 1266): Using storage engine MyISAM for table 't2'
+Warning (Code 1286): Unknown table engine 'nonexistent'
+Warning (Code 1266): Using storage engine MyISAM for table 't2'
+Error (Code 1050): Table 't2' already exists
+drop tables t1, t2;
+End of tests
diff --git a/mysql-test/t/mysql.test b/mysql-test/t/mysql.test
index 3ee04f32640..31cca441da8 100644
--- a/mysql-test/t/mysql.test
+++ b/mysql-test/t/mysql.test
@@ -290,3 +290,21 @@ remove_file $MYSQLTEST_VARDIR/tmp/bug21412.sql;
--disable_query_log
--exec $MYSQL --server-arg=no-defaults test -e "quit"
--enable_query_log
+
+#
+# Bug #25146: Some warnings/errors not shown when using --show-warnings
+#
+
+# This one should succeed with no warnings
+--exec $MYSQL --show-warnings test -e "create table t1 (id int)"
+
+# This should succeed, with warnings about conversion from nonexistent engine
+--exec $MYSQL --show-warnings test -e "create table t2 (id int) engine=nonexistent"
+
+# This should fail, with warnings as well
+--error 1
+--exec $MYSQL --show-warnings test -e "create table t2 (id int) engine=nonexistent"
+
+drop tables t1, t2;
+
+--echo End of tests