Ver Fonte

fix: remove :block/metadata

Use built-in properties
Tienson Qin há 1 ano atrás
pai
commit
22a9b61b32
26 ficheiros alterados com 118 adições e 104 exclusões
  1. 5 5
      deps/db/src/logseq/db.cljs
  2. 7 28
      deps/db/src/logseq/db/frontend/malli_schema.cljs
  3. 9 0
      deps/db/src/logseq/db/frontend/property.cljs
  4. 3 2
      deps/db/src/logseq/db/frontend/property/type.cljs
  5. 7 7
      deps/db/src/logseq/db/frontend/property/util.cljs
  6. 0 3
      deps/db/src/logseq/db/frontend/schema.cljs
  7. 23 10
      deps/db/src/logseq/db/sqlite/create_graph.cljs
  8. 1 1
      deps/outliner/src/logseq/outliner/core.cljs
  9. 5 4
      scripts/src/logseq/tasks/db_graph/create_graph.cljs
  10. 2 2
      scripts/src/logseq/tasks/db_graph/create_graph_with_inferred_properties.cljs
  11. 2 2
      scripts/src/logseq/tasks/db_graph/create_graph_with_large_sizes.cljs
  12. 2 1
      scripts/src/logseq/tasks/db_graph/create_graph_with_properties.cljs
  13. 2 2
      scripts/src/logseq/tasks/db_graph/create_graph_with_schema_org.cljs
  14. 2 1
      src/main/frontend/components/block.cljs
  15. 1 1
      src/main/frontend/components/db_based/page.cljs
  16. 1 1
      src/main/frontend/components/page.cljs
  17. 4 4
      src/main/frontend/components/property.cljs
  18. 1 1
      src/main/frontend/components/property/value.cljs
  19. 5 1
      src/main/frontend/db_worker.cljs
  20. 23 19
      src/main/frontend/handler/db_based/property.cljs
  21. 3 3
      src/main/frontend/handler/page.cljs
  22. 3 1
      src/main/frontend/handler/repo.cljs
  23. 1 1
      src/main/frontend/worker/handler/page.cljs
  24. 1 1
      src/main/frontend/worker/handler/page/rename.cljs
  25. 4 2
      src/main/frontend/worker/pipeline.cljs
  26. 1 1
      src/main/frontend/worker/search.cljs

+ 5 - 5
deps/db/src/logseq/db.cljs

@@ -552,18 +552,18 @@
 
 (defn built-in?
   "Built-in page or block"
-  [entity]
-  (:built-in? (:block/metadata entity)))
+  [db entity]
+  (get (:block/properties entity) (:block/uuid (d/entity db :built-in?))))
 
 (defn built-in-class-property?
   "Whether property a built-in property for the specific class"
-  [class-entity property-entity]
+  [db class-entity property-entity]
   (let [class-properties (some (fn [[_k v]]
                                  (when (= (:original-name v) (:block/original-name class-entity))
                                    (set (get-in v [:schema :properties]))))
                                db-class/built-in-classes)]
-    (and (built-in? class-entity)
-         (built-in? property-entity)
+    (and (built-in? db class-entity)
+         (built-in? db property-entity)
          (contains? class-properties (:block/name property-entity)))))
 
 (def write-transit-str sqlite-util/write-transit-str)

+ 7 - 28
deps/db/src/logseq/db/frontend/malli_schema.cljs

@@ -102,9 +102,7 @@
      [:block/collapsed? {:optional true} :boolean]
      ;; journal-day is only set for journal pages
      [:block/journal-day {:optional true} :int]
-     [:block/namespace {:optional true} :int]
-     [:block/metadata {:optional true}
-      [:map [:built-in? {:optional true} :boolean]]]]
+     [:block/namespace {:optional true} :int]]
     page-attrs
     page-or-block-attrs)))
 
@@ -116,11 +114,7 @@
      [:block/schema
       {:optional true}
       [:map
-       [:properties {:optional true} [:vector :uuid]]]]
-     [:block/metadata {:optional true}
-      [:map
-       [:hide-properties? {:optional true} :boolean]
-       [:built-in? {:optional true} :boolean]]]]
+       [:properties {:optional true} [:vector :uuid]]]]]
     page-attrs
     page-or-block-attrs)))
 
@@ -152,9 +146,7 @@
          [:type (apply vector :enum (into db-property-type/internal-built-in-property-types
                                           db-property-type/user-built-in-property-types))]]
         property-common-schema-attrs
-        property-type-schema-attrs))]
-     [:block/metadata
-     [:map [:built-in? :boolean]]]]
+        property-type-schema-attrs))]]
     page-attrs
     page-or-block-attrs)))
 
@@ -191,11 +183,7 @@
 (def hidden-page
   (vec
    (concat
-    [:map
-     ;; hidden pages for enum values don't have this
-     [:block/metadata {:optional true}
-      [:map
-       [:source-page-id :uuid]]]]
+    [:map]
     page-attrs
     page-or-block-attrs)))
 
@@ -211,13 +199,7 @@
   [[:block/content :string]
    [:block/left :int]
    [:block/parent :int]
-   ;; Created when blocks are used for property values
-   [:block/metadata {:optional true}
-    [:map
-     [:created-from-block :uuid]
-     [:created-from-property :uuid]
-     [:created-from-template {:optional true} :uuid]]]
-    ;; refs
+   ;; refs
    [:block/page :int]
    [:block/path-refs {:optional true} [:set :int]]
    [:block/macros {:optional true} [:set :int]]
@@ -254,11 +236,8 @@
      [:block/schema {:optional true}
       [:map
        [:value [:or :string :double]]
-       [:description {:optional true} :string]]]
-     [:block/metadata
-      [:map
-       [:created-from-property :uuid]]]]
-    (remove #(#{:block/metadata :block/content :block/left} (first %)) block-attrs)
+       [:description {:optional true} :string]]]]
+    (remove #(#{:block/content :block/left} (first %)) block-attrs)
     page-or-block-attrs)))
 
 (def normal-block

+ 9 - 0
deps/db/src/logseq/db/frontend/property.cljs

@@ -5,6 +5,9 @@
             [datascript.core :as d]
             [logseq.common.util :as common-util]))
 
+(def first-stage-properties
+  #{:built-in? :created-from-property})
+
 ;; FIXME: no support for built-in-extended-properties
 (def ^:large-vars/data-var built-in-properties
   "Map of built in properties for db graphs. Each property has a config map with
@@ -33,6 +36,12 @@
    :background-image {:schema {:type :default :hide? true}
                       :visible true}
    :heading {:schema {:type :any :hide? true}}      ; number (1-6) or boolean for auto heading
+   :created-from-block    {:schema {:type :uuid}}
+   :created-from-property {:schema {:type :uuid}}
+   :created-from-template {:schema {:type :uuid}}
+   :source-page-id        {:schema {:type :uuid}}
+   :built-in?             {:schema {:type :checkbox}}
+   :hide-properties?      {:schema {:type :checkbox}}
    :query-table {:schema {:type :checkbox}}
    ;; query-properties is a coll of property uuids and keywords where keywords are special frontend keywords
    :query-properties {:schema {:type :coll}}

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

@@ -12,7 +12,7 @@
 
 (def internal-built-in-property-types
   "Valid property types only for use by internal built-in-properties"
-  #{:keyword :map :coll :any})
+  #{:keyword :map :coll :any :uuid})
 
 (def user-built-in-property-types
   "Valid property types for users in order they appear in the UI"
@@ -122,6 +122,7 @@
               logseq-template?]
    ;; internal usage
    :keyword  keyword?
+   :uuid     uuid?
    :map      map?
    ;; coll elements are ordered as it's saved as a vec
    :coll     coll?
@@ -152,4 +153,4 @@
     (number? val) :number
     (url? val) :url
     (contains? #{true false} val) :checkbox
-    :else :default))
+    :else :default))

+ 7 - 7
deps/db/src/logseq/db/frontend/property/util.cljs

@@ -7,20 +7,20 @@
 (defonce hidden-page-name-prefix "$$$")
 
 (defn- closed-value-new-block
-  [page-id block-id value property]
+  [db page-id block-id value property]
   {:block/type #{"closed value"}
    :block/format :markdown
    :block/uuid block-id
    :block/page page-id
-   :block/metadata {:created-from-property (:block/uuid property)}
+   :block/properties {(:block/uuid (d/entity db :created-from-property)) (:block/uuid property)}
    :block/schema {:value value}
    :block/parent page-id})
 
 (defn build-closed-value-block
   "Builds a closed value block to be transacted"
-  [block-uuid block-value page-id property {:keys [db-ident icon-id icon description]}]
+  [db block-uuid block-value page-id property {:keys [db-ident icon-id icon description]}]
   (cond->
-   (closed-value-new-block page-id (or block-uuid (d/squuid)) block-value property)
+   (closed-value-new-block db page-id (or block-uuid (d/squuid)) block-value property)
     (and db-ident (keyword? db-ident))
     (assoc :db/ident db-ident)
 
@@ -53,8 +53,8 @@
 (defn build-closed-values
   "Builds all the tx needed for property with closed values including
    the hidden page and closed value blocks as needed"
-  [prop-name property {:keys [icon-id db-ident translate-closed-page-value-fn property-attributes]
-                       :or {translate-closed-page-value-fn identity}}]
+  [db prop-name property {:keys [icon-id db-ident translate-closed-page-value-fn property-attributes]
+                          :or {translate-closed-page-value-fn identity}}]
   (let [page-tx (build-property-hidden-page property)
         page-id [:block/uuid (:block/uuid page-tx)]
         closed-value-page-uuids? (contains? #{:page :date} (get-in property [:block/schema :type]))
@@ -62,7 +62,7 @@
         (if closed-value-page-uuids?
           (map translate-closed-page-value-fn (:closed-values property))
           (map (fn [{:keys [db-ident value icon description uuid]}]
-                 (build-closed-value-block
+                 (build-closed-value-block db
                   uuid value page-id property {:db-ident db-ident
                                                :icon-id icon-id
                                                :icon icon

+ 0 - 3
deps/db/src/logseq/db/frontend/schema.cljs

@@ -71,9 +71,6 @@
    ;; map, key -> original property value's content
    :block/properties-text-values {}
 
-   ;; non-indexed metadata
-   :block/metadata {}
-
    ;; first block that's not a heading or unordered list
    :block/pre-block? {}
 

+ 23 - 10
deps/db/src/logseq/db/sqlite/create_graph.cljs

@@ -11,11 +11,12 @@
             [logseq.db.frontend.default :as default-db]))
 
 (defn- mark-block-as-built-in
-  [block]
-  (update block :block/metadata assoc :built-in? true))
+  [db block]
+  (let [built-in-property-id (:block/uuid (d/entity db :built-in?))]
+    (update block :block/properties assoc built-in-property-id true)))
 
 (defn- build-initial-properties
-  []
+  [db]
   (let [;; Some uuids need to be pre-defined since they are referenced by other properties
         default-property-uuids {:icon (d/squuid)}
         built-in-properties (->>
@@ -27,23 +28,34 @@
     (mapcat
      (fn [[k-keyword {:keys [schema original-name closed-values db-ident]}]]
        (let [k-name (name k-keyword)
+             id (if (contains? db-property/first-stage-properties k-keyword)
+                  (let [id (:block/uuid (d/entity db k-keyword))]
+                    (assert (uuid? id) "First stage properties are not created yet")
+                    id)
+                  (d/squuid))
              blocks (if closed-values
                       (db-property-util/build-closed-values
+                       db
                        (or original-name k-name)
-                       {:block/schema schema :block/uuid (d/squuid) :closed-values closed-values}
+                       {:block/schema schema :block/uuid id :closed-values closed-values}
                        {:icon-id (get default-property-uuids :icon)
                         :db-ident db-ident})
                       [(sqlite-util/build-new-property
                         (or original-name k-name)
                         schema
-                        (get default-property-uuids k-keyword (d/squuid))
+                        (get default-property-uuids k-keyword id)
                         {:db-ident db-ident})])]
-         (update blocks 0 mark-block-as-built-in)))
+         (update blocks 0 #(mark-block-as-built-in db %))))
      built-in-properties)))
 
 (defn build-db-initial-data
-  [config-content]
-  (let [initial-data [{:db/ident :db/type :db/type "db"}
+  [db* config-content]
+  (let [db (d/db-with db*
+                      (map (fn [p]
+                             {:db/ident p
+                              :block/name (name p)
+                              :block/uuid (random-uuid)}) db-property/first-stage-properties))
+        initial-data [{:db/ident :db/type :db/type "db"}
                       {:db/ident :schema/version :schema/version db-schema/version}]
         initial-files [{:block/uuid (d/squuid)
                         :file/path (str "logseq/" "config.edn")
@@ -58,8 +70,8 @@
                         :file/content ""
                         :file/last-modified-at (js/Date.)}]
         default-pages (->> (ldb/build-pages-tx (map default-db/page-title->block ["Contents"]))
-                           (map mark-block-as-built-in))
-        default-properties (build-initial-properties)
+                           (map #(mark-block-as-built-in db %)))
+        default-properties (build-initial-properties db)
         name->properties (zipmap
                           (map :block/name default-properties)
                           default-properties)
@@ -67,6 +79,7 @@
                          (fn [[k-keyword {:keys [schema original-name]}]]
                            (let [k-name (name k-keyword)]
                              (mark-block-as-built-in
+                              db
                               (sqlite-util/build-new-class
                                (let [properties (mapv
                                                  (fn [property-name]

+ 1 - 1
deps/outliner/src/logseq/outliner/core.cljs

@@ -230,7 +230,7 @@
 
                                              (uuid? v)
                                              (when-let [entity (d/entity db [:block/uuid v])]
-                                               (let [from-property? (get-in entity [:block/metadata :created-from-property])]
+                                               (let [from-property? (get-in entity [:block/properties (:block/uuid (d/entity db :created-from-property))])]
                                                  (if (and from-property? (not (contains? (:block/type entity) "closed value")))
                                                    ;; don't reference hidden block property values except closed values
                                                    []

+ 5 - 4
scripts/src/logseq/tasks/db_graph/create_graph.cljs

@@ -28,7 +28,7 @@
   (let [config-content (or (some-> (find-on-classpath "templates/config.edn") fs/readFileSync str)
                            (do (println "Setting graph's config to empty since no templates/config.edn was found.")
                                "{}"))]
-    (d/transact! conn (sqlite-create-graph/build-db-initial-data config-content))))
+    (d/transact! conn (sqlite-create-graph/build-db-initial-data @conn config-content))))
 
 (defn init-conn
   "Create sqlite DB, initialize datascript connection and sync listener and then
@@ -148,10 +148,10 @@
    :checkbox, :number, :page and :date. :checkbox and :number values are written
    as booleans and integers. :page and :block are references that are written as
    vectors e.g. `[:page \"PAGE NAME\"]` and `[:block \"block content\"]`
-   
+
    This fn also takes an optional map arg which supports these keys:
    * :property-uuids - A map of property keyword names to uuids to provide ids for built-in properties"
-  [{:keys [pages-and-blocks properties]} & {:as options}]
+  [db {:keys [pages-and-blocks properties]} & {:as options}]
   (let [;; add uuids before tx for refs in :properties
         pages-and-blocks' (mapv (fn [{:keys [page blocks]}]
                                   (cond-> {:page (merge {:block/uuid (random-uuid)} page)}
@@ -167,6 +167,7 @@
                             (fn [[prop-name uuid]]
                               (if (get-in properties [prop-name :closed-values])
                                 (db-property-util/build-closed-values
+                                 db
                                  prop-name
                                  (assoc (get properties prop-name) :block/uuid uuid)
                                  {:icon-id
@@ -211,4 +212,4 @@
                        []
                        blocks))))
           pages-and-blocks'))]
-    (into pages-and-blocks-tx new-properties-tx)))
+    (into pages-and-blocks-tx new-properties-tx)))

+ 2 - 2
scripts/src/logseq/tasks/db_graph/create_graph_with_inferred_properties.cljs

@@ -63,11 +63,11 @@
                         ((juxt node-path/dirname node-path/basename) graph-dir)
                         [(node-path/join (os/homedir) "logseq" "graphs") graph-dir])
         conn (create-graph/init-conn dir db-name)
-        blocks-tx (create-graph/create-blocks-tx (create-init-data))]
+        blocks-tx (create-graph/create-blocks-tx @conn (create-init-data))]
     (println "Generating" (count (filter :block/name blocks-tx)) "pages and"
              (count (filter :block/content blocks-tx)) "blocks ...")
     (d/transact! conn blocks-tx)
     (println "Created graph" (str db-name "!"))))
 
 (when (= nbb/*file* (:file (meta #'-main)))
-  (-main *command-line-args*))
+  (-main *command-line-args*))

+ 2 - 2
scripts/src/logseq/tasks/db_graph/create_graph_with_large_sizes.cljs

@@ -65,7 +65,7 @@
                         [(node-path/join (os/homedir) "logseq" "graphs") graph-dir])
         conn (create-graph/init-conn dir db-name)
         _ (println "Building tx ...")
-        blocks-tx (create-graph/create-blocks-tx (create-init-data options))]
+        blocks-tx (create-graph/create-blocks-tx @conn (create-init-data options))]
     (println "Built" (count blocks-tx) "tx," (count (filter :block/name blocks-tx)) "pages and"
              (count (filter :block/content blocks-tx)) "blocks ...")
     ;; Vary the chunking with page size up to a max to avoid OOM
@@ -81,4 +81,4 @@
     (println "Created graph" (str db-name " with " (count (d/datoms @conn :eavt)) " datoms!"))))
 
 (when (= nbb/*file* (:file (meta #'-main)))
-  (-main *command-line-args*))
+  (-main *command-line-args*))

+ 2 - 1
scripts/src/logseq/tasks/db_graph/create_graph_with_properties.cljs

@@ -117,6 +117,7 @@
                         [(node-path/join (os/homedir) "logseq" "graphs") graph-dir])
         conn (create-graph/init-conn dir db-name)
         blocks-tx (create-graph/create-blocks-tx
+                   @conn
                    (create-init-data)
                    {:property-uuids {:icon (:block/uuid (d/entity @conn [:block/name "icon"]))}})]
     (println "Generating" (count (filter :block/name blocks-tx)) "pages and"
@@ -125,4 +126,4 @@
     (println "Created graph" (str db-name " with " (count (d/datoms @conn :eavt)) " datoms!"))))
 
 (when (= nbb/*file* (:file (meta #'-main)))
-  (-main *command-line-args*))
+  (-main *command-line-args*))

+ 2 - 2
scripts/src/logseq/tasks/db_graph/create_graph_with_schema_org.cljs

@@ -391,7 +391,7 @@
         conn (create-graph/init-conn dir db-name)
         init-data (create-init-data (d/q '[:find [?name ...] :where [?b :block/name ?name]] @conn)
                                     options)
-        blocks-tx (create-graph/create-blocks-tx init-data)]
+        blocks-tx (create-graph/create-blocks-tx @conn init-data)]
     (println "Generating" (str (count (filter :block/name blocks-tx)) " pages with "
                                (count (:pages-and-blocks init-data)) " classes and "
                                (count (:properties init-data)) " properties ..."))
@@ -401,4 +401,4 @@
     (println "Created graph" (str db-name "!"))))
 
 (when (= nbb/*file* (:file (meta #'-main)))
-  (-main *command-line-args*))
+  (-main *command-line-args*))

+ 2 - 1
src/main/frontend/components/block.cljs

@@ -3638,7 +3638,8 @@
 (defn hidden-page->source-page
   [page]
   (or
-   (when-let [page-uuid (get-in (db/entity (:db/id page)) [:block/metadata :source-page-id])]
+   (when-let [page-uuid (get-in (db/entity (:db/id page))
+                                [:block/properties (:block/uuid (db/entity :source-page-id))])]
      (db/entity [:block/uuid page-uuid]))
 
    ;; FIXME: what if the source page has been deleted?

+ 1 - 1
src/main/frontend/components/db_based/page.cljs

@@ -30,7 +30,7 @@
         has-viewable-properties? (db-property-handler/block-has-viewable-properties? page)
         has-class-properties? (seq (:properties (:block/schema page)))
         has-tags? (seq (:block/tags page))
-        hide-properties? (get-in page [:block/metadata :hide-properties?])]
+        hide-properties? (get-in page [:block/properties (:block/uuid (db/entity :hide-properties?))])]
     (when (or configure?
               (and
                (not hide-properties?)

+ 1 - 1
src/main/frontend/components/page.cljs

@@ -364,7 +364,7 @@
                                (when (and (not hls-page?)
                                           (not fmt-journal?)
                                           (not config/publishing?)
-                                          (not (ldb/built-in? page)))
+                                          (not (ldb/built-in? (db/get-db) page)))
                                  (reset! *input-value (if untitled? "" old-name))
                                  (reset! *edit? true))))))}
 

+ 4 - 4
src/main/frontend/components/property.cljs

@@ -157,7 +157,7 @@
             *property-schema (::property-schema state)
             built-in-property? (contains? db-property/built-in-properties-keys-str (:block/original-name property))
             property (db/sub-block (:db/id property))
-            built-in? (ldb/built-in? property)
+            built-in? (ldb/built-in? (db/get-db) property)
             disabled? (or built-in? config/publishing?)
             hide-delete? (or (= (:db/id block) (:db/id property)) ; property page
                              add-new-property?)
@@ -213,7 +213,7 @@
                                            :disabled disabled?
                                            :value type
                                            :selected (= type (:type @*property-schema))})))]
-             (if (or (ldb/built-in? property)
+             (if (or (ldb/built-in? (db/get-db) property)
                      (and property-type (seq values)))
                [:div.flex.items-center.col-span-2
                 (property-type-label property-type)
@@ -355,7 +355,7 @@
                  :disabled      disabled?
                  :default-value (:description @*property-schema)})])]]
 
-          (when-not (or hide-delete? (ldb/built-in-class-property? block property))
+          (when-not (or hide-delete? (ldb/built-in-class-property? (db/get-db) block property))
             (shui/button
              {:variant :secondary
               :class "mt-4 hover:text-red-700"
@@ -557,7 +557,7 @@
                                                             (components-pu/update-property! property property-name (assoc schema :hide? true))
                                                             (shui/popup-hide!)))}
                                              "Hide property")
-                                            (when-not (ldb/built-in-class-property? block property)
+                                            (when-not (ldb/built-in-class-property? (db/get-db) block property)
                                               (shui/dropdown-menu-item
                                                {:on-click (fn []
                                                             (handle-delete-property! block property {:class-schema? class-schema?})

+ 1 - 1
src/main/frontend/components/property/value.cljs

@@ -659,7 +659,7 @@
                           :default)
                  type (if (= :block type)
                         (let [v-block (db/entity [:block/uuid value])]
-                          (if (get-in v-block [:block/metadata :created-from-template])
+                          (if (get-in v-block [:block/properties (:block/uuid (db/entity :created-from-template))])
                             :template
                             type))
                         type)

+ 5 - 1
src/main/frontend/db_worker.cljs

@@ -373,7 +373,11 @@
          nil)
        (catch :default e
          (prn :debug :error)
-         (js/console.error e tx-data)))))
+         (let [tx-data (if (string? tx-data)
+                         (ldb/read-transit-str tx-data)
+                         tx-data)]
+           (js/console.error e)
+           (prn :debug :tx-data tx-data))))))
 
   (getInitialData
    [_this repo]

+ 23 - 19
src/main/frontend/handler/db_based/property.cljs

@@ -313,7 +313,7 @@
             property-values (db-async/<get-block-property-values repo property-uuid)]
       (when (or (not type-changed?)
                 ;; only change type if property hasn't been used yet
-                (and (not (ldb/built-in? property)) (empty? property-values)))
+                (and (not (ldb/built-in? (db/get-db) property)) (empty? property-values)))
         (when (not= ::skip-transact (handle-cardinality-changes repo property-uuid property property-schema property-values))
           (let [tx-data (cond-> {:block/uuid property-uuid}
                           property-name (merge
@@ -356,7 +356,7 @@
   (when-let [class (db/entity repo [:block/uuid class-uuid])]
     (when (contains? (:block/type class) "class")
       (when-let [property (db/entity repo [:block/uuid k-uuid])]
-        (when-not (ldb/built-in-class-property? class property)
+        (when-not (ldb/built-in-class-property? (db/get-db) class property)
           (let [property-uuid (:block/uuid property)
                 {:keys [properties] :as class-schema} (:block/schema class)
                 new-properties (vec (distinct (remove #{property-uuid} properties)))
@@ -427,9 +427,11 @@
                              block-value? (and (= :default (get-in property [:block/schema :type] :default))
                                                (uuid? value))
                              property-block (when block-value? (db/entity [:block/uuid value]))
+                             created-from-block-uuid (:block/uuid (db/entity :created-from-block))
+                             created-from-property-uuid (:block/uuid (db/entity :created-from-property))
                              retract-blocks-tx (when (and property-block
-                                                          (some? (get-in property-block [:block/metadata :created-from-block]))
-                                                          (some? (get-in property-block [:block/metadata :created-from-property])))
+                                                          (some? (get-in property-block [:block/properties created-from-block-uuid]))
+                                                          (some? (get-in property-block [:block/properties created-from-property-uuid])))
                                                  (let [txs-state (atom [])]
                                                    (outliner-core/delete-block repo
                                                                                (db/get-db false)
@@ -592,12 +594,12 @@
                  (-> (block/page-name->map page-name true)
                      (assoc :block/type #{"hidden"}
                             :block/format :markdown
-                            :block/metadata {:source-page-id current-page-id})))
+                            :block/properties {(:block/uuid (db/entity :source-page-id)) current-page-id})))
         page-tx (when-not page-entity page)
         page-id [:block/uuid (:block/uuid page)]
         parent-id (db/new-block-id)
-        metadata {:created-from-block (:block/uuid block)
-                  :created-from-property (:block/uuid property)}
+        properties {(:block/uuid (db/entity :created-from-block)) (:block/uuid block)
+                    (:block/uuid (db/entity :created-from-property)) (:block/uuid property)}
         parent (-> {:block/uuid parent-id
                     :block/format :markdown
                     :block/content ""
@@ -605,7 +607,7 @@
                     :block/parent page-id
                     :block/left (or (when page-entity (model/get-block-last-direct-child-id (db/get-db) (:db/id page-entity)))
                                     page-id)
-                    :block/metadata metadata}
+                    :block/properties properties}
                    sqlite-util/block-with-timestamps)
         child-1-id (db/new-block-id)
         child-1 (-> {:block/uuid child-1-id
@@ -644,19 +646,19 @@
                  (-> (block/page-name->map page-name true)
                      (assoc :block/type #{"hidden"}
                             :block/format :markdown
-                            :block/metadata {:source-page-id current-page-id})))
+                            :block/properties {(:block/uuid (db/entity :source-page-id)) current-page-id})))
         page-tx (when-not page-entity page)
         page-id [:block/uuid (:block/uuid page)]
         block-id (db/new-block-id)
-        metadata {:created-from-block (:block/uuid block)
-                  :created-from-property (:block/uuid property)
-                  :created-from-template (:block/uuid template)}
+        properties {(:block/uuid (db/entity :created-from-block)) (:block/uuid block)
+                    (:block/uuid (db/entity :created-from-property)) (:block/uuid property)
+                    (:block/uuid (db/entity :created-from-template)) (:block/uuid template)}
         new-block (-> {:block/uuid block-id
                        :block/format :markdown
                        :block/content ""
                        :block/tags #{(:db/id template)}
                        :block/page page-id
-                       :block/metadata metadata
+                       :block/properties properties
                        :block/parent page-id
                        :block/left (or (when page-entity (model/get-block-last-direct-child-id (db/get-db) (:db/id page-entity)))
                                        page-id)}
@@ -741,7 +743,7 @@
                           (let [page (get-property-hidden-page property)
                                 page-tx (when-not (e/entity? page) page)
                                 page-id [:block/uuid (:block/uuid page)]
-                                new-block (db-property-util/build-closed-value-block
+                                new-block (db-property-util/build-closed-value-block (db/get-db)
                                            block-id resolved-value page-id property {:icon-id icon-id
                                                                                      :icon icon
                                                                                      :description description})
@@ -766,6 +768,7 @@
             values' (remove string/blank? values)
             closed-value-blocks (map (fn [value]
                                        (db-property-util/build-closed-value-block
+                                        (db/get-db)
                                         (db/new-block-id)
                                         value
                                         [:block/uuid page-id]
@@ -817,12 +820,13 @@
   [eid]
   (let [b (db/entity eid)
         parents (model/get-block-parents (state/get-current-repo) (:block/uuid b) {})
-        {:keys [created-from-block created-from-property]}
+        [created-from-block created-from-property]
         (some (fn [block]
-                (let [metadata (:block/metadata block)
-                      result (select-keys metadata [:created-from-block :created-from-property])]
-                  (when (seq result)
-                    result))) (reverse parents))
+                (let [properties (:block/properties block)
+                      from-block (get properties (:block/uuid (db/entity :created-from-block)))
+                      from-property (get properties (:block/uuid (db/entity :created-from-property)))]
+                  (when (and from-block from-property)
+                    [from-block from-property]))) (reverse parents))
         from-block (when created-from-block (db/entity [:block/uuid created-from-block]))
         from-property (when created-from-property (db/entity [:block/uuid created-from-property]))]
     {:from-block-id (or (:db/id from-block) (:db/id b))

+ 3 - 3
src/main/frontend/handler/page.cljs

@@ -430,7 +430,7 @@
 
 (defn toggle-properties!
   [page-entity]
-  (let [current-value (get-in page-entity [:block/metadata :hide-properties?])]
+  (let [properties (:block/properties page-entity)
+        pid (:block/uuid (db/entity :hide-properties?))]
     (db/transact! [{:db/id (:db/id page-entity)
-                    :block/metadata (assoc (:block/metadata page-entity)
-                                           :hide-properties? (not current-value))}])))
+                    :block/properties (update properties pid not)}])))

+ 3 - 1
src/main/frontend/handler/repo.cljs

@@ -186,7 +186,9 @@
            _ (start-repo-db-if-not-exists! full-graph-name)
            _ (state/add-repo! {:url full-graph-name})
            _ (when-not file-graph-import? (route-handler/redirect-to-home!))
-           initial-data (sqlite-create-graph/build-db-initial-data (migrate-db-config config/config-default-content))
+           initial-data (sqlite-create-graph/build-db-initial-data
+                         (db/get-db)
+                         (migrate-db-config config/config-default-content))
            _ (db/transact! full-graph-name initial-data)
            _ (repo-config-handler/set-repo-config-state! full-graph-name config/config-default-content)
           ;; TODO: handle global graph

+ 1 - 1
src/main/frontend/worker/handler/page.cljs

@@ -211,7 +211,7 @@
                                      [:db.fn/retractEntity [:block/uuid (:block/uuid block)]])
                                    blocks)
           db-based? (sqlite-util/db-based-graph? repo)]
-      (if (ldb/built-in? page)
+      (if (ldb/built-in? @conn page)
         (do
           (error-handler {:msg "Built-in page cannot be deleted"})
           false)

+ 1 - 1
src/main/frontend/worker/handler/page/rename.cljs

@@ -254,7 +254,7 @@
         new-page-e (d/entity db [:block/name new-page-name])
         name-changed? (not= old-name new-name)]
     (cond
-      (ldb/built-in? page-e)
+      (ldb/built-in? @conn page-e)
       :built-in-page
 
       (string/blank? new-name)

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

@@ -28,7 +28,7 @@
   (let [after-db (:db-after tx-report)
         empty-property-parents (->> (keep (fn [child-id]
                                             (let [e (d/entity (:db-before tx-report) [:block/uuid child-id])]
-                                              (when (:created-from-property (:block/metadata (:block/parent e)))
+                                              (when (get-in (:block/parent e) [:block/properties (:block/uuid (d/entity after-db :created-from-property))])
                                                 (let [parent-now (d/entity after-db (:db/id (:block/parent e)))]
                                                   (when (empty? (:block/_parent parent-now))
                                                     parent-now))))) deleted-block-uuids)
@@ -36,7 +36,9 @@
     (when (seq empty-property-parents)
       (->>
        (mapcat (fn [b]
-                 (let [{:keys [created-from-block created-from-property]} (:block/metadata b)
+                 (let [properties (:block/properties b)
+                       created-from-block (get properties (:block/uuid (d/entity after-db :created-from-block)))
+                       created-from-property (get properties (:block/uuid (d/entity after-db :created-from-property)))
                        created-block (d/entity after-db [:block/uuid created-from-block])
                        properties (assoc (:block/properties created-block) created-from-property "")]
                    (when (and created-block created-from-property)

+ 1 - 1
src/main/frontend/worker/search.cljs

@@ -208,7 +208,7 @@
                                            (:block/original-name e)
                                            ;; block generated by template
                                            (and
-                                            (get-in e [:block/metadata :created-from-template])
+                                            (get-in e [:block/properties (:block/uuid (d/entity db :created-from-template))])
                                             (:block/content e))
                                            ;; first child
                                            (let [parent-id (:db/id e)]