mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
A fix and a test case for Bug#11183 "mysql_stmt_reset() doesn't reset
information about error".
This commit is contained in:
@ -1834,6 +1834,17 @@ 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
|
Set statement error code, sqlstate, and error message
|
||||||
from given errcode and sqlstate.
|
from given errcode and sqlstate.
|
||||||
@ -4625,6 +4636,7 @@ my_bool STDCALL mysql_stmt_reset(MYSQL_STMT *stmt)
|
|||||||
param < param_end;
|
param < param_end;
|
||||||
param++)
|
param++)
|
||||||
param->long_data_used= 0;
|
param->long_data_used= 0;
|
||||||
|
stmt_clear_error(stmt);
|
||||||
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
@ -11697,6 +11697,50 @@ static void test_bug9735()
|
|||||||
myquery(rc);
|
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
|
Read and parse arguments and MySQL options from my.cnf
|
||||||
@ -11913,6 +11957,7 @@ static struct my_tests_st my_tests[]= {
|
|||||||
{ "test_bug7990", test_bug7990 },
|
{ "test_bug7990", test_bug7990 },
|
||||||
{ "test_bug8378", test_bug8378 },
|
{ "test_bug8378", test_bug8378 },
|
||||||
{ "test_bug9735", test_bug9735 },
|
{ "test_bug9735", test_bug9735 },
|
||||||
|
{ "test_bug11183", test_bug11183 },
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user