From 029995f6a33135ecd66bb3ac3873293e00ac4e21 Mon Sep 17 00:00:00 2001 From: Ryan Flynn Date: Fri, 4 Jan 2013 14:58:52 -0500 Subject: [PATCH 1/3] issue #17: solve Symbol not found: _sqlite3_enable_load_extension by #ifdef-ing it out by default; erlang-sqlite3 will need configure-esque feature detection via http://www.sqlite.org/c3ref/compileoption_get.html or http://www.sqlite.org/pragma.html#pragma_compile_options --- c_src/sqlite3_drv.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/c_src/sqlite3_drv.c b/c_src/sqlite3_drv.c index a09fbef..5e048ae 100644 --- a/c_src/sqlite3_drv.c +++ b/c_src/sqlite3_drv.c @@ -246,12 +246,16 @@ static inline int output_ok(sqlite3_drv_t *drv) { return driver_output_term(drv->port, 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) { +#ifdef ERLANG_SQLITE3_LOAD_EXTENSION char enable = buf[0]; sqlite3_enable_load_extension(drv->db, (int) enable); output_ok(drv); return 0; +#else + output_error(drv, SQLITE_MISUSE, "extension loading not enabled"); + return -1; +#endif } static inline async_sqlite3_command *make_async_command_statement( From ef5555cbe27136cadde3e5535f0edbe38b6e3f95 Mon Sep 17 00:00:00 2001 From: Ryan Flynn Date: Fri, 4 Jan 2013 15:21:58 -0500 Subject: [PATCH 2/3] %lld/%llu for 64-bit ints --- c_src/sqlite3_drv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/c_src/sqlite3_drv.c b/c_src/sqlite3_drv.c index 5e048ae..525a13c 100644 --- a/c_src/sqlite3_drv.c +++ b/c_src/sqlite3_drv.c @@ -1419,7 +1419,7 @@ static void fprint_dataset(FILE* log, ErlDrvTermData *dataset, int term_count) { #if defined(_MSC_VER) fprintf(log, "%d-%d: int %I64d", i, i+1, (ErlDrvSInt64) dataset[i+1]); #else - fprintf(log, "%d-%d: int %ld", i, i+1, (ErlDrvSInt64) dataset[i+1]); + fprintf(log, "%d-%d: int %lld", i, i+1, (ErlDrvSInt64) dataset[i+1]); #endif i += 2; stack_size++; @@ -1428,7 +1428,7 @@ static void fprint_dataset(FILE* log, ErlDrvTermData *dataset, int term_count) { #if defined(_MSC_VER) fprintf(log, "%d-%d: int %I64lu", i, i+1, (ErlDrvUInt64) dataset[i+1]); #else - fprintf(log, "%d-%d: int %lu", i, i+1, (ErlDrvUInt64) dataset[i+1]); + fprintf(log, "%d-%d: int %llu", i, i+1, (ErlDrvUInt64) dataset[i+1]); #endif i += 2; stack_size++; From 9a28ba16510169b61d2dd0568ff6217682e23f7c Mon Sep 17 00:00:00 2001 From: Ryan Flynn Date: Thu, 21 Mar 2013 21:42:57 -0400 Subject: [PATCH 3/3] correct 'Other' double-use --- src/sqlite3_lib.erl | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/sqlite3_lib.erl b/src/sqlite3_lib.erl index bb6b796..3e4655d 100644 --- a/src/sqlite3_lib.erl +++ b/src/sqlite3_lib.erl @@ -304,11 +304,11 @@ sql_number(NumberStr) -> case string:to_integer(NumberStr) of {Int, []} -> Int; - Other -> + _ -> case string:to_float(NumberStr) of {Float, []} -> Float; - Other -> + _ -> {error, not_a_number} end end. @@ -408,6 +408,17 @@ quote_test() -> ?assertFlat("'abc'", value_to_sql("abc")), ?assertFlat("'a''b''''c'", value_to_sql("a'b''c")). +number_test() -> + ?assertEqual(sql_number(""), {error, not_a_number}), + ?assertEqual(sql_number("a"), {error, not_a_number}), + ?assertEqual(sql_number(" 1"), {error, not_a_number}), + ?assertEqual(sql_number("1 "), {error, not_a_number}), + ?assertEqual(sql_number(" 1 "), {error, not_a_number}), + ?assertEqual(sql_number("0"), 0), + ?assertEqual(sql_number("0.0"), 0.0), + ?assertEqual(sql_number("-0.0"), 0.0), + ?assertEqual(sql_number("+0.0"), 0.0). + create_table_sql_test() -> ?assertFlat( "CREATE TABLE user (id INTEGER PRIMARY KEY, name TEXT, CHECK ('am'='am'));",