Merge branch 'master' of github.com:dnet/erlang-sqlite3 into dnet-master
Conflicts: c_src/sqlite3_drv.c
This commit is contained in:
@@ -148,9 +148,9 @@ static void stop(ErlDrvData handle) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Handle input from Erlang VM
|
// Handle input from Erlang VM
|
||||||
static int control(
|
static ErlDrvSSizeT control(
|
||||||
ErlDrvData drv_data, unsigned int command, char *buf,
|
ErlDrvData drv_data, unsigned int command, char *buf,
|
||||||
int len, char **rbuf, int rlen) {
|
ErlDrvSizeT len, char **rbuf, ErlDrvSizeT rlen) {
|
||||||
sqlite3_drv_t* driver_data = (sqlite3_drv_t*) drv_data;
|
sqlite3_drv_t* driver_data = (sqlite3_drv_t*) drv_data;
|
||||||
switch (command) {
|
switch (command) {
|
||||||
case CMD_SQL_EXEC:
|
case CMD_SQL_EXEC:
|
||||||
@@ -230,7 +230,7 @@ static inline int output_error(
|
|||||||
term_count += 2;
|
term_count += 2;
|
||||||
dataset[11] = ERL_DRV_TUPLE;
|
dataset[11] = ERL_DRV_TUPLE;
|
||||||
dataset[12] = 2;
|
dataset[12] = 2;
|
||||||
driver_output_term(drv->port, dataset, term_count);
|
erl_drv_output_term(dataset[1], dataset, term_count);
|
||||||
driver_free(dataset);
|
driver_free(dataset);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -246,7 +246,7 @@ static inline int output_ok(sqlite3_drv_t *drv) {
|
|||||||
ERL_DRV_ATOM, drv->atom_ok,
|
ERL_DRV_ATOM, drv->atom_ok,
|
||||||
ERL_DRV_TUPLE, 2
|
ERL_DRV_TUPLE, 2
|
||||||
};
|
};
|
||||||
return driver_output_term(drv->port, spec, sizeof(spec) / sizeof(spec[0]));
|
return erl_drv_output_term(spec[1], spec, sizeof(spec) / sizeof(spec[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int enable_load_extension(sqlite3_drv_t* drv, char *buf, int len) {
|
static int enable_load_extension(sqlite3_drv_t* drv, char *buf, int len) {
|
||||||
@@ -1070,7 +1070,7 @@ static void ready_async(ErlDrvData drv_data, ErlDrvThreadData thread_data) {
|
|||||||
(async_sqlite3_command *) thread_data;
|
(async_sqlite3_command *) thread_data;
|
||||||
sqlite3_drv_t *drv = async_command->driver_data;
|
sqlite3_drv_t *drv = async_command->driver_data;
|
||||||
|
|
||||||
int res = driver_output_term(drv->port,
|
int res = erl_drv_output_term(driver_mk_port(drv->port),
|
||||||
async_command->dataset,
|
async_command->dataset,
|
||||||
async_command->term_count);
|
async_command->term_count);
|
||||||
(void) res; // suppress unused warning
|
(void) res; // suppress unused warning
|
||||||
@@ -1115,7 +1115,7 @@ static int prepare(sqlite3_drv_t *drv, char *command, int command_size) {
|
|||||||
spec[3] = drv->prepared_count - 1;
|
spec[3] = drv->prepared_count - 1;
|
||||||
spec[4] = ERL_DRV_TUPLE;
|
spec[4] = ERL_DRV_TUPLE;
|
||||||
spec[5] = 2;
|
spec[5] = 2;
|
||||||
return driver_output_term(drv->port, spec, sizeof(spec) / sizeof(spec[0]));
|
return erl_drv_output_term(spec[1], spec, sizeof(spec) / sizeof(spec[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int prepared_bind(sqlite3_drv_t *drv, char *buffer, int buffer_size) {
|
static int prepared_bind(sqlite3_drv_t *drv, char *buffer, int buffer_size) {
|
||||||
@@ -1153,7 +1153,7 @@ static int prepared_columns(sqlite3_drv_t *drv, char *buffer, int buffer_size) {
|
|||||||
long long_prepared_index;
|
long long_prepared_index;
|
||||||
int index = 0, term_count = 0, term_allocated = 0, column_count;
|
int index = 0, term_count = 0, term_allocated = 0, column_count;
|
||||||
sqlite3_stmt *statement;
|
sqlite3_stmt *statement;
|
||||||
ErlDrvTermData *dataset = NULL;
|
ErlDrvTermData *dataset = NULL, port;
|
||||||
ptr_list* ptrs = NULL;
|
ptr_list* ptrs = NULL;
|
||||||
|
|
||||||
ei_decode_version(buffer, &index, NULL);
|
ei_decode_version(buffer, &index, NULL);
|
||||||
@@ -1176,8 +1176,9 @@ static int prepared_columns(sqlite3_drv_t *drv, char *buffer, int buffer_size) {
|
|||||||
term_allocated = max(term_count, term_allocated*2);
|
term_allocated = max(term_count, term_allocated*2);
|
||||||
dataset = driver_realloc(dataset, sizeof(ErlDrvTermData) * term_allocated);
|
dataset = driver_realloc(dataset, sizeof(ErlDrvTermData) * term_allocated);
|
||||||
}
|
}
|
||||||
|
port = driver_mk_port(drv->port);
|
||||||
dataset[term_count - 4] = ERL_DRV_PORT;
|
dataset[term_count - 4] = ERL_DRV_PORT;
|
||||||
dataset[term_count - 3] = driver_mk_port(drv->port);
|
dataset[term_count - 3] = port;
|
||||||
|
|
||||||
column_count = sqlite3_column_count(statement);
|
column_count = sqlite3_column_count(statement);
|
||||||
|
|
||||||
@@ -1186,7 +1187,7 @@ static int prepared_columns(sqlite3_drv_t *drv, char *buffer, int buffer_size) {
|
|||||||
dataset[term_count - 2] = ERL_DRV_TUPLE;
|
dataset[term_count - 2] = ERL_DRV_TUPLE;
|
||||||
dataset[term_count - 1] = 2;
|
dataset[term_count - 1] = 2;
|
||||||
|
|
||||||
driver_output_term(drv->port, dataset, term_count);
|
erl_drv_output_term(port, dataset, term_count);
|
||||||
free_ptr_list(ptrs, driver_free_fun);
|
free_ptr_list(ptrs, driver_free_fun);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -1306,7 +1307,7 @@ static int unknown(sqlite3_drv_t *drv, char *command, int command_size) {
|
|||||||
ERL_DRV_ATOM, drv->atom_unknown_cmd,
|
ERL_DRV_ATOM, drv->atom_unknown_cmd,
|
||||||
ERL_DRV_TUPLE, 4
|
ERL_DRV_TUPLE, 4
|
||||||
};
|
};
|
||||||
return driver_output_term(drv->port, spec, sizeof(spec) / sizeof(spec[0]));
|
return erl_drv_output_term(spec[1], spec, sizeof(spec) / sizeof(spec[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline ptr_list *add_to_ptr_list(ptr_list *list, void *value_ptr) {
|
static inline ptr_list *add_to_ptr_list(ptr_list *list, void *value_ptr) {
|
||||||
|
|||||||
@@ -97,8 +97,8 @@ typedef struct async_sqlite3_command {
|
|||||||
|
|
||||||
static ErlDrvData start(ErlDrvPort port, char* cmd);
|
static ErlDrvData start(ErlDrvPort port, char* cmd);
|
||||||
static void stop(ErlDrvData handle);
|
static void stop(ErlDrvData handle);
|
||||||
static int control(ErlDrvData drv_data, unsigned int command, char *buf,
|
static ErlDrvSSizeT control(ErlDrvData drv_data, unsigned int command, char *buf,
|
||||||
int len, char **rbuf, int rlen);
|
ErlDrvSizeT len, char **rbuf, ErlDrvSizeT rlen);
|
||||||
static int sql_exec(sqlite3_drv_t *drv, char *buf, int len);
|
static int sql_exec(sqlite3_drv_t *drv, char *buf, int len);
|
||||||
static int sql_bind_and_exec(sqlite3_drv_t *drv, char *buf, int len);
|
static int sql_bind_and_exec(sqlite3_drv_t *drv, char *buf, int len);
|
||||||
static int sql_exec_script(sqlite3_drv_t *drv, char *buf, int len);
|
static int sql_exec_script(sqlite3_drv_t *drv, char *buf, int len);
|
||||||
|
|||||||
Reference in New Issue
Block a user