|
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