diff --git a/src/datascript/core.cljs b/src/datascript/core.cljs
index a9c8000c..12805f54 100644
--- a/src/datascript/core.cljs
+++ b/src/datascript/core.cljs
@@ -178,7 +178,7 @@
(defn- explode [db entity]
(let [eid (:db/id entity)]
(for [[a vs] (dissoc entity :db/id)
- v (if (and (sequential? vs)
+ v (if (and (coll? vs)
(multival? db a))
vs [vs])]
[:db/add eid a v])))
diff --git a/test/test/datascript.cljs b/test/test/datascript.cljs
index 467ba581..fa62f82b 100644
--- a/test/test/datascript.cljs
+++ b/test/test/datascript.cljs
@@ -231,23 +231,27 @@
(deftest test-explode
- (let [conn (d/create-conn { :aka { :db/cardinality :db.cardinality/many }
- :also { :db/cardinality :db.cardinality/many} })]
- (d/transact! conn [{:db/id -1
- :name "Ivan"
- :age 16
- :aka ["Devil" "Tupen"]
- :also "ok"}])
- (is (= (d/q '[:find ?n ?a
- :where [1 :name ?n]
- [1 :age ?a]] @conn)
- #{["Ivan" 16]}))
- (is (= (d/q '[:find ?v
- :where [1 :also ?v]] @conn)
- #{["ok"]}))
- (is (= (d/q '[:find ?v
- :where [1 :aka ?v]] @conn)
- #{["Devil"] ["Tupen"]}))))
+ ;;Test that explode works properly with vectors, sets, and lists.
+ (doseq [coll [["Devil" "Tupen"]
+ #{"Devil" "Tupen"}
+ '("Devil" "Tupen")]]
+ (let [conn (d/create-conn { :aka { :db/cardinality :db.cardinality/many }
+ :also { :db/cardinality :db.cardinality/many} })]
+ (d/transact! conn [{:db/id -1
+ :name "Ivan"
+ :age 16
+ :aka coll
+ :also "ok"}])
+ (is (= (d/q '[:find ?n ?a
+ :where [1 :name ?n]
+ [1 :age ?a]] @conn)
+ #{["Ivan" 16]}))
+ (is (= (d/q '[:find ?v
+ :where [1 :also ?v]] @conn)
+ #{["ok"]}))
+ (is (= (d/q '[:find ?v
+ :where [1 :aka ?v]] @conn)
+ #{["Devil"] ["Tupen"]})))))
(deftest test-joins