From 55df77e0d1298994855810c3d2bd44ad84d7b433 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Mon, 1 Dec 2008 01:00:01 +0900 Subject: [PATCH] handle unique better --- anki/deck.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/anki/deck.py b/anki/deck.py index 57818834d..4b730ad7a 100644 --- a/anki/deck.py +++ b/anki/deck.py @@ -1558,6 +1558,7 @@ select id from fields where factId not in (select id from facts)""") ########################################################################## def initUndo(self): + # note this code ignores 'unique', as it's an sqlite reserved word self.undoStack = [] self.redoStack = [] self.undoEnabled = True @@ -1569,9 +1570,7 @@ select id from fields where factId not in (select id from facts)""") if table in ("undoLog", "sqlite_stat1"): continue columns = [r[1] for r in - self.s.all("pragma table_info(%s)" % table) - # this will get renamed post 1.0 - if r[1] != "unique"] + self.s.all("pragma table_info(%s)" % table)] # insert self.s.statement(""" create temp trigger _undo_%(t)s_it @@ -1585,6 +1584,8 @@ after update on %(t)s begin insert into undoLog values (null, 'update %(t)s """ % {'t': table} sep = "set " for c in columns: + if c == "unique": + continue sql += "%(s)s%(c)s=' || quote(old.%(c)s) || '" % { 's': sep, 'c': c} sep = "," @@ -1596,9 +1597,12 @@ create temp trigger _undo_%(t)s_dt before delete on %(t)s begin insert into undoLog values (null, 'insert into %(t)s (rowid""" % {'t': table} for c in columns: - sql += ",%s" % c + sql += ",\"%s\"" % c sql += ") values (' || old.rowid ||'" for c in columns: + if c == "unique": + sql += ",1" + continue sql += ",' || quote(old.%s) ||'" % c sql += ")'); end" self.s.statement(sql)