From f5ca40f8b0b03cd302bad656f087d94ea23a66a8 Mon Sep 17 00:00:00 2001 From: Arjan Scherpenisse Date: Sun, 19 Jan 2014 19:10:19 +0100 Subject: [PATCH 1/2] Add parametrized exec's (esqlite3:exec/3 and esqlite3:exec/4) --- src/esqlite3.erl | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/esqlite3.erl b/src/esqlite3.erl index 597accc..9428040 100644 --- a/src/esqlite3.erl +++ b/src/esqlite3.erl @@ -198,7 +198,18 @@ exec(Sql, Connection) -> exec(Sql, {connection, _Ref, Connection}, Timeout) -> Ref = make_ref(), ok = esqlite3_nif:exec(Connection, Ref, self(), Sql), - receive_answer(Ref, Timeout). + receive_answer(Ref, Timeout); + +%% @spec exec(iolist(), list(term()), connection()) -> integer() | {error, error_message()} +exec(Sql, Params, {connection, _, _}=Connection) when is_list(Params) -> + exec(Sql, Params, Connection, ?DEFAULT_TIMEOUT). + +%% @spec exec(iolist(), list(term()), connection(), timeout()) -> integer() | {error, error_message()} +exec(Sql, Params, {connection, _, _}=Connection, Timeout) when is_list(Params) -> + {ok, Statement} = prepare(Sql, Connection, Timeout), + bind(Statement, Params), + step(Statement, Timeout). + %% @doc Insert records, returns the last rowid. %% From 9ca051542daad7015caf5df1517f893aff9c679b Mon Sep 17 00:00:00 2001 From: Arjan Scherpenisse Date: Sun, 19 Jan 2014 20:41:54 +0100 Subject: [PATCH 2/2] Removed 'unexpected return code'; we're using the v2 version of sqlite_prepare See http://www.sqlite.org/c3ref/step.html; any error code can be returned. --- c_src/esqlite3_nif.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/c_src/esqlite3_nif.c b/c_src/esqlite3_nif.c index 18a1145..ae3fafc 100644 --- a/c_src/esqlite3_nif.c +++ b/c_src/esqlite3_nif.c @@ -20,6 +20,7 @@ #include #include +#include #include "queue.h" #include "sqlite3.h" @@ -491,12 +492,7 @@ do_step(ErlNifEnv *env, sqlite3 *db, sqlite3_stmt *stmt) if(rc == SQLITE_BUSY) return make_atom(env, "$busy"); - if(rc == SQLITE_ERROR) - return make_sqlite3_error_tuple(env, rc, db); - if(rc == SQLITE_MISUSE) - return make_error_tuple(env, "misuse"); - - return make_error_tuple(env, "unexpected_return_value"); + return make_sqlite3_error_tuple(env, rc, db); } static ERL_NIF_TERM