refactor facts table

- spaceUntil->cache
- remove obsolete lastCardId
This commit is contained in:
Damien Elmes 2011-02-22 05:33:12 +09:00
parent d9c0fba171
commit edd8f79ab9
3 changed files with 16 additions and 10 deletions

View file

@ -776,7 +776,6 @@ limit %s""" % (self.cramOrder, self.queueLimit)))
# only update if card was not new
card.lastDue = card.due
card.due = self.nextDue(card, ease, oldState)
card.spaceUntil = 0
if not self.finishScheduler:
# don't update factor in custom schedulers
self.updateFactor(card, ease)
@ -1895,7 +1894,7 @@ order by fields.factId""" % ids2str([x[2] for x in ids])),
for a in all:
r.append({'id':a[0], 'v':stripHTMLMedia(a[1])})
self.db.statements(
"update facts set spaceUntil=:v where id=:id", r)
"update facts set cache=:v where id=:id", r)
def rebuildCardOrdinals(self, ids):
"Update all card models in IDS. Caller must update model modtime."
@ -2667,7 +2666,7 @@ select id from cards where answer like :_ff_%d escape '\\'""" % c
token = token.replace("*", "%")
args["_ff_%d" % c] = "%"+token+"%"
fquery += """
select id from facts where spaceUntil like :_ff_%d escape '\\'""" % c
select id from facts where cache like :_ff_%d escape '\\'""" % c
return (tquery, fquery, qquery, fidquery, cmquery, sfquery,
qaquery, showdistinct, filters, args)

View file

@ -42,7 +42,9 @@ mapper(Field, fieldsTable, properties={
# Facts: a set of fields and a model
##########################################################################
# mapped in cards.py
# Cache: a HTML-stripped amalgam of the field contents, so we can perform
# searches of marked up text in a reasonable time.
factsTable = Table(
'facts', metadata,
@ -51,11 +53,7 @@ factsTable = Table(
Column('created', Float, nullable=False, default=time.time),
Column('modified', Float, nullable=False, default=time.time),
Column('tags', UnicodeText, nullable=False, default=u""),
# spaceUntil is reused as a html-stripped cache of the fields
Column('spaceUntil', UnicodeText, nullable=False, default=u""),
# obsolete
Column('lastCardId', Integer, ForeignKey(
"cards.id", use_alter=True, name="lastCardIdfk")))
Column('cache', UnicodeText, nullable=False, default=u""))
class Fact(object):
"A single fact. Fields exposed as dict interface."
@ -143,7 +141,7 @@ class Fact(object):
ankiqt.setModWarningShown = True
deck = ankiqt.mw.deck
assert deck
self.spaceUntil = stripHTMLMedia(u" ".join(
self.cache = stripHTMLMedia(u" ".join(
self.values()))
for card in self.cards:
card.rebuildQA(deck)

View file

@ -49,6 +49,15 @@ due, factor, reps, successive, noCount from cards2""")
insert or ignore into cardTags select cardId, tagId, src from cardTags2""")
s.execute("drop table tags2")
s.execute("drop table cardTags2")
# migrate facts
moveTable(s, "facts")
import facts
metadata.create_all(engine, tables=[facts.factsTable])
# move data across
s.execute("""
insert or ignore into facts select id, modelId, created, modified, tags,
spaceUntil from facts2""")
s.execute("drop table facts2")
return ver
def updateIndices(deck):