summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <davi@buzz.(none)>2008-03-17 16:39:09 -0300
committerunknown <davi@buzz.(none)>2008-03-17 16:39:09 -0300
commit809522598a9a8946a5e1fa4a981717c38466a379 (patch)
treef6c164b0b465fd5e3b8268fd3a79e89bd43d03e0
parentce34828e075347de7d783d3b61ce579856ca72ad (diff)
downloadmariadb-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.c2
-rw-r--r--sql/sql_class.cc22
-rw-r--r--sql/sql_prepare.cc4
-rw-r--r--tests/mysql_client_test.c28
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 },