[aur-dev] [PATCH 6/8] git-interface: Support SQLite as database backend

Lukas Fleischer lfleischer at archlinux.org
Fri Aug 5 10:19:24 UTC 2016


In addition to MySQL, add support for SQLite to the database abstraction
layer. Also, add a new configuration option to select the DBMS.

Signed-off-by: Lukas Fleischer <lfleischer at archlinux.org>
---
 conf/config.proto   |  2 +-
 git-interface/db.py | 42 +++++++++++++++++++++++++++++-------------
 2 files changed, 30 insertions(+), 14 deletions(-)

diff --git a/conf/config.proto b/conf/config.proto
index 543c3ca..c56141c 100644
--- a/conf/config.proto
+++ b/conf/config.proto
@@ -1,5 +1,5 @@
 [database]
-dsn_prefix = mysql
+backend = mysql
 host = localhost
 socket = /var/run/mysqld/mysqld.sock
 name = AUR
diff --git a/git-interface/db.py b/git-interface/db.py
index c4c7d31..060689b 100644
--- a/git-interface/db.py
+++ b/git-interface/db.py
@@ -1,27 +1,43 @@
 import mysql.connector
+import sqlite3
 
 import config
 
 
 class Connection:
     _conn = None
+    _paramstyle = None
 
     def __init__(self):
-        aur_db_host = config.get('database', 'host')
-        aur_db_name = config.get('database', 'name')
-        aur_db_user = config.get('database', 'user')
-        aur_db_pass = config.get('database', 'password')
-        aur_db_socket = config.get('database', 'socket')
-
-        self._conn = mysql.connector.connect(host=aur_db_host,
-                                             user=aur_db_user,
-                                             passwd=aur_db_pass,
-                                             db=aur_db_name,
-                                             unix_socket=aur_db_socket,
-                                             buffered=True)
+        aur_db_backend = config.get('database', 'backend')
+
+        if aur_db_backend == 'mysql':
+            aur_db_host = config.get('database', 'host')
+            aur_db_name = config.get('database', 'name')
+            aur_db_user = config.get('database', 'user')
+            aur_db_pass = config.get('database', 'password')
+            aur_db_socket = config.get('database', 'socket')
+            self._conn = mysql.connector.connect(host=aur_db_host,
+                                                 user=aur_db_user,
+                                                 passwd=aur_db_pass,
+                                                 db=aur_db_name,
+                                                 unix_socket=aur_db_socket,
+                                                 buffered=True)
+            self._paramstyle = mysql.connector.paramstyle
+        elif aur_db_backend == 'sqlite':
+            aur_db_name = config.get('database', 'name')
+            self._conn = sqlite3.connect(aur_db_name)
+            self._paramstyle = sqlite3.paramstyle
+        else:
+            raise ValueError('unsupported database backend')
 
     def execute(self, query, params=()):
-        query = query.replace('%', '%%').replace('?', '%s')
+        if self._paramstyle == 'format':
+            query = query.replace('%', '%%').replace('?', '%s')
+        elif self._paramstyle == 'qmark':
+            pass
+        else:
+            raise ValueError('unsupported paramstyle')
 
         cur = self._conn.cursor()
         cur.execute(query, params)
-- 
2.9.2


More information about the aur-dev mailing list