Return name of columns from select statement as strings
Not as atoms
This commit is contained in:
@@ -205,24 +205,27 @@ static void sql_exec_async(void *_async_command) {
|
||||
|
||||
if (column_count > 0) {
|
||||
int base = term_count;
|
||||
term_count += 2 + column_count*2 + 1 + 2 + 2 + 2;
|
||||
term_count += 2 + column_count*3 + 1 + 2 + 2 + 2;
|
||||
dataset = realloc(dataset, sizeof(*dataset) * term_count);
|
||||
dataset[base] = ERL_DRV_ATOM;
|
||||
dataset[base + 1] = drv->atom_columns;
|
||||
for (i = 0; i < column_count; i++) {
|
||||
dataset[base + 2 + (i*2)] = ERL_DRV_ATOM;
|
||||
// fprintf(drv->log, "Column: %s\n", sqlite3_column_name(statement, i));
|
||||
char *column_name = (char *)sqlite3_column_name(statement, i);
|
||||
// fprintf(drv->log, "Column: %s\n", column_name);
|
||||
// fflush (drv->log);
|
||||
dataset[base + 2 + (i*2) + 1] = driver_mk_atom((char *)sqlite3_column_name(statement, i));
|
||||
}
|
||||
dataset[base + 2 + column_count*2 + 0] = ERL_DRV_NIL;
|
||||
dataset[base + 2 + column_count*2 + 1] = ERL_DRV_LIST;
|
||||
dataset[base + 2 + column_count*2 + 2] = column_count + 1;
|
||||
dataset[base + 2 + column_count*2 + 3] = ERL_DRV_TUPLE;
|
||||
dataset[base + 2 + column_count*2 + 4] = 2;
|
||||
|
||||
dataset[base + 2 + column_count*2 + 5] = ERL_DRV_ATOM;
|
||||
dataset[base + 2 + column_count*2 + 6] = drv->atom_rows;
|
||||
dataset[base + 2 + (i*3)] = ERL_DRV_STRING;
|
||||
dataset[base + 2 + (i*3) + 1] = (ErlDrvTermData) column_name;
|
||||
dataset[base + 2 + (i*3) + 2] = strlen (column_name);
|
||||
}
|
||||
dataset[base + 2 + column_count*3 + 0] = ERL_DRV_NIL;
|
||||
dataset[base + 2 + column_count*3 + 1] = ERL_DRV_LIST;
|
||||
dataset[base + 2 + column_count*3 + 2] = column_count + 1;
|
||||
dataset[base + 2 + column_count*3 + 3] = ERL_DRV_TUPLE;
|
||||
dataset[base + 2 + column_count*3 + 4] = 2;
|
||||
|
||||
dataset[base + 2 + column_count*3 + 5] = ERL_DRV_ATOM;
|
||||
dataset[base + 2 + column_count*3 + 6] = drv->atom_rows;
|
||||
}
|
||||
|
||||
// fprintf(drv->log, "Exec: %s\n", sqlite3_sql(statement));
|
||||
|
||||
2
test.erl
2
test.erl
@@ -13,7 +13,7 @@ test() ->
|
||||
Id1 = 1,
|
||||
{id, Id2} = sqlite3:write(ct, user, [{name, "marge"}, {age, 30}, {wage, 3000}]),
|
||||
Id2 = 2,
|
||||
[{columns, [id, name, age, wage]}, {rows, [{1, <<"abby">>, 20, 2000}, {2, <<"marge">>, 30, 3000}]}] = sqlite3:sql_exec(ct, "select * from user;"),
|
||||
[{columns, ["id", "name", "age", "wage"]}, {rows, [{1, <<"abby">>, 20, 2000}, {2, <<"marge">>, 30, 3000}]}] = sqlite3:sql_exec(ct, "select * from user;"),
|
||||
sqlite3:read(ct, user, {name, "abby"}),
|
||||
sqlite3:delete(ct, user, {name, "abby"}),
|
||||
sqlite3:drop_table(ct, user),
|
||||
|
||||
Reference in New Issue
Block a user