From e9c18f5732528967054b3151c012e054f2946126 Mon Sep 17 00:00:00 2001
From: Jeff Dik <jeffdik@finecode.net>
Date: Thu, 20 Sep 2012 00:00:03 -0400
Subject: [PATCH 1/2] fix for corrupted rel indexes if retracting duplicate
 tuples

contains unit test

fix by David Liebke
---
 src/main/clojure/clojure/core/logic.clj       |    3 ++-
 src/test/clojure/clojure/core/logic/tests.clj |   16 ++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/main/clojure/clojure/core/logic.clj b/src/main/clojure/clojure/core/logic.clj
index 04b7412..0377dac 100644
--- a/src/main/clojure/clojure/core/logic.clj
+++ b/src/main/clojure/clojure/core/logic.clj
@@ -2472,7 +2472,8 @@
                          (if (contains? m k)
                            (if-let [nv (empty-is-nil (f (get m k) v))]
                              (assoc m k nv)
-                             (dissoc m k))))
+                             (dissoc m k))
+                           m))
           merge-map (fn [m1 m2] (reduce merge-entry (or m1 {}) (seq m2)))]
       (reduce merge-map maps))))
 
diff --git a/src/test/clojure/clojure/core/logic/tests.clj b/src/test/clojure/clojure/core/logic/tests.clj
index a1569c3..159a27a 100644
--- a/src/test/clojure/clojure/core/logic/tests.clj
+++ b/src/test/clojure/clojure/core/logic/tests.clj
@@ -1004,6 +1004,22 @@
              (== a 2)))
          '(1))))
 
+(defrel rel2 ^:index e ^:index a ^:index v)
+(facts rel2 [[:e1 :a1 :v1]
+             [:e1 :a2 :v2]])
+(retractions rel2 [[:e1 :a1 :v1]
+                   [:e1 :a1 :v1]
+                   [:e1 :a2 :v2]])
+
+(deftest rel2-dup-retractions
+  (is (= (run* [out]
+               (fresh [e a v]
+                      (rel2 e :a1 :v1)
+                      (rel2 e a v)
+                      (== [e a v] out))))
+      '()))
+
+
 ;; -----------------------------------------------------------------------------
 ;; nil in collection
 
-- 
1.7.10.4

