static int create_dyncol_num(MYSQL *mysql) { DYNAMIC_COLUMN dyncol; DYNAMIC_COLUMN_VALUE vals[5]; uint i, column_count= 5; uint my_count; MYSQL_LEX_STRING *my_keys; DYNAMIC_COLUMN_VALUE *my_vals; int rc; char *strval[]= {"Val1", "Val2", "Val3", "Val4", "Val5"}; uint keys1[5]= {1,2,3,4,5}, keys2[5]= {1,2,2,4,5}; MYSQL_LEX_STRING key1= {"1",1}; for (i=0; i < column_count; i++) { vals[i].type= DYN_COL_STRING; vals[i].x.string.value.str= strval[i]; vals[i].x.string.value.length= strlen(strval[i]); vals[i].x.string.charset= (CHARSET_INFO *)mysql->charset; } FAIL_IF(mariadb_dyncol_create_many_num(&dyncol, column_count, keys1, vals, 1) <0, "Error (keys1)"); vals[0].x.string.value.str= strval[1]; rc= mariadb_dyncol_update_many_named(&dyncol,1, &key1, vals); diag("update: %d", rc); rc= mariadb_dyncol_unpack(&dyncol, &my_count, &my_keys, &my_vals); diag("unpack: %d %d", rc, my_count); diag("---------------__"); for(i=0; i < 5; i++) { diag("%s %d", my_keys[i].str, my_keys[i].length); } free(my_keys); free(my_vals); FAIL_IF(mariadb_dyncol_column_count(&dyncol, &column_count) < 0, "Error"); FAIL_IF(column_count != 5, "5 columns expected"); mariadb_dyncol_free(&dyncol); FAIL_IF(mariadb_dyncol_create_many_num(&dyncol, column_count, keys2, vals, 1) >=0, "Error expected (keys2)"); mariadb_dyncol_free(&dyncol); return OK; }
static void test_mdev_9773() { int rc; uint i; uint num_keys[5]= {1,2,3,4,5}; char const *strval[]= {"Val1", "Val2", "Val3", "Val4", "Val5"}; DYNAMIC_COLUMN_VALUE vals[5]; DYNAMIC_COLUMN dynstr; uint unpack_columns= 0; MYSQL_LEX_STRING *unpack_keys= 0; DYNAMIC_COLUMN_VALUE *unpack_vals= 0; for (i = 0; i < 5; i++) { vals[i].type= DYN_COL_STRING; vals[i].x.string.value.str= (char *)strval[i]; vals[i].x.string.value.length= strlen(strval[i]); vals[i].x.string.charset= &my_charset_latin1; } mariadb_dyncol_init(&dynstr); /* create numeric */ rc= mariadb_dyncol_create_many_num(&dynstr, 5, num_keys, vals, 1); if (rc == ER_DYNCOL_OK) rc= mariadb_dyncol_unpack(&dynstr, &unpack_columns, &unpack_keys, &unpack_vals); ok (rc == ER_DYNCOL_OK && unpack_columns == 5, "5 fields unpacked"); for (i = 0; i < unpack_columns; i++) { ok(memcmp(unpack_vals[i].x.string.value.str, vals[i].x.string.value.str, vals[i].x.string.value.length) == 0, "unpack %u", i); } my_free(unpack_keys); my_free(unpack_vals); mariadb_dyncol_free(&dynstr); }
static int mdev_x1(MYSQL *mysql) { int rc; uint i; uint num_keys[5]= {1,2,3,4,5}; char *strval[]= {"Val1", "Val2", "Val3", "Val4", "Val5"}; DYNAMIC_COLUMN_VALUE vals[5]; DYNAMIC_COLUMN dynstr; MYSQL_LEX_STRING my_key= {"1", 2}; uint unpack_columns; MYSQL_LEX_STRING *unpack_keys; DYNAMIC_COLUMN_VALUE *unpack_vals; for (i=0; i < 5; i++) { vals[i].type= DYN_COL_STRING; vals[i].x.string.value.str= strval[i]; vals[i].x.string.value.length= strlen(strval[i]); vals[i].x.string.charset= (CHARSET_INFO *)mysql->charset; } mariadb_dyncol_init(&dynstr); /* create numeric */ rc= mariadb_dyncol_create_many_num(&dynstr, 5, num_keys, vals, 1); if (rc < 0) { diag("Error: %d", rc); return FAIL; } /* unpack and print values */ rc= mariadb_dyncol_unpack(&dynstr, &unpack_columns, &unpack_keys, &unpack_vals); if (rc < 0) { diag("Error: %d", rc); return FAIL; } for (i=0; i < unpack_columns; i++) if (memcmp(unpack_vals[i].x.string.value.str, vals[i].x.string.value.str, vals[i].x.string.value.length)) printf("Error1: key: %1s val: %s %s\n", unpack_keys[i].str, unpack_vals[i].x.string.value.str, vals[i].x.string.value.str); free(unpack_keys); free(unpack_vals); /* change one value and update with named key */ /* vals[0].x.string.value.str= strval[1]; */ rc= mariadb_dyncol_update_many_named(&dynstr, 1, &my_key, vals); if (rc < 0) { diag("Error: %d", rc); return FAIL; } /* unpack and print values */ rc= mariadb_dyncol_unpack(&dynstr, &unpack_columns, &unpack_keys, &unpack_vals); if (rc < 0) { diag("Error: %d", rc); return FAIL; } diag("Columns: %d", unpack_columns); for (i=0; i < unpack_columns; i++) diag("Key: %s Len: %d", unpack_keys[i].str, unpack_keys[i].length); free(unpack_keys); free(unpack_vals); mariadb_dyncol_free(&dynstr); return OK; }