From 19bc9768f109a7110c94d7ff8c928b1a22e4f51c Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 9 May 2009 03:26:34 +0900 Subject: [PATCH] delete unused tags on card delete, do it efficiently --- anki/deck.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/anki/deck.py b/anki/deck.py index ed756367c..b61fb6b1d 100644 --- a/anki/deck.py +++ b/anki/deck.py @@ -1122,6 +1122,21 @@ where facts.id not in (select distinct factId from cards)""") # note deleted data = [{'id': id, 'time': now} for id in ids] self.s.statements("insert into cardsDeleted values (:id, :time)", data) + # gather affected tags + tags = self.s.column0( + "select tagId from cardTags where cardId in %s" % + strids) + # delete + self.s.statement("delete from cardTags where cardId in %s" % strids) + # find out if they're used by anything else + unused = [] + for tag in tags: + if not self.s.scalar( + "select 1 from cardTags where tagId = :d limit 1", d=tag): + unused.append(tag) + # delete unused + self.s.statement("delete from tags where id in %s and priority = 2" % + ids2str(unused)) # remove any dangling facts self.deleteDanglingFacts() self.rebuildCounts()