- docfix
authorMaciej Pasternacki <maciej@pasternacki.net>
Sun, 12 Apr 2009 12:29:54 +0000 (12 14:29 +0200)
committerMaciej Pasternacki <maciej@pasternacki.net>
Sun, 12 Apr 2009 12:29:54 +0000 (12 14:29 +0200)
- purge empty deleted terms in (SETF ITEM-TERMS)

src/taxonomy.lisp

index bccb8d6..df92e5a 100644 (file)
@@ -340,10 +340,7 @@ not present before."
          :none))
 
 (defun unbind-term (item 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."
+  "Deletes association between ITEM and TERM."
   (execute (:delete-from 'item-term :where
                          (:and (:= 'item-id (id item))
                                (:= 'term-id (id term)))))
@@ -381,7 +378,10 @@ added terms to NULL."
       (when ids-to-del
         (execute (:delete-from 'item-term :where
                                (:and (:= 'item-id (id item))
-                                     (:in 'term-id (:set ids-to-del))))))
+                                     (:in 'term-id (:set ids-to-del)))))
+        (execute (:delete-from 'term :where (:and (:in 'term-id (:set ids-to-del))
+                                                  (:not (:exists (:select '* :from 'item-term
+                                                                          :where (:= 'item-term.term-id 'term.term-id))))))))
       (when ids-to-add
         (execute (:insert-rows-into 'item-term
                                     :columns 'item-id 'term-id