mirror of
https://github.com/ankitects/anki.git
synced 2025-09-23 00:12:25 -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.id = id
|
||||||
self.load()
|
self.load()
|
||||||
else:
|
else:
|
||||||
self.id = genID()
|
self.id = None
|
||||||
self.name = u""
|
self.name = u""
|
||||||
self.mod = intTime()
|
self.mod = intTime()
|
||||||
self.conf = defaultConf.copy()
|
self.conf = defaultConf.copy()
|
||||||
|
@ -49,16 +49,23 @@ select mod, name, conf from models where id = ?""", self.id)
|
||||||
|
|
||||||
def flush(self):
|
def flush(self):
|
||||||
self.mod = intTime()
|
self.mod = intTime()
|
||||||
self.deck.db.execute("""
|
ret = self.deck.db.execute("""
|
||||||
insert or replace into models values (?, ?, ?, ?)""",
|
insert or replace into models values (?, ?, ?, ?)""",
|
||||||
self.id, self.mod, self.name,
|
self.id, self.mod, self.name,
|
||||||
simplejson.dumps(self.conf))
|
simplejson.dumps(self.conf))
|
||||||
|
self.id = ret.lastrowid
|
||||||
[f._flush() for f in self.fields]
|
[f._flush() for f in self.fields]
|
||||||
[t._flush() for t in self.templates]
|
[t._flush() for t in self.templates]
|
||||||
|
|
||||||
def updateCache(self):
|
def updateCache(self):
|
||||||
self.deck.updateCache([self.id], "model")
|
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
|
# Fields
|
||||||
##################################################
|
##################################################
|
||||||
|
|
||||||
|
@ -69,7 +76,7 @@ insert or replace into models values (?, ?, ?, ?)""",
|
||||||
|
|
||||||
def addField(self, field):
|
def addField(self, field):
|
||||||
self.deck.modSchema()
|
self.deck.modSchema()
|
||||||
field.mid = self.id
|
field.mid = self._getID()
|
||||||
field.ord = len(self.fields)
|
field.ord = len(self.fields)
|
||||||
self.fields.append(field)
|
self.fields.append(field)
|
||||||
|
|
||||||
|
@ -87,7 +94,7 @@ insert or replace into models values (?, ?, ?, ?)""",
|
||||||
|
|
||||||
def addTemplate(self, template):
|
def addTemplate(self, template):
|
||||||
self.deck.modSchema()
|
self.deck.modSchema()
|
||||||
template.mid = self.id
|
template.mid = self._getID()
|
||||||
template.ord = len(self.templates)
|
template.ord = len(self.templates)
|
||||||
self.templates.append(template)
|
self.templates.append(template)
|
||||||
|
|
||||||
|
@ -129,7 +136,7 @@ class Field(object):
|
||||||
if data:
|
if data:
|
||||||
self.initFromData(data)
|
self.initFromData(data)
|
||||||
else:
|
else:
|
||||||
self.id = genID()
|
self.id = None
|
||||||
self.numeric = 0
|
self.numeric = 0
|
||||||
self.conf = defaultFieldConf.copy()
|
self.conf = defaultFieldConf.copy()
|
||||||
|
|
||||||
|
@ -143,11 +150,12 @@ class Field(object):
|
||||||
self.conf = simplejson.loads(self.conf)
|
self.conf = simplejson.loads(self.conf)
|
||||||
|
|
||||||
def _flush(self):
|
def _flush(self):
|
||||||
self.deck.db.execute("""
|
ret = self.deck.db.execute("""
|
||||||
insert or replace into fields values (?, ?, ?, ?, ?, ?)""",
|
insert or replace into fields values (?, ?, ?, ?, ?, ?)""",
|
||||||
self.id, self.mid, self.ord,
|
self.id, self.mid, self.ord,
|
||||||
self.name, self.numeric,
|
self.name, self.numeric,
|
||||||
simplejson.dumps(self.conf))
|
simplejson.dumps(self.conf))
|
||||||
|
self.id = ret.lastrowid
|
||||||
|
|
||||||
# Template object
|
# Template object
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
@ -183,8 +191,9 @@ class Template(object):
|
||||||
self.conf = simplejson.loads(self.conf)
|
self.conf = simplejson.loads(self.conf)
|
||||||
|
|
||||||
def _flush(self):
|
def _flush(self):
|
||||||
self.deck.db.execute("""
|
ret = self.deck.db.execute("""
|
||||||
insert or replace into templates values (?, ?, ?, ?, ?, ?, ?, ?)""",
|
insert or replace into templates values (?, ?, ?, ?, ?, ?, ?, ?)""",
|
||||||
self.id, self.mid, self.ord, self.name,
|
self.id, self.mid, self.ord, self.name,
|
||||||
self.active, self.qfmt, self.afmt,
|
self.active, self.qfmt, self.afmt,
|
||||||
simplejson.dumps(self.conf))
|
simplejson.dumps(self.conf))
|
||||||
|
self.id = ret.lastrowid
|
||||||
|
|
|
@ -412,9 +412,36 @@ allowEmptyAnswer, typeAnswer from cardModels"""):
|
||||||
# clean up
|
# clean up
|
||||||
db.execute("drop table cardModels")
|
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):
|
def _postSchemaUpgrade(deck):
|
||||||
"Handle the rest of the upgrade to 2.0."
|
"Handle the rest of the upgrade to 2.0."
|
||||||
import anki.deck
|
import anki.deck
|
||||||
|
_rewriteIds(deck)
|
||||||
# remove old views
|
# remove old views
|
||||||
for v in ("failedCards", "revCardsOld", "revCardsNew",
|
for v in ("failedCards", "revCardsOld", "revCardsNew",
|
||||||
"revCardsDue", "revCardsRandom", "acqCardsRandom",
|
"revCardsDue", "revCardsRandom", "acqCardsRandom",
|
||||||
|
|
Loading…
Reference in a new issue