summaryrefslogtreecommitdiff
path: root/client/mysql.cc
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 /client/mysql.cc
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
Diffstat (limited to 'client/mysql.cc')
-rw-r--r--client/mysql.cc52
1 files changed, 29 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);
}