int main(int argc, char *argv[]) { DYNAMIC_COLUMN dyncol; MYSQL_LEX_STRING *list_keys, my_keys[]= {{"key1", 4}, {"key2",4}, {"key3", 4}}; char *my_vals[]= {"value1", "value2", "value3"}; DYNAMIC_COLUMN_VALUE *vals; unsigned int i, column_count; CHARSET_INFO *cs= mysql_get_charset_by_name("utf8"); mariadb_dyncol_init(&dyncol); vals= (DYNAMIC_COLUMN_VALUE *)malloc(sizeof(DYNAMIC_COLUMN_VALUE) * 3); for (i=0; i < 3; i++) { vals[i].type= DYN_COL_STRING; vals[i].x.string.value.length= strlen(my_vals[i]); vals[i].x.string.value.str= my_vals[i]; vals[i].x.string.charset= cs; } /* Add columns */ if (mariadb_dyncol_create_many_named(&dyncol, 3, my_keys, vals, 0) != ER_DYNCOL_OK) { printf("Can't add columns\n"); exit(-1); } if (mariadb_dyncol_list_named(&dyncol, &column_count, &list_keys) == ER_DYNCOL_OK) { for (i=0; i < column_count; i++) printf("Column: %u Key: %s\n", i, list_keys[i].str); /* Don't forget to free the keys! */ free(list_keys); } mariadb_dyncol_free(&dyncol); return 0; }
static int create_dyncol_named(MYSQL *mysql) { DYNAMIC_COLUMN dyncol; DYNAMIC_COLUMN_VALUE *vals; uint i, column_count= 6; int rc; char *strval[]= {"Val1", "Val2", "Val3", "Val4", "Val5", "Val6"}; MYSQL_LEX_STRING keys1[]= {{"key1", 4}, {"key2", 4}, {"key3", 4}, {"key4", 4}, {"key5", 4}, {"key6", 4}}, keys2[]= {{"key1", 4}, {"key1", 4}, {"key3", 4}, {"key4", 4}, {"key5", 4}, {"key6", 4}}, keys3[]= {{"\x70\x61\x72\x61\x00\x30", 6}, {"\x70\x61\x72\x61\x00\x31", 6}, {"\x70\x61\x72\x61\x00\x32", 6}, {"\x70\x61\x72\x61\x00\x33", 6}, {"\x70\x61\x72\x61\x00\x34", 6}, {"\x70\x61\x72\x61\x00\x35", 6}}; MYSQL_LEX_STRING *my_keys; uint my_count; vals= (DYNAMIC_COLUMN_VALUE *)malloc(column_count * sizeof(DYNAMIC_COLUMN_VALUE)); 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; diag("%s", keys3[i].str); } mariadb_dyncol_init(&dyncol); 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"); column_count= 0; FAIL_IF(mariadb_dyncol_column_count(&dyncol, &column_count) < 0, "Error"); FAIL_IF(column_count != 6, "6 columns expected"); mariadb_dyncol_free(&dyncol); rc= mariadb_dyncol_create_many_named(&dyncol, column_count, keys3, vals, 1); if (rc < 0) { diag("Error!!: %d", rc); return FAIL; } column_count= 0; FAIL_IF(mariadb_dyncol_column_count(&dyncol, &column_count) < 0, "Error"); FAIL_IF(column_count != 6, "6 columns expected"); mariadb_dyncol_free(&dyncol); /* Now try to add a duplicate key */ FAIL_IF(mariadb_dyncol_create_many_named(&dyncol, column_count, keys2, vals, 1) >=0, "Error expected"); mariadb_dyncol_free(&dyncol); /* binary keys */ rc= mariadb_dyncol_create_many_named(&dyncol, column_count, keys3, vals, 1); FAIL_IF(rc < 0, "binary keys failed"); /* get keys*/ rc= mariadb_dyncol_list_named(&dyncol, &my_count, &my_keys); FAIL_IF(rc < 0, "list named failed"); for (i=0; i < my_count; i++) { if (memcmp(my_keys[i].str, keys3[i].str, keys3[i].length) != 0) diag("error key %d", i); vals[i].type=DYN_COL_NULL; } rc= mariadb_dyncol_update_many_named(&dyncol, column_count, keys3, vals); FAIL_IF(rc < 0, "update failed"); mariadb_dyncol_free(&dyncol); keys3[0].str= "test"; for (i=0; i < column_count; i++) diag("%s", my_keys[i].str); free(vals); free(my_keys); return OK; }