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 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);
}
#include "rscommon.h"
-//DEBUG_DEFINE_SOME_DEBUGF(sql,sql_dprintf);
+DEBUG_DEFINE_DEBUGF(value);
typedef struct {
int commodid, src_price, src_qty, dst_price, dst_qty;
TradesBlock *trades;
} IslandPair;
-int nislands=100;
+int nislands;
IslandPair ***ipairs; /* ipairs[sislandid][dislandid] */
static IslandPair *ipair_get(int si, int di) {
}
void setup_value(void) {
+ sqlite3_stmt *sst;
+
+ SQL_MUST( sqlite3_prepare(db, "SELECT max(islandid) FROM islands",
+ -1,&sst,0) );
+ assert( SQL_STEP(sst) );
+ nislands= sqlite3_column_int(sst,0);
+ nislands++;
+ sqlite3_finalize(sst);
+ debugf("VALUE nislands=%d\n",nislands);
+
SQL_MUST( sqlite3_prepare(db,
"SELECT\n"
" sell.commodid commodid,\n"