|
|
@@ -331,7 +331,17 @@ class QWARC: |
|
|
|
|
|
|
|
self._db = sqlite3.connect(self._dbPath, timeout = 1) |
|
|
|
self._db.isolation_level = None # Transactions are handled manually below. |
|
|
|
self._db.execute('PRAGMA synchronous = OFF') |
|
|
|
|
|
|
|
# Setting the synchronous PRAGMA is not possible if the DB is currently locked by another process but also can't be done inside a transaction... So just retry until it succeeds. |
|
|
|
while True: |
|
|
|
try: |
|
|
|
self._db.execute('PRAGMA synchronous = OFF') |
|
|
|
except sqlite3.OperationalError as e: |
|
|
|
if str(e) != 'database is locked': |
|
|
|
raise |
|
|
|
await asyncio.sleep(1) |
|
|
|
else: |
|
|
|
break |
|
|
|
|
|
|
|
async with self.exclusive_db_lock() as cursor: |
|
|
|
cursor.execute('SELECT name FROM sqlite_master WHERE type = "table" AND name = "items"') |
|
|
|