Commit 8264f9bd authored by unknown's avatar unknown
Browse files

Fix for bug #9992: mysql_next_result hangs on error

    set net->no_send_error to 0 before execution of each element of
    multiquery statement to provide the sending of error to client


tests/mysql_client_test.c:
  Fix for bug #9992: mysql_next_result hangs on error
      test case
parent a985031a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1655,6 +1655,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
    while (!thd->killed && thd->lex->found_semicolon && !thd->net.report_error)
    {
      char *packet= thd->lex->found_semicolon;
      net->no_send_error= 0;
      /*
        Multiple queries exits, execute them individually
	in embedded server - just store them to be executed later 
+23 −3
Original line number Diff line number Diff line
@@ -233,7 +233,7 @@ mysql_simple_prepare(MYSQL *mysql, const char *query)

/* Connect to the server */

static void client_connect()
static void client_connect(ulong flag)
{
  int  rc;
  myheader_r("client_connect");
@@ -251,7 +251,7 @@ static void client_connect()

  if (!(mysql_real_connect(mysql, opt_host, opt_user,
                           opt_password, opt_db ? opt_db:"test", opt_port,
                           opt_unix_socket, 0)))
                           opt_unix_socket, flag)))
  {
    opt_silent= 0;
    myerror("connection failed");
@@ -13478,6 +13478,22 @@ static void print_test_output()
}


static void check_mupltiquery_bug9992()
{

  MYSQL_RES* res ;
  mysql_query(mysql,"SHOW TABLES;SHOW DATABASE;SELECT 1;");
  
  fprintf(stdout, "\n\n!!! check_mupltiquery_bug9992 !!!\n");
  do
  {
    if (!(res= mysql_store_result(mysql)))
      return;
    mysql_free_result(res);
  } while (!mysql_next_result(mysql));
  fprintf(stdout, "\n\n!!! SUCCESS !!!\n");
  return;
}
/***************************************************************************
  main routine
***************************************************************************/
@@ -13499,7 +13515,7 @@ int main(int argc, char **argv)
                        (char**) embedded_server_groups))
    DIE("Can't initialize MySQL server");

  client_connect();       /* connect to server */
  client_connect(0);       /* connect to server */

  total_time= 0;
  for (iter_count= 1; iter_count <= opt_count; iter_count++)
@@ -13543,6 +13559,10 @@ int main(int argc, char **argv)
  }

  client_disconnect();    /* disconnect from server */
  
  client_connect(CLIENT_MULTI_STATEMENTS);
  check_mupltiquery_bug9992();
  client_disconnect(); 
  free_defaults(defaults_argv);
  print_test_output();