Skip to content

Commit 3971e2d

Browse files
committed
separate store && callbacks from transact!
1 parent 45f6721 commit 3971e2d

File tree

1 file changed

+29
-22
lines changed

1 file changed

+29
-22
lines changed

src/datascript/conn.cljc

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -79,33 +79,42 @@
7979
:tx-tail tail
8080
:db-last-stored db}))))
8181

82+
(defn ^:no-doc store-after-transact!
83+
[conn tx-report]
84+
(when-some [storage (storage/storage @conn)]
85+
(let [{db :db-after
86+
datoms :tx-data} tx-report
87+
settings (set/settings (:eavt db))
88+
*atom (:atom conn)
89+
tx-tail' (:tx-tail (swap! *atom update :tx-tail conj datoms))]
90+
(when-not (get-in tx-report [:tx-meta :skip-store?])
91+
(if (> (transduce (map count) + 0 tx-tail') (:branching-factor settings))
92+
;; overflow tail
93+
(do
94+
(storage/store-impl! db (storage/storage-adapter db) false)
95+
(swap! *atom assoc
96+
:tx-tail []
97+
:db-last-stored db))
98+
;; just update tail
99+
(storage/store-tail db tx-tail'))))))
100+
82101
(defn ^:no-doc -transact! [conn tx-data tx-meta]
83102
{:pre [(conn? conn)]}
84103
(let [*report (volatile! nil)
85-
skip-store? (:skip-store? tx-meta)
86104
tx-meta' (dissoc tx-meta :skip-store?)]
87105
(swap! conn
88106
(fn [db]
89107
(let [r (with db tx-data tx-meta')]
90108
(vreset! *report r)
91109
(:db-after r))))
92-
(when-some [storage (storage/storage @conn)]
93-
(let [{db :db-after
94-
datoms :tx-data} @*report
95-
settings (set/settings (:eavt db))
96-
*atom (:atom conn)
97-
tx-tail' (:tx-tail (swap! *atom update :tx-tail conj datoms))]
98-
(when-not skip-store?
99-
(if (> (transduce (map count) + 0 tx-tail') (:branching-factor settings))
100-
;; overflow tail
101-
(do
102-
(storage/store-impl! db (storage/storage-adapter db) false)
103-
(swap! *atom assoc
104-
:tx-tail []
105-
:db-last-stored db))
106-
;; just update tail
107-
(storage/store-tail db tx-tail')))))
108-
@*report))
110+
(let [tx-report @*report]
111+
(store-after-transact! conn tx-report)
112+
@*report)))
113+
114+
(defn ^:no-doc run-callbacks
115+
[conn report]
116+
(doseq [[_ callback] (:listeners @(:atom conn))]
117+
(callback report)))
109118

110119
(defn transact!
111120
([conn tx-data]
@@ -114,8 +123,7 @@
114123
{:pre [(conn? conn)]}
115124
(locking conn
116125
(let [report (-transact! conn tx-data tx-meta)]
117-
(doseq [[_ callback] (:listeners @(:atom conn))]
118-
(callback report))
126+
(run-callbacks conn report)
119127
report))))
120128

121129
(defn reset-conn!
@@ -141,8 +149,7 @@
141149
:tx-tail []
142150
:db-last-stored db))
143151
(reset! conn db))
144-
(doseq [[_ callback] (:listeners @(:atom conn))]
145-
(callback report))
152+
(run-callbacks conn report)
146153
db)))
147154

148155
(defn reset-schema! [conn schema]

0 commit comments

Comments
 (0)