Fixed binding in prepared statements
This commit is contained in:
@@ -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];
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user