chiark / gitweb /
WIP route value calculation - compiles, although doesn't run the LP
[ypp-sc-tools.db-live.git] / yarrg / rssetup.c
index 6538677c2a3b291a9763e28580c4a5aefc9352f8..88b6fc6851a91a6775160d20ac454daec788670a 100644 (file)
@@ -4,20 +4,55 @@
 sqlite3 *db;
 sqlite3_stmt *ss_ipair;
 
+static int busy_handler(void *u, int previous) {
+  if (DEBUGP(sql)) fprintf(stderr,"[[DB BUSY %d]]",previous);
+  sysassert(! usleep(5000) );
+  return 1;
+}
+
 void setup(void) {
+  sqlite3_stmt *sst;
+  
   SQL_MUST( sqlite3_open("OCEAN-Midnight.db", &db) );
+  SQL_MUST( sqlite3_busy_handler(db, busy_handler, 0) );
+
+  SQL_MUST( sqlite3_prepare(db, "BEGIN", -1, &sst, 0) );
+  assert( !SQL_STEP(sst) );
+  sqlite3_finalize(sst);
+
   setup_value();
 }
 
+int sql_single_int(const char *stmt) {
+  sqlite3_stmt *sst;
+  SQL_MUST( sqlite3_prepare(db, stmt, -1,&sst,0) );
+  assert( SQL_STEP(sst) );
+  int rv= sqlite3_column_int(sst,0);
+  sqlite3_finalize(sst);
+  return rv;
+}
+
 int sql_step_wrap(sqlite3_stmt *ssh, const char *ssh_string,
                  const char *file, int line) {
   for (;;) {
     int sqr;
     sqr= sqlite3_step((ssh));
     switch (sqr) {
-    case SQLITE_DONE: return 0;
-    case SQLITE_ROW: return 1;
-    case SQLITE_BUSY: sysassert(! usleep(5000) ); break;
+    case SQLITE_DONE:
+      if (DEBUGP(sql))
+       fprintf(stderr,"SQL %s DONE\n",ssh_string);
+      return 0;
+    case SQLITE_ROW:
+      if (DEBUGP(sql)) {
+       int i;
+       fprintf(stderr,"SQL %s R",ssh_string);
+       for (i=0; i<sqlite3_column_count(ssh); i++) {
+         fputc('\t',stderr);
+         fputs((char*)sqlite3_column_text(ssh,i),stderr);
+       }
+       fputs("\n",stderr);
+      }
+      return 1;
     default: fatal("SQL step failed at %s:%d: code %d: %s: %s",
                   file, line, sqr, sqlite3_errmsg(db), ssh_string);
     }