You've already forked mariadb-connector-c
mirror of
https://github.com/mariadb-corporation/mariadb-connector-c.git
synced 2025-08-07 02:42:49 +03:00
Fix for CONC-194: (merged from connector_c_2.3)
This commit is contained in:
@@ -268,19 +268,19 @@ static int test_fetch_seek(MYSQL *mysql)
|
||||
static int test_fetch_offset(MYSQL *mysql)
|
||||
{
|
||||
MYSQL_STMT *stmt;
|
||||
MYSQL_BIND my_bind[1];
|
||||
char data[11];
|
||||
ulong length;
|
||||
MYSQL_BIND my_bind[2];
|
||||
char data[11], chunk[5];
|
||||
ulong length[2];
|
||||
int rc;
|
||||
my_bool is_null;
|
||||
my_bool is_null[2];
|
||||
char *query = "SELECT * FROM t1";
|
||||
|
||||
|
||||
rc= mysql_query(mysql, "drop table if exists t1");
|
||||
check_mysql_rc(rc, mysql);
|
||||
rc= mysql_query(mysql, "create table t1(a char(10))");
|
||||
rc= mysql_query(mysql, "create table t1(a char(10), b mediumblob)");
|
||||
check_mysql_rc(rc, mysql);
|
||||
rc= mysql_query(mysql, "insert into t1 values('abcdefghij'), (null)");
|
||||
rc= mysql_query(mysql, "insert into t1 values('abcdefghij', 'klmnopqrstzy'), (null, null)");
|
||||
check_mysql_rc(rc, mysql);
|
||||
|
||||
stmt= mysql_stmt_init(mysql);
|
||||
@@ -293,8 +293,14 @@ static int test_fetch_offset(MYSQL *mysql)
|
||||
my_bind[0].buffer_type= MYSQL_TYPE_STRING;
|
||||
my_bind[0].buffer= (void *)data;
|
||||
my_bind[0].buffer_length= 11;
|
||||
my_bind[0].is_null= &is_null;
|
||||
my_bind[0].length= &length;
|
||||
my_bind[0].is_null= &is_null[0];
|
||||
my_bind[0].length= &length[0];
|
||||
|
||||
my_bind[1].buffer_type= MYSQL_TYPE_MEDIUM_BLOB;
|
||||
my_bind[1].buffer= NULL;
|
||||
my_bind[1].buffer_length= 0;
|
||||
my_bind[1].is_null= &is_null[1];
|
||||
my_bind[1].length= &length[1];
|
||||
|
||||
rc= mysql_stmt_execute(stmt);
|
||||
check_stmt_rc(rc,stmt);
|
||||
@@ -312,32 +318,60 @@ static int test_fetch_offset(MYSQL *mysql)
|
||||
check_stmt_rc(rc,stmt);
|
||||
|
||||
rc= mysql_stmt_fetch(stmt);
|
||||
check_stmt_rc(rc,stmt);
|
||||
FAIL_UNLESS(rc == MYSQL_DATA_TRUNCATED, "rc != MYSQL_DATA_TRUNCATED");
|
||||
|
||||
data[0]= '\0';
|
||||
rc= mysql_stmt_fetch_column(stmt, my_bind, 0, 0);
|
||||
rc= mysql_stmt_fetch_column(stmt, &my_bind[0], 0, 0);
|
||||
check_stmt_rc(rc,stmt);
|
||||
|
||||
|
||||
FAIL_IF(!(strncmp(data, "abcd", 4) == 0 && length == 10), "Wrong value");
|
||||
FAIL_IF(!(strncmp(data, "abcdefghij", 11) == 0 && length[0] == 10), "Wrong value");
|
||||
FAIL_IF(my_bind[0].error_value, "No truncation, but error is set");
|
||||
|
||||
rc= mysql_stmt_fetch_column(stmt, my_bind, 0, 5);
|
||||
rc= mysql_stmt_fetch_column(stmt, &my_bind[0], 0, 5);
|
||||
check_stmt_rc(rc,stmt);
|
||||
FAIL_IF(!(strncmp(data, "fg", 2) == 0 && length == 10), "Wrong value");
|
||||
FAIL_IF(!(strncmp(data, "fghij", 6) == 0 && length[0] == 10), "Wrong value");
|
||||
FAIL_IF(my_bind[0].error_value, "No truncation, but error is set");
|
||||
|
||||
rc= mysql_stmt_fetch_column(stmt, my_bind, 0, 9);
|
||||
rc= mysql_stmt_fetch_column(stmt, &my_bind[0], 0, 9);
|
||||
check_stmt_rc(rc,stmt);
|
||||
FAIL_IF(!(strncmp(data, "j", 1) == 0 && length == 10), "Wrong value");
|
||||
FAIL_IF(!(strncmp(data, "j", 2) == 0 && length[0] == 10), "Wrong value");
|
||||
FAIL_IF(my_bind[0].error_value, "No truncation, but error is set");
|
||||
|
||||
/* Now blob field */
|
||||
my_bind[1].buffer= chunk;
|
||||
my_bind[1].buffer_length= sizeof(chunk);
|
||||
|
||||
rc= mysql_stmt_fetch_column(stmt, &my_bind[1], 1, 0);
|
||||
check_stmt_rc(rc,stmt);
|
||||
|
||||
FAIL_IF(!(strncmp(chunk, "klmno", 5) == 0 && length[1] == 12), "Wrong value");
|
||||
FAIL_IF(my_bind[1].error_value == '\0', "Truncation, but error is not set");
|
||||
|
||||
rc= mysql_stmt_fetch_column(stmt, &my_bind[1], 1, 5);
|
||||
check_stmt_rc(rc,stmt);
|
||||
FAIL_IF(!(strncmp(chunk, "pqrst", 5) == 0 && length[1] == 12), "Wrong value");
|
||||
FAIL_IF(my_bind[1].error_value == '\0', "Truncation, but error is not set");
|
||||
|
||||
rc= mysql_stmt_fetch_column(stmt, &my_bind[1], 1, 10);
|
||||
check_stmt_rc(rc,stmt);
|
||||
FAIL_IF(!(strncmp(chunk, "zy", 2) == 0 && length[1] == 12), "Wrong value");
|
||||
FAIL_IF(my_bind[1].error_value, "No truncation, but error is set");
|
||||
|
||||
rc= mysql_stmt_fetch(stmt);
|
||||
check_stmt_rc(rc,stmt);
|
||||
|
||||
is_null= 0;
|
||||
memset(is_null, 0, sizeof(is_null));
|
||||
|
||||
rc= mysql_stmt_fetch_column(stmt, my_bind, 0, 0);
|
||||
rc= mysql_stmt_fetch_column(stmt, &my_bind[0], 0, 0);
|
||||
check_stmt_rc(rc,stmt);
|
||||
|
||||
FAIL_IF(is_null != 1, "Null flag not set");
|
||||
FAIL_IF(is_null[0] != 1, "Null flag not set");
|
||||
|
||||
rc= mysql_stmt_fetch_column(stmt, &my_bind[1], 1, 0);
|
||||
check_stmt_rc(rc,stmt);
|
||||
|
||||
FAIL_IF(is_null[1] != 1, "Null flag not set");
|
||||
|
||||
rc= mysql_stmt_fetch(stmt);
|
||||
FAIL_IF(rc != MYSQL_NO_DATA, "Expected MYSQL_NO_DATA");
|
||||
|
Reference in New Issue
Block a user