summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/sql_prepare.cc8
-rw-r--r--tests/mysql_client_fw.c16
-rw-r--r--tests/mysql_client_test.c7
3 files changed, 24 insertions, 7 deletions
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index d0bfecebc82..2122a2badf9 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -875,6 +875,14 @@ static bool insert_params_with_log(Prepared_statement *stmt, uchar *null_array,
param->set_param_func(param, &read_pos, (uint) (data_end - read_pos));
if (param->state == Item_param::NO_VALUE)
DBUG_RETURN(1);
+
+ if (param->limit_clause_param && param->item_type != Item::INT_ITEM)
+ {
+ param->set_int(param->val_int(), MY_INT64_NUM_DECIMAL_DIGITS);
+ param->item_type= Item::INT_ITEM;
+ if (!param->unsigned_flag && param->value.integer < 0)
+ DBUG_RETURN(1);
+ }
}
}
/*
diff --git a/tests/mysql_client_fw.c b/tests/mysql_client_fw.c
index 5a305dbcb19..11f81d86caa 100644
--- a/tests/mysql_client_fw.c
+++ b/tests/mysql_client_fw.c
@@ -48,6 +48,7 @@ static unsigned int opt_count= 0;
static unsigned int iter_count= 0;
static my_bool have_innodb= FALSE;
static char *opt_plugin_dir= 0, *opt_default_auth= 0;
+static unsigned int opt_drop_db= 1;
static const char *opt_basedir= "./";
static const char *opt_vardir= "mysql-test/var";
@@ -96,7 +97,7 @@ DBUG_PRINT("test", ("name: %s", str)); \
static void print_error(const char *msg);
static void print_st_error(MYSQL_STMT *stmt, const char *msg);
-static void client_disconnect(MYSQL* mysql, my_bool drop_db);
+static void client_disconnect(MYSQL* mysql);
/*
@@ -370,7 +371,7 @@ static MYSQL* client_connect(ulong flag, uint protocol, my_bool auto_reconnect)
/* Close the connection */
-static void client_disconnect(MYSQL* mysql, my_bool drop_db)
+static void client_disconnect(MYSQL* mysql)
{
static char query[MAX_TEST_QUERY_LENGTH];
@@ -378,7 +379,7 @@ static void client_disconnect(MYSQL* mysql, my_bool drop_db)
if (mysql)
{
- if (drop_db)
+ if (opt_drop_db)
{
if (!opt_silent)
fprintf(stdout, "\n dropping the test database '%s' ...", current_db);
@@ -1162,6 +1163,8 @@ static struct my_option client_test_long_options[] =
&opt_count, 0, GET_UINT, REQUIRED_ARG, 1, 0, 0, 0, 0, 0},
{"database", 'D', "Database to use", &opt_db, &opt_db,
0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+{"do-not-drop-database", 'd', "Do not drop database while disconnecting",
+ 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
{"debug", '#', "Output debug log", &default_dbug_option,
&default_dbug_option, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
{"help", '?', "Display this help and exit", 0, 0, 0, GET_NO_ARG, NO_ARG, 0,
@@ -1265,6 +1268,9 @@ char *argument)
else
opt_silent++;
break;
+ case 'd':
+ opt_drop_db= 0;
+ break;
case 'A':
/*
When the embedded server is being tested, the test suite needs to be
@@ -1389,7 +1395,7 @@ int main(int argc, char **argv)
fprintf(stderr, "\n\nGiven test not found: '%s'\n", *argv);
fprintf(stderr, "See legal test names with %s -T\n\nAborting!\n",
my_progname);
- client_disconnect(mysql, 1);
+ client_disconnect(mysql);
free_defaults(defaults_argv);
exit(1);
}
@@ -1402,7 +1408,7 @@ int main(int argc, char **argv)
/* End of tests */
}
- client_disconnect(mysql, 1); /* disconnect from server */
+ client_disconnect(mysql); /* disconnect from server */
free_defaults(defaults_argv);
print_test_output();
diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c
index 7f07a245187..97ea018b280 100644
--- a/tests/mysql_client_test.c
+++ b/tests/mysql_client_test.c
@@ -17609,7 +17609,8 @@ static void test_bug43560(void)
const char* values[] = {"eins", "zwei", "drei", "viele", NULL};
const char insert_str[] = "INSERT INTO t1 (c2) VALUES (?)";
unsigned long length;
-
+ const unsigned int drop_db= opt_drop_db;
+
DBUG_ENTER("test_bug43560");
myheader("test_bug43560");
@@ -17674,9 +17675,11 @@ static void test_bug43560(void)
rc= mysql_stmt_execute(stmt);
DIE_UNLESS(rc && mysql_stmt_errno(stmt) == CR_SERVER_LOST);
- client_disconnect(conn, 0);
+ opt_drop_db= 0;
+ client_disconnect(conn);
rc= mysql_query(mysql, "DROP TABLE t1");
myquery(rc);
+ opt_drop_db= drop_db;
DBUG_VOID_RETURN;
}