diff --git a/anki/deck.py b/anki/deck.py
index dd483793b..17f9e99a8 100644
--- a/anki/deck.py
+++ b/anki/deck.py
@@ -563,9 +563,9 @@ where c.fid == f.id
c.flush()
# and delete revlog entry
last = self.db.scalar(
- "select time from revlog where cid = ? "
- "order by time desc limit 1", c.id)
- self.db.execute("delete from revlog where time = ?", last)
+ "select id from revlog where cid = ? "
+ "order by id desc limit 1", c.id)
+ self.db.execute("delete from revlog where id = ?", last)
def _markOp(self, name):
"Call via .save()"
diff --git a/anki/sched.py b/anki/sched.py
index 988ba7426..a4ac45fb5 100644
--- a/anki/sched.py
+++ b/anki/sched.py
@@ -95,26 +95,6 @@ order by due""" % self._groupLimit(),
self.deck.db.execute(
"update cards set queue = type where queue between -3 and -2")
- def etaStr(self):
- eta = self.eta()
- if not eta:
- return ""
- return fmtTimeSpan(eta)
-
- def eta(self):
- "A very rough estimate of time to review."
- (cnt, sum) = self.deck.db.first("""
-select count(), sum(taken) from (select * from revlog
-order by time desc limit 10)""")
- if not cnt:
- return 0
- avg = sum / float(cnt)
- c = self.counts()
- # Here we just assume new/lrn will require 3x the number of reviews.
- # To improve on this we'll need to make grade count down so we can get
- # a decent picture of required steps.
- return (avg*c[0]*3 + avg*c[1]*3 + avg*c[2]) / 1000.0
-
# Counts
##########################################################################
@@ -745,13 +725,13 @@ queue = 2 %s and due <= :lim order by %s limit %d""" % (
def timeToday(self):
"Time spent learning today, in seconds."
return self.deck.db.scalar(
- "select sum(taken/1000.0) from revlog where time > ?*1000",
+ "select sum(time/1000.0) from revlog where id > ?*1000",
self.dayCutoff-86400) or 0
def repsToday(self):
"Number of cards answered today."
return self.deck.db.scalar(
- "select count() from revlog where time > ?*1000",
+ "select count() from revlog where id > ?*1000",
self.dayCutoff-86400)
# Dynamic indices
diff --git a/anki/stats.py b/anki/stats.py
index 286dcd080..0ef63b67f 100644
--- a/anki/stats.py
+++ b/anki/stats.py
@@ -24,9 +24,9 @@ class CardStats(object):
self.txt = "
"
self.addLine(_("Added"), self.date(c.id/1000))
first = self.deck.db.scalar(
- "select min(time) from revlog where cid = ?", c.id)
+ "select min(id) from revlog where cid = ?", c.id)
last = self.deck.db.scalar(
- "select max(time) from revlog where cid = ?", c.id)
+ "select max(id) from revlog where cid = ?", c.id)
if first:
self.addLine(_("First Review"), self.date(first/1000))
self.addLine(_("Latest Review"), self.date(last/1000))
@@ -40,7 +40,7 @@ class CardStats(object):
self.addLine(_("Interval"), fmt(c.ivl * 86400))
self.addLine(_("Ease"), "%d%%" % (c.factor/10.0))
(cnt, total) = self.deck.db.first(
- "select count(), sum(taken)/1000 from revlog where cid = :id",
+ "select count(), sum(time)/1000 from revlog where cid = :id",
id=c.id)
if cnt:
self.addLine(_("Average Time"), self.time(total / float(cnt)))
@@ -303,7 +303,7 @@ group by day order by day""" % (self._limit(), lim),
def _done(self, num=7, chunk=1):
lims = []
if num is not None:
- lims.append("time > %d" % (
+ lims.append("id > %d" % (
(self.deck.sched.dayCutoff-(num*chunk*86400))*1000))
lim = self._revlogLimit()
if lim:
@@ -318,18 +318,18 @@ group by day order by day""" % (self._limit(), lim),
tf = 3600.0 # hours
return self.deck.db.all("""
select
-(cast((time/1000 - :cut) / 86400.0 as int))/:chunk as day,
+(cast((id/1000 - :cut) / 86400.0 as int))/:chunk as day,
sum(case when type = 0 then 1 else 0 end), -- lrn count
sum(case when type = 1 and lastIvl < 21 then 1 else 0 end), -- yng count
sum(case when type = 1 and lastIvl >= 21 then 1 else 0 end), -- mtr count
sum(case when type = 2 then 1 else 0 end), -- lapse count
sum(case when type = 3 then 1 else 0 end), -- cram count
-sum(case when type = 0 then taken/1000 else 0 end)/:tf, -- lrn time
+sum(case when type = 0 then time/1000 else 0 end)/:tf, -- lrn time
-- yng + mtr time
-sum(case when type = 1 and lastIvl < 21 then taken/1000 else 0 end)/:tf,
-sum(case when type = 1 and lastIvl >= 21 then taken/1000 else 0 end)/:tf,
-sum(case when type = 2 then taken/1000 else 0 end)/:tf, -- lapse time
-sum(case when type = 3 then taken/1000 else 0 end)/:tf -- cram time
+sum(case when type = 1 and lastIvl < 21 then time/1000 else 0 end)/:tf,
+sum(case when type = 1 and lastIvl >= 21 then time/1000 else 0 end)/:tf,
+sum(case when type = 2 then time/1000 else 0 end)/:tf, -- lapse time
+sum(case when type = 3 then time/1000 else 0 end)/:tf -- cram time
from revlog %s
group by day order by day""" % lim,
cut=self.deck.sched.dayCutoff,
@@ -341,7 +341,7 @@ group by day order by day""" % lim,
num = self._periodDays()
if num:
lims.append(
- "time > %d" %
+ "id > %d" %
((self.deck.sched.dayCutoff-(num*86400))*1000))
rlim = self._revlogLimit()
if rlim:
@@ -352,7 +352,7 @@ group by day order by day""" % lim,
lim = ""
return self.deck.db.first("""
select count(), abs(min(day)) from (select
-(cast((time/1000 - :cut) / 86400.0 as int)+1) as day
+(cast((id/1000 - :cut) / 86400.0 as int)+1) as day
from revlog %s
group by day order by day)""" % lim,
cut=self.deck.sched.dayCutoff)
@@ -515,7 +515,7 @@ order by thetype, ease""" % lim)
sd = datetime.datetime.fromtimestamp(self.deck.crt)
return self.deck.db.all("""
select
-23 - ((cast((:cut - time/1000) / 3600.0 as int)) %% 24) as hour,
+23 - ((cast((:cut - id/1000) / 3600.0 as int)) %% 24) as hour,
sum(case when ease = 1 then 0 else 1 end) /
cast(count() as float) * 100,
count()
diff --git a/anki/storage.py b/anki/storage.py
index 6a0025906..2978425ae 100644
--- a/anki/storage.py
+++ b/anki/storage.py
@@ -109,19 +109,19 @@ create table if not exists fsums (
);
create table if not exists graves (
- time integer not null,
+ id integer not null,
oid integer not null,
type integer not null
);
create table if not exists revlog (
- time integer primary key,
+ id integer primary key,
cid integer not null,
ease integer not null,
ivl integer not null,
lastIvl integer not null,
factor integer not null,
- taken integer not null,
+ time integer not null,
type integer not null
);
diff --git a/anki/sync.py b/anki/sync.py
index 905add78a..a00b550c3 100644
--- a/anki/sync.py
+++ b/anki/sync.py
@@ -178,7 +178,7 @@ class Syncer(object):
"select * from facts where mod > ?"),
# the rest
("models", "select * from models where mod > ?"),
- ("revlog", "select * from revlog where time > ?*1000"),
+ ("revlog", "select * from revlog where id > ?*1000"),
("tags", "select * from tags where mod > ?"),
("gconf", "select * from gconf where mod > ?"),
("groups", "select * from groups where mod > ?"),
diff --git a/tests/test_sched.py b/tests/test_sched.py
index 10d3d49af..0bafdef5b 100644
--- a/tests/test_sched.py
+++ b/tests/test_sched.py
@@ -114,7 +114,7 @@ def test_learn():
assert c.grade == 1
assert c.cycles == 2
# check log is accurate
- log = d.db.first("select * from revlog order by time desc")
+ log = d.db.first("select * from revlog order by id desc")
assert log[2] == 2
assert log[3] == -180
assert log[4] == -30
@@ -793,15 +793,3 @@ def test_resched():
c.load()
assert c.due == d.sched.today+1
assert c.ivl == +1
-
-def test_eta():
- d = getEmptyDeck()
- f = d.newFact()
- f['Front'] = u"one"
- d.addFact(f)
- d.reset()
- c = d.sched.getCard()
- time.sleep(0.1)
- d.sched.answerCard(c, 1)
- time.sleep(0.1)
- d.sched.answerCard(c, 1)