Return sqlite3 errors from step.

This commit is contained in:
Maas-Maarten Zeeman
2012-12-26 14:44:47 +01:00
parent 2b669a706f
commit 6f7574fa1f

View File

@@ -431,16 +431,21 @@ make_row(ErlNifEnv *env, sqlite3_stmt *statement)
} }
static ERL_NIF_TERM static ERL_NIF_TERM
do_step(ErlNifEnv *env, sqlite3_stmt *stmt) do_step(ErlNifEnv *env, sqlite3 *db, sqlite3_stmt *stmt)
{ {
int rc = sqlite3_step(stmt); int rc = sqlite3_step(stmt);
if(rc == SQLITE_ROW)
return make_row(env, stmt);
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");
if(rc == SQLITE_ROW) if(rc == SQLITE_ERROR)
return make_row(env, stmt); 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_error_tuple(env, "unexpected_return_value");
} }
@@ -493,7 +498,7 @@ evaluate_command(esqlite_command *cmd, esqlite_connection *conn)
case cmd_prepare: case cmd_prepare:
return do_prepare(cmd->env, conn, cmd->arg); return do_prepare(cmd->env, conn, cmd->arg);
case cmd_step: case cmd_step:
return do_step(cmd->env, cmd->stmt); return do_step(cmd->env, conn->db, cmd->stmt);
case cmd_bind: case cmd_bind:
return do_bind(cmd->env, conn->db, cmd->stmt, cmd->arg); return do_bind(cmd->env, conn->db, cmd->stmt, cmd->arg);
case cmd_column_names: case cmd_column_names: