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
Added test for nested dynamic column
This commit is contained in:
@@ -332,7 +332,7 @@ static my_bool type_and_offset_store_num(uchar *place, size_t offset_size,
|
|||||||
{
|
{
|
||||||
ulong val = (((ulong) offset) << 3) | (type - 1);
|
ulong val = (((ulong) offset) << 3) | (type - 1);
|
||||||
DBUG_ASSERT(type != DYN_COL_NULL);
|
DBUG_ASSERT(type != DYN_COL_NULL);
|
||||||
DBUG_ASSERT(((type - 1) & (~0xf)) == 0); /* fit in 4 bits */
|
DBUG_ASSERT(((type - 1) & (~7)) == 0); /* fit in 3 bits */
|
||||||
DBUG_ASSERT(offset_size >= 1 && offset_size <= 4);
|
DBUG_ASSERT(offset_size >= 1 && offset_size <= 4);
|
||||||
|
|
||||||
/* Index entry starts with column number; jump over it */
|
/* Index entry starts with column number; jump over it */
|
||||||
|
@@ -56,42 +56,6 @@ static int create_dyncol_named(MYSQL *mysql)
|
|||||||
mariadb_dyncol_init(&dyncol);
|
mariadb_dyncol_init(&dyncol);
|
||||||
rc= mariadb_dyncol_create_many_named(&dyncol, column_count, keys1, vals, 0);
|
rc= mariadb_dyncol_create_many_named(&dyncol, column_count, keys1, vals, 0);
|
||||||
FAIL_IF(mariadb_dyncol_create_many_named(&dyncol, column_count, keys1, vals, 1) < 0, "Error");
|
FAIL_IF(mariadb_dyncol_create_many_named(&dyncol, column_count, keys1, vals, 1) < 0, "Error");
|
||||||
if (1) {
|
|
||||||
DYNAMIC_COLUMN foo, bar;
|
|
||||||
MYSQL_BIND bind;
|
|
||||||
MYSQL_STMT *stmt= mysql_stmt_init(mysql);
|
|
||||||
DYNAMIC_COLUMN_VALUE val;
|
|
||||||
MYSQL_LEX_STRING keys[]= {{(char *)"TEST", 4}};
|
|
||||||
MYSQL_LEX_STRING keys2[]= {{(char *)"PyTuple", 7}};
|
|
||||||
rc= mysql_query(mysql, "CREATE OR REPLACE TABLE dyn1 (a blob)");
|
|
||||||
check_mysql_rc(rc, mysql);
|
|
||||||
rc= mysql_stmt_prepare(stmt, SL("INSERT INTO dyn1 VALUES (?)"));
|
|
||||||
check_stmt_rc(rc, stmt);
|
|
||||||
memset(&bind, 0, sizeof(MYSQL_BIND));
|
|
||||||
mariadb_dyncol_init(&foo);
|
|
||||||
mariadb_dyncol_init(&bar);
|
|
||||||
memset(&val, 0, sizeof(DYNAMIC_COLUMN_VALUE));
|
|
||||||
val.type= DYN_COL_DYNCOL;
|
|
||||||
val.x.string.value.str= dyncol.str;
|
|
||||||
val.x.string.value.length= dyncol.length;
|
|
||||||
if (mariadb_dyncol_create_many_named(&bar, 1, keys2, &val, 0) != ER_DYNCOL_OK)
|
|
||||||
val.type= DYN_COL_DYNCOL;
|
|
||||||
val.x.string.value.str= bar.str;
|
|
||||||
val.x.string.value.length= bar.length;
|
|
||||||
diag("l1: %lld\n", bar.length);
|
|
||||||
if (mariadb_dyncol_create_many_named(&foo, 1, keys2, &val, 0) != ER_DYNCOL_OK)
|
|
||||||
printf("Error\n");
|
|
||||||
diag("l2: %lld\n", foo.length);
|
|
||||||
bind.buffer_type= MYSQL_TYPE_BLOB;
|
|
||||||
bind.buffer= (void *)foo.str;
|
|
||||||
bind.buffer_length= foo.length;
|
|
||||||
mysql_stmt_bind_param(stmt, &bind);
|
|
||||||
rc= mysql_stmt_execute(stmt);
|
|
||||||
check_stmt_rc(rc, stmt);
|
|
||||||
diag("check: %d %d", ER_DYNCOL_OK, mariadb_dyncol_check(&dyncol));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
column_count= 0;
|
column_count= 0;
|
||||||
FAIL_IF(mariadb_dyncol_column_count(&dyncol, &column_count) < 0, "Error");
|
FAIL_IF(mariadb_dyncol_column_count(&dyncol, &column_count) < 0, "Error");
|
||||||
|
|
||||||
@@ -289,12 +253,54 @@ static int dyncol_column_count(MYSQL *unused __attribute__((unused)))
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int dyncol_nested(MYSQL *mysql __attribute__((unused)))
|
||||||
|
{
|
||||||
|
DYNAMIC_COLUMN col1, col2;
|
||||||
|
DYNAMIC_COLUMN_VALUE value[2];
|
||||||
|
MYSQL_LEX_STRING cols[2]= {{(char *)"0",1},{(char *)"1",1}};
|
||||||
|
DYNAMIC_STRING s;
|
||||||
|
|
||||||
|
mariadb_dyncol_init(&col1);
|
||||||
|
mariadb_dyncol_init(&col2);
|
||||||
|
|
||||||
|
memset(&value, 0, sizeof(DYNAMIC_COLUMN_VALUE));
|
||||||
|
|
||||||
|
value[0].type= DYN_COL_UINT;
|
||||||
|
value[0].x.ulong_value = 17;
|
||||||
|
|
||||||
|
mariadb_dyncol_create_many_named(&col1, 1, cols, value, 0);
|
||||||
|
if (mariadb_dyncol_check(&col1) != ER_DYNCOL_OK)
|
||||||
|
{
|
||||||
|
diag("Error while creating col1");
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
value[1].type= DYN_COL_DYNCOL;
|
||||||
|
value[1].x.string.value.str= col1.str;
|
||||||
|
value[1].x.string.value.length= col1.length;
|
||||||
|
|
||||||
|
mariadb_dyncol_create_many_named(&col2, 2, cols, value, 0);
|
||||||
|
if (mariadb_dyncol_check(&col2) != ER_DYNCOL_OK)
|
||||||
|
{
|
||||||
|
diag("Error while creating col1");
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
mariadb_dyncol_json(&col2, &s);
|
||||||
|
if (strcmp(s.str, "{\"0\":17,\"1\":{\"0\":17}}") != 0)
|
||||||
|
{
|
||||||
|
diag("%s != %s", s.str, "{\"0\":17,\"1\":{\"0\":17}}");
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
struct my_tests_st my_tests[] = {
|
struct my_tests_st my_tests[] = {
|
||||||
{"mdev_x1", mdev_x1, TEST_CONNECTION_NEW, 0, NULL, NULL},
|
{"mdev_x1", mdev_x1, TEST_CONNECTION_NEW, 0, NULL, NULL},
|
||||||
{"mdev_4994", mdev_4994, TEST_CONNECTION_NEW, 0, NULL, NULL},
|
{"mdev_4994", mdev_4994, TEST_CONNECTION_NEW, 0, NULL, NULL},
|
||||||
{"create_dyncol_named", create_dyncol_named, TEST_CONNECTION_NEW, 0, NULL, NULL},
|
{"create_dyncol_named", create_dyncol_named, TEST_CONNECTION_NEW, 0, NULL, NULL},
|
||||||
{"create_dyncol_num", create_dyncol_num, TEST_CONNECTION_NEW, 0, NULL, NULL},
|
{"create_dyncol_num", create_dyncol_num, TEST_CONNECTION_NEW, 0, NULL, NULL},
|
||||||
{"dyncol_column_count", dyncol_column_count, TEST_CONNECTION_NEW, 0, NULL, NULL},
|
{"dyncol_column_count", dyncol_column_count, TEST_CONNECTION_NEW, 0, NULL, NULL},
|
||||||
|
{"dyncol_nested", dyncol_nested, TEST_CONNECTION_NEW, 0, NULL, NULL},
|
||||||
{NULL, NULL, 0, 0, NULL, 0}
|
{NULL, NULL, 0, 0, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user