datascript
datascript copied to clipboard
get-else on :db.cardinality/many doesn't work
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"]}
have you found a solution for this?