]> jfr.im git - irc/quakenet/newserv.git/blobdiff - dbapi2/dbapi2-adapter.inc
build: Clean up workspaces code a bit.
[irc/quakenet/newserv.git] / dbapi2 / dbapi2-adapter.inc
index 0836700a701a2d9e02ffb4452fbbe7ee23f6d8b1..cfb555a3d9e4ab90f04484cd5043ff42b2bd64cf 100644 (file)
@@ -8,12 +8,13 @@
 
 #include "../dbapi2/dbapi2.h"
 #include "../lib/stringbuf.h"
+#include "../lib/version.h"
 
 static DBAPI2_HANDLE *dbapi2_adapter_new(const DBAPIConn *);
 static void dbapi2_adapter_close(DBAPIConn *);
 
-static void dbapi2_adapter_query(const DBAPIConn *, DBAPIQueryCallback, DBAPIUserData, const char *, va_list);
-static void dbapi2_adapter_createtable(const DBAPIConn *, DBAPIQueryCallback, DBAPIUserData, const char *, ...);
+static void dbapi2_adapter_query(const DBAPIConn *, DBAPIQueryCallback, DBAPIUserData, const char *);
+static void dbapi2_adapter_createtable(const DBAPIConn *, DBAPIQueryCallback, DBAPIUserData, const char *);
 static void dbapi2_adapter_loadtable(const DBAPIConn *, DBAPIQueryCallback, DBAPIQueryCallback, DBAPIQueryCallback, DBAPIUserData data, const char *);
 
 static void dbapi2_adapter_escapestring(const DBAPIConn *, char *, const char *, size_t);
@@ -21,6 +22,8 @@ static int dbapi2_adapter_quotestring(const DBAPIConn *, char *, size_t, const c
 
 static char *dbapi2_adapter_tablename(const DBAPIConn *, const char *);
 
+static void dbapi2_adapter_call(const DBAPIConn *, DBAPIQueryCallback, DBAPIUserData, const char *, const char *);
+
 static DBAPIProvider adapterprovider = {
   .new = dbapi2_adapter_new,
   .close = dbapi2_adapter_close,
@@ -33,6 +36,8 @@ static DBAPIProvider adapterprovider = {
   .quotestring = dbapi2_adapter_quotestring,
 
   .tablename = dbapi2_adapter_tablename,
+
+  .call = dbapi2_adapter_call,
 };
 
 struct DBAPI2AdapterQueryCallback {
@@ -116,7 +121,7 @@ static void dbapi2_adapter_querywrapper(DBConn *c, void *data) {
   free(a);
 }
 
-static void sqquery(const DBAPIConn *db, DBAPIQueryCallback cb, DBAPIUserData data, const char *format, va_list ap, int flags) {
+static void sqquery(const DBAPIConn *db, DBAPIQueryCallback cb, DBAPIUserData data, int flags, const char *query) {
   struct DBAPI2AdapterQueryCallback *a;
 
   if(cb) {
@@ -129,26 +134,21 @@ static void sqquery(const DBAPIConn *db, DBAPIQueryCallback cb, DBAPIUserData da
     a = NULL;
   }
 
-  dbasyncqueryfv((int)(long)db->handle, cb?dbapi2_adapter_querywrapper:NULL, a, flags, (char *)format, ap);
+  dbasyncqueryf((int)(long)db->handle, cb?dbapi2_adapter_querywrapper:NULL, a, flags, "%s", query);
 }
 
-static void dbapi2_adapter_query(const DBAPIConn *db, DBAPIQueryCallback cb, DBAPIUserData data, const char *format, va_list ap) {
-  sqquery(db, cb, data, format, ap, 0);
+static void dbapi2_adapter_query(const DBAPIConn *db, DBAPIQueryCallback cb, DBAPIUserData data, const char *query) {
+  sqquery(db, cb, data, 0, query);
 }
 
-static void dbapi2_adapter_createtable(const DBAPIConn *db, DBAPIQueryCallback cb, DBAPIUserData data, const char *format, ...) {
-  va_list ap;
-
-  va_start(ap, format);
-  sqquery(db, cb, data, format, ap, DB_CREATE);
-  va_end(ap);
+static void dbapi2_adapter_createtable(const DBAPIConn *db, DBAPIQueryCallback cb, DBAPIUserData data, const char *query) {
+  sqquery(db, cb, data, DB_CREATE, query);
 }
 
 static void dbapi2_adapter_loadtablewrapper_init(DBConn *c, void *data) {
   struct DBAPI2AdapterLoadTableCallback *a = data;
-  DBAPIResult r;
 
-  a->init(wrapresult(&r, c), a->data);
+  a->init(NULL, a->data);
 }
 
 static void dbapi2_adapter_loadtablewrapper_data(DBConn *c, void *data) {
@@ -160,10 +160,9 @@ static void dbapi2_adapter_loadtablewrapper_data(DBConn *c, void *data) {
 
 static void dbapi2_adapter_loadtablewrapper_fini(DBConn *c, void *data) {
   struct DBAPI2AdapterLoadTableCallback *a = data;
-  DBAPIResult r;
 
   if(a->fini)
-    a->fini(wrapresult(&r, c), a->data);
+    a->fini(NULL, a->data);
 
   free(a);
 }
@@ -188,17 +187,17 @@ static void dbapi2_adapter_escapestring(const DBAPIConn *db, char *buf, const ch
 #ifndef DBAPI2_CUSTOM_QUOTESTRING
 static int dbapi2_adapter_quotestring(const DBAPIConn *db, char *buf, size_t buflen, const char *data, size_t len) {
   StringBuf b;
-  sbinit(&b, buf, buflen);
   char xbuf[len * 2 + 5];
   size_t esclen;
 
+  sbinit(&b, buf, buflen);
   esclen = dbescapestring(xbuf, (char *)data, len);
 
   sbaddchar(&b, '\'');
   sbaddstrlen(&b, xbuf, esclen);
   sbaddchar(&b, '\'');
 
-  if(sbterminate(&b))
+  if(!sbterminate(&b))
     return 0;
 
   return 1;
@@ -214,3 +213,22 @@ static char *dbapi2_adapter_tablename(const DBAPIConn *db, const char *tablename
   return buf;
 }
 #endif
+
+static void dbapi2_adapter_call(const DBAPIConn *db, DBAPIQueryCallback cb, DBAPIUserData data, const char *function, const char *query) {
+  struct DBAPI2AdapterQueryCallback *a;
+  char buf[512];
+
+  if(cb) {
+    a = malloc(sizeof(struct DBAPI2AdapterQueryCallback));
+
+    a->db = db;
+    a->data = data;
+    a->callback = cb;
+  } else {
+    a = NULL;
+  }
+
+  snprintf(buf, sizeof(buf), "%s", db->tablename(db, function));
+  dbcall((int)(long)db->handle, cb?dbapi2_adapter_querywrapper:NULL, a, buf, query);
+}
+