Commit 80c08915 authored by unknown's avatar unknown

MDEV-4326 fix.

Removed "optimization" which caused preoblems on second execution of PS with string parameter in LIMIT clause.

Fixed test_bug43560 to be able to skipp it if connection is UNIX socket.
parent 7b55b59b
......@@ -787,7 +787,7 @@ static bool insert_params_with_log(Prepared_statement *stmt, uchar *null_array,
if (param->state == Item_param::NO_VALUE)
DBUG_RETURN(1);
if (param->limit_clause_param && param->item_type != Item::INT_ITEM)
if (param->limit_clause_param)
{
param->set_int(param->val_int(), MY_INT64_NUM_DECIMAL_DIGITS);
param->item_type= Item::INT_ITEM;
......
......@@ -16750,7 +16750,11 @@ static void test_bug43560(void)
fprintf(stdout, "Skipping test_bug43560: server not DEBUG version\n");
DBUG_VOID_RETURN;
}
if (opt_unix_socket)
{
fprintf(stdout, "Skipping test_bug43560: connected via UNIX socket\n");
DBUG_VOID_RETURN;
}
/*
Set up a separate connection for this test to avoid messing up the
general MYSQL object used in other subtests. Use TCP protocol to avoid
......@@ -17541,6 +17545,109 @@ static void test_bug13001491()
myquery(rc);
}
static void test_mdev4326()
{
MYSQL_STMT *stmt;
MYSQL_BIND bind;
char query[]= "SELECT * FROM mysql.user LIMIT ?";
char str_data[]= "1";
unsigned long length= 0;
int int_data= 1;
int rc, count;
my_bool is_null= 0;
my_bool error= 0;
myheader("test_mdev4326");
rc= mysql_change_user(mysql, opt_user, opt_password, "mysql");
myquery(rc);
rc= mysql_query(mysql, "SET GLOBAL general_log = 1");
myquery(rc);
stmt= mysql_stmt_init(mysql);
check_stmt(stmt);
/* Numeric parameter test */
rc= mysql_stmt_prepare(stmt, query, strlen(query));
check_execute(stmt, rc);
check_stmt(stmt);
verify_param_count(stmt, 1);
memset((char *)&bind, 0, sizeof(bind));
bind.buffer_type= MYSQL_TYPE_LONG;
bind.buffer= (char *)&int_data;
bind.is_null= &is_null;
bind.length= &length;
bind.error= &error;
rc= mysql_stmt_bind_param(stmt, &bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
count= 0;
while (!(rc= mysql_stmt_fetch(stmt)))
count++;
DIE_UNLESS(count == 1);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
count= 0;
while (!(rc= mysql_stmt_fetch(stmt)))
count++;
DIE_UNLESS(count == 1);
int_data= 0;
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
count= 0;
while (!(rc= mysql_stmt_fetch(stmt)))
count++;
DIE_UNLESS(count == 0);
rc= mysql_stmt_close(stmt);
check_execute(stmt, rc);
/* String parameter test */
stmt= mysql_stmt_init(mysql);
rc= mysql_stmt_prepare(stmt, query, strlen(query));
check_execute(stmt, rc);
check_stmt(stmt);
verify_param_count(stmt, 1);
memset((char *)&bind, 0, sizeof(bind));
bind.buffer_type= MYSQL_TYPE_STRING;
bind.buffer= (char *)str_data;
length= bind.buffer_length= sizeof(str_data);
bind.is_null= &is_null;
bind.length= &length;
bind.error= &error;
rc= mysql_stmt_bind_param(stmt, &bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
count= 0;
while (!(rc= mysql_stmt_fetch(stmt)))
count++;
DIE_UNLESS(count == 1);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
count= 0;
while (!(rc= mysql_stmt_fetch(stmt)))
count++;
DIE_UNLESS(count == 1);
str_data[0]= '0';
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
count= 0;
while (!(rc= mysql_stmt_fetch(stmt)))
count++;
DIE_UNLESS(count == 0);
rc= mysql_stmt_close(stmt);
check_execute(stmt, rc);
rc= mysql_change_user(mysql, opt_user, opt_password, current_db);
myquery(rc);
}
static struct my_tests_st my_tests[]= {
{ "disable_query_logs", disable_query_logs },
......@@ -17790,6 +17897,7 @@ static struct my_tests_st my_tests[]= {
{ "test_bug58036", test_bug58036 },
{ "test_bug56976", test_bug56976 },
{ "test_bug13001491", test_bug13001491 },
{ "test_mdev4326", test_mdev4326 },
{ 0, 0 }
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment