Commit 4ea36b7a authored by unknown's avatar unknown
Browse files

Fix value returned by mysql_warning_count() after fetching a prepared

statement that generated a warning. (Bug #15510)


sql-common/client.c:
  Reset warning_count in free_old_query(), don't stomp old value for
  it in cli_read_query_result().
tests/mysql_client_test.c:
  Add new regression test
parent 3d1e9eae
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -715,6 +715,7 @@ void free_old_query(MYSQL *mysql)
  init_alloc_root(&mysql->field_alloc,8192,0); /* Assume rowlength < 8192 */
  mysql->fields= 0;
  mysql->field_count= 0;			/* For API */
  mysql->warning_count= 0;
  mysql->info= 0;
  DBUG_VOID_RETURN;
}
@@ -2484,7 +2485,6 @@ static my_bool cli_read_query_result(MYSQL *mysql)
    DBUG_RETURN(1);
  mysql->status= MYSQL_STATUS_GET_RESULT;
  mysql->field_count= (uint) field_count;
  mysql->warning_count= 0;
  DBUG_PRINT("exit",("ok"));
  DBUG_RETURN(0);
}
+35 −0
Original line number Diff line number Diff line
@@ -14590,6 +14590,40 @@ static void test_bug14845()
  myquery(rc);
}


/*
  Bug #15510: mysql_warning_count returns 0 after mysql_stmt_fetch which
  should warn
*/
static void test_bug15510()
{
  MYSQL_STMT *stmt;
  MYSQL_RES *res;
  int rc;
  const char *query= "select 1 from dual where 1/0";

  myheader("test_bug15510");

  rc= mysql_query(mysql, "set @@sql_mode='ERROR_FOR_DIVISION_BY_ZERO'");
  myquery(rc);

  stmt= mysql_stmt_init(mysql);

  rc= mysql_stmt_prepare(stmt, query, strlen(query));
  check_execute(stmt, rc);

  rc= mysql_stmt_execute(stmt);
  check_execute(stmt, rc);

  rc= mysql_stmt_fetch(stmt);
  DIE_UNLESS(mysql_warning_count(mysql));

  /* Cleanup */
  mysql_stmt_close(stmt);
  rc= mysql_query(mysql, "set @@sql_mode=''");
  myquery(rc);
}

/*
  Read and parse arguments and MySQL options from my.cnf
*/
@@ -14849,6 +14883,7 @@ static struct my_tests_st my_tests[]= {
  { "test_bug13488", test_bug13488 },
  { "test_bug13524", test_bug13524 },
  { "test_bug14845", test_bug14845 },
  { "test_bug15510", test_bug15510},
  { 0, 0 }
};