datascript

magra 2024-12-06T12:53:07.880189Z

I started using Flow Storm Debugger to explore. When I input Code at the repl that includes Datoms it blows, because cljs.storm walks the Code, calls empty on the Datom and causes UnsupportedOperationException: empty is not supported on Datom.

UnsupportedOperationException: empty is not supported on Datom
	datascript.db.Datom (db.cljc:184)
	clojure.core/empty (core.clj:5300)
	clojure.core/empty (core.clj:5294)
	cljs.storm.utils/walk-code-form (utils.cljc:90)
	cljs.storm.utils/walk-code-form (utils.cljc:55)
	cljs.storm.utils/walk-code-form/walk-sequential--896/fn--897 (utils.cljc:70)
	clojure.core/map-indexed/mapi--8680/fn--8681 (core.clj:7500)
	clojure.lang.LazySeq.force (LazySeq.java:50)
	clojure.lang.LazySeq.realize (LazySeq.java:89)
	clojure.lang.LazySeq.seq (LazySeq.java:106)
	clojure.lang.RT.seq (RT.java:555)
	clojure.core/seq--5486 (core.clj:139)
	clojure.core.protocols/seq-reduce (protocols.clj:24)
	clojure.core.protocols/fn--8262 (protocols.clj:74)
	clojure.core.protocols/fn--8262 (protocols.clj:74)
	clojure.core.protocols/fn--8203/G--8198--8216 (protocols.clj:13)
	clojure.core/reduce (core.clj:6965)
	clojure.core/into (core.clj:7038)
	clojure.core/into (core.clj:7029)
	cljs.storm.utils/walk-code-form (utils.cljc:90)
	cljs.storm.utils/walk-code-form (utils.cljc:55)
	cljs.storm.utils/walk-code-form/walk-sequential--896/fn--897 (utils.cljc:70)
	clojure.core/map-indexed/mapi--8680/fn--8681 (core.clj:7502)
	clojure.lang.LazySeq.force (LazySeq.java:50)
	clojure.lang.LazySeq.realize (LazySeq.java:89)
	clojure.lang.LazySeq.seq (LazySeq.java:106)
	clojure.lang.Cons.next (Cons.java:41)
	clojure.lang.RT.boundedLength (RT.java:1810)
	clojure.core/apply (core.clj:667)
	clojure.core/apply (core.clj:662)
	cljs.storm.utils/walk-code-form (utils.cljc:88)
	cljs.storm.utils/walk-code-form (utils.cljc:55)
	cljs.storm.utils/walk-code-form (utils.cljc:65)
	cljs.storm.utils/walk-code-form (utils.cljc:55)
	cljs.storm.utils/tag-form-recursively (utils.cljc:98)
	cljs.storm.utils/tag-form-recursively (utils.cljc:95)
	cljs.analyzer/analyze* (analyzer.cljc:4413)
	cljs.analyzer/analyze* (analyzer.cljc:4409)
	shadow.build.compiler/analyze/fn--84000 (compiler.clj:392)
	shadow.build.compiler/analyze (compiler.clj:380)
	shadow.build.compiler/analyze (compiler.clj:332)
	shadow.cljs.repl/repl-compile/fn--85944/fn--85945 (repl.clj:516)
	shadow.cljs.repl/repl-compile/fn--85944 (repl.clj:489)
	shadow.cljs.repl/repl-compile (repl.clj:487)
	shadow.cljs.repl/repl-compile (repl.clj:484)
	shadow.cljs.repl/process-read-result (repl.clj:575)
	shadow.cljs.repl/process-read-result (repl.clj:551)
	shadow.cljs.repl/process-input (repl.clj:712)
	shadow.cljs.repl/process-input (repl.clj:690)
	shadow.cljs.devtools.server.worker.impl/eval86525/fn--86528 (impl.clj:698)
	clojure.lang.MultiFn.invoke (MultiFn.java:234)
	shadow.cljs.devtools.server.util/server-thread/fn--86160/fn--86161/fn--86169 (util.clj:283)
	shadow.cljs.devtools.server.util/server-thread/fn--86160/fn--86161 (util.clj:282)
	shadow.cljs.devtools.server.util/server-thread/fn--86160 (util.clj:255)
	java.lang.Thread.run (Thread.java:1583)
Datalevin had a similar issue because of Cursive walking Code and solved it thus: https://github.com/juji-io/datalevin/commit/c2aed7489139c6965c0d6f7ed8a0dca802edecdc I do not understand the change in seq-datom (yet).

magra 2024-12-06T13:07:58.291529Z

This happens when I eval #datascript/Datom [1 :hates "Cheese" 536870914 false] it does not happen when I eval (datom 1 :hates "Cheese" 536870914 false) so it is a cosmetic thing only.