chiark / gitweb /
88b6fc6851a91a6775160d20ac454daec788670a
[ypp-sc-tools.main.git] / yarrg / rssetup.c
1
2 #include "rscommon.h"
3
4 sqlite3 *db;
5 sqlite3_stmt *ss_ipair;
6
7 static int busy_handler(void *u, int previous) {
8   if (DEBUGP(sql)) fprintf(stderr,"[[DB BUSY %d]]",previous);
9   sysassert(! usleep(5000) );
10   return 1;
11 }
12
13 void setup(void) {
14   sqlite3_stmt *sst;
15   
16   SQL_MUST( sqlite3_open("OCEAN-Midnight.db", &db) );
17   SQL_MUST( sqlite3_busy_handler(db, busy_handler, 0) );
18
19   SQL_MUST( sqlite3_prepare(db, "BEGIN", -1, &sst, 0) );
20   assert( !SQL_STEP(sst) );
21   sqlite3_finalize(sst);
22
23   setup_value();
24 }
25
26 int sql_single_int(const char *stmt) {
27   sqlite3_stmt *sst;
28   SQL_MUST( sqlite3_prepare(db, stmt, -1,&sst,0) );
29   assert( SQL_STEP(sst) );
30   int rv= sqlite3_column_int(sst,0);
31   sqlite3_finalize(sst);
32   return rv;
33 }
34
35 int sql_step_wrap(sqlite3_stmt *ssh, const char *ssh_string,
36                   const char *file, int line) {
37   for (;;) {
38     int sqr;
39     sqr= sqlite3_step((ssh));
40     switch (sqr) {
41     case SQLITE_DONE:
42       if (DEBUGP(sql))
43         fprintf(stderr,"SQL %s DONE\n",ssh_string);
44       return 0;
45     case SQLITE_ROW:
46       if (DEBUGP(sql)) {
47         int i;
48         fprintf(stderr,"SQL %s R",ssh_string);
49         for (i=0; i<sqlite3_column_count(ssh); i++) {
50           fputc('\t',stderr);
51           fputs((char*)sqlite3_column_text(ssh,i),stderr);
52         }
53         fputs("\n",stderr);
54       }
55       return 1;
56     default: fatal("SQL step failed at %s:%d: code %d: %s: %s",
57                    file, line, sqr, sqlite3_errmsg(db), ssh_string);
58     }
59   }
60 }