Return a row... todo get the values

This commit is contained in:
Maas-Maarten Zeeman
2011-10-27 17:10:41 +02:00
parent 0331764f99
commit 64c4192fbb
2 changed files with 27 additions and 4 deletions

View File

@@ -243,6 +243,29 @@ do_prepare(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
return make_ok_tuple(env, esqlite_stmt); 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 static ERL_NIF_TERM
do_step(ErlNifEnv *env, esqlite_connection *conn, sqlite3_stmt *stmt) 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"); fprintf(stderr, "step\n");
rc = sqlite3_step(stmt); rc = sqlite3_step(stmt);
fprintf(stderr, "step returned: %d\n", rc);
if(rc == SQLITE_DONE) if(rc == SQLITE_DONE)
return make_atom(env, "$done"); return make_atom(env, "$done");
if(rc == SQLITE_BUSY) if(rc == SQLITE_BUSY)
return make_atom(env, "$busy"); return make_atom(env, "$busy");
/* Now prepare the output... */ if(rc == SQLITE_ROW)
fprintf(stderr, "step returned: %d\n", rc); return make_row(env, stmt);
fprintf(stderr, "# columns: %d\n", sqlite3_column_count(stmt));
return _atom_ok; return _atom_ok;
} }

View File

@@ -42,7 +42,7 @@ prepare_test() ->
{ok, St2} = esqlite:prepare(Db, "select * from test_table"), {ok, St2} = esqlite:prepare(Db, "select * from test_table"),
[ok] = exec(St2), [{ok, ok}] = exec(St2),
ok. ok.
exec(Statement) -> exec(Statement) ->