datascript icon indicating copy to clipboard operation
datascript copied to clipboard

get-else on :db.cardinality/many doesn't work

Open claj opened this issue 9 years ago • 1 comments

Using get-else terminates even if there are more results to be find when applied on a :db.cardinality/many attribute. This is different from Datomic, which returns every match even when get-else is used.

Below is a minimal example and the result when not using get-else, which is also the expected result. I'm using Datascript 0.15.0 on Clojure 1.8.0.

I have not tried reproducing the issue in ClojureScript.

(require '[datascript.core :as d])

(let [schema {:aka {:db/cardinality :db.cardinality/many}}
      conn   (d/create-conn schema)]
  (d/transact! conn [ { :db/id -1
                       :name  "Maksim"
                       :aka   ["Maks Otto von Stirlitz", "Jack Ryan"] } ])
  (d/q '[:find  ?name ?aka
         :where
         [?e :name ?name]
         [(get-else $ ?e :aka "N/A") ?aka] ]
       @conn))

;; NOT EXPECTED:
;; => #{["Maksim" "Jack Ryan"]}

(let [schema {:aka {:db/cardinality :db.cardinality/many}}
      conn   (d/create-conn schema)]
  (d/transact! conn [ { :db/id -1
                       :name  "Maksim"
                       :aka   ["Maks Otto von Stirlitz", "Jack Ryan"] } ])
  (d/q '[:find  ?name ?aka
         :where
         [?e :name ?name]
         [?e :aka  ?aka] ]
       @conn))

;; EXPECTED (even with get-else):
;; => #{["Maksim" "Jack Ryan"] ["Maksim" "Maks Otto von Stirlitz"]}

claj avatar Mar 01 '16 13:03 claj

have you found a solution for this?

brunobraga95 avatar Apr 03 '18 04:04 brunobraga95