driver working and passes its test
This commit is contained in:
@@ -95,6 +95,7 @@ static int sql_exec(sqlite3_drv_t *drv, char *command, int command_size) {
|
||||
char *rest = NULL;
|
||||
sqlite3_stmt *statement;
|
||||
|
||||
// fprintf(stderr, "Preexec: %.*s\n", command_size, command);
|
||||
result = sqlite3_prepare_v2(drv->db, command, command_size, &statement, (const char **)&rest);
|
||||
if(result != SQLITE_OK) {
|
||||
ErlDrvTermData *dataset;
|
||||
@@ -192,7 +193,7 @@ static void sql_exec_async(void *_async_command) {
|
||||
dataset[base + 2 + column_count*2 + 6] = driver_mk_atom("rows");
|
||||
}
|
||||
|
||||
fprintf(stderr, "Exec: %s\n", sqlite3_sql(statement));
|
||||
// fprintf(stderr, "Exec: %s\n", sqlite3_sql(statement));
|
||||
|
||||
while ((next_row = sqlite3_step(statement)) == SQLITE_ROW) {
|
||||
|
||||
@@ -313,7 +314,7 @@ static void sql_exec_async(void *_async_command) {
|
||||
|
||||
async_command->dataset = dataset;
|
||||
async_command->term_count = term_count;
|
||||
fprintf(stderr, "Total term count: %p %d, rows count: %dx%d\n", statement, term_count, column_count, row_count);
|
||||
// fprintf(stderr, "Total term count: %p %d, rows count: %dx%d\n", statement, term_count, column_count, row_count);
|
||||
}
|
||||
|
||||
static void ready_async(ErlDrvData drv_data, ErlDrvThreadData thread_data)
|
||||
@@ -322,7 +323,7 @@ static void ready_async(ErlDrvData drv_data, ErlDrvThreadData thread_data)
|
||||
sqlite3_drv_t *drv = async_command->driver_data;
|
||||
|
||||
int res = driver_output_term(drv->port, async_command->dataset, async_command->term_count);
|
||||
fprintf(stderr, "Total term count: %p %d, rows count: %d (%d)\n", async_command->statement, async_command->term_count, async_command->row_count, res);
|
||||
// fprintf(stderr, "Total term count: %p %d, rows count: %d (%d)\n", async_command->statement, async_command->term_count, async_command->row_count, res);
|
||||
sql_free_async(async_command);
|
||||
}
|
||||
|
||||
|
||||
@@ -461,7 +461,7 @@ create_cmd(Dbase) ->
|
||||
wait_result(Port) ->
|
||||
receive
|
||||
{Port, Reply} ->
|
||||
io:format("Reply: ~p~n", [Reply]),
|
||||
% io:format("Reply: ~p~n", [Reply]),
|
||||
Reply;
|
||||
{error, Reason} ->
|
||||
io:format("Error: ~p~n", [Reason]),
|
||||
@@ -488,5 +488,5 @@ build_table_info([], Acc) ->
|
||||
build_table_info([[ColName, ColType] | Tl], Acc) ->
|
||||
build_table_info(Tl, [{list_to_atom(ColName), sqlite3_lib:col_type(ColType)}| Acc]);
|
||||
build_table_info([[ColName, ColType, "PRIMARY", "KEY"] | Tl], Acc) ->
|
||||
build_table_info(Tl, [{list_to_atom(ColName), sqlite3_lib:col_type(ColType)}| Acc]).
|
||||
build_table_info(Tl, [{list_to_atom(ColName), primary_key}| Acc]).
|
||||
|
||||
|
||||
8
test.erl
8
test.erl
@@ -6,12 +6,14 @@
|
||||
test() ->
|
||||
file:delete("store.db"),
|
||||
sqlite3:open(ct),
|
||||
sqlite3:create_table(ct, user, [{name, text}, {age, integer}, {wage, integer}]),
|
||||
sqlite3:create_table(ct, user, [{id, integer}, {name, text}, {age, integer}, {wage, integer}]),
|
||||
[user] = sqlite3:list_tables(ct),
|
||||
[{name, text}, {age, integer}, {wage, integer}] = sqlite3:table_info(ct, user),
|
||||
[{id, primary_key}, {name, text}, {age, integer}, {wage, integer}] = sqlite3:table_info(ct, user),
|
||||
{id, Id1} = sqlite3:write(ct, user, [{name, "abby"}, {age, 20}, {wage, 2000}]),
|
||||
Id1 = 1,
|
||||
{id, Id2} = sqlite3:write(ct, user, [{name, "marge"}, {age, 30}, {wage, 3000}]),
|
||||
[{columns, [name, age, wage]}, {rows, [{<<"abby">>, 20, 2000}, {<<"marge">>, 30, 3000}]}] = sqlite3:sql_exec(ct, "select * from user;"),
|
||||
Id2 = 2,
|
||||
[{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