Fixed binding in prepared statements

This commit is contained in:
Alexey Romanov
2010-12-10 11:24:12 +03:00
parent a49fbd8ec5
commit 55611d5756
2 changed files with 5 additions and 2 deletions

View File

@@ -122,6 +122,7 @@ static int control(
ErlDrvData drv_data, unsigned int command, char *buf, ErlDrvData drv_data, unsigned int command, char *buf,
int len, char **rbuf, int rlen) { int len, char **rbuf, int rlen) {
sqlite3_drv_t* driver_data = (sqlite3_drv_t*) drv_data; sqlite3_drv_t* driver_data = (sqlite3_drv_t*) drv_data;
int i;
switch (command) { switch (command) {
case CMD_SQL_EXEC: case CMD_SQL_EXEC:
sql_exec(driver_data, buf, len); sql_exec(driver_data, buf, len);
@@ -946,12 +947,14 @@ static int prepared_bind(sqlite3_drv_t *drv, char *buffer, int buffer_size) {
#endif #endif
ei_decode_version(buffer, &index, NULL); ei_decode_version(buffer, &index, NULL);
ei_decode_tuple_header(buffer, &index, &size);
// assert(size == 2);
ei_decode_long(buffer, &index, &long_prepared_index); ei_decode_long(buffer, &index, &long_prepared_index);
unsigned int prepared_index = (unsigned int) long_prepared_index; unsigned int prepared_index = (unsigned int) long_prepared_index;
if (prepared_index >= drv->prepared_count) { if (prepared_index >= drv->prepared_count) {
return output_error(drv, SQLITE_MISUSE, return output_error(drv, SQLITE_MISUSE,
"Trying to reset non-existent prepared statement"); "Trying to bind non-existent prepared statement");
} }
sqlite3_stmt *statement = drv->prepared_stmts[prepared_index]; sqlite3_stmt *statement = drv->prepared_stmts[prepared_index];

View File

@@ -823,7 +823,7 @@ exec(Port, {prepare, SQL}) ->
wait_result(Port); wait_result(Port);
exec(Port, {bind, Index, Params}) -> exec(Port, {bind, Index, Params}) ->
Bin = term_to_binary({Index, Params}), Bin = term_to_binary({Index, Params}),
port_control(Port, ?SQL_BIND_AND_EXEC_COMMAND, Bin), port_control(Port, ?PREPARED_BIND, Bin),
wait_result(Port); wait_result(Port);
exec(Port, {Cmd, Index}) when is_integer(Index) -> exec(Port, {Cmd, Index}) when is_integer(Index) ->
CmdCode = case Cmd of CmdCode = case Cmd of