mirror of
https://github.com/ankitects/anki.git
synced 2025-09-23 16:26:40 -04:00
handle unique better
This commit is contained in:
parent
a83b41b939
commit
55df77e0d1
1 changed files with 8 additions and 4 deletions
12
anki/deck.py
12
anki/deck.py
|
@ -1558,6 +1558,7 @@ select id from fields where factId not in (select id from facts)""")
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
def initUndo(self):
|
def initUndo(self):
|
||||||
|
# note this code ignores 'unique', as it's an sqlite reserved word
|
||||||
self.undoStack = []
|
self.undoStack = []
|
||||||
self.redoStack = []
|
self.redoStack = []
|
||||||
self.undoEnabled = True
|
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"):
|
if table in ("undoLog", "sqlite_stat1"):
|
||||||
continue
|
continue
|
||||||
columns = [r[1] for r in
|
columns = [r[1] for r in
|
||||||
self.s.all("pragma table_info(%s)" % table)
|
self.s.all("pragma table_info(%s)" % table)]
|
||||||
# this will get renamed post 1.0
|
|
||||||
if r[1] != "unique"]
|
|
||||||
# insert
|
# insert
|
||||||
self.s.statement("""
|
self.s.statement("""
|
||||||
create temp trigger _undo_%(t)s_it
|
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}
|
insert into undoLog values (null, 'update %(t)s """ % {'t': table}
|
||||||
sep = "set "
|
sep = "set "
|
||||||
for c in columns:
|
for c in columns:
|
||||||
|
if c == "unique":
|
||||||
|
continue
|
||||||
sql += "%(s)s%(c)s=' || quote(old.%(c)s) || '" % {
|
sql += "%(s)s%(c)s=' || quote(old.%(c)s) || '" % {
|
||||||
's': sep, 'c': c}
|
's': sep, 'c': c}
|
||||||
sep = ","
|
sep = ","
|
||||||
|
@ -1596,9 +1597,12 @@ create temp trigger _undo_%(t)s_dt
|
||||||
before delete on %(t)s begin
|
before delete on %(t)s begin
|
||||||
insert into undoLog values (null, 'insert into %(t)s (rowid""" % {'t': table}
|
insert into undoLog values (null, 'insert into %(t)s (rowid""" % {'t': table}
|
||||||
for c in columns:
|
for c in columns:
|
||||||
sql += ",%s" % c
|
sql += ",\"%s\"" % c
|
||||||
sql += ") values (' || old.rowid ||'"
|
sql += ") values (' || old.rowid ||'"
|
||||||
for c in columns:
|
for c in columns:
|
||||||
|
if c == "unique":
|
||||||
|
sql += ",1"
|
||||||
|
continue
|
||||||
sql += ",' || quote(old.%s) ||'" % c
|
sql += ",' || quote(old.%s) ||'" % c
|
||||||
sql += ")'); end"
|
sql += ")'); end"
|
||||||
self.s.statement(sql)
|
self.s.statement(sql)
|
||||||
|
|
Loading…
Reference in a new issue