#define dbattach(schema) pqcreateschema(schema)
#define dbdetach(schema)
#define dbescapestring(buf, src, len) PQescapeString(buf, src, len)
-#define dbloadtable(tablename, init, data, fini) pqloadtable(tablename, init, data, fini);
+#define dbloadtable(tablename, init, data, fini) pqloadtable(tablename, init, data, fini, NULL);
#define dbasyncqueryf(id, handler, tag, flags, format, ...) pqasyncqueryf(id, handler, tag, flags, format , ##__VA_ARGS__)
#define dbquerysuccessful(x) pqquerysuccessful(x)
#define dbattach(schema) sqliteattach(schema)
#define dbdetach(schema) sqlitedetach(schema)
#define dbescapestring(buf, src, len) sqliteescapestring(buf, (char *)(src), len)
-#define dbloadtable(tablename, init, data, fini) sqliteloadtable(tablename, init, data, fini);
+#define dbloadtable(tablename, init, data, fini) sqliteloadtable(tablename, init, data, fini, NULL);
#define dbasyncqueryf(id, handler, tag, flags, format, ...) sqliteasyncqueryf(id, handler, tag, flags, format , ##__VA_ARGS__)
#define dbquerysuccessful(x) sqlitequerysuccessful(x)
{
sstring *tablename;
PQQueryHandler init, data, fini;
+ void *tag;
} pqtableloaderinfo_s;
pqasyncquery_s *queryhead = NULL, *querytail = NULL;
}
}
-void pqloadtable(char *tablename, PQQueryHandler init, PQQueryHandler data, PQQueryHandler fini)
+void pqloadtable(char *tablename, PQQueryHandler init, PQQueryHandler data, PQQueryHandler fini, void *tag)
{
pqtableloaderinfo_s *tli;
tli->init=init;
tli->data=data;
tli->fini=fini;
+ tli->tag=tag;
pqasyncquery(pqstartloadtable, tli, "SELECT COUNT(*) FROM %s", tli->tablename->content);
}
Error("pqsql", ERR_INFO, "Found %lu entries in table %s, scheduling load.", count, tli->tablename->content);
- pqasyncquery(tli->init, NULL, "BEGIN");
+ pqasyncquery(tli->init, tli->tag, "BEGIN");
pqasyncquery(NULL, NULL, "DECLARE table%lx%lx CURSOR FOR SELECT * FROM %s", tablecrc, count, tli->tablename->content);
for (i=0;(count - i) > 1000; i+=1000)
- pqasyncquery(tli->data, NULL, "FETCH 1000 FROM table%lx%lx", tablecrc, count);
+ pqasyncquery(tli->data, tli->tag, "FETCH 1000 FROM table%lx%lx", tablecrc, count);
- pqasyncquery(tli->data, NULL, "FETCH ALL FROM table%lx%lx", tablecrc, count);
+ pqasyncquery(tli->data, tli->tag, "FETCH ALL FROM table%lx%lx", tablecrc, count);
pqasyncquery(NULL, NULL, "CLOSE table%lx%lx", tablecrc, count);
- pqasyncquery(tli->fini, NULL, "COMMIT");
+ pqasyncquery(tli->fini, tli->tag, "COMMIT");
freesstring(tli->tablename);
nsfree(POOL_PQSQL, tli);
typedef int PQModuleIdentifier;
typedef void (*PQQueryHandler)(PGconn *, void *);
-void pqloadtable(char *tablename, PQQueryHandler init, PQQueryHandler data, PQQueryHandler fini);
+void pqloadtable(char *tablename, PQQueryHandler init, PQQueryHandler data, PQQueryHandler fini, void *tag);
void pqasyncqueryf(PQModuleIdentifier identifier, PQQueryHandler handler, void *tag, int flags, char *format, ...) __attribute__ ((format (printf, 5, 6)));
#define pqasyncqueryi(identifier, handler, tag, format, ...) pqasyncqueryf(identifier, handler, tag, 0, format , ##__VA_ARGS__)
static void sqlitequeueprocessor(void *arg);
static void dbstatus(int hooknum, void *arg);
+void registersqliteprovider(void);
+void deregistersqliteprovider(void);
+
void _init(void) {
sstring *dbfile;
int rc;
sqliteasyncqueryf(0, NULL, NULL, 0, "PRAGMA synchronous=" SYNC_MODE ";");
registerhook(HOOK_CORE_STATSREQUEST, dbstatus);
+
+/* registersqliteprovider();*/
}
void _fini(void) {
sqlite3_close(conn);
+/* deregistersqliteprovider();*/
+
dbconnected = 0;
}
return;
}
-void sqliteasyncqueryf(int identifier, SQLiteQueryHandler handler, void *tag, int flags, char *format, ...) {
+void sqliteasyncqueryfv(int identifier, SQLiteQueryHandler handler, void *tag, int flags, char *format, va_list va) {
char querybuf[8192];
- va_list va;
int len;
int rc;
sqlite3_stmt *s;
if(!sqliteconnected())
return;
- va_start(va, format);
len = vsnprintf(querybuf, sizeof(querybuf), format, va);
- va_end(va);
rc = sqlite3_prepare(conn, querybuf, -1, &s, NULL);
if(rc != SQLITE_OK) {
processstatement(rc, s, handler, tag, querybuf);
}
+void sqliteasyncqueryf(int identifier, SQLiteQueryHandler handler, void *tag, int flags, char *format, ...) {
+ va_list va;
+
+ va_start(va, format);
+ sqliteasyncqueryfv(identifier, handler, tag, flags, format, va);
+ va_end(va);
+}
+
int sqliteconnected(void) {
return dbconnected;
}
struct sqlitetableloader {
SQLiteQueryHandler init, data, fini;
+ void *tag;
char tablename[];
};
/* the handlers do all the checking and cleanup */
if(t->init)
- (t->init)(c, NULL);
+ (t->init)(c, t->tag);
- (t->data)(c, NULL);
+ (t->data)(c, t->tag);
if(t->fini)
- (t->fini)(c, NULL);
+ (t->fini)(c, t->tag);
nsfree(POOL_SQLITE, t);
}
sqliteasyncqueryf(0, loadtablerows, t, 0, "SELECT * FROM %s", t->tablename);
}
-void sqliteloadtable(char *tablename, SQLiteQueryHandler init, SQLiteQueryHandler data, SQLiteQueryHandler fini) {
+void sqliteloadtable(char *tablename, SQLiteQueryHandler init, SQLiteQueryHandler data, SQLiteQueryHandler fini, void *tag) {
struct sqlitetableloader *t;
int len;
t->init = init;
t->data = data;
t->fini = fini;
+ t->tag = tag;
sqliteasyncqueryf(0, loadtablecount, t, 0, "SELECT COUNT(*) FROM %s", tablename);
}
typedef void (*SQLiteQueryHandler)(SQLiteConn *, void *);
void sqliteasyncqueryf(SQLiteModuleIdentifier identifier, SQLiteQueryHandler handler, void *tag, int flags, char *format, ...) __attribute__ ((format (printf, 5, 6)));
+void sqliteasyncqueryfv(int identifier, SQLiteQueryHandler handler, void *tag, int flags, char *format, va_list ap);
int sqliteconnected(void);
void sqliteattach(char *schema);
void sqlitedetach(char *schema);
-void sqliteloadtable(char *tablename, SQLiteQueryHandler init, SQLiteQueryHandler data, SQLiteQueryHandler fini);
+void sqliteloadtable(char *tablename, SQLiteQueryHandler init, SQLiteQueryHandler data, SQLiteQueryHandler fini, void *tag);
#endif