fix the review history growing bug properly

This commit is contained in:
Damien Elmes 2009-03-12 17:21:11 +09:00
parent ba15b6d0c3
commit b527d31499
3 changed files with 11 additions and 7 deletions

View file

@ -54,7 +54,7 @@ decksTable = Table(
Column('created', Float, nullable=False, default=time.time),
Column('modified', Float, nullable=False, default=time.time),
Column('description', UnicodeText, nullable=False, default=u""),
Column('version', Integer, nullable=False, default=29),
Column('version', Integer, nullable=False, default=30),
Column('currentModelId', Integer, ForeignKey("models.id")),
# syncing
Column('syncName', UnicodeText),
@ -2714,13 +2714,17 @@ where interval < 1""")
deck.s.statement("pragma default_cache_size= 20000")
deck.version = 28
deck.s.commit()
if deck.version < 29:
if deck.version < 30:
# remove duplicates from review history
deck.s.statement("""
delete from reviewHistory where id not in (
select min(id) from reviewHistory group by cardId, time);""")
# add a unique index to prevent them from appearing
deck.s.statement("""
create unique index ix_reviewHistory_unique
on reviewHistory (cardId, time)""")
deck.s.statement("vacuum")
deck.version = 29
deck.version = 30
deck.s.commit()
# this check we do regardless of version number since doing it on init
# seems to crash

View file

@ -18,8 +18,7 @@ from anki.db import *
reviewHistoryTable = Table(
'reviewHistory', metadata,
Column('id', Integer, primary_key=True),
Column('cardId', Integer, ForeignKey("cards.id")),
Column('cardId', Integer),
Column('time', Float, nullable=False, default=time.time),
Column('lastInterval', Float, nullable=False),
Column('nextInterval', Float, nullable=False),
@ -30,7 +29,8 @@ reviewHistoryTable = Table(
Column('reps', Float, nullable=False),
Column('thinkingTime', Float, nullable=False),
Column('yesCount', Float, nullable=False),
Column('noCount', Float, nullable=False))
Column('noCount', Float, nullable=False),
PrimaryKeyConstraint("cardId", "time"))
class CardHistoryEntry(object):
"Create after rescheduling card."

View file

@ -627,7 +627,7 @@ from reviewHistory where time > :ls""",
if not dlist:
return
self.deck.s.statements("""
insert into reviewHistory
insert or ignore into reviewHistory
(cardId, time, lastInterval, nextInterval, ease, delay,
lastFactor, nextFactor, reps, thinkingTime, yesCount, noCount)
values