X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-live.git;a=blobdiff_plain;f=yarrg%2Frssql.c;h=043e34ed7790999cc4d09a9295e3dfca6d83f7b3;hp=898ac3b268350b4824021ba987002622600c88e3;hb=fe34dba430375e498ef46f82730795af229cee49;hpb=0145dc7f4fcaf62090a77fb2d69d5d7807c8d48d;ds=sidebyside diff --git a/yarrg/rssql.c b/yarrg/rssql.c index 898ac3b..043e34e 100644 --- a/yarrg/rssql.c +++ b/yarrg/rssql.c @@ -1,3 +1,29 @@ +/* + * Route searcher - database helper functions + */ +/* + * This is part of the YARRG website, a tool for assisting + * players of Yohoho Puzzle Pirates. + * + * Copyright (C) 2009 Ian Jackson + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + * Yohoho and Puzzle Pirates are probably trademarks of Three Rings and + * are used without permission. This program is not endorsed or + * sponsored by Three Rings. + */ #include "rscommon.h" @@ -7,6 +33,7 @@ sqlite3_stmt *ss_ipair; int islandtablesz; DEBUG_DEFINE_DEBUGF(sql); +DEBUG_DEFINE_SOME_DEBUGF(sql,debug2f); static int busy_handler(void *u, int previous) { debugf("[[DB BUSY %d]]",previous); @@ -14,10 +41,10 @@ static int busy_handler(void *u, int previous) { return 1; } -void setup_sql(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)"); @@ -44,7 +71,7 @@ void sql_fatal(const char *stmt_what, int sqr, const char *act_what) { void sql_bind(sqlite3_stmt *ss, int index, int value, const char *ss_what, const char *val_what) { - debugf("SQL BIND %s #%d = %d = %s\n", ss_what, index, value, val_what); + debug2f("SQL BIND %s #%d = %d = %s\n", ss_what, index, value, val_what); int sqr= sqlite3_bind_int(ss, index, value); if (sqr) sql_fatal(ss_what, sqr, masprintf("bind #%d (%s)", index, val_what)); @@ -57,17 +84,37 @@ 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