X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;f=yarrg%2Frssql.c;h=26a77bb7811dd0be8fc504037a86b8a06f44a20d;hb=2abd3537af0c697684bfb97895f230372101329d;hp=463ef8b560c76dff97b047b22db55f5e4b7d73ca;hpb=23f08e0abdbd5212e4a867c80f7833e4ebcbb1cf;p=ypp-sc-tools.db-live.git diff --git a/yarrg/rssql.c b/yarrg/rssql.c index 463ef8b..26a77bb 100644 --- a/yarrg/rssql.c +++ b/yarrg/rssql.c @@ -4,6 +4,8 @@ sqlite3 *db; sqlite3_stmt *ss_ipair; +int islandtablesz; + DEBUG_DEFINE_DEBUGF(sql); static int busy_handler(void *u, int previous) { @@ -12,17 +14,18 @@ static int busy_handler(void *u, int previous) { return 1; } -void setup(void) { +void setup_sql(const char *database) { sqlite3_stmt *sst; - SQL_MUST( sqlite3_open("OCEAN-Midnight.db", &db) ); + SQL_MUST( sqlite3_open(database, &db) ); SQL_MUST( sqlite3_busy_handler(db, busy_handler, 0) ); sst= sql_prepare("BEGIN","(begin)"); assert( !SQL_STEP(sst) ); sqlite3_finalize(sst); - setup_value(); + islandtablesz= 1 + sql_single_int("SELECT max(islandid) FROM islands"); + debugf("SQL islandtablesz=%d\n",islandtablesz); } int sql_single_int(const char *stmt) { @@ -54,8 +57,28 @@ sqlite3_stmt *sql_prepare(const char *stmt, const char *what) { return ssr; } -int sql_step_wrap(sqlite3_stmt *ssh, const char *ssh_string, - const char *file, int line) { +int sql_step_distinct(sqlite3_stmt *ssh, const char *ssh_string, + const char *file, int line, + int *cols, int ncols, int nkeycols) { + for (;;) { + if (!sql_step(ssh, ssh_string, file, line)) return 0; + + int i; + for (i=0; i