diff options
author | unknown <davi@buzz.(none)> | 2008-03-17 16:39:09 -0300 |
---|---|---|
committer | unknown <davi@buzz.(none)> | 2008-03-17 16:39:09 -0300 |
commit | 809522598a9a8946a5e1fa4a981717c38466a379 (patch) | |
tree | f6c164b0b465fd5e3b8268fd3a79e89bd43d03e0 | |
parent | ce34828e075347de7d783d3b61ce579856ca72ad (diff) | |
download | mariadb-git-809522598a9a8946a5e1fa4a981717c38466a379.tar.gz |
Post-merge fixes for Bug 35103
libmysql/libmysql.c:
Manual merge
sql/sql_class.cc:
Don't send anything back to the client if disabled.
sql/sql_prepare.cc:
Don't send any packet back for statement close.
tests/mysql_client_test.c:
Manual merge
-rw-r--r-- | libmysql/libmysql.c | 2 | ||||
-rw-r--r-- | sql/sql_class.cc | 22 | ||||
-rw-r--r-- | sql/sql_prepare.cc | 4 | ||||
-rw-r--r-- | tests/mysql_client_test.c | 28 |
4 files changed, 40 insertions, 16 deletions
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 423068a6ba2..99bd393a907 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -4751,7 +4751,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt) if (!mysql) { /* mysql can be reset in mysql_close called from mysql_reconnect */ - set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate); + set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate, NULL); DBUG_RETURN(1); } diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 376102c8bf9..594577dd89c 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -395,8 +395,11 @@ Diagnostics_area::set_ok_status(THD *thd, ha_rows affected_rows_arg, { DBUG_ASSERT(! is_set()); #ifdef DBUG_OFF - /* In production, refuse to overwrite an error with an OK packet. */ - if (is_error()) + /* + In production, refuse to overwrite an error or a custom response + with an OK packet. + */ + if (is_error() || is_disabled()) return; #endif /** Only allowed to report success if has not yet reported an error */ @@ -424,8 +427,11 @@ Diagnostics_area::set_eof_status(THD *thd) DBUG_ASSERT(! is_set()); #ifdef DBUG_OFF - /* In production, refuse to overwrite an error with an EOF packet. */ - if (is_error()) + /* + In production, refuse to overwrite an error or a custom response + with an EOF packet. + */ + if (is_error() || is_disabled()) return; #endif @@ -454,6 +460,14 @@ Diagnostics_area::set_error_status(THD *thd, uint sql_errno_arg, an error can happen during the flush. */ DBUG_ASSERT(! is_set() || can_overwrite_status); +#ifdef DBUG_OFF + /* + In production, refuse to overwrite a custom response with an + ERROR packet. + */ + if (is_disabled()) + return; +#endif m_sql_errno= sql_errno_arg; strmake(m_message, message_arg, sizeof(m_message) - 1); diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index a027ffe9daa..c922b21af90 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -2555,6 +2555,8 @@ void mysql_stmt_close(THD *thd, char *packet) Prepared_statement *stmt; DBUG_ENTER("mysql_stmt_close"); + thd->main_da.disable_status(); + if (!(stmt= find_prepared_statement(thd, stmt_id, "mysql_stmt_close"))) DBUG_VOID_RETURN; @@ -2566,8 +2568,6 @@ void mysql_stmt_close(THD *thd, char *packet) (void) stmt->deallocate(); general_log_print(thd, thd->command, NullS); - thd->main_da.disable_status(); - DBUG_VOID_RETURN; } diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index 482ae37d15b..085b14a65e9 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -12016,6 +12016,7 @@ static void test_bug5194() rc= mysql_stmt_execute(stmt); check_execute(stmt, rc); + mysql_stmt_reset(stmt); } mysql_stmt_close(stmt); @@ -16600,7 +16601,10 @@ static void test_bug27592() DBUG_VOID_RETURN; } -#if 0 + +/** + Bug#29948 autoreconnect + prepared statements + kill seems unstable +*/ static void test_bug29948() { @@ -16614,7 +16618,10 @@ static void test_bug29948() const char *query; int buf; unsigned long length, cursor_type; - + + DBUG_ENTER("test_bug29948"); + myheader("test_bug29948"); + dbc = mysql_init(NULL); DIE_UNLESS(dbc); @@ -16650,7 +16657,7 @@ static void test_bug29948() res= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void *)&cursor_type); myquery(res); - query= "SELECT * from t1 where a=?"; + query= "SELECT * FROM t1 WHERE a=?"; res= mysql_stmt_prepare(stmt, query, strlen(query)); myquery(res); @@ -16662,20 +16669,23 @@ static void test_bug29948() res= mysql_stmt_bind_result(stmt,&bind); check_execute(stmt, res); - - sprintf(kill_buf, "kill %ld", dbc->thread_id); - mysql_query(dbc, kill_buf); + + my_snprintf(kill_buf, sizeof(kill_buf), "KILL %ld", dbc->thread_id); + res= mysql_query(dbc, kill_buf); + myquery(res); res= mysql_stmt_store_result(stmt); DIE_UNLESS(res); mysql_stmt_free_result(stmt); mysql_stmt_close(stmt); - mysql_query(dbc, "DROP TABLE t1"); + + res= mysql_query(dbc, "DROP TABLE t1"); + myquery(res); + mysql_close(dbc); } -#endif /* Bug#29687 mysql_stmt_store_result memory leak in libmysqld @@ -17715,7 +17725,7 @@ static struct my_tests_st my_tests[]= { { "test_bug28505", test_bug28505 }, { "test_bug28934", test_bug28934 }, { "test_bug27592", test_bug27592 }, - /* { "test_bug29948", test_bug29948 }, */ + { "test_bug29948", test_bug29948 }, { "test_bug29687", test_bug29687 }, { "test_bug29692", test_bug29692 }, { "test_bug29306", test_bug29306 }, |