Uncomment debug logging and compile it conditionally
This commit is contained in:
@@ -46,7 +46,7 @@ static ErlDrvData start(ErlDrvPort port, char* cmd) {
|
|||||||
struct sqlite3 *db = NULL;
|
struct sqlite3 *db = NULL;
|
||||||
int status = 0;
|
int status = 0;
|
||||||
|
|
||||||
retval->log = fopen("/tmp/erlang-sqlite3-drv.log", "a+");
|
retval->log = fopen(LOG_PATH, "a+");
|
||||||
if (!retval->log) {
|
if (!retval->log) {
|
||||||
fprintf(stderr, "Can't create log file\n");
|
fprintf(stderr, "Can't create log file\n");
|
||||||
}
|
}
|
||||||
@@ -164,8 +164,10 @@ static inline int sql_exec_statement(
|
|||||||
async_command->driver_data = drv;
|
async_command->driver_data = drv;
|
||||||
async_command->statement = statement;
|
async_command->statement = statement;
|
||||||
|
|
||||||
// fprintf(drv->log, "Driver async: %d %p\n", SQLITE_VERSION_NUMBER, async_command->statement);
|
#ifdef DEBUG
|
||||||
// fflush(drv->log);
|
fprintf(drv->log, "Driver async: %d %p\n", SQLITE_VERSION_NUMBER, async_command->statement);
|
||||||
|
fflush(drv->log);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (sqlite3_threadsafe()) {
|
if (sqlite3_threadsafe()) {
|
||||||
drv->async_handle = driver_async(drv->port, &drv->key, sql_exec_async,
|
drv->async_handle = driver_async(drv->port, &drv->key, sql_exec_async,
|
||||||
@@ -183,8 +185,10 @@ static int sql_exec(sqlite3_drv_t *drv, char *command, int command_size) {
|
|||||||
char *rest = NULL;
|
char *rest = NULL;
|
||||||
sqlite3_stmt *statement;
|
sqlite3_stmt *statement;
|
||||||
|
|
||||||
// fprintf(drv->log, "Preexec: %.*s\n", command_size, command);
|
#ifdef DEBUG
|
||||||
// fflush(drv->log);
|
fprintf(drv->log, "Preexec: %.*s\n", command_size, command);
|
||||||
|
fflush(drv->log);
|
||||||
|
#endif
|
||||||
result = sqlite3_prepare_v2(drv->db, command, command_size, &statement,
|
result = sqlite3_prepare_v2(drv->db, command, command_size, &statement,
|
||||||
(const char **) &rest);
|
(const char **) &rest);
|
||||||
if (result != SQLITE_OK) {
|
if (result != SQLITE_OK) {
|
||||||
@@ -205,10 +209,6 @@ static inline int decode_and_bind_param(
|
|||||||
|
|
||||||
ei_get_type(buffer, index, type, size);
|
ei_get_type(buffer, index, type, size);
|
||||||
switch (*type) {
|
switch (*type) {
|
||||||
// case ERL_SMALL_INTEGER_EXT:
|
|
||||||
// ei_decode_long(buffer, index, &long_val);
|
|
||||||
// result = sqlite3_bind_int(statement, param_index, long_val);
|
|
||||||
// break;
|
|
||||||
case ERL_SMALL_INTEGER_EXT:
|
case ERL_SMALL_INTEGER_EXT:
|
||||||
case ERL_INTEGER_EXT:
|
case ERL_INTEGER_EXT:
|
||||||
case ERL_SMALL_BIG_EXT:
|
case ERL_SMALL_BIG_EXT:
|
||||||
@@ -277,8 +277,10 @@ static int sql_bind_and_exec(sqlite3_drv_t *drv, char *buffer, int buffer_size)
|
|||||||
sqlite3_stmt *statement;
|
sqlite3_stmt *statement;
|
||||||
long bin_size;
|
long bin_size;
|
||||||
|
|
||||||
// fprintf(drv->log, "Preexec: %.*s\n", command_size, command);
|
#ifdef DEBUG
|
||||||
// fflush(drv->log);
|
fprintf(drv->log, "Preexec: %.*s\n", command_size, command);
|
||||||
|
fflush(drv->log);
|
||||||
|
#endif
|
||||||
|
|
||||||
ei_decode_version(buffer, &index, NULL);
|
ei_decode_version(buffer, &index, NULL);
|
||||||
result = ei_decode_tuple_header(buffer, &index, &size);
|
result = ei_decode_tuple_header(buffer, &index, &size);
|
||||||
@@ -295,7 +297,6 @@ static int sql_bind_and_exec(sqlite3_drv_t *drv, char *buffer, int buffer_size)
|
|||||||
char *command = driver_alloc(size * sizeof(char));
|
char *command = driver_alloc(size * sizeof(char));
|
||||||
ei_decode_binary(buffer, &index, command, &bin_size);
|
ei_decode_binary(buffer, &index, command, &bin_size);
|
||||||
// assert(bin_size == size)
|
// assert(bin_size == size)
|
||||||
// printf("size: %d, command: %.*s\n", size, size, command);
|
|
||||||
result = sqlite3_prepare_v2(drv->db, command, size, &statement,
|
result = sqlite3_prepare_v2(drv->db, command, size, &statement,
|
||||||
(const char **) &rest);
|
(const char **) &rest);
|
||||||
driver_free(command);
|
driver_free(command);
|
||||||
@@ -439,8 +440,10 @@ static void sql_exec_async(void *_async_command) {
|
|||||||
dataset[base + 1] = drv->atom_columns;
|
dataset[base + 1] = drv->atom_columns;
|
||||||
for (i = 0; i < column_count; i++) {
|
for (i = 0; i < column_count; i++) {
|
||||||
char *column_name = (char *) sqlite3_column_name(statement, i);
|
char *column_name = (char *) sqlite3_column_name(statement, i);
|
||||||
// fprintf(drv->log, "Column: %s\n", column_name);
|
#ifdef DEBUG
|
||||||
// fflush(drv->log);
|
fprintf(drv->log, "Column: %s\n", column_name);
|
||||||
|
fflush(drv->log);
|
||||||
|
#endif
|
||||||
|
|
||||||
dataset[base + 2 + (i * 3)] = ERL_DRV_STRING;
|
dataset[base + 2 + (i * 3)] = ERL_DRV_STRING;
|
||||||
dataset[base + 2 + (i * 3) + 1] = (ErlDrvTermData) column_name;
|
dataset[base + 2 + (i * 3) + 1] = (ErlDrvTermData) column_name;
|
||||||
@@ -456,13 +459,17 @@ static void sql_exec_async(void *_async_command) {
|
|||||||
dataset[base + 2 + column_count * 3 + 6] = drv->atom_rows;
|
dataset[base + 2 + column_count * 3 + 6] = drv->atom_rows;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fprintf(drv->log, "Exec: %s\n", sqlite3_sql(statement));
|
#ifdef DEBUG
|
||||||
// fflush(drv->log);
|
fprintf(drv->log, "Exec: %s\n", sqlite3_sql(statement));
|
||||||
|
fflush(drv->log);
|
||||||
|
#endif
|
||||||
|
|
||||||
while ((next_row = sqlite3_step(statement)) == SQLITE_ROW) {
|
while ((next_row = sqlite3_step(statement)) == SQLITE_ROW) {
|
||||||
for (i = 0; i < column_count; i++) {
|
for (i = 0; i < column_count; i++) {
|
||||||
// fprintf(drv->log, "Column %d type: %d\n", i, sqlite3_column_type(statement, i));
|
#ifdef DEBUG
|
||||||
// fflush(drv->log);
|
fprintf(drv->log, "Column %d type: %d\n", i, sqlite3_column_type(statement, i));
|
||||||
|
fflush(drv->log);
|
||||||
|
#endif
|
||||||
switch (sqlite3_column_type(statement, i)) {
|
switch (sqlite3_column_type(statement, i)) {
|
||||||
case SQLITE_INTEGER: {
|
case SQLITE_INTEGER: {
|
||||||
ErlDrvSInt64 *int64_ptr = driver_alloc(sizeof(ErlDrvSInt64));
|
ErlDrvSInt64 *int64_ptr = driver_alloc(sizeof(ErlDrvSInt64));
|
||||||
@@ -620,8 +627,10 @@ static void sql_exec_async(void *_async_command) {
|
|||||||
|
|
||||||
async_command->dataset = dataset;
|
async_command->dataset = dataset;
|
||||||
async_command->term_count = term_count;
|
async_command->term_count = term_count;
|
||||||
// fprintf(drv->log, "Total term count: %p %d, rows count: %dx%d\n", statement, term_count, column_count, row_count);
|
#ifdef DEBUG
|
||||||
// fflush(drv->log);
|
fprintf(drv->log, "Total term count: %p %d, rows count: %dx%d\n", statement, term_count, column_count, row_count);
|
||||||
|
fflush(drv->log);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ready_async(ErlDrvData drv_data, ErlDrvThreadData thread_data) {
|
static void ready_async(ErlDrvData drv_data, ErlDrvThreadData thread_data) {
|
||||||
@@ -633,8 +642,10 @@ static void ready_async(ErlDrvData drv_data, ErlDrvThreadData thread_data) {
|
|||||||
async_command->dataset,
|
async_command->dataset,
|
||||||
async_command->term_count);
|
async_command->term_count);
|
||||||
(void) res; // suppress unused warning
|
(void) res; // suppress unused warning
|
||||||
// fprintf(drv->log, "Total term count: %p %d, rows count: %d (%d)\n", async_command->statement, async_command->term_count, async_command->row_count, res);
|
#ifdef DEBUG
|
||||||
// fflush(drv->log);
|
fprintf(drv->log, "Total term count: %p %d, rows count: %d (%d)\n", async_command->statement, async_command->term_count, async_command->row_count, res);
|
||||||
|
fflush(drv->log);
|
||||||
|
#endif
|
||||||
sql_free_async(async_command);
|
sql_free_async(async_command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,11 +11,10 @@
|
|||||||
#error "SQLite3 of version 3.6.1 minumum required"
|
#error "SQLite3 of version 3.6.1 minumum required"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Path to file where data will be stored.
|
// Path to file where data will be stored.
|
||||||
// It will be created if it doesn't exist
|
// It will be created if it doesn't exist
|
||||||
#define DB_PATH "./store.db"
|
#define DB_PATH "./store.db"
|
||||||
|
#define LOG_PATH "/tmp/erlang-sqlite3-drv.log"
|
||||||
|
|
||||||
// Binary commands between Erlang VM and Driver
|
// Binary commands between Erlang VM and Driver
|
||||||
#define CMD_SQL_EXEC 2
|
#define CMD_SQL_EXEC 2
|
||||||
|
|||||||
Reference in New Issue
Block a user