summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/CMakeLists.txt22
-rw-r--r--tests/mysql_client_fw.c31
-rw-r--r--tests/mysql_client_test.c389
-rw-r--r--tests/nonblock-wrappers.h37
4 files changed, 381 insertions, 98 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 5134a90e589..917ec458203 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -15,16 +15,23 @@
ADD_DEFINITIONS("-DMYSQL_CLIENT")
-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
+ ${CMAKE_SOURCE_DIR}/client)
+INCLUDE_DIRECTORIES(BEFORE
+ ${CMAKE_BINARY_DIR}/libmariadb/include
+ ${CMAKE_SOURCE_DIR}/libmariadb/include)
ADD_EXECUTABLE(mysql_client_test mysql_client_test.c)
-TARGET_LINK_LIBRARIES(mysql_client_test mysqlclient)
-SET_TARGET_PROPERTIES(mysql_client_test PROPERTIES LINKER_LANGUAGE CXX)
+SET(CLIENT_LIB mariadbclient mysys)
+
+TARGET_LINK_LIBRARIES(mysql_client_test ${CLIENT_LIB})
+ADD_DEPENDENCIES(mysql_client_test GenError ${CLIENT_LIB})
IF(WITH_UNIT_TESTS)
ADD_EXECUTABLE(bug25714 bug25714.c)
- TARGET_LINK_LIBRARIES(bug25714 mysqlclient)
- SET_TARGET_PROPERTIES(bug25714 PROPERTIES LINKER_LANGUAGE CXX)
+ TARGET_LINK_LIBRARIES(bug25714 ${CLIENT_LIB})
+ ADD_DEPENDENCIES(bug25714 GenError ${CLIENT_LIB})
ENDIF()
INSTALL(TARGETS mysql_client_test DESTINATION ${INSTALL_BINDIR} COMPONENT Test)
@@ -34,7 +41,6 @@ FIND_LIBRARY(EVENT_LIBRARY event)
MARK_AS_ADVANCED(EVENT_LIBRARY)
IF(HAVE_EVENT_H AND EVENT_LIBRARY)
ADD_EXECUTABLE(async_queries async_queries.c)
- TARGET_LINK_LIBRARIES(async_queries mysqlclient ${EVENT_LIBRARY})
- SET_TARGET_PROPERTIES(async_queries PROPERTIES LINKER_LANGUAGE CXX)
-
+ TARGET_LINK_LIBRARIES(async_queries ${CLIENT_LIB} ${EVENT_LIBRARY})
+ ADD_DEPENDENCIES(async_queries GenError ${CLIENT_LIB})
ENDIF()
diff --git a/tests/mysql_client_fw.c b/tests/mysql_client_fw.c
index 9687e3794b5..01f572f7205 100644
--- a/tests/mysql_client_fw.c
+++ b/tests/mysql_client_fw.c
@@ -21,6 +21,7 @@
#include <my_getopt.h>
#include <m_string.h>
#include <mysqld_error.h>
+#include <mysql_version.h>
#include <sql_common.h>
#include <mysql/client_plugin.h>
@@ -363,7 +364,7 @@ static MYSQL* client_connect(ulong flag, uint protocol, my_bool auto_reconnect)
fprintf(stdout, "\n Check the connection options using --help or -?\n");
exit(1);
}
- mysql->reconnect= auto_reconnect;
+ mysql_options(mysql, MYSQL_OPT_RECONNECT, &auto_reconnect);
if (!opt_silent)
fprintf(stdout, "OK");
@@ -767,7 +768,7 @@ static void do_verify_prepare_field(MYSQL_RES *result,
{
MYSQL_FIELD *field;
CHARSET_INFO *cs;
- ulonglong expected_field_length;
+ ulonglong expected_field_length= length;
if (!(field= mysql_fetch_field_direct(result, no)))
{
@@ -776,7 +777,7 @@ static void do_verify_prepare_field(MYSQL_RES *result,
}
cs= get_charset(field->charsetnr, 0);
DIE_UNLESS(cs);
- if ((expected_field_length= length * cs->mbmaxlen) > UINT_MAX32)
+ if ((expected_field_length*= cs->mbmaxlen) > UINT_MAX32)
expected_field_length= UINT_MAX32;
if (!opt_silent)
{
@@ -976,7 +977,7 @@ const char *query_arg)
fetch->handle= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(fetch->handle, fetch->query, strlen(fetch->query));
+ rc= mysql_stmt_prepare(fetch->handle, fetch->query, (ulong)strlen(fetch->query));
check_execute(fetch->handle, rc);
/*
@@ -1086,7 +1087,7 @@ enum fetch_type fetch_type)
for (fetch= fetch_array; fetch < fetch_array + query_count; ++fetch)
{
/* Init will exit(1) in case of error */
- stmt_fetch_init(fetch, fetch - fetch_array,
+ stmt_fetch_init(fetch, (uint)(fetch - fetch_array),
query_list[fetch - fetch_array]);
}
@@ -1145,7 +1146,7 @@ static my_bool thread_query(const char *query)
{
MYSQL *l_mysql;
my_bool error;
-
+ my_bool reconnect= 1;
error= 0;
if (!opt_silent)
fprintf(stdout, "\n in thread_query(%s)", query);
@@ -1162,7 +1163,7 @@ static my_bool thread_query(const char *query)
error= 1;
goto end;
}
- l_mysql->reconnect= 1;
+ mysql_options(l_mysql, MYSQL_OPT_RECONNECT, &reconnect);
if (mysql_query(l_mysql, query))
{
fprintf(stderr, "Query failed (%s)\n", mysql_error(l_mysql));
@@ -1186,19 +1187,19 @@ static char **defaults_argv;
static struct my_option client_test_long_options[] =
{
- {"basedir", 'b', "Basedir for tests.", &opt_basedir,
- &opt_basedir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ {"basedir", 'b', "Basedir for tests.",(void *)&opt_basedir,
+ (void *)&opt_basedir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"character-sets-dir", 'C',
- "Directory for character set files.", &charsets_dir,
- &charsets_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ "Directory for character set files.", (void *)&charsets_dir,
+ (void *)&charsets_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"count", 't', "Number of times test to be executed", &opt_count_read,
&opt_count_read, 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},
+ {"debug", '#', "Output debug log", (void *)&default_dbug_option,
+ (void *)&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,
0, 0, 0, 0, 0},
{"host", 'h', "Connect to host", &opt_host, &opt_host,
@@ -1234,8 +1235,8 @@ static struct my_option client_test_long_options[] =
{"user", 'u', "User for login if not current user", &opt_user,
&opt_user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
#endif
- {"vardir", 'v', "Data dir for tests.", &opt_vardir,
- &opt_vardir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ {"vardir", 'v', "Data dir for tests.", (void *)&opt_vardir,
+ (void *)&opt_vardir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"non-blocking-api", 'n',
"Use the non-blocking client API for communication.",
&non_blocking_api_enabled, &non_blocking_api_enabled, 0,
diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c
index c7d79b692e1..b668c1ab6a2 100644
--- a/tests/mysql_client_test.c
+++ b/tests/mysql_client_test.c
@@ -34,8 +34,22 @@
#include "mysql_client_fw.c"
+static const my_bool my_true= 1;
+
+
/* Query processing */
+static my_bool get_reconnect(MYSQL *mysql)
+{
+#ifdef EMBEDDED_LIBRARY
+ return mysql->reconnect;
+#else
+ my_bool reconnect;
+ mysql_get_option(mysql, MYSQL_OPT_RECONNECT, &reconnect);
+ return reconnect;
+#endif
+}
+
static void client_query()
{
int rc;
@@ -447,7 +461,7 @@ static void test_prepare_simple()
strmov(query, "SHOW SLAVE STATUS");
stmt= mysql_simple_prepare(mysql, query);
check_stmt(stmt);
- DIE_UNLESS(mysql_stmt_field_count(stmt) == 47);
+ DIE_UNLESS(mysql_stmt_field_count(stmt) == 50);
mysql_stmt_close(stmt);
/* show master status */
@@ -3124,7 +3138,7 @@ static void test_long_data_str1()
int rc, i;
char data[255];
long length;
- ulong max_blob_length, blob_length, length1;
+ ulong max_blob_length, blob_length= 0, length1;
my_bool true_value;
MYSQL_RES *result;
MYSQL_BIND my_bind[2];
@@ -4813,7 +4827,7 @@ static void test_stmt_close()
myerror("connection failed");
exit(1);
}
- lmysql->reconnect= 1;
+ mysql_options(lmysql, MYSQL_OPT_RECONNECT, &my_true);
if (!opt_silent)
fprintf(stdout, "OK");
@@ -5497,7 +5511,7 @@ DROP TABLE IF EXISTS test_multi_tab";
fprintf(stdout, "\n connection failed(%s)", mysql_error(mysql_local));
exit(1);
}
- mysql_local->reconnect= 1;
+ mysql_options(mysql_local, MYSQL_OPT_RECONNECT, &my_true);
rc= mysql_query(mysql_local, query);
myquery(rc);
@@ -5621,7 +5635,7 @@ static void test_prepare_multi_statements()
fprintf(stderr, "\n connection failed(%s)", mysql_error(mysql_local));
exit(1);
}
- mysql_local->reconnect= 1;
+ mysql_options(mysql_local, MYSQL_OPT_RECONNECT, &my_true);
strmov(query, "select 1; select 'another value'");
stmt= mysql_simple_prepare(mysql_local, query);
check_stmt_r(stmt);
@@ -6339,10 +6353,10 @@ static void test_pure_coverage()
my_bind[0].buffer_type= MYSQL_TYPE_GEOMETRY;
rc= mysql_stmt_bind_result(stmt, my_bind);
- check_execute_r(stmt, rc); /* unsupported buffer type */
+ check_execute(stmt, rc); /* MariaDB C/C converts geometry to string */
rc= mysql_stmt_store_result(stmt);
- DIE_UNLESS(rc);
+ DIE_IF(rc);
rc= mysql_stmt_store_result(stmt);
DIE_UNLESS(rc); /* Old error must be reset first */
@@ -7217,7 +7231,7 @@ static void test_prepare_grant()
mysql_close(lmysql);
exit(1);
}
- lmysql->reconnect= 1;
+ mysql_options(lmysql, MYSQL_OPT_RECONNECT, &my_true);
if (!opt_silent)
fprintf(stdout, "OK");
@@ -7530,7 +7544,7 @@ static void test_explain_bug()
verify_prepare_field(result, 5, "Extra", "EXTRA",
mysql_get_server_version(mysql) <= 50000 ?
MYSQL_TYPE_STRING : MYSQL_TYPE_VAR_STRING,
- 0, 0, "information_schema", 27, 0);
+ 0, 0, "information_schema", 30, 0);
mysql_free_result(result);
mysql_stmt_close(stmt);
@@ -7679,7 +7693,7 @@ static void test_drop_temp()
mysql_close(lmysql);
exit(1);
}
- lmysql->reconnect= 1;
+ mysql_options(lmysql, MYSQL_OPT_RECONNECT, &my_true);
if (!opt_silent)
fprintf(stdout, "OK");
@@ -11728,7 +11742,7 @@ static void test_bug5194()
}
*query_ptr= '\0';
- rc= mysql_stmt_prepare(stmt, query, query_ptr - query);
+ rc= mysql_stmt_prepare(stmt, query, (ulong)(query_ptr - query));
if (rc && nrows * COLUMN_COUNT > uint16_max)
{
if (!opt_silent)
@@ -12310,6 +12324,119 @@ static void test_datetime_ranges()
}
+/*
+ This test is used in:
+ mysql-test/suite/binlog/binlog_stm_datetime_ranges_mdev15289.test
+*/
+static void test_datetime_ranges_mdev15289()
+{
+ const char *stmt_text;
+ int rc, i;
+ MYSQL_STMT *stmt;
+ MYSQL_BIND my_bind[4];
+ MYSQL_TIME tm[4];
+
+ myheader("test_datetime_ranges_mdev15289");
+
+ stmt_text= "SET sql_mode=''";
+ rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ myquery(rc);
+
+ stmt_text= "create or replace table t1 "
+ "(t time, d date, dt datetime,ts timestamp)";
+ rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ myquery(rc);
+
+ stmt= mysql_simple_prepare(mysql, "INSERT INTO t1 VALUES (?, ?, ?, ?)");
+ check_stmt(stmt);
+ verify_param_count(stmt, 4);
+
+ /*** Testing DATETIME ***/
+ bzero((char*) my_bind, sizeof(my_bind));
+ for (i= 0; i < 4; i++)
+ {
+ my_bind[i].buffer_type= MYSQL_TYPE_DATETIME;
+ my_bind[i].buffer= &tm[i];
+ }
+ rc= mysql_stmt_bind_param(stmt, my_bind);
+ check_execute(stmt, rc);
+
+ /* Notice bad year */
+ tm[0].year= 20010; tm[0].month= 1; tm[0].day= 2;
+ tm[0].hour= 03; tm[0].minute= 04; tm[0].second= 05;
+ tm[0].second_part= 0; tm[0].neg= 0;
+ tm[0].time_type= MYSQL_TIMESTAMP_DATETIME;
+ tm[3]= tm[2]= tm[1]= tm[0];
+
+ rc= mysql_stmt_execute(stmt);
+ check_execute(stmt, rc);
+ my_process_warnings(mysql, 4);
+
+ verify_col_data("t1", "t", "00:00:00");
+ verify_col_data("t1", "d", "0000-00-00");
+ verify_col_data("t1", "dt", "0000-00-00 00:00:00");
+ verify_col_data("t1", "ts", "0000-00-00 00:00:00");
+
+ /*** Testing DATE ***/
+ bzero((char*) my_bind, sizeof(my_bind));
+ for (i= 0; i < 4; i++)
+ {
+ my_bind[i].buffer_type= MYSQL_TYPE_DATE;
+ my_bind[i].buffer= &tm[i];
+ }
+ rc= mysql_stmt_bind_param(stmt, my_bind);
+ check_execute(stmt, rc);
+
+ /* Notice bad year */
+ tm[0].year= 20010; tm[0].month= 1; tm[0].day= 2;
+ tm[0].hour= 00; tm[0].minute= 00; tm[0].second= 00;
+ tm[0].second_part= 0; tm[0].neg= 0;
+ tm[0].time_type= MYSQL_TIMESTAMP_DATE;
+ tm[3]= tm[2]= tm[1]= tm[0];
+
+ rc= mysql_stmt_execute(stmt);
+ check_execute(stmt, rc);
+ my_process_warnings(mysql, 4);
+
+ verify_col_data("t1", "t", "00:00:00");
+ verify_col_data("t1", "d", "0000-00-00");
+ verify_col_data("t1", "dt", "0000-00-00 00:00:00");
+ verify_col_data("t1", "ts", "0000-00-00 00:00:00");
+
+ /*** Testing TIME ***/
+ bzero((char*) my_bind, sizeof(my_bind));
+ for (i= 0; i < 4; i++)
+ {
+ my_bind[i].buffer_type= MYSQL_TYPE_TIME;
+ my_bind[i].buffer= &tm[i];
+ }
+ rc= mysql_stmt_bind_param(stmt, my_bind);
+ check_execute(stmt, rc);
+
+ /* Notice bad hour */
+ tm[0].year= 0; tm[0].month= 0; tm[0].day= 0;
+ tm[0].hour= 100; tm[0].minute= 64; tm[0].second= 05;
+ tm[0].second_part= 0; tm[0].neg= 0;
+ tm[0].time_type= MYSQL_TIMESTAMP_TIME;
+ tm[3]= tm[2]= tm[1]= tm[0];
+
+ rc= mysql_stmt_execute(stmt);
+ check_execute(stmt, rc);
+ my_process_warnings(mysql, 4);
+
+ verify_col_data("t1", "t", "00:00:00");
+ verify_col_data("t1", "d", "0000-00-00");
+ verify_col_data("t1", "dt", "0000-00-00 00:00:00");
+ verify_col_data("t1", "ts", "0000-00-00 00:00:00");
+
+ mysql_stmt_close(stmt);
+
+ stmt_text= "drop table t1";
+ rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ myquery(rc);
+}
+
+
static void test_bug4172()
{
MYSQL_STMT *stmt;
@@ -13394,10 +13521,7 @@ static void test_bug9478()
/* Fill in the fetch packet */
int4store(buff, stmt->stmt_id);
buff[4]= 1; /* prefetch rows */
- rc= ((*mysql->methods->advanced_command)(mysql, COM_STMT_FETCH,
- (uchar*) buff,
- sizeof(buff), 0,0,1,NULL) ||
- (*mysql->methods->read_query_result)(mysql));
+ rc= mysql_stmt_fetch(stmt);
DIE_UNLESS(rc);
if (!opt_silent && i == 0)
printf("Got error (as expected): %s\n", mysql_error(mysql));
@@ -14984,7 +15108,7 @@ static void test_bug15510()
static void test_opt_reconnect()
{
MYSQL *lmysql;
- my_bool my_true= TRUE;
+
myheader("test_opt_reconnect");
@@ -14995,8 +15119,8 @@ static void test_opt_reconnect()
}
if (!opt_silent)
- fprintf(stdout, "reconnect before mysql_options: %d\n", lmysql->reconnect);
- DIE_UNLESS(lmysql->reconnect == 0);
+ fprintf(stdout, "reconnect before mysql_options: %d\n", get_reconnect(lmysql));
+ DIE_UNLESS(get_reconnect(lmysql) == 0);
if (mysql_options(lmysql, MYSQL_OPT_RECONNECT, &my_true))
{
@@ -15006,8 +15130,8 @@ static void test_opt_reconnect()
/* reconnect should be 1 */
if (!opt_silent)
- fprintf(stdout, "reconnect after mysql_options: %d\n", lmysql->reconnect);
- DIE_UNLESS(lmysql->reconnect == 1);
+ fprintf(stdout, "reconnect after mysql_options: %d\n", get_reconnect(lmysql));
+ DIE_UNLESS(get_reconnect(lmysql) == 1);
if (!(mysql_real_connect(lmysql, opt_host, opt_user,
opt_password, current_db, opt_port,
@@ -15020,8 +15144,8 @@ static void test_opt_reconnect()
/* reconnect should still be 1 */
if (!opt_silent)
fprintf(stdout, "reconnect after mysql_real_connect: %d\n",
- lmysql->reconnect);
- DIE_UNLESS(lmysql->reconnect == 1);
+ get_reconnect(lmysql));
+ DIE_UNLESS(get_reconnect(lmysql) == 1);
mysql_close(lmysql);
@@ -15032,8 +15156,8 @@ static void test_opt_reconnect()
}
if (!opt_silent)
- fprintf(stdout, "reconnect before mysql_real_connect: %d\n", lmysql->reconnect);
- DIE_UNLESS(lmysql->reconnect == 0);
+ fprintf(stdout, "reconnect before mysql_real_connect: %d\n", get_reconnect(lmysql));
+ DIE_UNLESS(get_reconnect(lmysql) == 0);
if (!(mysql_real_connect(lmysql, opt_host, opt_user,
opt_password, current_db, opt_port,
@@ -15046,8 +15170,8 @@ static void test_opt_reconnect()
/* reconnect should still be 0 */
if (!opt_silent)
fprintf(stdout, "reconnect after mysql_real_connect: %d\n",
- lmysql->reconnect);
- DIE_UNLESS(lmysql->reconnect == 0);
+ get_reconnect(lmysql));
+ DIE_UNLESS(get_reconnect(lmysql) == 0);
mysql_close(lmysql);
}
@@ -15382,7 +15506,7 @@ static void test_mysql_insert_id()
myheader("test_mysql_insert_id");
- rc= mysql_query(mysql, "drop table if exists t1");
+ rc= mysql_query(mysql, "drop table if exists t1,t2");
myquery(rc);
/* table without auto_increment column */
rc= mysql_query(mysql, "create table t1 (f1 int, f2 varchar(255), key(f1))");
@@ -15713,7 +15837,7 @@ static void test_bug21206()
for (fetch= fetch_array; fetch < fetch_array + cursor_count; ++fetch)
{
/* Init will exit(1) in case of error */
- stmt_fetch_init(fetch, fetch - fetch_array, query);
+ stmt_fetch_init(fetch, (uint)(fetch - fetch_array), query);
}
for (fetch= fetch_array; fetch < fetch_array + cursor_count; ++fetch)
@@ -15915,7 +16039,7 @@ static void test_bug21635()
rc= mysql_query(mysql, "INSERT INTO t1 VALUES (1)");
myquery(rc);
- rc= mysql_real_query(mysql, query, query_end - query);
+ rc= mysql_real_query(mysql, query, (ulong)(query_end - query));
myquery(rc);
result= mysql_use_result(mysql);
@@ -16224,7 +16348,7 @@ static void test_change_user()
const char *db= "mysqltest_user_test_database";
int rc;
MYSQL* conn;
-
+ MYSQL_RES* res;
DBUG_ENTER("test_change_user");
myheader("test_change_user");
@@ -16237,6 +16361,9 @@ static void test_change_user()
rc= mysql_query(mysql, buff);
myquery(rc);
+ rc= mysql_query(mysql, "SET SQL_MODE=''");
+ myquery(rc);
+
sprintf(buff,
"grant select on %s.* to %s@'%%' identified by '%s'",
db,
@@ -16358,6 +16485,20 @@ static void test_change_user()
rc= mysql_change_user(conn, user_pw, pw, "");
myquery(rc);
+ /* MDEV-14581 : Check that there are no warnings after change user.*/
+ rc = mysql_query(conn,"SIGNAL SQLSTATE '01000'");
+ myquery(rc);
+
+ rc = mysql_change_user(conn, user_pw, pw, "");
+ myquery(rc);
+
+ rc = mysql_query(conn, "SHOW WARNINGS");
+ myquery(rc);
+ res = mysql_store_result(conn);
+ rc = my_process_result_set(res);
+ DIE_UNLESS(rc == 0);
+ mysql_free_result(res);
+
rc= mysql_change_user(conn, user_no_pw, pw, db);
DIE_UNLESS(rc);
if (! opt_silent)
@@ -17478,7 +17619,6 @@ static void test_wl4166_2()
mysql_stmt_close(stmt);
rc= mysql_query(mysql, "drop table t1");
myquery(rc);
-
}
@@ -17979,7 +18119,8 @@ static void test_bug43560(void)
strncpy(buffer, values[2], BUFSIZE);
length= strlen(buffer);
rc= mysql_stmt_execute(stmt);
- DIE_UNLESS(rc && mysql_stmt_errno(stmt) == CR_SERVER_LOST);
+ DIE_UNLESS(rc && (mysql_stmt_errno(stmt) == CR_SERVER_LOST ||
+ mysql_stmt_errno(stmt) == CR_SERVER_GONE_ERROR));
opt_drop_db= 0;
client_disconnect(conn);
@@ -18285,6 +18426,7 @@ static void test_bug42373()
DIE_UNLESS(rc == 1);
mysql_stmt_close(stmt);
+ mysql_close(&con);
/* Now try with a multi-statement. */
DIE_UNLESS(mysql_client_init(&con));
@@ -18745,8 +18887,9 @@ static void test_progress_reporting()
myheader("test_progress_reporting");
- conn= client_connect(CLIENT_PROGRESS, MYSQL_PROTOCOL_TCP, 0);
- DIE_UNLESS(conn->client_flag & CLIENT_PROGRESS);
+
+ conn= client_connect(CLIENT_PROGRESS_OBSOLETE, MYSQL_PROTOCOL_TCP, 0);
+ DIE_UNLESS(conn->client_flag & CLIENT_PROGRESS_OBSOLETE);
mysql_options(conn, MYSQL_PROGRESS_CALLBACK, (void*) report_progress);
rc= mysql_query(conn, "set @save=@@global.progress_report_time");
@@ -19479,24 +19622,188 @@ static void test_big_packet()
}
-/* Test simple prepares of all DML statements */
-
static void test_prepare_analyze()
{
MYSQL_STMT *stmt;
+ const char *query= "ANALYZE SELECT 1";
int rc;
myheader("test_prepare_analyze");
stmt= mysql_stmt_init(mysql);
check_stmt(stmt);
- rc= mysql_stmt_prepare(stmt, STRING_WITH_LEN("ANALYZE SELECT 1"));
+ rc= mysql_stmt_prepare(stmt, query, strlen(query));
check_execute(stmt, rc);
- verify_param_count(stmt, 0);
+
+ rc= mysql_stmt_execute(stmt);
+ check_execute(stmt, rc);
+
+ rc= mysql_stmt_store_result(stmt);
+ check_execute(stmt, rc);
+
+ while (!(rc= mysql_stmt_fetch(stmt)))
+ ;
+
+ DIE_UNLESS(rc == MYSQL_NO_DATA);
+
+ rc= mysql_stmt_close(stmt);
+ check_execute(stmt, rc);
+}
+
+static void test_mdev12579()
+{
+ MYSQL_STMT *stmt= mysql_stmt_init(mysql);
+ MYSQL_BIND bind[2];
+ int rc;
+ long l=3;
+ const char *data = "123456";
+
+ rc= mysql_query(mysql, "CREATE TABLE mdev12579 (k integer,t LONGTEXT,b LONGBLOB,x integer)");
+ myquery(rc);
+
+ rc= mysql_stmt_prepare(stmt, "INSERT INTO mdev12579 VALUES (1,?,NULL,?)", -1);
+ myquery(rc);
+
+ rc= mysql_stmt_send_long_data(stmt, 0, data, 6);
+ rc= mysql_stmt_send_long_data(stmt, 0, data, 6);
+ rc= mysql_stmt_send_long_data(stmt, 0, data, 6);
+
+ memset(bind, 0, sizeof(MYSQL_BIND) * 2);
+ bind[0].buffer_type= MYSQL_TYPE_VAR_STRING;
+ bind[1].buffer_type= MYSQL_TYPE_LONG;
+ bind[1].buffer= &l;
+ mysql_stmt_bind_param(stmt, bind);
+
+ rc= mysql_stmt_execute(stmt);
+ check_execute(stmt, rc);
+
+ mysql_stmt_close(stmt);
+
+ rc= mysql_query(mysql, "DROP TABLE mdev12579");
+ myquery(rc);
+}
+
+#ifndef EMBEDDED_LIBRARY
+static void test_bulk_delete()
+{
+ int rc;
+ MYSQL_STMT *stmt;
+ MYSQL_BIND bind[1];
+ MYSQL_ROW row;
+ char indicator[]= {0, 0, 0};
+ my_bool error[1];
+ int i, id[]= {1, 2, 4}, count= sizeof(id)/sizeof(id[0]);
+ MYSQL_RES *result;
+
+ rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1");
+ myquery(rc);
+ rc= mysql_query(mysql, "CREATE TABLE t1 (id int not null primary key)");
+ myquery(rc);
+ rc= mysql_query(mysql, "INSERT INTO t1 VALUES (1),(2),(3),(4)");
+ myquery(rc);
+ verify_affected_rows(4);
+
+ stmt= mysql_stmt_init(mysql);
+ rc= mysql_stmt_prepare(stmt, "DELETE FROM t1 where id=?", -1);
+ check_execute(stmt, rc);
+
+ memset(bind, 0, sizeof(bind));
+ bind[0].buffer_type = MYSQL_TYPE_LONG;
+ bind[0].buffer = (void *)id;
+ bind[0].buffer_length = 0;
+ bind[0].is_null = NULL;
+ bind[0].length = NULL;
+ bind[0].error = error;
+ bind[0].u.indicator= indicator;
+
+ mysql_stmt_attr_set(stmt, STMT_ATTR_ARRAY_SIZE, (void*)&count);
+ rc= mysql_stmt_bind_param(stmt, bind);
+ check_execute(stmt, rc);
+
+ rc= mysql_stmt_execute(stmt);
+ check_execute(stmt, rc);
+ verify_affected_rows(3);
+
+ mysql_stmt_close(stmt);
+
+ rc= mysql_query(mysql, "SELECT id FROM t1");
+ myquery(rc);
+
+ result= mysql_store_result(mysql);
+ mytest(result);
+
+ i= 0;
+ while ((row= mysql_fetch_row(result)))
+ {
+ i++;
+ DIE_IF(atoi(row[0]) != 3);
+ }
+ DIE_IF(i != 1);
+ mysql_free_result(result);
+
+ rc= mysql_query(mysql, "DROP TABLE t1");
+ myquery(rc);
+}
+
+static void test_bulk_replace()
+{
+ int rc;
+ MYSQL_STMT *stmt;
+ MYSQL_BIND bind[2];
+ MYSQL_ROW row;
+ int i,
+ id[]= {1, 2, 3, 4},
+ val[]= {1, 1, 1, 1},
+ count= sizeof(id)/sizeof(id[0]);
+ MYSQL_RES *result;
+
+ rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1");
+ myquery(rc);
+ rc= mysql_query(mysql, "CREATE TABLE t1 (id int not null primary key, active int)");
+ myquery(rc);
+ rc= mysql_query(mysql, "insert into t1 values (1, 0), (2, 0), (3, 0)");
+ myquery(rc);
+ verify_affected_rows(3);
+
+ stmt= mysql_stmt_init(mysql);
+ rc= mysql_stmt_prepare(stmt, "replace into t1 (id, active) values (?, ?)", -1);
+ check_execute(stmt, rc);
+
+ memset(bind, 0, sizeof(bind));
+ bind[0].buffer_type = MYSQL_TYPE_LONG;
+ bind[0].buffer = (void *)id;
+ bind[0].buffer_length = 0;
+ bind[1].buffer_type = MYSQL_TYPE_LONG;
+ bind[1].buffer = (void *)val;
+ bind[1].buffer_length = 0;
+
+ mysql_stmt_attr_set(stmt, STMT_ATTR_ARRAY_SIZE, (void*)&count);
+ rc= mysql_stmt_bind_param(stmt, bind);
+ check_execute(stmt, rc);
+
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
mysql_stmt_close(stmt);
+
+ rc= mysql_query(mysql, "SELECT active FROM t1");
+ myquery(rc);
+
+ result= mysql_store_result(mysql);
+ mytest(result);
+
+ i= 0;
+ while ((row= mysql_fetch_row(result)))
+ {
+ i++;
+ DIE_IF(atoi(row[0]) != 1);
+ }
+ DIE_IF(i != 4);
+ mysql_free_result(result);
+
+ rc= mysql_query(mysql, "DROP TABLE t1");
+ myquery(rc);
}
+#endif
static struct my_tests_st my_tests[]= {
{ "disable_query_logs", disable_query_logs },
@@ -19647,6 +19954,7 @@ static struct my_tests_st my_tests[]= {
{ "test_bug6081", test_bug6081 },
{ "test_bug6096", test_bug6096 },
{ "test_datetime_ranges", test_datetime_ranges },
+ { "test_datetime_ranges_mdev15289", test_datetime_ranges_mdev15289 },
{ "test_bug4172", test_bug4172 },
{ "test_conversion", test_conversion },
{ "test_rewind", test_rewind },
@@ -19775,6 +20083,11 @@ static struct my_tests_st my_tests[]= {
{ "test_compressed_protocol", test_compressed_protocol },
{ "test_big_packet", test_big_packet },
{ "test_prepare_analyze", test_prepare_analyze },
+ { "test_mdev12579", test_mdev12579 },
+#ifndef EMBEDDED_LIBRARY
+ { "test_bulk_delete", test_bulk_delete },
+ { "test_bulk_replace", test_bulk_replace },
+#endif
{ 0, 0 }
};
diff --git a/tests/nonblock-wrappers.h b/tests/nonblock-wrappers.h
index d6f42511f3a..78851854442 100644
--- a/tests/nonblock-wrappers.h
+++ b/tests/nonblock-wrappers.h
@@ -322,42 +322,6 @@ MK_WRAPPER(
mysql)
MK_WRAPPER(
- MYSQL_RES *,
- mysql_list_dbs,
- (MYSQL *mysql, const char *wild),
- (&res, mysql, wild),
- (mysql, wild),
- mysql,
- mysql)
-
-MK_WRAPPER(
- MYSQL_RES *,
- mysql_list_tables,
- (MYSQL *mysql, const char *wild),
- (&res, mysql, wild),
- (mysql, wild),
- mysql,
- mysql)
-
-MK_WRAPPER(
- MYSQL_RES *,
- mysql_list_processes,
- (MYSQL *mysql),
- (&res, mysql),
- (mysql),
- mysql,
- mysql)
-
-MK_WRAPPER(
- MYSQL_RES *,
- mysql_list_fields,
- (MYSQL *mysql, const char *table, const char *wild),
- (&res, mysql, table, wild),
- (mysql, table, wild),
- mysql,
- mysql)
-
-MK_WRAPPER(
my_bool,
mysql_read_query_result,
(MYSQL *mysql),
@@ -500,7 +464,6 @@ MK_WRAPPER(
#define mysql_list_dbs wrap_mysql_list_dbs
#define mysql_list_tables wrap_mysql_list_tables
#define mysql_list_processes wrap_mysql_list_processes
-#define mysql_list_fields wrap_mysql_list_fields
#define mysql_read_query_result wrap_mysql_read_query_result
#define mysql_stmt_prepare wrap_mysql_stmt_prepare
#define mysql_stmt_execute wrap_mysql_stmt_execute