From f21f022eb70113581c54081ddc0bf3878562b319 Mon Sep 17 00:00:00 2001 From: Maas-Maarten Zeeman Date: Mon, 24 Oct 2011 23:32:25 +0200 Subject: [PATCH] Prepare is now possible --- c_src/esqlite_nif.c | 14 +++++++------- test/esqlite_test.erl | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/c_src/esqlite_nif.c b/c_src/esqlite_nif.c index df52f22..81a5b4c 100644 --- a/c_src/esqlite_nif.c +++ b/c_src/esqlite_nif.c @@ -141,7 +141,7 @@ static void destruct_esqlite_statement(ErlNifEnv *env, void *arg) { esqlite_statement *stmt = (esqlite_statement *) arg; - + if(stmt->statement) { /* the statement was not finalized */ sqlite3_finalize(stmt->statement); @@ -221,6 +221,7 @@ do_prepare(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg) ErlNifBinary bin; esqlite_statement *stmt; ERL_NIF_TERM esqlite_stmt; + const char *tail; int rc; if(!conn->db) @@ -234,11 +235,14 @@ do_prepare(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg) if(!stmt) return make_error_tuple(env, "no_memory"); + rc = sqlite3_prepare_v2(conn->db, (char *) bin.data, bin.size, &(stmt->statement), &tail); + if(rc != SQLITE_OK) + return make_error_tuple(env, sqlite3_errmsg(conn->db)); + /* Keep a reference to the connection */ enif_keep_resource(conn); stmt->connection = conn; stmt->statement = NULL; - // sqlite3_prepare_v2(conn->db, (char *) bin.data, &(stmt->statement), NULL); esqlite_stmt = enif_make_resource(env, stmt); enif_release_resource(stmt); @@ -428,7 +432,7 @@ esqlite_exec_nif(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) } /* - * Execute the sql statement + * Prepare the sql statement */ static ERL_NIF_TERM esqlite_prepare_nif(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) @@ -437,8 +441,6 @@ esqlite_prepare_nif(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) esqlite_command *cmd = NULL; ErlNifPid pid; - fprintf(stderr, "prepare\n"); - if(argc != 4) return enif_make_badarg(env); if(!enif_get_resource(env, argv[0], esqlite_connection_type, (void **) &conn)) @@ -460,8 +462,6 @@ esqlite_prepare_nif(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) if(!queue_push(conn->commands, cmd)) return make_error_tuple(env, "command_push_failed"); - fprintf(stderr, "command pushed"); - return _atom_ok; } diff --git a/test/esqlite_test.erl b/test/esqlite_test.erl index 8ef4eb0..75997dc 100644 --- a/test/esqlite_test.erl +++ b/test/esqlite_test.erl @@ -36,7 +36,7 @@ prepare_test() -> {ok, Db} = esqlite:open(":memory:"), esqlite:exec(Db, "begin;"), esqlite:exec(Db, "create table test_table(one varchar(10), two int);"), - {ok, Statement} = esqlite:prepare(Db, "insert into_test_table(:one, :two)"). + {ok, Statement} = esqlite:prepare(Db, "insert into test_table values(:one, :two)"). %% esqlite:bind(Statement, ":one", "hello"), %% esqlite:bind(Statement, ":two", 11),