mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Use the primary key for a small performance improvement when updating existing preference values
This commit is contained in:
parent
6df6682870
commit
7f6d06709e
@ -111,12 +111,12 @@ class DBPrefs(dict): # {{{
|
||||
if not self.disable_setting:
|
||||
raw = self.to_raw(val)
|
||||
with self.db.conn:
|
||||
dbraw = self.db.execute('SELECT val FROM preferences WHERE key=?', (key,)).fetchone()
|
||||
if dbraw != (raw,):
|
||||
dbraw = self.db.execute('SELECT id,val FROM preferences WHERE key=?', (key,)).fetchone()
|
||||
if dbraw is None or dbraw[1] != raw:
|
||||
if dbraw is None:
|
||||
self.db.execute('INSERT INTO preferences (key,val) VALUES (?,?)', (key, raw))
|
||||
else:
|
||||
self.db.execute('UPDATE preferences SET val=? WHERE key=?', (raw, key))
|
||||
self.db.execute('UPDATE preferences SET val=? WHERE id=?', (raw, dbraw[0]))
|
||||
dict.__setitem__(self, key, val)
|
||||
|
||||
def set(self, key, val):
|
||||
|
@ -695,18 +695,20 @@ class WritingTest(BaseTest):
|
||||
def test_preferences(self): # {{{
|
||||
' Test getting and setting of preferences, especially with mutable objects '
|
||||
cache = self.init_cache()
|
||||
changes = []
|
||||
cache.backend.conn.setupdatehook(lambda typ, dbname, tblname, rowid: changes.append(rowid))
|
||||
prefs = cache.backend.prefs
|
||||
prefs['test mutable'] = [1, 2, 3]
|
||||
self.assertEqual(len(changes), 1)
|
||||
a = prefs['test mutable']
|
||||
a.append(4)
|
||||
self.assertIn(4, prefs['test mutable'])
|
||||
prefs['test mutable'] = a
|
||||
self.assertEqual(len(changes), 2)
|
||||
prefs.load_from_db()
|
||||
self.assertIn(4, prefs['test mutable'])
|
||||
changes = []
|
||||
cache.backend.conn.setupdatehook(lambda typ, dbname, tblname, rowid: changes.append(rowid))
|
||||
prefs['test mutable'] = {k:k for k in range(4)}
|
||||
self.assertEqual(len(changes), 1)
|
||||
prefs['test mutable'] = {k:k for k in range(4)}
|
||||
self.assertEqual(len(changes), 1, 'The database was written to despite there being no change in value')
|
||||
prefs['test mutable'] = {k:k for k in range(10)}
|
||||
self.assertEqual(len(changes), 3)
|
||||
prefs['test mutable'] = {k:k for k in reversed(range(10))}
|
||||
self.assertEqual(len(changes), 3, 'The database was written to despite there being no change in value')
|
||||
# }}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user