fix reviewHistory table by rebuilding it

This commit is contained in:
Damien Elmes 2009-03-15 07:27:44 +09:00
parent a111537c26
commit 34be5b47a7
2 changed files with 33 additions and 7 deletions

View file

@ -47,7 +47,7 @@ REV_CARDS_NEW_FIRST = 1
REV_CARDS_DUE_FIRST = 2 REV_CARDS_DUE_FIRST = 2
REV_CARDS_RANDOM = 3 REV_CARDS_RANDOM = 3
DECK_VERSION = 30 DECK_VERSION = 31
# parts of the code assume we only have one deck # parts of the code assume we only have one deck
decksTable = Table( decksTable = Table(
@ -2734,13 +2734,39 @@ where interval < 1""")
deck.s.statement(""" deck.s.statement("""
delete from reviewHistory where id not in ( delete from reviewHistory where id not in (
select min(id) from reviewHistory group by cardId, time);""") 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 = 30 deck.version = 30
deck.s.commit() deck.s.commit()
if deck.version < 31:
# recreate review history table
deck.s.statement("drop index if exists ix_reviewHistory_unique")
schema = """
CREATE TABLE %s (
cardId INTEGER NOT NULL,
time NUMERIC(10, 2) NOT NULL,
lastInterval NUMERIC(10, 2) NOT NULL,
nextInterval NUMERIC(10, 2) NOT NULL,
ease INTEGER NOT NULL,
delay NUMERIC(10, 2) NOT NULL,
lastFactor NUMERIC(10, 2) NOT NULL,
nextFactor NUMERIC(10, 2) NOT NULL,
reps NUMERIC(10, 2) NOT NULL,
thinkingTime NUMERIC(10, 2) NOT NULL,
yesCount NUMERIC(10, 2) NOT NULL,
noCount NUMERIC(10, 2) NOT NULL,
PRIMARY KEY (cardId, time))"""
deck.s.statement(schema % "revtmp")
deck.s.statement("""
insert into revtmp
select cardId, time, lastInterval, nextInterval, ease, delay, lastFactor,
nextFactor, reps, thinkingTime, yesCount, noCount from reviewHistory""")
deck.s.statement("drop table reviewHistory")
metadata.create_all(deck.engine)
deck.s.statement(
"insert into reviewHistory select * from revtmp")
deck.s.statement("drop table revtmp")
deck.version = 31
deck.s.commit()
deck.s.statement("vacuum")
# this check we do regardless of version number since doing it on init # this check we do regardless of version number since doing it on init
# seems to crash # seems to crash
if (deck.s.scalar("pragma page_size") == 1024 or if (deck.s.scalar("pragma page_size") == 1024 or

View file

@ -18,7 +18,7 @@ from anki.db import *
reviewHistoryTable = Table( reviewHistoryTable = Table(
'reviewHistory', metadata, 'reviewHistory', metadata,
Column('cardId', Integer), Column('cardId', Integer, nullable=False),
Column('time', Float, nullable=False, default=time.time), Column('time', Float, nullable=False, default=time.time),
Column('lastInterval', Float, nullable=False), Column('lastInterval', Float, nullable=False),
Column('nextInterval', Float, nullable=False), Column('nextInterval', Float, nullable=False),