Bug #22913 mysql --quick doesn't report some errors
Submitted: 3 Oct 2006 2:04 Modified: 14 Nov 2006 4:30
Reporter: Morgan Tocker
Status: Closed
Category:Client Severity:S3 (Non-critical)
Version:4.0, 4.1, 5.0 OS:
Assigned to: Ramil Kalimullin Target Version:

[3 Oct 2006 2:04] Morgan Tocker
Description:
With mysql --quick, there is no error checking while fetching rows.  You can test this by
breaking on the fetch and then killing the server.  The result is that the he client stops
but does not print any error messages and appears to have completed the query.

Verified in 4.0.26, 4.1.21 and 5.0.24a.

How to repeat:
An example when using a custom table handler, is that the header output is returned, but
no data for rows:

$ mysql -q -uroot -pPASSWORD -hHOSTNAME DATABASE -e 'select count(*) from tbl'
+-----------------------+
| count(*) |
+-----------------------+
+-----------------------+

Suggested fix:
In client/mysqlcc:7070 (5.1 tree):

    if (quick)
     {
       if (!(result=mysql_use_result(&mysql)) && mysql_field_count(&mysql))
       {
         executing_query= 0;
         return put_error(&mysq
[3 Oct 2006 2:08] Morgan Tocker
Suggested fix was truncated....

In client/mysqlcc:7070 (5.1 tree):

    if (quick)
     {
       if (!(result=mysql_use_result(&mysql)) && mysql_field_count(&mysql))
       {
         executing_query= 0;
         return put_error(&mysql);
       }
     }
     else
     {
       error= mysql_store_result_for_lazy(&result);
       if (error)
       {
         executing_query= 0;
         return error;
       }
     }                       

mysql_use_result shouldn't return an error. The problem is that print_table_data does not
check mysql_errno when the mysql_fetch_row loop completes and the caller to
print_table_data also does not check.
[3 Oct 2006 11:19] Valeriy Kravchuk
Thank you for a bug report.
[3 Oct 2006 20:02] Dean Ellis
None of the print_table_data functions check for errors during their mysql_fetch_row()
loops, so errors that occur after mysql_use_result() will be silently dropped.

Something like this might help:

===== mysql.cc 1.231 vs edited =====
--- 1.231/client/mysql.cc       2006-10-03 13:09:27 -05:00
+++ edited/mysql.cc     2006-10-03 13:07:55 -05:00
@@ -2087,6 +2087,7 @@
                (long) mysql_num_rows(result),
                (long) mysql_num_rows(result) == 1 ? "row" : "rows");
        end_pager();
+       if (mysql_errno(&mysql)) error= put_error(&mysql);
       }
     }
     else if (mysql_affected_rows(&mysql) == ~(ulonglong) 0)
[6 Oct 2006 12:36] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/13236

ChangeSet@1.2543, 2006-10-06 15:35:08+05:00, ramil@mysql.com +1 -0
  Fix for bug #22913: mysql --quick doesn't report some errors.
  
  We don't check for errors that may occure diring data printing.
[12 Oct 2006 10:20] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/13558

ChangeSet@1.2543, 2006-10-12 13:19:38+05:00, ramil@mysql.com +1 -0
  Fix for bug #22913: mysql --quick doesn't report some errors.
  
  We don't check for errors that may occur diring data printing.
[2 Nov 2006 11:30] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/14728

ChangeSet@1.2543, 2006-11-02 14:32:00+04:00, ramil@mysql.com +1 -0
  Fix for bug #22913: mysql --quick doesn't report some errors.
  
  We don't check for errors that may occur during data printing.
[14 Nov 2006 4:30] Paul DuBois
Noted in 4.1.23, 5.0.30 (not 5.0.29), 5.1.13 changelogs.

mysql did not check for errors when fetching data during result set
printing.