File Annotation

Not logged in
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: }