mirror of
https://github.com/ankitects/anki.git
synced 2025-09-20 06:52:21 -04:00
revert undo log to temporary table, fix slowdown on big undo log
This commit is contained in:
parent
73767124d8
commit
e3feff6ca6
1 changed files with 12 additions and 3 deletions
15
anki/deck.py
15
anki/deck.py
|
@ -49,7 +49,7 @@ decksTable = Table(
|
||||||
Column('created', Float, nullable=False, default=time.time),
|
Column('created', Float, nullable=False, default=time.time),
|
||||||
Column('modified', Float, nullable=False, default=time.time),
|
Column('modified', Float, nullable=False, default=time.time),
|
||||||
Column('description', UnicodeText, nullable=False, default=u""),
|
Column('description', UnicodeText, nullable=False, default=u""),
|
||||||
Column('version', Integer, nullable=False, default=18),
|
Column('version', Integer, nullable=False, default=19),
|
||||||
Column('currentModelId', Integer, ForeignKey("models.id")),
|
Column('currentModelId', Integer, ForeignKey("models.id")),
|
||||||
# syncing
|
# syncing
|
||||||
Column('syncName', UnicodeText),
|
Column('syncName', UnicodeText),
|
||||||
|
@ -1611,6 +1611,8 @@ select id from fields where factId not in (select id from facts)""")
|
||||||
self.undoStack = []
|
self.undoStack = []
|
||||||
self.redoStack = []
|
self.redoStack = []
|
||||||
self.undoEnabled = True
|
self.undoEnabled = True
|
||||||
|
self.s.statement(
|
||||||
|
"create temporary table undoLog (seq integer primary key, sql text)")
|
||||||
tables = self.s.column0(
|
tables = self.s.column0(
|
||||||
"select name from sqlite_master where type = 'table'")
|
"select name from sqlite_master where type = 'table'")
|
||||||
for table in tables:
|
for table in tables:
|
||||||
|
@ -1699,7 +1701,7 @@ insert into undoLog values (null, 'insert into %(t)s (rowid""" % {'t': table}
|
||||||
self.redoStack = []
|
self.redoStack = []
|
||||||
|
|
||||||
def _latestUndoRow(self):
|
def _latestUndoRow(self):
|
||||||
return self.s.scalar("select coalesce(max(rowid), 0) from undoLog")
|
return self.s.scalar("select max(rowid) from undoLog")
|
||||||
|
|
||||||
def _undoredo(self, src, dst):
|
def _undoredo(self, src, dst):
|
||||||
self.s.flush()
|
self.s.flush()
|
||||||
|
@ -1716,7 +1718,7 @@ seq > :s and seq <= :e order by seq desc""", s=start, e=end)
|
||||||
newstart = self._latestUndoRow()
|
newstart = self._latestUndoRow()
|
||||||
for s in sql:
|
for s in sql:
|
||||||
#print "--", s.encode("utf-8")[0:30]
|
#print "--", s.encode("utf-8")[0:30]
|
||||||
self.s.statement(s)
|
self.s.execute(s)
|
||||||
newend = self._latestUndoRow()
|
newend = self._latestUndoRow()
|
||||||
dst.append([u[0], newstart, newend])
|
dst.append([u[0], newstart, newend])
|
||||||
|
|
||||||
|
@ -2169,6 +2171,13 @@ where interval < 1""")
|
||||||
deck.s.commit()
|
deck.s.commit()
|
||||||
DeckStorage._addIndices(deck)
|
DeckStorage._addIndices(deck)
|
||||||
deck.s.statement("analyze")
|
deck.s.statement("analyze")
|
||||||
|
if deck.version < 19:
|
||||||
|
# permanent undo log causes various problems, revert to temp
|
||||||
|
deck.s.statement("drop table undoLog")
|
||||||
|
deck.version = 19
|
||||||
|
deck.s.commit()
|
||||||
|
deck.s.statement("vacuum")
|
||||||
|
deck.s.statement("analyze")
|
||||||
return deck
|
return deck
|
||||||
_upgradeDeck = staticmethod(_upgradeDeck)
|
_upgradeDeck = staticmethod(_upgradeDeck)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue