Loading libmysql/libmysql.c +11 −0 Original line number Diff line number Diff line Loading @@ -1869,6 +1869,16 @@ static void net_clear_error(NET *net) } } static void stmt_clear_error(MYSQL_STMT *stmt) { if (stmt->last_errno) { stmt->last_errno= 0; stmt->last_error[0]= '\0'; strmov(stmt->sqlstate, not_error_sqlstate); } } /* Set statement error code, sqlstate, and error message from given errcode and sqlstate. Loading Loading @@ -4959,6 +4969,7 @@ static my_bool reset_stmt_handle(MYSQL_STMT *stmt, uint flags) stmt->state= MYSQL_STMT_INIT_DONE; return 1; } stmt_clear_error(stmt); } } stmt->state= MYSQL_STMT_PREPARE_DONE; Loading tests/mysql_client_test.c +46 −0 Original line number Diff line number Diff line Loading @@ -13660,6 +13660,51 @@ static void test_bug9735() myquery(rc); } /* Bug#11183 "mysql_stmt_reset() doesn't reset information about error" */ static void test_bug11183() { int rc; MYSQL_STMT *stmt; char bug_statement[]= "insert into t1 values (1)"; myheader("test_bug11183"); mysql_query(mysql, "drop table t1 if exists"); mysql_query(mysql, "create table t1 (a int)"); stmt= mysql_stmt_init(mysql); DIE_UNLESS(stmt != 0); rc= mysql_stmt_prepare(stmt, bug_statement, strlen(bug_statement)); check_execute(stmt, rc); rc= mysql_query(mysql, "drop table t1"); myquery(rc); /* Trying to execute statement that should fail on execute stage */ rc= mysql_stmt_execute(stmt); DIE_UNLESS(rc); mysql_stmt_reset(stmt); DIE_UNLESS(mysql_stmt_errno(stmt) == 0); mysql_query(mysql, "create table t1 (a int)"); /* Trying to execute statement that should pass ok */ if (mysql_stmt_execute(stmt)) { mysql_stmt_reset(stmt); DIE_UNLESS(mysql_stmt_errno(stmt) == 0); } mysql_stmt_close(stmt); rc= mysql_query(mysql, "drop table t1"); myquery(rc); } /* Read and parse arguments and MySQL options from my.cnf */ Loading Loading @@ -13902,6 +13947,7 @@ static struct my_tests_st my_tests[]= { { "test_bug11656", test_bug11656 }, { "test_bug10214", test_bug10214 }, { "test_bug9735", test_bug9735 }, { "test_bug11183", test_bug11183 }, { 0, 0 } }; Loading Loading
libmysql/libmysql.c +11 −0 Original line number Diff line number Diff line Loading @@ -1869,6 +1869,16 @@ static void net_clear_error(NET *net) } } static void stmt_clear_error(MYSQL_STMT *stmt) { if (stmt->last_errno) { stmt->last_errno= 0; stmt->last_error[0]= '\0'; strmov(stmt->sqlstate, not_error_sqlstate); } } /* Set statement error code, sqlstate, and error message from given errcode and sqlstate. Loading Loading @@ -4959,6 +4969,7 @@ static my_bool reset_stmt_handle(MYSQL_STMT *stmt, uint flags) stmt->state= MYSQL_STMT_INIT_DONE; return 1; } stmt_clear_error(stmt); } } stmt->state= MYSQL_STMT_PREPARE_DONE; Loading
tests/mysql_client_test.c +46 −0 Original line number Diff line number Diff line Loading @@ -13660,6 +13660,51 @@ static void test_bug9735() myquery(rc); } /* Bug#11183 "mysql_stmt_reset() doesn't reset information about error" */ static void test_bug11183() { int rc; MYSQL_STMT *stmt; char bug_statement[]= "insert into t1 values (1)"; myheader("test_bug11183"); mysql_query(mysql, "drop table t1 if exists"); mysql_query(mysql, "create table t1 (a int)"); stmt= mysql_stmt_init(mysql); DIE_UNLESS(stmt != 0); rc= mysql_stmt_prepare(stmt, bug_statement, strlen(bug_statement)); check_execute(stmt, rc); rc= mysql_query(mysql, "drop table t1"); myquery(rc); /* Trying to execute statement that should fail on execute stage */ rc= mysql_stmt_execute(stmt); DIE_UNLESS(rc); mysql_stmt_reset(stmt); DIE_UNLESS(mysql_stmt_errno(stmt) == 0); mysql_query(mysql, "create table t1 (a int)"); /* Trying to execute statement that should pass ok */ if (mysql_stmt_execute(stmt)) { mysql_stmt_reset(stmt); DIE_UNLESS(mysql_stmt_errno(stmt) == 0); } mysql_stmt_close(stmt); rc= mysql_query(mysql, "drop table t1"); myquery(rc); } /* Read and parse arguments and MySQL options from my.cnf */ Loading Loading @@ -13902,6 +13947,7 @@ static struct my_tests_st my_tests[]= { { "test_bug11656", test_bug11656 }, { "test_bug10214", test_bug10214 }, { "test_bug9735", test_bug9735 }, { "test_bug11183", test_bug11183 }, { 0, 0 } }; Loading