From 655a6a1461dbb594b922b4616557eccdcbae2cd0 Mon Sep 17 00:00:00 2001 From: Richard Newman Date: Wed, 17 Aug 2016 09:45:45 -0700 Subject: [PATCH] Raise a specific error when trying to transact invalid sequences. This specifically checks for things like :db/add foo bar (nil), which will otherwise fail elsewhere after being exploded. --- src/datomish/transact/explode.cljc | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/datomish/transact/explode.cljc b/src/datomish/transact/explode.cljc index 1360fac4..4bcbe805 100644 --- a/src/datomish/transact/explode.cljc +++ b/src/datomish/transact/explode.cljc @@ -60,11 +60,19 @@ :op entity })) (sequential? v) - (if (ds/multival? (db/schema db) a*) ;; dm/schema - (mapcat (partial explode-entity-a-v db entity eid a) v) ;; Allow sequences of nested maps, etc. This does mean [[1]] will work. - (raise "Sequential values " v " but attribute " a " is :db.cardinality/one" - {:error :transact/entity-sequential-cardinality-one - :op entity })) + (if (some nil? v) + ;; This is a hard one to track down, with a steep stack back in `transact/ensure-entity-form`, so + ;; we error specifically here rather than expanding further. + (raise "Sequential attribute value for " a " contains nil." + {:error :transact/sequence-contains-nil + :op entity + :attribute a + :value v}) + (if (ds/multival? (db/schema db) a*) ;; dm/schema + (mapcat (partial explode-entity-a-v db entity eid a) v) ;; Allow sequences of nested maps, etc. This does mean [[1]] will work. + (raise "Sequential values " v " but attribute " a " is :db.cardinality/one" + {:error :transact/entity-sequential-cardinality-one + :op entity }))) true [[:db/add eid a* v]])))