Просмотр исходного кода

fix: property value blocks with uuid

don't generate their uuids or their tags correctly.
This should've been handled in ad64632c1ba739640b4befa56eba6a245cd6f268.
Related to https://github.com/logseq/db-test/issues/636
Gabriel Horner 4 недель назад
Родитель
Сommit
a5875420d1

+ 1 - 1
deps/db/src/logseq/db/sqlite/build.cljs

@@ -136,7 +136,7 @@
                                        (merge (:build/properties v)
                                               {:block/tags (mapv #(hash-map :db/ident (get-ident all-idents %))
                                                                  (:build/tags v))}
-                                              (select-keys v [:block/created-at :block/updated-at])))]
+                                              (select-keys v [:block/created-at :block/updated-at :block/uuid])))]
                     (cond-> property-map
                       (and (:build/property-value v) (seq pvalue-attrs))
                       (assoc :property-value-properties pvalue-attrs)))

+ 9 - 3
deps/db/src/logseq/db/sqlite/export.cljs

@@ -199,12 +199,18 @@
     (assoc :build/class-extends
            (mapv :db/ident (:logseq.property.class/extends class-ent)))))
 
+(defn block-property-value? [%]
+  (and (map? %) (:build/property-value %)))
+
 (defn- build-node-classes
   [db build-block block-tags properties]
   (let [pvalue-classes (->> (:build/properties build-block)
                             vals
                             (mapcat (fn [val-or-vals]
-                                      (mapcat #(when (sqlite-build/page-prop-value? %) (:build/tags (second %)))
+                                      (mapcat #(cond (sqlite-build/page-prop-value? %)
+                                                     (:build/tags (second %))
+                                                     (block-property-value? %)
+                                                     (:build/tags %))
                                               (if (set? val-or-vals) val-or-vals [val-or-vals]))))
                             (remove db-class/logseq-class?))
         property-classes (->> (mapcat :build/property-classes (vals properties))
@@ -737,7 +743,7 @@
                                 ;; TODO: Walk data structure via :build/properties instead of slower walk
                                 page-map'
                                 (walk/postwalk (fn [f]
-                                                 (if (and (map? f) (:build/property-value f))
+                                                 (if (block-property-value? f)
                                                    (remove-uuid-if-not-ref f)
                                                    f))
                                                page-map)]
@@ -823,7 +829,7 @@
 (defn- find-undefined-uuids [db {:keys [classes properties pages-and-blocks]}]
   (let [pvalue-known-uuids (atom #{})
         _ (walk/postwalk (fn [f]
-                           (if (and (map? f) (:build/property-value f) (:block/uuid f))
+                           (if (and (block-property-value? f) (:block/uuid f))
                              (swap! pvalue-known-uuids conj (:block/uuid f))
                              f))
                          pages-and-blocks)

+ 10 - 1
deps/db/test/logseq/db/sqlite/export_test.cljs

@@ -271,11 +271,13 @@
         class-uuid (random-uuid)
         page-uuid (random-uuid)
         pvalue-page-uuid (random-uuid)
+        pvalue-block-uuid (random-uuid)
         property-uuid (random-uuid)
         journal-uuid (random-uuid)
         block-object-uuid (random-uuid)
         original-data
         {:classes {:user.class/C1 {:block/uuid class-uuid :build/keep-uuid? true}
+                   :user.class/C2 {}
                    :user.class/NodeClass {}}
          :properties {:user.property/p1
                       {:logseq.property/type :node
@@ -297,7 +299,14 @@
                     {:block/title (str "class ref to " (page-ref/->page-ref class-uuid))}
                     {:block/title (str "inline class ref to #" (page-ref/->page-ref class-uuid))}
                     {:block/title (str "property ref to " (page-ref/->page-ref property-uuid))}
-                    {:block/title (str "journal ref to " (page-ref/->page-ref journal-uuid))}]}
+                    {:block/title (str "journal ref to " (page-ref/->page-ref journal-uuid))}
+                    {:block/title (str "property block value ref to " (page-ref/->page-ref pvalue-block-uuid))}
+                    {:block/title "block with a pvalue that has a :block/uuid"
+                     :build/properties {:user.property/p2 {:build/property-value :block
+                                                           :block/title "property value block"
+                                                           :build/tags [:user.class/C2]
+                                                           :block/uuid pvalue-block-uuid
+                                                           :build/keep-uuid? true}}}]}
           {:page {:block/title "page with block ref"}
            :blocks [{:block/title "hi" :block/uuid block-uuid :build/keep-uuid? true
                      :build/properties {:user.property/p1 [:block/uuid block-object-uuid]}}]}