mirror of
https://github.com/ankitects/anki.git
synced 2025-09-22 07:52:24 -04:00
move models, templates and fields to incremental ids
any change to them is marked as a schema change anyway, and smaller ids mean more compact css and a smaller fdata table
This commit is contained in:
parent
3cb4ade4a1
commit
c24bb95b31
2 changed files with 43 additions and 7 deletions
|
@ -31,7 +31,7 @@ class Model(object):
|
|||
self.id = id
|
||||
self.load()
|
||||
else:
|
||||
self.id = genID()
|
||||
self.id = None
|
||||
self.name = u""
|
||||
self.mod = intTime()
|
||||
self.conf = defaultConf.copy()
|
||||
|
@ -49,16 +49,23 @@ select mod, name, conf from models where id = ?""", self.id)
|
|||
|
||||
def flush(self):
|
||||
self.mod = intTime()
|
||||
self.deck.db.execute("""
|
||||
ret = self.deck.db.execute("""
|
||||
insert or replace into models values (?, ?, ?, ?)""",
|
||||
self.id, self.mod, self.name,
|
||||
simplejson.dumps(self.conf))
|
||||
self.id = ret.lastrowid
|
||||
[f._flush() for f in self.fields]
|
||||
[t._flush() for t in self.templates]
|
||||
|
||||
def updateCache(self):
|
||||
self.deck.updateCache([self.id], "model")
|
||||
|
||||
def _getID(self):
|
||||
if not self.id:
|
||||
# flush so we can get our DB id
|
||||
self.flush()
|
||||
return self.id
|
||||
|
||||
# Fields
|
||||
##################################################
|
||||
|
||||
|
@ -69,7 +76,7 @@ insert or replace into models values (?, ?, ?, ?)""",
|
|||
|
||||
def addField(self, field):
|
||||
self.deck.modSchema()
|
||||
field.mid = self.id
|
||||
field.mid = self._getID()
|
||||
field.ord = len(self.fields)
|
||||
self.fields.append(field)
|
||||
|
||||
|
@ -87,7 +94,7 @@ insert or replace into models values (?, ?, ?, ?)""",
|
|||
|
||||
def addTemplate(self, template):
|
||||
self.deck.modSchema()
|
||||
template.mid = self.id
|
||||
template.mid = self._getID()
|
||||
template.ord = len(self.templates)
|
||||
self.templates.append(template)
|
||||
|
||||
|
@ -129,7 +136,7 @@ class Field(object):
|
|||
if data:
|
||||
self.initFromData(data)
|
||||
else:
|
||||
self.id = genID()
|
||||
self.id = None
|
||||
self.numeric = 0
|
||||
self.conf = defaultFieldConf.copy()
|
||||
|
||||
|
@ -143,11 +150,12 @@ class Field(object):
|
|||
self.conf = simplejson.loads(self.conf)
|
||||
|
||||
def _flush(self):
|
||||
self.deck.db.execute("""
|
||||
ret = self.deck.db.execute("""
|
||||
insert or replace into fields values (?, ?, ?, ?, ?, ?)""",
|
||||
self.id, self.mid, self.ord,
|
||||
self.name, self.numeric,
|
||||
simplejson.dumps(self.conf))
|
||||
self.id = ret.lastrowid
|
||||
|
||||
# Template object
|
||||
##########################################################################
|
||||
|
@ -183,8 +191,9 @@ class Template(object):
|
|||
self.conf = simplejson.loads(self.conf)
|
||||
|
||||
def _flush(self):
|
||||
self.deck.db.execute("""
|
||||
ret = self.deck.db.execute("""
|
||||
insert or replace into templates values (?, ?, ?, ?, ?, ?, ?, ?)""",
|
||||
self.id, self.mid, self.ord, self.name,
|
||||
self.active, self.qfmt, self.afmt,
|
||||
simplejson.dumps(self.conf))
|
||||
self.id = ret.lastrowid
|
||||
|
|
|
@ -412,9 +412,36 @@ allowEmptyAnswer, typeAnswer from cardModels"""):
|
|||
# clean up
|
||||
db.execute("drop table cardModels")
|
||||
|
||||
def _rewriteIds(deck):
|
||||
# rewrite model/template/field ids
|
||||
models = deck.allModels()
|
||||
deck.db.execute("delete from models")
|
||||
deck.db.execute("delete from templates")
|
||||
deck.db.execute("delete from fields")
|
||||
for c, m in enumerate(models):
|
||||
old = m.id
|
||||
m.id = c+1
|
||||
for t in m.templates:
|
||||
t.mid = m.id
|
||||
oldT = t.id
|
||||
t.id = None
|
||||
t._flush()
|
||||
deck.db.execute(
|
||||
"update cards set tid = ? where tid = ?", t.mid, oldT)
|
||||
for f in m.fields:
|
||||
f.mid = m.id
|
||||
oldF = f.id
|
||||
f.id = None
|
||||
f._flush()
|
||||
deck.db.execute(
|
||||
"update fdata set fmid = ? where fmid = ?", f.id, oldF)
|
||||
m.flush()
|
||||
deck.db.execute("update facts set mid = ? where mid = ?", m.id, old)
|
||||
|
||||
def _postSchemaUpgrade(deck):
|
||||
"Handle the rest of the upgrade to 2.0."
|
||||
import anki.deck
|
||||
_rewriteIds(deck)
|
||||
# remove old views
|
||||
for v in ("failedCards", "revCardsOld", "revCardsNew",
|
||||
"revCardsDue", "revCardsRandom", "acqCardsRandom",
|
||||
|
|
Loading…
Reference in a new issue