|
56 | 56 | :do `(do ~expr (cond+ ~@rest)) |
57 | 57 | :let `(let ~expr (cond+ ~@rest)) |
58 | 58 | :some `(or ~expr (cond+ ~@rest)) |
59 | | - `(if ~test ~expr (cond+ ~@rest)))))) |
| 59 | + `(util/if+ ~test ~expr (cond+ ~@rest)))))) |
60 | 60 |
|
61 | 61 | #?(:clj |
62 | 62 | (defmacro some-of |
|
1354 | 1354 | entity |
1355 | 1355 | (assoc entity :db/id (auto-tempid)))) |
1356 | 1356 |
|
1357 | | - (not (sequential? entity)) |
1358 | | - entity |
1359 | | - |
1360 | | - :let [[op e a v] entity] |
1361 | | - |
1362 | | - (and (= :db/add op) (ref? db a)) |
1363 | | - (cond |
1364 | | - (and (multival? db a) (sequential? v)) |
| 1357 | + (and |
| 1358 | + (sequential? entity) |
| 1359 | + :let [[op e a v] entity] |
| 1360 | + (= :db/add op) |
| 1361 | + (ref? db a)) |
| 1362 | + (if (and (multival? db a) (sequential? v)) |
1365 | 1363 | [op e a (assoc-auto-tempids db v)] |
1366 | | - |
1367 | | - :else |
1368 | 1364 | [op e a (first (assoc-auto-tempids db [v]))]) |
1369 | 1365 |
|
1370 | 1366 | :else |
|
1664 | 1660 | (assoc tempid upserted-eid)) |
1665 | 1661 | report' (-> initial-report |
1666 | 1662 | (assoc :tempids tempids') |
1667 | | - (update ::upserted-tempids assoc tempid upserted-eid))] |
| 1663 | + (update ::upserted-tempids assoc tempid upserted-eid))] |
| 1664 | + (util/log "retry" tempid "->" upserted-eid) |
1668 | 1665 | (transact-tx-data-impl report' es)))) |
1669 | 1666 |
|
1670 | 1667 | (def builtin-fn? |
|
1718 | 1715 | initial-es)] |
1719 | 1716 | (loop [report initial-report' |
1720 | 1717 | es initial-es'] |
| 1718 | + (util/log "transact" es) |
1721 | 1719 | (cond+ |
1722 | 1720 | (empty? es) |
1723 | 1721 | (-> report |
|
1858 | 1856 | (or (= op :db/add) (= op :db/retract)) |
1859 | 1857 | (not (::internal (meta entity))) |
1860 | 1858 | (tuple? db a) |
1861 | | - (not= v (resolve-tuple-refs db a v))) |
1862 | | - (recur report (cons [op e a (resolve-tuple-refs db a v)] entities)) |
| 1859 | + :let [v' (resolve-tuple-refs db a v)] |
| 1860 | + (not= v v')) |
| 1861 | + (recur report (cons [op e a v'] entities)) |
1863 | 1862 |
|
1864 | 1863 | (tempid? e) |
1865 | 1864 | (let [upserted-eid (when (is-attr? db a :db.unique/identity) |
|
1873 | 1872 | (and |
1874 | 1873 | (is-attr? db a :db.unique/identity) |
1875 | 1874 | (contains? (::reverse-tempids report) e) |
1876 | | - (let [upserted-eid (:e (first (-datoms db :avet a v nil nil)))] |
1877 | | - (and e upserted-eid (not= e upserted-eid)))) |
| 1875 | + :let [upserted-eid (:e (first (-datoms db :avet a v nil nil)))] |
| 1876 | + e |
| 1877 | + upserted-eid |
| 1878 | + (not= e upserted-eid)) |
1878 | 1879 | (let [tempids (get (::reverse-tempids report) e) |
1879 | | - tempid (util/find #(not (contains? (::upserted-tempids report) %)) tempids) |
1880 | | - upserted-eid (:e (first (-datoms db :avet a v nil nil)))] |
| 1880 | + tempid (util/find #(not (contains? (::upserted-tempids report) %)) tempids)] |
1881 | 1881 | (if tempid |
1882 | 1882 | (retry-with-tempid initial-report report initial-es tempid upserted-eid) |
1883 | 1883 | (raise "Conflicting upsert: " e " resolves to " upserted-eid " via " entity |
|
0 commit comments