Return name of columns from select statement as strings

Not as atoms
This commit is contained in:
sergey-miryanov
2010-02-12 16:58:05 +05:00
parent 747604412d
commit e9513fade8
2 changed files with 16 additions and 13 deletions

View File

@@ -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));