1dafbdeff3 2011-01-28 stephan: #if defined(NDEBUG) bf60f030c0 2011-01-28 stephan: # undef NDEBUG /* force assert() to always work */ 1dafbdeff3 2011-01-28 stephan: #endif 1dafbdeff3 2011-01-28 stephan: #include <assert.h> 1dafbdeff3 2011-01-28 stephan: #include <stdio.h> 1dafbdeff3 2011-01-28 stephan: #include <stdlib.h> /* atexit() */ 1dafbdeff3 2011-01-28 stephan: #include "wh/cson/cson_sqlite3.h" 1dafbdeff3 2011-01-28 stephan: 1dafbdeff3 2011-01-28 stephan: #define MARKER if(1) printf("MARKER: %s:%d:%s():\t",__FILE__,__LINE__,__func__); if(1) printf 2058abad4d 2011-04-13 stephan: #define SHOWRC(RC) MARKER("rc=%d (%s)\n",RC,cson_rc_string(RC)) 1dafbdeff3 2011-01-28 stephan: bf60f030c0 2011-01-28 stephan: static struct { 1dafbdeff3 2011-01-28 stephan: sqlite3 * db; 1dafbdeff3 2011-01-28 stephan: char const * fname; 1dafbdeff3 2011-01-28 stephan: cson_output_opt outOpt; 1dafbdeff3 2011-01-28 stephan: } ThisApp = { 1dafbdeff3 2011-01-28 stephan: NULL/*db*/, 82f5f3d44e 2011-04-16 stephan: ":memory:"/*fname*/, 1dafbdeff3 2011-01-28 stephan: cson_output_opt_empty_m 1dafbdeff3 2011-01-28 stephan: }; 1dafbdeff3 2011-01-28 stephan: bf60f030c0 2011-01-28 stephan: static void setup_db() 1dafbdeff3 2011-01-28 stephan: { bf60f030c0 2011-01-28 stephan: MARKER("db setup starting [file=%s]...\n", ThisApp.fname); 1dafbdeff3 2011-01-28 stephan: int rc = sqlite3_open_v2( ThisApp.fname, &ThisApp.db, 1dafbdeff3 2011-01-28 stephan: SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 1dafbdeff3 2011-01-28 stephan: NULL ); 1dafbdeff3 2011-01-28 stephan: assert( (0 == rc) && "db open failed!" ); 1dafbdeff3 2011-01-28 stephan: 1dafbdeff3 2011-01-28 stephan: #define RUNSQL(SQL) \ bf60f030c0 2011-01-28 stephan: puts(SQL); \ 1dafbdeff3 2011-01-28 stephan: rc = sqlite3_exec( ThisApp.db, SQL, NULL, NULL, NULL ); \ 1dafbdeff3 2011-01-28 stephan: assert( (0 == rc) && "QUERY FAILED") 1dafbdeff3 2011-01-28 stephan: 1dafbdeff3 2011-01-28 stephan: char const * sql = "CREATE TABLE IF NOT EXISTS stuff (" 1dafbdeff3 2011-01-28 stephan: "name UNIQUE ON CONFLICT REPLACE, " a17739cf15 2011-04-16 stephan: "count tinyint(1)" 1dafbdeff3 2011-01-28 stephan: ");"; 1dafbdeff3 2011-01-28 stephan: RUNSQL(sql); bf60f030c0 2011-01-28 stephan: RUNSQL("DELETE FROM stuff"); 1dafbdeff3 2011-01-28 stephan: RUNSQL("INSERT INTO STUFF (name,count) VALUES('this',3)" ); 1dafbdeff3 2011-01-28 stephan: RUNSQL("INSERT INTO STUFF (name,count) VALUES('that',2)" ); a17739cf15 2011-04-16 stephan: RUNSQL("INSERT INTO STUFF (name,count) VALUES('intZero',0)" ); a17739cf15 2011-04-16 stephan: RUNSQL("INSERT INTO STUFF (name,count) VALUES('doubleZero',0.0)" ); a17739cf15 2011-04-16 stephan: RUNSQL("INSERT INTO STUFF (name,count) VALUES('emptyString','')" ); 82f5f3d44e 2011-04-16 stephan: RUNSQL("INSERT INTO STUFF (name,count) VALUES('nullValue',NULL)" ); 1dafbdeff3 2011-01-28 stephan: #undef RUNSQL 2e416d8d1c 2012-03-31 stephan: 2e416d8d1c 2012-03-31 stephan: cson_value * x = cson_value_new_string("hi!",3); 2e416d8d1c 2012-03-31 stephan: cson_value * y = cson_value_new_integer(42); 862f335cef 2012-03-31 stephan: cson_array * ar = cson_new_array(); 862f335cef 2012-03-31 stephan: cson_array_append(ar, x); 862f335cef 2012-03-31 stephan: cson_array_append(ar, y); 2e416d8d1c 2012-03-31 stephan: sqlite3_stmt * st = NULL; 2e416d8d1c 2012-03-31 stephan: rc = sqlite3_prepare_v2( ThisApp.db, "INSERT INTO STUFF(name,count) VALUES(?,?)", 2e416d8d1c 2012-03-31 stephan: -1, &st, NULL); 862f335cef 2012-03-31 stephan: cson_sqlite3_bind_value( st, 1, cson_array_value(ar) ); 862f335cef 2012-03-31 stephan: cson_free_array(ar); 2e416d8d1c 2012-03-31 stephan: rc = sqlite3_step(st); 2e416d8d1c 2012-03-31 stephan: assert(SQLITE_DONE==rc); 2e416d8d1c 2012-03-31 stephan: sqlite3_finalize(st); bf60f030c0 2011-01-28 stephan: MARKER("db setup done.\n"); 1dafbdeff3 2011-01-28 stephan: } bf60f030c0 2011-01-28 stephan: bf60f030c0 2011-01-28 stephan: bf60f030c0 2011-01-28 stephan: static void test1() 1dafbdeff3 2011-01-28 stephan: { 1dafbdeff3 2011-01-28 stephan: MARKER("test1() starting.\n"); 1dafbdeff3 2011-01-28 stephan: assert( NULL != ThisApp.db ); 1dafbdeff3 2011-01-28 stephan: 1dafbdeff3 2011-01-28 stephan: sqlite3_stmt * st = NULL; bf60f030c0 2011-01-28 stephan: char const * select = "SELECT * FROM stuff"; bf60f030c0 2011-01-28 stephan: int rc = sqlite3_prepare_v2( ThisApp.db, select, -1, 1dafbdeff3 2011-01-28 stephan: &st, NULL ); 1dafbdeff3 2011-01-28 stephan: assert( 0 == rc ); 1dafbdeff3 2011-01-28 stephan: cson_value * json = NULL; f4c276c09a 2011-01-28 stephan: char fat = 1; f4c276c09a 2011-01-28 stephan: rc = cson_sqlite3_stmt_to_json( st, &json, fat ); 1dafbdeff3 2011-01-28 stephan: sqlite3_finalize(st); 1dafbdeff3 2011-01-28 stephan: assert( 0 == rc ); 1dafbdeff3 2011-01-28 stephan: assert( NULL != json ); 87c3d9cfb5 2011-01-29 stephan: MARKER("Via cson_sqlite3_stmt_to_json(%s mode) [%s]...\n",fat?"fat":"slim",select); 1dafbdeff3 2011-01-28 stephan: cson_output_FILE( json, stdout, &ThisApp.outOpt ); 1dafbdeff3 2011-01-28 stephan: cson_value_free(json); 1dafbdeff3 2011-01-28 stephan: json = NULL; 87c3d9cfb5 2011-01-29 stephan: fat = !fat; f4c276c09a 2011-01-28 stephan: rc = cson_sqlite3_sql_to_json( ThisApp.db, &json, select, fat); 1dafbdeff3 2011-01-28 stephan: assert( 0 == rc ); 87c3d9cfb5 2011-01-29 stephan: MARKER("Via cson_sqlite3_sql_to_json(%s mode) [%s]...\n",fat?"fat":"slim",select); 1dafbdeff3 2011-01-28 stephan: cson_output_FILE( json, stdout, &ThisApp.outOpt ); 1dafbdeff3 2011-01-28 stephan: cson_value_free(json); 1dafbdeff3 2011-01-28 stephan: MARKER("test1() done.\n"); 1dafbdeff3 2011-01-28 stephan: } 1dafbdeff3 2011-01-28 stephan: bf60f030c0 2011-01-28 stephan: static void atexit_handler() 1dafbdeff3 2011-01-28 stephan: { 1dafbdeff3 2011-01-28 stephan: if( NULL != ThisApp.db ) { 1dafbdeff3 2011-01-28 stephan: sqlite3_close(ThisApp.db); 1dafbdeff3 2011-01-28 stephan: ThisApp.db = NULL; 1dafbdeff3 2011-01-28 stephan: } 1dafbdeff3 2011-01-28 stephan: } 1dafbdeff3 2011-01-28 stephan: int main(int argc, char **argv) 1dafbdeff3 2011-01-28 stephan: { 1dafbdeff3 2011-01-28 stephan: atexit( atexit_handler ); 1dafbdeff3 2011-01-28 stephan: setup_db(); 1dafbdeff3 2011-01-28 stephan: ThisApp.outOpt.addNewline = 1; bf60f030c0 2011-01-28 stephan: ThisApp.outOpt.indentation = 0; 1dafbdeff3 2011-01-28 stephan: test1(); 1dafbdeff3 2011-01-28 stephan: return 0; 1dafbdeff3 2011-01-28 stephan: }