]> jfr.im git - irc/quakenet/newserv.git/blobdiff - noperserv/noperserv_db.c
fix indentation
[irc/quakenet/newserv.git] / noperserv / noperserv_db.c
index c876c46be1f4698299a39fc843852797d5689ac0..17e77c4d841f97eef864992733cd3b33b4e8ec15 100644 (file)
 #include "../core/error.h"
 #include "../lib/irc_string.h"
 #include "../core/schedule.h"
-#include "../pqsql/pqsql.h"
+#include "../dbapi2/dbapi2.h"
 
 #include "noperserv.h"
 #include "noperserv_db.h"
 
-#include <libpq-fe.h>
 #include <stdlib.h>
 
 int db_loaded = 0;
@@ -29,7 +28,7 @@ no_autheduser *authedusers = NULL;
 void noperserv_create_tables(void);
 
 void noperserv_free_user(no_autheduser *au);
-void noperserv_load_users(PGconn *dbconn, void *arg);
+void noperserv_load_users(const DBAPIResult *res, void *arg);
 
 void noperserv_check_nick(nick *np);
 void noperserv_nick_account(int hooknum, void *arg);
@@ -37,12 +36,16 @@ void noperserv_quit_account(int hooknum, void *arg);
 
 void nopserserv_delete_from_autheduser(nick *np, no_autheduser *au);
 
-int noperserv_load_db(void) {
-  if(!pqconnected())
-    return 0;
+static DBAPIConn *nodb;
 
-  if(db_loaded)
-    noperserv_cleanup_db();
+int noperserv_load_db(void) {
+  if(!nodb) {
+    nodb = dbapi2open(DBAPI2_DEFAULT, "noperserv");
+    if(!nodb) {
+      Error("noperserv", ERR_STOP, "Could not connect to database.");
+      return 0;
+    }
+  }
 
   db_loaded = 1;
 
@@ -50,40 +53,42 @@ int noperserv_load_db(void) {
 
   noperserv_create_tables();
 
-  pqasyncquery(noperserv_load_users, NULL,
-    "SELECT ID, authname, flags, noticelevel FROM noperserv.users");
+  nodb->query(nodb, noperserv_load_users, NULL,
+    "SELECT ID, authname, flags, noticelevel FROM ?", "T", "users");
 
   return 1;
 }
 
-void noperserv_load_users(PGconn *dbconn, void *arg) {
-  PGresult *pgres = PQgetResult(dbconn);
-  int rows, i;
+void noperserv_load_users(const DBAPIResult *res, void *arg) {
   no_autheduser *nu;
   nick *np;
+  int i;
 
-  if(PQresultStatus(pgres) != PGRES_TUPLES_OK) {
+  if(!res)
+    return;
+
+  if(!res->success) {
     Error("noperserv", ERR_ERROR, "Error loading user list.");
-    return; 
+    res->clear(res);
+    return;
   }
 
-  rows = PQntuples(pgres);
   lastuserid = 0;
 
-  for(i=0;i<rows;i++) {
-    nu = noperserv_new_autheduser(PQgetvalue(pgres, i, 1));
+  while(res->next(res)) {
+    nu = noperserv_new_autheduser(res->get(res, 1));
     if(!nu)
       continue;
 
-    nu->id = strtoul(PQgetvalue(pgres, i, 0), NULL, 10);
-    nu->authlevel = strtoul(PQgetvalue(pgres, i, 2), NULL, 10);
-    nu->noticelevel = strtoul(PQgetvalue(pgres, i, 3), NULL, 10);
+    nu->id = strtoul(res->get(res, 0), NULL, 10);
+    nu->authlevel = strtoul(res->get(res, 2), NULL, 10);
+    nu->noticelevel = strtoul(res->get(res, 3), NULL, 10);
     nu->newuser = 0;
     if(nu->id > lastuserid)
       lastuserid = nu->id;
   }
 
-  Error("noperserv", ERR_INFO, "Loaded %d users", loadedusers);
+  Error("noperserv", ERR_INFO, "Loaded %lu users", loadedusers);
   
   for(i=0;i<NICKHASHSIZE;i++)
     for(np=nicktable[i];np;np=np->next)
@@ -93,17 +98,18 @@ void noperserv_load_users(PGconn *dbconn, void *arg) {
   registerhook(HOOK_NICK_ACCOUNT, &noperserv_nick_account);
   registerhook(HOOK_NICK_NEWNICK, &noperserv_nick_account);
   registerhook(HOOK_NICK_LOSTNICK, &noperserv_quit_account);
+
+  res->clear(res);
 }
 
 void noperserv_create_tables(void) {
-  pqcreatequery("CREATE SCHEMA noperserv");
-  pqcreatequery(
-    "CREATE TABLE noperserv.users ("
+  nodb->createtable(nodb, NULL, NULL,
+    "CREATE TABLE ? ("
       "ID            INT               NOT NULL,"
-      "authname      VARCHAR(%d)       NOT NULL,"
+      "authname      VARCHAR(?)       NOT NULL,"
       "flags         INT               NOT NULL,"
       "noticelevel   INT               NOT NULL,"
-      "PRIMARY KEY (ID))", ACCOUNTLEN);
+      "PRIMARY KEY (ID))", "Td", "users", ACCOUNTLEN);
 }
 
 void noperserv_cleanup_db(void) {
@@ -119,6 +125,9 @@ void noperserv_cleanup_db(void) {
     noperserv_free_user(ap);
     ap = np;
   }
+
+  nodb->close(nodb);
+  nodb = NULL;
 }
 
 no_autheduser *noperserv_new_autheduser(char *authname) {
@@ -146,7 +155,7 @@ void noperserv_delete_autheduser(no_autheduser *au) {
   no_autheduser *ap = authedusers, *lp = NULL;
 
   if(!au->newuser)
-    pqquery("DELETE FROM noperserv.users WHERE id = %d", au->id);
+    nodb->squery(nodb, "DELETE FROM ? WHERE id = ?", "Tu", "users", au->id);
 
   for(;ap;lp=ap,ap=ap->next) {
     if(ap == au) {
@@ -163,12 +172,10 @@ void noperserv_delete_autheduser(no_autheduser *au) {
 
 void noperserv_update_autheduser(no_autheduser *au) {
   if(au->newuser) {
-    char escapedauthname[ACCOUNTLEN * 2 + 1];
-    PQescapeString(escapedauthname, au->authname->content, au->authname->length);
-    pqquery("INSERT INTO noperserv.users (id, authname, flags, noticelevel) VALUES (%lu,'%s',%lu,%lu)", au->id, au->authname->content, NOGetAuthLevel(au), NOGetNoticeLevel(au));
+    nodb->squery(nodb, "INSERT INTO ? (id, authname, flags, noticelevel) VALUES (?,?,?,?)", "Tusuu", "users", au->id, au->authname->content, NOGetAuthLevel(au), NOGetNoticeLevel(au));
     au->newuser = 0;
   } else {
-    pqquery("UPDATE noperserv.users SET flags = %lu, noticelevel = %lu WHERE id = %lu", NOGetAuthLevel(au), NOGetNoticeLevel(au), au->id);
+    nodb->squery(nodb, "UPDATE ? SET flags = ?, noticelevel = ? WHERE id = ?", "Tuuu", "users", NOGetAuthLevel(au), NOGetNoticeLevel(au), au->id);
   }
 }