]> git.phdru.name Git - xsetbg.git/blobdiff - reload_db.py
Fix(DB): Fix column encoding
[xsetbg.git] / reload_db.py
index 97012a8c0d3cfa3dcd733d3f56743b2eac08d714..c12607a2f3fa00aab5a99748ecdf8ff3968c87d7 100755 (executable)
@@ -1,34 +1,16 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 """Reload a dump into DB
 
 This file is a part of XSetBg.
 
 """
 
-__author__ = "Oleg Broytman <phd@phdru.name>"
-__copyright__ = "Copyright (C) 2007-2015 PhiloSoft Design"
-__license__ = "GNU GPL"
-
 import sys
-from sqlobject import SQLObjectNotFound, sqlhub
+from sqlobject import SQLObjectNotFound
 from sqlobject.sqlbuilder import Insert
 from xsetbg_conf import xsetbg_conf
-from xsetbg_db import SqliteSequence, XSetBg, xsetbg_db
-
-fs_encoding = xsetbg_conf.get("images", "fs_encoding")
-dump_file = open(sys.argv[1], 'rU')
+from xsetbg_db import recreate_db, SQLiteMassInsert
 
-if xsetbg_db:
-    try:
-        seq = SqliteSequence.byName(XSetBg.sqlmeta.table)
-    except SQLObjectNotFound:
-        SqliteSequence(name=XSetBg.sqlmeta.table, seq=0)
-    else:
-        seq.seq = 0  # Reset autoincrement counter
-    xsetbg_db.clearTable()
-else:
-    xsetbg_db = XSetBg
-    xsetbg_db.createTable()
 
 def convert_str(s):
     if s == "None":
@@ -36,29 +18,42 @@ def convert_str(s):
     else:
         return int(float(s))
 
-connection = xsetbg_db._connection
-
-connection.query("PRAGMA synchronous=OFF")
-connection.query("PRAGMA count_changes=OFF")
-connection.query("PRAGMA journal_mode=MEMORY")
-connection.query("PRAGMA temp_store=MEMORY")
 
-txn = connection.transaction()
-sqlhub.processConnection = txn
-
-for line in dump_file:
-    id, timestamp, filename = line.strip().split(None, 2)
-    id = convert_str(id)
-    timestamp = convert_str(timestamp)
-    if fs_encoding != 'utf-8':
-        filename = filename.decode(fs_encoding).encode('utf-8')
-    values = {'last_shown': timestamp, 'full_name': filename}
-    if id:
-        values['id'] = id
-    query = txn.sqlrepr(Insert(XSetBg.sqlmeta.table, values=values))
-    txn.query(query)
-
-txn.commit()
-sqlhub.processConnection = connection
+dump_file = open(sys.argv[1], 'r',
+                 encoding=xsetbg_conf.get("images", "fs_encoding"))
+xsetbg_db = recreate_db()
+count_new = count_old = count_updated = 0
+
+with SQLiteMassInsert() as txn:
+    for line in dump_file:
+        id, timestamp, filename = line.strip().split(None, 2)
+        id = convert_str(id)
+        timestamp = convert_str(timestamp)
+        try:
+            if id:
+                row = xsetbg_db.get(id)
+            else:
+                row = xsetbg_db.byFull_name(filename)
+        except SQLObjectNotFound:
+            values = {'last_shown': timestamp,
+                      'full_name': filename.encode('utf-8')}
+            if id:
+                values['id'] = id
+            query = txn.sqlrepr(Insert(xsetbg_db.sqlmeta.table, values=values))
+            txn.query(query)
+            count_new += 1
+        else:
+            assert id is None or row.id == id
+            if row.last_shown is not None:
+                assert row.last_shown == timestamp
+            if row.full_name == filename:
+                count_old += 1
+            else:
+                row.full_name = filename
+                count_updated += 1
 
 dump_file.close()
+
+print("New images:", count_new)
+print("Existing images:", count_old)
+print("Updated images:", count_updated)