From 64c4192fbb5658bd442489e462027d35ffc42dbc Mon Sep 17 00:00:00 2001 From: Maas-Maarten Zeeman Date: Thu, 27 Oct 2011 17:10:41 +0200 Subject: [PATCH] Return a row... todo get the values --- c_src/esqlite_nif.c | 29 ++++++++++++++++++++++++++--- test/esqlite_test.erl | 2 +- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/c_src/esqlite_nif.c b/c_src/esqlite_nif.c index 70069c0..3b098c7 100644 --- a/c_src/esqlite_nif.c +++ b/c_src/esqlite_nif.c @@ -243,6 +243,29 @@ do_prepare(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg) return make_ok_tuple(env, esqlite_stmt); } +static ERL_NIF_TERM +make_row(ErlNifEnv *env, sqlite3_stmt *statement) +{ + int i, size; + ERL_NIF_TERM *array; + ERL_NIF_TERM row; + + size = sqlite3_column_count(statement); + array = (ERL_NIF_TERM *) malloc(sizeof(ERL_NIF_TERM)*size); + + if(!array) + return make_error_tuple(env, "no_memory"); + + for(i = 0; i < size; i++) { + /* todo get the value, and transform it */ + array[i] = _atom_ok; + }; + + row = enif_make_tuple_from_array(env, array, size); + free(array); + return row; +} + static ERL_NIF_TERM do_step(ErlNifEnv *env, esqlite_connection *conn, sqlite3_stmt *stmt) { @@ -251,15 +274,15 @@ do_step(ErlNifEnv *env, esqlite_connection *conn, sqlite3_stmt *stmt) fprintf(stderr, "step\n"); rc = sqlite3_step(stmt); + fprintf(stderr, "step returned: %d\n", rc); if(rc == SQLITE_DONE) return make_atom(env, "$done"); if(rc == SQLITE_BUSY) return make_atom(env, "$busy"); - /* Now prepare the output... */ - fprintf(stderr, "step returned: %d\n", rc); - fprintf(stderr, "# columns: %d\n", sqlite3_column_count(stmt)); + if(rc == SQLITE_ROW) + return make_row(env, stmt); return _atom_ok; } diff --git a/test/esqlite_test.erl b/test/esqlite_test.erl index fb25e83..48460aa 100644 --- a/test/esqlite_test.erl +++ b/test/esqlite_test.erl @@ -42,7 +42,7 @@ prepare_test() -> {ok, St2} = esqlite:prepare(Db, "select * from test_table"), - [ok] = exec(St2), + [{ok, ok}] = exec(St2), ok. exec(Statement) ->