Skip to content

Commit aa2f963

Browse files
committed
fix: schema not fully support
1 parent 7db748a commit aa2f963

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

Diff for: src/datascript/db.cljc

+18-11
Original file line numberDiff line numberDiff line change
@@ -1285,14 +1285,16 @@
12851285
(let [err-msg (str "Schema with attribute " v-ident " does not exist")
12861286
err-map {:error :retract/schema :attribute v-ident}]
12871287
(throw (ex-info err-msg err-map)))
1288-
(update-in db [:schema] #(dissoc % v-ident)))
1289-
(let [e-ident (:v (first (-seek-datoms db :eavt e :db/ident nil nil)))]
1290-
(if (schema e-ident)
1291-
(update-in db [:schema e-ident] #(dissoc % a-ident))
1292-
(let [err-msg (str "Schema with db/ident " e-ident " does not exist")
1293-
err-map {:error :retract/schema :entity-id e :attribute a :value e}]
1294-
(throw #?(:clj (ex-info err-msg err-map)
1295-
:cljs (ex-info err-msg err-map)))))))))
1288+
(-> db
1289+
(assoc-in [:schema e] (dissoc (schema v-ident) a-ident))
1290+
(update-in [:schema] #(dissoc % v-ident))))
1291+
(if-let [schema-entry (schema e)]
1292+
(if (schema schema-entry)
1293+
(update-in db [:schema schema-entry] #(dissoc % a-ident))
1294+
(update-in db [:schema e] #(dissoc % a-ident v-ident)))
1295+
(let [err-msg (str "Schema with entity id " e " does not exist")
1296+
err-map {:error :retract/schema :entity-id e :attribute a :value e}]
1297+
(throw (ex-info err-msg err-map)))))))
12961298

12971299
(defn get-schema [db]
12981300
(or (:schema db) {}))
@@ -1305,9 +1307,14 @@
13051307
a-ident a
13061308
v-ident v]
13071309
(if (= a-ident :db/ident)
1308-
(assoc-in db [:schema v-ident a-ident] v-ident)
1309-
(let [e-ident (:v (first (-seek-datoms db :eavt e :db/ident nil nil)))]
1310-
(assoc-in db [:schema e-ident a-ident] v-ident)))))
1310+
(-> db
1311+
(assoc-in [:schema v-ident] (merge (or (schema e) {}) (hash-map a-ident v-ident)))
1312+
(assoc-in [:schema e] v-ident))
1313+
(if-let [schema-entry (schema e)]
1314+
(if (schema schema-entry)
1315+
(assoc-in db [:schema schema-entry a-ident] v-ident)
1316+
(assoc-in db [:schema e a-ident] v-ident))
1317+
(assoc-in db [:schema e] (hash-map a-ident v-ident))))))
13111318

13121319
(defn update-rschema [db]
13131320
(assoc db :rschema (rschema (merge implicit-schema (get-schema db)))))

0 commit comments

Comments
 (0)