use the id to sort instead of requiring ordinal

This means that the default learn queue sort order doesn't need another column
in the index, but it also means that generated cards will have a higher id,
and would appear later even if they have a lower ordinal. This is probably an
infrequent issue, and a plugin which rewrites ids would probably be an
adequate solution.
This commit is contained in:
Damien Elmes 2011-03-11 04:14:19 +09:00
parent ad68500494
commit 3f92254e1a
2 changed files with 10 additions and 10 deletions

View file

@ -391,7 +391,7 @@ due > :now and due < :now""", now=time.time())
ncards = 0 ncards = 0
isRandom = self.qconf['newCardOrder'] == NEW_CARDS_RANDOM isRandom = self.qconf['newCardOrder'] == NEW_CARDS_RANDOM
if isRandom: if isRandom:
due = random.randrange(0, 10000) due = random.randrange(0, 1000000)
# flush the fact so we get its id # flush the fact so we get its id
fact.flush() fact.flush()
for template in cms: for template in cms:
@ -1464,8 +1464,6 @@ seq > :s and seq <= :e order by seq desc""", s=start, e=end)
def updateDynamicIndices(self): def updateDynamicIndices(self):
# determine required columns # determine required columns
required = [] required = []
if self.qconf['newTodayOrder'] == NEW_TODAY_ORD:
required.append("ord")
if self.qconf['revCardOrder'] in (REV_CARDS_OLD_FIRST, REV_CARDS_NEW_FIRST): if self.qconf['revCardOrder'] in (REV_CARDS_OLD_FIRST, REV_CARDS_NEW_FIRST):
required.append("interval") required.append("interval")
cols = ["queue", "due", "gid"] + required cols = ["queue", "due", "gid"] + required

View file

@ -98,19 +98,21 @@ class Scheduler(object):
self.newCount = 0 self.newCount = 0
else: else:
self.newQueue = self.db.all(""" self.newQueue = self.db.all("""
select id %s from cards where select id, due from cards where
queue = 2 %s order by due limit %d""" % (self.newOrder(), self.groupLimit('new'), queue = 2 %s order by due, id limit %d""" % (self.groupLimit('new'),
lim)) lim))
self.newQueue.sort(key=itemgetter(1), reverse=True) self.newQueue.reverse()
self.newCount = len(self.newQueue) self.newCount = len(self.newQueue)
self.updateNewCardRatio() self.updateNewCardRatio()
def getNewCard(self): def getNewCard(self):
if self.newQueue: if self.newQueue:
return self.newQueue.pop()[0] (id, due) = self.newQueue.pop()
# move any siblings to the end?
def newOrder(self): if self.deck.qconf['newTodayOrder'] == NEW_TODAY_ORD:
return (",ord", "")[self.deck.qconf['newTodayOrder']] while self.newQueue and self.newQueue[-1][1] == due:
self.newQueue.insert(0, self.newQueue.pop())
return id
def updateNewCardRatio(self): def updateNewCardRatio(self):
if self.deck.qconf['newCardSpacing'] == NEW_CARDS_DISTRIBUTE: if self.deck.qconf['newCardSpacing'] == NEW_CARDS_DISTRIBUTE: