]> jfr.im git - irc/quakenet/newserv.git/commitdiff
Add table name method to dbapi2.
authorChris Porter <redacted>
Tue, 16 Sep 2008 01:42:30 +0000 (02:42 +0100)
committerChris Porter <redacted>
Tue, 16 Sep 2008 01:42:30 +0000 (02:42 +0100)
dbapi2/dbapi2-adapter.inc
dbapi2/dbapi2.c
dbapi2/dbapi2.h
noperserv/noperserv_db.c

index 7b8999dc8272d5fa48be0b8b777be63eece47ba3..fd4d1fa1aaf881097412e17f683c0d2a030d173d 100644 (file)
@@ -1,4 +1,5 @@
 #include <stdarg.h>
+#include <stdio.h>
 
 #define DBAPI2_ADAPTER
 #include "../dbapi/dbapi.h"
@@ -6,7 +7,6 @@
 #define DBAPI2_RESULT_HANDLE DBResult
 
 #include "../dbapi2/dbapi2.h"
-
 #include "../lib/stringbuf.h"
 
 static DBAPI2_HANDLE *dbapi2_adapter_new(DBAPIConn *);
@@ -19,6 +19,8 @@ static void dbapi2_adapter_loadtable(DBAPIConn *, DBAPIQueryCallback, DBAPIQuery
 static void dbapi2_adapter_escapestring(DBAPIConn *, char *, const char *, size_t);
 static int dbapi2_adapter_quotestring(DBAPIConn *, char *, size_t, const char *, size_t);
 
+static char *dbapi2_adapter_tablename(DBAPIConn *, const char *);
+
 static DBAPIProvider adapterprovider = {
   .new = dbapi2_adapter_new,
   .close = dbapi2_adapter_close,
@@ -28,7 +30,9 @@ static DBAPIProvider adapterprovider = {
   .loadtable = dbapi2_adapter_loadtable,
 
   .escapestring = dbapi2_adapter_escapestring,
-  .quotestring = dbapi2_adapter_quotestring
+  .quotestring = dbapi2_adapter_quotestring,
+
+  .tablename = dbapi2_adapter_tablename,
 };
 
 struct DBAPI2AdapterQueryCallback {
@@ -200,3 +204,13 @@ static int dbapi2_adapter_quotestring(DBAPIConn *db, char *buf, size_t buflen, c
   return 1;
 }
 #endif
+
+#ifndef DBAPI2_CUSTOM_TABLENAME
+static char *dbapi2_adapter_tablename(DBAPIConn *db, const char *tablename) {
+  static char buf[1024];
+
+  snprintf(buf, sizeof(buf), "%s.%s", db->name, tablename);
+
+  return buf;
+}
+#endif
index a147553ca5d3d1257e1b453badf9985983ad66f3..2be78fce609ccf2fff81026f313972b581e38677 100644 (file)
@@ -119,6 +119,7 @@ DBAPIConn *dbapi2open(const char *provider, const char *database) {
   db->loadtable = p->loadtable;
   db->escapestring = p->escapestring;
   db->squery = dbsimplequery;
+  db->tablename = p->tablename;
 
   db->__query = p->query;
   db->__close = p->close;
index 6d6d222b12ae1452851058aa492400914b89d361..ca907eb11281b63541a704d8fa00bc8cbf1470f9 100644 (file)
@@ -43,6 +43,8 @@ typedef void (*DBAPISafeCreateTable)(struct DBAPIConn *, const char *, ...) __at
 typedef void (*DBAPIEscapeString)(struct DBAPIConn *, char *, const char *, size_t);
 typedef int (*DBAPIQuoteString)(struct DBAPIConn *, char *, size_t, const char *, size_t);
 
+typedef char *(*DBAPITableName)(struct DBAPIConn *, const char *);
+
 struct DBAPIProviderData;
 
 typedef struct DBAPIProvider {
@@ -52,6 +54,9 @@ typedef struct DBAPIProvider {
   DBAPIQueryV query;
   DBAPICreateTable createtable;
   DBAPILoadTable loadtable;
+
+  DBAPITableName tablename;
+
 /*
   DBAPISafeQuery safequery;
   DBAPISafeSimpleQuery safesimplequery;
@@ -73,6 +78,7 @@ typedef struct DBAPIConn {
   DBAPICreateTable createtable;
   DBAPILoadTable loadtable;
   DBAPIEscapeString escapestring; /* deprecated */
+  DBAPITableName tablename;
 
   char name[DBNAME_LEN+1];
 
index 0fc3effed74797030755ef1ee6e92f68d39e87b7..ab30dc58e67b5925222942c94103f49a1d94ad6e 100644 (file)
@@ -54,7 +54,7 @@ int noperserv_load_db(void) {
   noperserv_create_tables();
 
   nodb->query(nodb, noperserv_load_users, NULL,
-    "SELECT ID, authname, flags, noticelevel FROM noperserv.users");
+    "SELECT ID, authname, flags, noticelevel FROM %s", nodb->tablename(nodb, "users"));
 
   return 1;
 }
@@ -104,12 +104,12 @@ void noperserv_load_users(DBAPIResult *res, void *arg) {
 
 void noperserv_create_tables(void) {
   nodb->createtable(nodb, NULL, NULL,
-    "CREATE TABLE noperserv.users ("
+    "CREATE TABLE %s ("
       "ID            INT               NOT NULL,"
       "authname      VARCHAR(%d)       NOT NULL,"
       "flags         INT               NOT NULL,"
       "noticelevel   INT               NOT NULL,"
-      "PRIMARY KEY (ID))", ACCOUNTLEN);
+      "PRIMARY KEY (ID))", nodb->tablename(nodb, "users"), ACCOUNTLEN);
 }
 
 void noperserv_cleanup_db(void) {
@@ -155,7 +155,7 @@ void noperserv_delete_autheduser(no_autheduser *au) {
   no_autheduser *ap = authedusers, *lp = NULL;
 
   if(!au->newuser)
-    nodb->squery(nodb, "DELETE FROM noperserv.users WHERE id = %lu", au->id);
+    nodb->squery(nodb, "DELETE FROM %s WHERE id = %lu", nodb->tablename(nodb, "users"), au->id);
 
   for(;ap;lp=ap,ap=ap->next) {
     if(ap == au) {
@@ -174,10 +174,10 @@ void noperserv_update_autheduser(no_autheduser *au) {
   if(au->newuser) {
     char escapedauthname[ACCOUNTLEN * 2 + 1];
     nodb->escapestring(nodb, escapedauthname, au->authname->content, au->authname->length);
-    nodb->squery(nodb, "INSERT INTO noperserv.users (id, authname, flags, noticelevel) VALUES (%lu,'%s',%u,%u)", au->id, au->authname->content, NOGetAuthLevel(au), NOGetNoticeLevel(au));
+    nodb->squery(nodb, "INSERT INTO %s (id, authname, flags, noticelevel) VALUES (%lu,'%s',%u,%u)", nodb->tablename(nodb, "users"), au->id, au->authname->content, NOGetAuthLevel(au), NOGetNoticeLevel(au));
     au->newuser = 0;
   } else {
-    nodb->squery(nodb, "UPDATE noperserv.users SET flags = %u, noticelevel = %u WHERE id = %lu", NOGetAuthLevel(au), NOGetNoticeLevel(au), au->id);
+    nodb->squery(nodb, "UPDATE %s SET flags = %u, noticelevel = %u WHERE id = %lu", nodb->tablename(nodb, "users"), NOGetAuthLevel(au), NOGetNoticeLevel(au), au->id);
   }
 }