1
0
Эх сурвалжийг харах

fix: property variables should be unique for non-or queries

Tienson Qin 4 жил өмнө
parent
commit
3e3bfa438e

+ 9 - 7
src/main/frontend/db/query_dsl.cljs

@@ -121,12 +121,12 @@
                  t/days)]
         (tc/to-long (t/plus (t/today) (tf duration)))))))
 
-#_(defn uniq-symbol
-    [counter prefix]
-    (let [result (symbol (str prefix (when-not (zero? @counter)
-                                       @counter)))]
-      (swap! counter inc)
-      result))
+(defn uniq-symbol
+  [counter prefix]
+  (let [result (symbol (str prefix (when-not (zero? @counter)
+                                     @counter)))]
+    (swap! counter inc)
+    result))
 
 (defn build-query
   ([repo e env]
@@ -221,7 +221,9 @@
             (= 3 (count e)))
        (let [v (some-> (name (nth e 2))
                        (text/page-ref-un-brackets!))
-             sym '?v]
+             sym (if (= current-filter 'or)
+                   '?v
+                   (uniq-symbol counter "?v"))]
          [['?b :block/properties '?prop]
           [(list 'get '?prop (name (nth e 1))) sym]
           (list

+ 8 - 8
src/test/frontend/db/query_dsl_test.cljs

@@ -181,17 +181,17 @@ parent: child page 2
       {:query '([?b :block/properties ?prop]
                 [(get ?prop "prop_c") ?v]
                 (or [(= ?v "page c")] [(contains? ?v "page c")])
-                (or [(= ?v "page b")] [(contains? ?v "page b")]))
+                [(get ?prop "prop_c") ?v1]
+                (or [(= ?v1 "page b")] [(contains? ?v1 "page b")]))
        :count 1}
 
       "(or (property prop_c \"page c\") (property prop_b val_b))"
-      {:query '(or
-                (and [?b :block/properties ?prop]
-                     [(get ?prop "prop_c") ?v]
-                     (or [(= ?v "page c")] [(contains? ?v "page c")]))
-                (and [?b :block/properties ?prop]
-                     [(get ?prop "prop_b") ?v]
-                     (or [(= ?v "val_b")] [(contains? ?v "val_b")])))
+      {:query '(or (and [?b :block/properties ?prop]
+                        [(get ?prop "prop_c") ?v]
+                        (or [(= ?v "page c")] [(contains? ?v "page c")]))
+                   (and [?b :block/properties ?prop]
+                        [(get ?prop "prop_b") ?v]
+                        (or [(= ?v "val_b")] [(contains? ?v "val_b")])))
        :count 2}))
 
   (testing "TODO queries"