浏览代码

fix: property refs not deleted when block property deleted

Fixes https://github.com/logseq/db-test-cn/issues/36. Also fixes private
db-property-attributes leaking into refs caused by #11565
Gabriel Horner 11 月之前
父节点
当前提交
2c23731b5d

+ 0 - 1
deps/db/src/logseq/db/frontend/malli_schema.cljs

@@ -120,7 +120,6 @@
    (fn [ent]
      (reduce (fn [m [k v]]
                (if-let [property (and (db-property/property? k)
-                                      (not (db-property/private-db-attribute-properties k))
                                       ;; This allows schemas like property-value-block to require properties in
                                       ;; their schema that they depend on
                                       (not (contains? required-properties k))

+ 10 - 3
deps/db/src/logseq/db/frontend/property.cljs

@@ -4,7 +4,8 @@
             [datascript.core :as d]
             [flatland.ordered.map :refer [ordered-map]]
             [logseq.common.uuid :as common-uuid]
-            [logseq.db.frontend.db-ident :as db-ident]))
+            [logseq.db.frontend.db-ident :as db-ident]
+            [clojure.set :as set]))
 
 ;; Main property vars
 ;; ==================
@@ -442,6 +443,10 @@
        (remove #(get-in built-in-properties [% :schema :public?]))
        set))
 
+(def public-db-attribute-properties
+  "db-attribute properties that are visible to user"
+  (set/difference db-attribute-properties private-db-attribute-properties))
+
 (def read-only-properties
   "Property values that shouldn't be updated"
   #{:logseq.property/built-in?})
@@ -470,13 +475,15 @@
   (string/includes? s ".property"))
 
 (defn property?
-  "Determines if ident kw is a property"
+  "Determines if ident kw is a property visible to user"
   [k]
   (let [k-name (namespace k)]
     (and k-name
          (or (contains? logseq-property-namespaces k-name)
              (user-property-namespace? k-name)
-             (and (keyword? k) (contains? db-attribute-properties k))))))
+             ;; disallow private db-attribute-properties as they cause unwanted refs
+             ;; and appear noisily in debugging contexts
+             (and (keyword? k) (contains? public-db-attribute-properties k))))))
 
 ;; Helper fns
 ;; ==========

+ 0 - 1
scripts/src/logseq/tasks/db_graph/create_graph_with_schema_org.cljs

@@ -375,7 +375,6 @@
                        (->> ents
                             (map (fn [m]
                                    (let [props (->> (db-property/properties m)
-                                                    (remove #(db-property/private-db-attribute-properties (key %)))
                                                     (into {}))]
                                      (cond-> (select-keys m [:block/name :block/type :block/title :block/schema :db/ident
                                                              :logseq.property.class/properties :logseq.property/parent

+ 5 - 4
src/main/frontend/worker/pipeline.cljs

@@ -34,10 +34,11 @@
               (when (d/entity db-after (:db/id block))
                 (let [date-formatter (worker-state/get-date-formatter repo)
                       refs (outliner-core/rebuild-block-refs repo db-after date-formatter block)]
-                  (when (seq refs)
-                    [[:db/retract (:db/id block) :block/refs]
-                     {:db/id (:db/id block)
-                      :block/refs refs}]))))
+                  ;; Always retract because if refs is empty then a delete action has occurred
+                  (cond-> [[:db/retract (:db/id block) :block/refs]]
+                    (seq refs)
+                    (conj {:db/id (:db/id block)
+                           :block/refs refs})))))
             blocks)))
 
 (sr/defkeyword :skip-validate-db?