#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);
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,
.quotestring = dbapi2_adapter_quotestring,
.tablename = dbapi2_adapter_tablename,
+
+ .call = dbapi2_adapter_call,
};
struct DBAPI2AdapterQueryCallback {
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) {
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) {
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);
}
#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;
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);
+}
+