diff options
author | unknown <tsmith@ramayana.hindu.god> | 2007-11-20 20:35:14 -0700 |
---|---|---|
committer | unknown <tsmith@ramayana.hindu.god> | 2007-11-20 20:35:14 -0700 |
commit | df20252cd499cd24496c59b9fe7b010d818bd662 (patch) | |
tree | 5436acc08ba66eeaebb37be8e1a991abc1923869 | |
parent | 693447f2ca7585c97f6c08e5589d1b2f8f479109 (diff) | |
parent | 49b527ab648cfbcf30528b4bcfce113f1ab4e335 (diff) | |
download | mariadb-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.cc | 52 | ||||
-rw-r--r-- | mysql-test/r/mysql.result | 7 | ||||
-rw-r--r-- | mysql-test/t/mysql.test | 18 |
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 |