Add get changes
This commit is contained in:
@@ -307,12 +307,12 @@ static void stop(ErlDrvData handle) {
|
||||
}
|
||||
driver_free(drv->prepared_stmts);
|
||||
}
|
||||
|
||||
|
||||
close_result = sqlite3_close(drv->db);
|
||||
if (close_result != SQLITE_OK) {
|
||||
LOG_ERROR("Failed to close DB %s, some resources aren't finalized!", drv->db_name);
|
||||
}
|
||||
|
||||
|
||||
if (drv->log && (drv->log != stderr)) {
|
||||
fclose(drv->log);
|
||||
}
|
||||
@@ -363,6 +363,9 @@ static ErlDrvSSizeT control(
|
||||
case CMD_ENABLE_LOAD_EXTENSION:
|
||||
enable_load_extension(drv, buf, (int) len);
|
||||
break;
|
||||
case CMD_CHANGES:
|
||||
changes(drv, buf, (int) len);
|
||||
break;
|
||||
default:
|
||||
unknown(drv, buf, (int) len);
|
||||
}
|
||||
@@ -370,6 +373,26 @@ static ErlDrvSSizeT control(
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int changes(sqlite3_drv_t *drv, char *buf, int len) {
|
||||
int changes = sqlite3_changes(drv->db);
|
||||
ErlDrvTermData spec[6];
|
||||
|
||||
spec[0] = ERL_DRV_PORT;
|
||||
spec[1] = driver_mk_port(drv->port);
|
||||
spec[2] = ERL_DRV_UINT;
|
||||
spec[3] = changes;
|
||||
spec[4] = ERL_DRV_TUPLE;
|
||||
spec[5] = 2;
|
||||
|
||||
return
|
||||
#ifdef PRE_R16B
|
||||
driver_output_term(drv->port,
|
||||
#else
|
||||
erl_drv_output_term(spec[1],
|
||||
#endif
|
||||
spec, sizeof(spec) / sizeof(spec[0]));
|
||||
}
|
||||
|
||||
static int enable_load_extension(sqlite3_drv_t* drv, char *buf, int len) {
|
||||
#ifdef ERLANG_SQLITE3_LOAD_EXTENSION
|
||||
char enable = buf[0];
|
||||
@@ -433,7 +456,7 @@ static inline void exec_async_command(
|
||||
} else {
|
||||
async_invoke(async_command);
|
||||
ready_async((ErlDrvData) drv, (ErlDrvThreadData) async_command);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static inline int sql_exec_statement(
|
||||
|
||||
@@ -49,6 +49,7 @@ typedef int ErlDrvSSizeT;
|
||||
#define CMD_PREPARED_COLUMNS 11
|
||||
#define CMD_SQL_EXEC_SCRIPT 12
|
||||
#define CMD_ENABLE_LOAD_EXTENSION 13
|
||||
#define CMD_CHANGES 14
|
||||
|
||||
typedef struct ptr_list {
|
||||
void *head;
|
||||
@@ -118,6 +119,7 @@ static void sql_free_async(void *async_command);
|
||||
static void ready_async(ErlDrvData drv_data, ErlDrvThreadData thread_data);
|
||||
static int unknown(sqlite3_drv_t *bdb_drv, char *buf, int len);
|
||||
static int enable_load_extension(sqlite3_drv_t *drv, char *buf, int len);
|
||||
static int changes(sqlite3_drv_t *drv, char *buf, int len);
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(default: 4201)
|
||||
|
||||
Reference in New Issue
Block a user