driver working and passes its test

This commit is contained in:
Max Lapshin
2009-10-14 15:27:03 +04:00
parent 17424efb41
commit 8ec1f1fdad
3 changed files with 11 additions and 8 deletions

View File

@@ -95,6 +95,7 @@ static int sql_exec(sqlite3_drv_t *drv, char *command, int command_size) {
char *rest = NULL; char *rest = NULL;
sqlite3_stmt *statement; sqlite3_stmt *statement;
// fprintf(stderr, "Preexec: %.*s\n", command_size, command);
result = sqlite3_prepare_v2(drv->db, command, command_size, &statement, (const char **)&rest); result = sqlite3_prepare_v2(drv->db, command, command_size, &statement, (const char **)&rest);
if(result != SQLITE_OK) { if(result != SQLITE_OK) {
ErlDrvTermData *dataset; 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"); 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) { 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->dataset = dataset;
async_command->term_count = term_count; 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) 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; sqlite3_drv_t *drv = async_command->driver_data;
int res = driver_output_term(drv->port, async_command->dataset, async_command->term_count); 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); sql_free_async(async_command);
} }

View File

@@ -461,7 +461,7 @@ create_cmd(Dbase) ->
wait_result(Port) -> wait_result(Port) ->
receive receive
{Port, Reply} -> {Port, Reply} ->
io:format("Reply: ~p~n", [Reply]), % io:format("Reply: ~p~n", [Reply]),
Reply; Reply;
{error, Reason} -> {error, Reason} ->
io:format("Error: ~p~n", [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([[ColName, ColType] | Tl], Acc) ->
build_table_info(Tl, [{list_to_atom(ColName), sqlite3_lib:col_type(ColType)}| 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([[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]).

View File

@@ -6,12 +6,14 @@
test() -> test() ->
file:delete("store.db"), file:delete("store.db"),
sqlite3:open(ct), 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), [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}]), {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}]), {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:read(ct, user, {name, "abby"}),
sqlite3:delete(ct, user, {name, "abby"}), sqlite3:delete(ct, user, {name, "abby"}),
sqlite3:drop_table(ct, user), sqlite3:drop_table(ct, user),