- Purge empty terms.
authorMaciej Pasternacki <maciej@pasternacki.net>
Mon, 8 Dec 2008 02:00:54 +0000 (8 03:00 +0100)
committerMaciej Pasternacki <maciej@pasternacki.net>
Mon, 8 Dec 2008 02:00:54 +0000 (8 03:00 +0100)
src/taxonomy.lisp

index 31275b3..5776b2b 100644 (file)
@@ -335,10 +335,16 @@ not present before."
          :none))
 
 (defun unbind-term (item term)
-  "Deletes association between ITEM and TERM."
-  (query (:delete-from 'item-term :where
-                       (:and (:= 'item-id (id item))
-                             (:= 'term-id (id term))))))
+  "Deletes association between ITEM and TERM.
+
+If PURGE-EMPTY is non-NIL (default), deletes also from TERM table if
+no more items refer to this term."
+  (execute (:delete-from 'item-term :where
+                         (:and (:= 'item-id (id item))
+                               (:= 'term-id (id term)))))
+  (execute (:delete-from 'term :where (:and (:= 'term-id (id term))
+                                            (:not (:exists (:select '* :from 'item-term
+                                                                    :where (:= 'term-id (id term)))))))))
 
 (defun item-terms (item &optional taxonomy)
   "List TERMs associated with ITEM in given TAXONOMY.