|
1285 | 1285 | (let [err-msg (str "Schema with attribute " v-ident " does not exist")
|
1286 | 1286 | err-map {:error :retract/schema :attribute v-ident}]
|
1287 | 1287 | (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))))))) |
1296 | 1298 |
|
1297 | 1299 | (defn get-schema [db]
|
1298 | 1300 | (or (:schema db) {}))
|
|
1305 | 1307 | a-ident a
|
1306 | 1308 | v-ident v]
|
1307 | 1309 | (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)))))) |
1311 | 1318 |
|
1312 | 1319 | (defn update-rschema [db]
|
1313 | 1320 | (assoc db :rschema (rschema (merge implicit-schema (get-schema db)))))
|
|
0 commit comments