(require '[datalevin.core :as d]
'[babashka.fs :as fs])
(fs/with-temp-dir [db-path]
(try
(let [schema {:person/id {:db/valueType :db.type/string
:db/unique :db.unique/identity}
:passport/person {:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
_:db/unique :db.unique/identity}}
conn (d/get-conn (str db-path "/db") schema)]
;; create a person
(d/transact! conn [{:person/id "person-123"}])
;; use lookup ref to transact a passport
;; this is what fails with: ClassCastException - class clojure.lang.PersistentVector cannot be cast to class java.lang.Number
(d/transact! conn [{:passport/person [:person/id "person-123"]}])
(d/close conn)
(println "SUCCESS: Transaction completed without error."))
(catch Exception e
(println (str "FAILURE: " (.getSimpleName (class e)) " - " (.getMessage e)))
(System/exit 1))))
This worked in 0.9.11, 0.9.12, but broke in 0.9.13. If i turn on :validate-data? I get the error Invalid data, expecting:db.type/ref got [:person/id "person-123"] What's wrong with having :db.unique/identity and :db.type/ref on the same attribute?thx
ST:
1. Unhandled clojure.lang.ExceptionInfo
Expected number or lookup ref for entity id, got {:domain/name
"", :db/id #datalevin/AutoTempid [549]}
{:error :entity-id/syntax, :entity-id {:domain/name "", :db/id #datalevin/AutoTempid [549]}}
validate.clj: 1571 datalevin.validate/validate-entity-id-syntax
validate.clj: 1568 datalevin.validate/validate-entity-id-syntax
common.clj: 100 datalevin.db.tx.common/entid
common.clj: 69 datalevin.db.tx.common/entid
prepare.clj: 112 datalevin.db.tx.prepare/resolve-upserts/upsert-value
prepare.clj: 120 datalevin.db.tx.prepare/resolve-upserts/resolve
prepare.clj: 153 datalevin.db.tx.prepare/resolve-upserts/fn
PersistentArrayMap.java: 480 clojure.lang.PersistentArrayMap/kvreduce
core.clj: 6991 clojure.core/fn
core.clj: 6971 clojure.core/fn
protocols.clj: 695 clojure.core.protocols/fn/G
core.clj: 7002 clojure.core/reduce-kv
core.clj: 6993 clojure.core/reduce-kv
prepare.clj: 137 datalevin.db.tx.prepare/resolve-upserts
prepare.clj: 99 datalevin.db.tx.prepare/resolve-upserts
execute.clj: 669 datalevin.db.tx.execute/handle-map-entity
execute.clj: 655 datalevin.db.tx.execute/handle-map-entity
execute.clj: 835 datalevin.db.tx.execute/execute-tx-loop
execute.clj: 807 datalevin.db.tx.execute/execute-tx-loop
execute.clj: 890 datalevin.db.tx.execute/local-transact-tx-data
execute.clj: 869 datalevin.db.tx.execute/local-transact-tx-data
db.clj: 1290 datalevin.db/local-transact-tx-data
db.clj: 1286 datalevin.db/local-transact-tx-data
db.clj: 1607 datalevin.db/transact-tx-data
db.clj: 1572 datalevin.db/transact-tx-data
conn.clj: 364 datalevin.conn/with
conn.clj: 360 datalevin.conn/with
conn.clj: 362 datalevin.conn/with
conn.clj: 360 datalevin.conn/with
conn.clj: 392 datalevin.conn/direct-local-transact!/helper40687
conn.clj: -1 datalevin.conn/direct-local-transact!/helper40687
conn.clj: 389 datalevin.conn/direct-local-transact!
conn.clj: 381 datalevin.conn/direct-local-transact!
conn.clj: 472 datalevin.conn/-transact!
conn.clj: 469 datalevin.conn/-transact!
conn.clj: 487 datalevin.conn/run-transact-now!
conn.clj: 485 datalevin.conn/run-transact-now!
conn.clj: 617 datalevin.conn/transact!
conn.clj: 609 datalevin.conn/transact!
conn.clj: 610 datalevin.conn/transact!
conn.clj: 609 datalevin.conn/transact!
relay.clj: 1446 dev.dotdotok.dat.relay/eval109264 Confirmed the regression.
Fixed in master branch.