mirror of
https://github.com/aljazceru/plugins.git
synced 2025-12-20 06:34:20 +01:00
backup: Rewrite erroneously expanded SQL stmts on-the-fly
Seems to have little to no performance impact.
This commit is contained in:
@@ -7,6 +7,7 @@ from urllib.parse import urlparse
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import struct
|
import struct
|
||||||
import sys
|
import sys
|
||||||
import sqlite3
|
import sqlite3
|
||||||
@@ -94,11 +95,24 @@ class Backend(object):
|
|||||||
f.write(snapshot)
|
f.write(snapshot)
|
||||||
self.db = self._db_open(dest)
|
self.db = self._db_open(dest)
|
||||||
|
|
||||||
|
def _rewrite_stmt(self, stmt: bytes) -> bytes:
|
||||||
|
"""We had a stmt expansion bug in c-lightning, this replicates the fix.
|
||||||
|
|
||||||
|
We were expanding statements incorrectly, missing some
|
||||||
|
whitespace between a param and the `WHERE` keyword. This
|
||||||
|
re-inserts the space.
|
||||||
|
|
||||||
|
"""
|
||||||
|
stmt = re.sub(r'reserved_til=([0-9]+)WHERE', r'reserved_til=\1 WHERE', stmt)
|
||||||
|
stmt = re.sub(r'peer_id=([0-9]+)WHERE channels.id=', r'peer_id=\1 WHERE channels.id=', stmt)
|
||||||
|
return stmt
|
||||||
|
|
||||||
def _restore_transaction(self, tx: Iterator[bytes]):
|
def _restore_transaction(self, tx: Iterator[bytes]):
|
||||||
assert(self.db)
|
assert(self.db)
|
||||||
cur = self.db.cursor()
|
cur = self.db.cursor()
|
||||||
for q in tx:
|
for q in tx:
|
||||||
cur.execute(q.decode('UTF-8'))
|
q = self._rewrite_stmt(q.decode('UTF-8'))
|
||||||
|
cur.execute(q)
|
||||||
self.db.commit()
|
self.db.commit()
|
||||||
|
|
||||||
def restore(self, dest: str, remove_existing: bool = False):
|
def restore(self, dest: str, remove_existing: bool = False):
|
||||||
|
|||||||
Reference in New Issue
Block a user