-
-
Notifications
You must be signed in to change notification settings - Fork 312
Open
Description
Attempting an upsert to an entity using its unique tuple attribute does not work as expected.
Hope this example is clear:
(let [conn (d/create-conn {:player {:db/unique :db.unique/identity}
:home {:db/valueType :db.type/ref}
:away {:db/valueType :db.type/ref}
:players {:db/unique :db.unique/identity
:db/tupleAttrs [:home :away]}})]
(d/transact! conn [[:db/add -1 :player "Nadal"]
[:db/add -2 :player "Federer"]
{:home -1
:away -2}])
(d/transact! conn [{:db/id "p1"
:player "Nadal"}
{:db/id "p2"
:player "Federer"}
{:db/id "match"
:players ["p1" "p2"]
:game 3}]))
Execution error (ClassCastException) at datascript.db/value-compare (db.cljc:339).
java.lang.String cannot be cast to java.lang.Number
Expecting a result like (= 3 (:game (d/entity @conn 3)))
I don't think this is related to #364?
Thanks. I'll try to open a PR for this if it's straightforward enough.
Edit: for what it's worth, here's the same example on Datomic 1.0.6202
@(d/transact conn [{:db/ident :player
:db/valueType :db.type/string
:db/unique :db.unique/identity
:db/cardinality :db.cardinality/one}
{:db/ident :home
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one}
{:db/ident :away
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one}
{:db/ident :players
:db/unique :db.unique/identity
:db/valueType :db.type/tuple
:db/tupleAttrs [:home :away]
:db/cardinality :db.cardinality/one}
{:db/ident :game
:db/valueType :db.type/long
:db/cardinality :db.cardinality/one}])
@(d/transact conn [[:db/add "p1" :player "Nadal"]
[:db/add "p2" :player "Federer"]
{:home "p1"
:away "p2"}])
@(d/transact conn [{:db/id "p1" :player "Nadal"}
{:db/id "p2" :player "Federer"}
{:db/id "match"
:players ["p1" "p2"]
:game 3}])
(d/pull (d/db conn) '[*] (:e (last (d/datoms (d/db conn) :eavt))))
; => {:db/id 17592186045420, :home "p1", :away "p2", :players ["p1" "p2"], :game 3}
telekid
Metadata
Metadata
Assignees
Labels
No labels