Преглед изворни кода

fix: remove :block/metadata

Use built-in properties
Tienson Qin пре 1 година
родитељ
комит
22a9b61b32
26 измењених фајлова са 118 додато и 104 уклоњено
  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?
 (defn built-in?
   "Built-in page or block"
   "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?
 (defn built-in-class-property?
   "Whether property a built-in property for the specific class"
   "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]]
   (let [class-properties (some (fn [[_k v]]
                                  (when (= (:original-name v) (:block/original-name class-entity))
                                  (when (= (:original-name v) (:block/original-name class-entity))
                                    (set (get-in v [:schema :properties]))))
                                    (set (get-in v [:schema :properties]))))
                                db-class/built-in-classes)]
                                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)))))
          (contains? class-properties (:block/name property-entity)))))
 
 
 (def write-transit-str sqlite-util/write-transit-str)
 (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]
      [:block/collapsed? {:optional true} :boolean]
      ;; journal-day is only set for journal pages
      ;; journal-day is only set for journal pages
      [:block/journal-day {:optional true} :int]
      [: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-attrs
     page-or-block-attrs)))
     page-or-block-attrs)))
 
 
@@ -116,11 +114,7 @@
      [:block/schema
      [:block/schema
       {:optional true}
       {:optional true}
       [:map
       [: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-attrs
     page-or-block-attrs)))
     page-or-block-attrs)))
 
 
@@ -152,9 +146,7 @@
          [:type (apply vector :enum (into db-property-type/internal-built-in-property-types
          [:type (apply vector :enum (into db-property-type/internal-built-in-property-types
                                           db-property-type/user-built-in-property-types))]]
                                           db-property-type/user-built-in-property-types))]]
         property-common-schema-attrs
         property-common-schema-attrs
-        property-type-schema-attrs))]
-     [:block/metadata
-     [:map [:built-in? :boolean]]]]
+        property-type-schema-attrs))]]
     page-attrs
     page-attrs
     page-or-block-attrs)))
     page-or-block-attrs)))
 
 
@@ -191,11 +183,7 @@
 (def hidden-page
 (def hidden-page
   (vec
   (vec
    (concat
    (concat
-    [:map
-     ;; hidden pages for enum values don't have this
-     [:block/metadata {:optional true}
-      [:map
-       [:source-page-id :uuid]]]]
+    [:map]
     page-attrs
     page-attrs
     page-or-block-attrs)))
     page-or-block-attrs)))
 
 
@@ -211,13 +199,7 @@
   [[:block/content :string]
   [[:block/content :string]
    [:block/left :int]
    [:block/left :int]
    [:block/parent :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/page :int]
    [:block/path-refs {:optional true} [:set :int]]
    [:block/path-refs {:optional true} [:set :int]]
    [:block/macros {:optional true} [:set :int]]
    [:block/macros {:optional true} [:set :int]]
@@ -254,11 +236,8 @@
      [:block/schema {:optional true}
      [:block/schema {:optional true}
       [:map
       [:map
        [:value [:or :string :double]]
        [: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)))
     page-or-block-attrs)))
 
 
 (def normal-block
 (def normal-block

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

@@ -5,6 +5,9 @@
             [datascript.core :as d]
             [datascript.core :as d]
             [logseq.common.util :as common-util]))
             [logseq.common.util :as common-util]))
 
 
+(def first-stage-properties
+  #{:built-in? :created-from-property})
+
 ;; FIXME: no support for built-in-extended-properties
 ;; FIXME: no support for built-in-extended-properties
 (def ^:large-vars/data-var built-in-properties
 (def ^:large-vars/data-var built-in-properties
   "Map of built in properties for db graphs. Each property has a config map with
   "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}
    :background-image {:schema {:type :default :hide? true}
                       :visible true}
                       :visible true}
    :heading {:schema {:type :any :hide? true}}      ; number (1-6) or boolean for auto heading
    :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-table {:schema {:type :checkbox}}
    ;; query-properties is a coll of property uuids and keywords where keywords are special frontend keywords
    ;; query-properties is a coll of property uuids and keywords where keywords are special frontend keywords
    :query-properties {:schema {:type :coll}}
    :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
 (def internal-built-in-property-types
   "Valid property types only for use by internal built-in-properties"
   "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
 (def user-built-in-property-types
   "Valid property types for users in order they appear in the UI"
   "Valid property types for users in order they appear in the UI"
@@ -122,6 +122,7 @@
               logseq-template?]
               logseq-template?]
    ;; internal usage
    ;; internal usage
    :keyword  keyword?
    :keyword  keyword?
+   :uuid     uuid?
    :map      map?
    :map      map?
    ;; coll elements are ordered as it's saved as a vec
    ;; coll elements are ordered as it's saved as a vec
    :coll     coll?
    :coll     coll?
@@ -152,4 +153,4 @@
     (number? val) :number
     (number? val) :number
     (url? val) :url
     (url? val) :url
     (contains? #{true false} val) :checkbox
     (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 "$$$")
 (defonce hidden-page-name-prefix "$$$")
 
 
 (defn- closed-value-new-block
 (defn- closed-value-new-block
-  [page-id block-id value property]
+  [db page-id block-id value property]
   {:block/type #{"closed value"}
   {:block/type #{"closed value"}
    :block/format :markdown
    :block/format :markdown
    :block/uuid block-id
    :block/uuid block-id
    :block/page page-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/schema {:value value}
    :block/parent page-id})
    :block/parent page-id})
 
 
 (defn build-closed-value-block
 (defn build-closed-value-block
   "Builds a closed value block to be transacted"
   "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->
   (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))
     (and db-ident (keyword? db-ident))
     (assoc :db/ident db-ident)
     (assoc :db/ident db-ident)
 
 
@@ -53,8 +53,8 @@
 (defn build-closed-values
 (defn build-closed-values
   "Builds all the tx needed for property with closed values including
   "Builds all the tx needed for property with closed values including
    the hidden page and closed value blocks as needed"
    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)
   (let [page-tx (build-property-hidden-page property)
         page-id [:block/uuid (:block/uuid page-tx)]
         page-id [:block/uuid (:block/uuid page-tx)]
         closed-value-page-uuids? (contains? #{:page :date} (get-in property [:block/schema :type]))
         closed-value-page-uuids? (contains? #{:page :date} (get-in property [:block/schema :type]))
@@ -62,7 +62,7 @@
         (if closed-value-page-uuids?
         (if closed-value-page-uuids?
           (map translate-closed-page-value-fn (:closed-values property))
           (map translate-closed-page-value-fn (:closed-values property))
           (map (fn [{:keys [db-ident value icon description uuid]}]
           (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
                   uuid value page-id property {:db-ident db-ident
                                                :icon-id icon-id
                                                :icon-id icon-id
                                                :icon icon
                                                :icon icon

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

@@ -71,9 +71,6 @@
    ;; map, key -> original property value's content
    ;; map, key -> original property value's content
    :block/properties-text-values {}
    :block/properties-text-values {}
 
 
-   ;; non-indexed metadata
-   :block/metadata {}
-
    ;; first block that's not a heading or unordered list
    ;; first block that's not a heading or unordered list
    :block/pre-block? {}
    :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]))
             [logseq.db.frontend.default :as default-db]))
 
 
 (defn- mark-block-as-built-in
 (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
 (defn- build-initial-properties
-  []
+  [db]
   (let [;; Some uuids need to be pre-defined since they are referenced by other properties
   (let [;; Some uuids need to be pre-defined since they are referenced by other properties
         default-property-uuids {:icon (d/squuid)}
         default-property-uuids {:icon (d/squuid)}
         built-in-properties (->>
         built-in-properties (->>
@@ -27,23 +28,34 @@
     (mapcat
     (mapcat
      (fn [[k-keyword {:keys [schema original-name closed-values db-ident]}]]
      (fn [[k-keyword {:keys [schema original-name closed-values db-ident]}]]
        (let [k-name (name k-keyword)
        (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
              blocks (if closed-values
                       (db-property-util/build-closed-values
                       (db-property-util/build-closed-values
+                       db
                        (or original-name k-name)
                        (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)
                        {:icon-id (get default-property-uuids :icon)
                         :db-ident db-ident})
                         :db-ident db-ident})
                       [(sqlite-util/build-new-property
                       [(sqlite-util/build-new-property
                         (or original-name k-name)
                         (or original-name k-name)
                         schema
                         schema
-                        (get default-property-uuids k-keyword (d/squuid))
+                        (get default-property-uuids k-keyword id)
                         {:db-ident db-ident})])]
                         {:db-ident db-ident})])]
-         (update blocks 0 mark-block-as-built-in)))
+         (update blocks 0 #(mark-block-as-built-in db %))))
      built-in-properties)))
      built-in-properties)))
 
 
 (defn build-db-initial-data
 (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}]
                       {:db/ident :schema/version :schema/version db-schema/version}]
         initial-files [{:block/uuid (d/squuid)
         initial-files [{:block/uuid (d/squuid)
                         :file/path (str "logseq/" "config.edn")
                         :file/path (str "logseq/" "config.edn")
@@ -58,8 +70,8 @@
                         :file/content ""
                         :file/content ""
                         :file/last-modified-at (js/Date.)}]
                         :file/last-modified-at (js/Date.)}]
         default-pages (->> (ldb/build-pages-tx (map default-db/page-title->block ["Contents"]))
         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
         name->properties (zipmap
                           (map :block/name default-properties)
                           (map :block/name default-properties)
                           default-properties)
                           default-properties)
@@ -67,6 +79,7 @@
                          (fn [[k-keyword {:keys [schema original-name]}]]
                          (fn [[k-keyword {:keys [schema original-name]}]]
                            (let [k-name (name k-keyword)]
                            (let [k-name (name k-keyword)]
                              (mark-block-as-built-in
                              (mark-block-as-built-in
+                              db
                               (sqlite-util/build-new-class
                               (sqlite-util/build-new-class
                                (let [properties (mapv
                                (let [properties (mapv
                                                  (fn [property-name]
                                                  (fn [property-name]

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

@@ -230,7 +230,7 @@
 
 
                                              (uuid? v)
                                              (uuid? v)
                                              (when-let [entity (d/entity db [:block/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")))
                                                  (if (and from-property? (not (contains? (:block/type entity) "closed value")))
                                                    ;; don't reference hidden block property values except closed values
                                                    ;; 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)
   (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.")
                            (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
 (defn init-conn
   "Create sqlite DB, initialize datascript connection and sync listener and then
   "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
    :checkbox, :number, :page and :date. :checkbox and :number values are written
    as booleans and integers. :page and :block are references that are written as
    as booleans and integers. :page and :block are references that are written as
    vectors e.g. `[:page \"PAGE NAME\"]` and `[:block \"block content\"]`
    vectors e.g. `[:page \"PAGE NAME\"]` and `[:block \"block content\"]`
-   
+
    This fn also takes an optional map arg which supports these keys:
    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"
    * :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
   (let [;; add uuids before tx for refs in :properties
         pages-and-blocks' (mapv (fn [{:keys [page blocks]}]
         pages-and-blocks' (mapv (fn [{:keys [page blocks]}]
                                   (cond-> {:page (merge {:block/uuid (random-uuid)} page)}
                                   (cond-> {:page (merge {:block/uuid (random-uuid)} page)}
@@ -167,6 +167,7 @@
                             (fn [[prop-name uuid]]
                             (fn [[prop-name uuid]]
                               (if (get-in properties [prop-name :closed-values])
                               (if (get-in properties [prop-name :closed-values])
                                 (db-property-util/build-closed-values
                                 (db-property-util/build-closed-values
+                                 db
                                  prop-name
                                  prop-name
                                  (assoc (get properties prop-name) :block/uuid uuid)
                                  (assoc (get properties prop-name) :block/uuid uuid)
                                  {:icon-id
                                  {:icon-id
@@ -211,4 +212,4 @@
                        []
                        []
                        blocks))))
                        blocks))))
           pages-and-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)
                         ((juxt node-path/dirname node-path/basename) graph-dir)
                         [(node-path/join (os/homedir) "logseq" "graphs") graph-dir])
                         [(node-path/join (os/homedir) "logseq" "graphs") graph-dir])
         conn (create-graph/init-conn dir db-name)
         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"
     (println "Generating" (count (filter :block/name blocks-tx)) "pages and"
              (count (filter :block/content blocks-tx)) "blocks ...")
              (count (filter :block/content blocks-tx)) "blocks ...")
     (d/transact! conn blocks-tx)
     (d/transact! conn blocks-tx)
     (println "Created graph" (str db-name "!"))))
     (println "Created graph" (str db-name "!"))))
 
 
 (when (= nbb/*file* (:file (meta #'-main)))
 (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])
                         [(node-path/join (os/homedir) "logseq" "graphs") graph-dir])
         conn (create-graph/init-conn dir db-name)
         conn (create-graph/init-conn dir db-name)
         _ (println "Building tx ...")
         _ (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"
     (println "Built" (count blocks-tx) "tx," (count (filter :block/name blocks-tx)) "pages and"
              (count (filter :block/content blocks-tx)) "blocks ...")
              (count (filter :block/content blocks-tx)) "blocks ...")
     ;; Vary the chunking with page size up to a max to avoid OOM
     ;; 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!"))))
     (println "Created graph" (str db-name " with " (count (d/datoms @conn :eavt)) " datoms!"))))
 
 
 (when (= nbb/*file* (:file (meta #'-main)))
 (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])
                         [(node-path/join (os/homedir) "logseq" "graphs") graph-dir])
         conn (create-graph/init-conn dir db-name)
         conn (create-graph/init-conn dir db-name)
         blocks-tx (create-graph/create-blocks-tx
         blocks-tx (create-graph/create-blocks-tx
+                   @conn
                    (create-init-data)
                    (create-init-data)
                    {:property-uuids {:icon (:block/uuid (d/entity @conn [:block/name "icon"]))}})]
                    {:property-uuids {:icon (:block/uuid (d/entity @conn [:block/name "icon"]))}})]
     (println "Generating" (count (filter :block/name blocks-tx)) "pages and"
     (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!"))))
     (println "Created graph" (str db-name " with " (count (d/datoms @conn :eavt)) " datoms!"))))
 
 
 (when (= nbb/*file* (:file (meta #'-main)))
 (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)
         conn (create-graph/init-conn dir db-name)
         init-data (create-init-data (d/q '[:find [?name ...] :where [?b :block/name ?name]] @conn)
         init-data (create-init-data (d/q '[:find [?name ...] :where [?b :block/name ?name]] @conn)
                                     options)
                                     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 "
     (println "Generating" (str (count (filter :block/name blocks-tx)) " pages with "
                                (count (:pages-and-blocks init-data)) " classes and "
                                (count (:pages-and-blocks init-data)) " classes and "
                                (count (:properties init-data)) " properties ..."))
                                (count (:properties init-data)) " properties ..."))
@@ -401,4 +401,4 @@
     (println "Created graph" (str db-name "!"))))
     (println "Created graph" (str db-name "!"))))
 
 
 (when (= nbb/*file* (:file (meta #'-main)))
 (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
 (defn hidden-page->source-page
   [page]
   [page]
   (or
   (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]))
      (db/entity [:block/uuid page-uuid]))
 
 
    ;; FIXME: what if the source page has been deleted?
    ;; 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-viewable-properties? (db-property-handler/block-has-viewable-properties? page)
         has-class-properties? (seq (:properties (:block/schema page)))
         has-class-properties? (seq (:properties (:block/schema page)))
         has-tags? (seq (:block/tags 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?
     (when (or configure?
               (and
               (and
                (not hide-properties?)
                (not hide-properties?)

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

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

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

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

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

@@ -659,7 +659,7 @@
                           :default)
                           :default)
                  type (if (= :block type)
                  type (if (= :block type)
                         (let [v-block (db/entity [:block/uuid value])]
                         (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
                             :template
                             type))
                             type))
                         type)
                         type)

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

@@ -373,7 +373,11 @@
          nil)
          nil)
        (catch :default e
        (catch :default e
          (prn :debug :error)
          (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
   (getInitialData
    [_this repo]
    [_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)]
             property-values (db-async/<get-block-property-values repo property-uuid)]
       (when (or (not type-changed?)
       (when (or (not type-changed?)
                 ;; only change type if property hasn't been used yet
                 ;; 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))
         (when (not= ::skip-transact (handle-cardinality-changes repo property-uuid property property-schema property-values))
           (let [tx-data (cond-> {:block/uuid property-uuid}
           (let [tx-data (cond-> {:block/uuid property-uuid}
                           property-name (merge
                           property-name (merge
@@ -356,7 +356,7 @@
   (when-let [class (db/entity repo [:block/uuid class-uuid])]
   (when-let [class (db/entity repo [:block/uuid class-uuid])]
     (when (contains? (:block/type class) "class")
     (when (contains? (:block/type class) "class")
       (when-let [property (db/entity repo [:block/uuid k-uuid])]
       (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)
           (let [property-uuid (:block/uuid property)
                 {:keys [properties] :as class-schema} (:block/schema class)
                 {:keys [properties] :as class-schema} (:block/schema class)
                 new-properties (vec (distinct (remove #{property-uuid} properties)))
                 new-properties (vec (distinct (remove #{property-uuid} properties)))
@@ -427,9 +427,11 @@
                              block-value? (and (= :default (get-in property [:block/schema :type] :default))
                              block-value? (and (= :default (get-in property [:block/schema :type] :default))
                                                (uuid? value))
                                                (uuid? value))
                              property-block (when block-value? (db/entity [:block/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
                              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 [])]
                                                  (let [txs-state (atom [])]
                                                    (outliner-core/delete-block repo
                                                    (outliner-core/delete-block repo
                                                                                (db/get-db false)
                                                                                (db/get-db false)
@@ -592,12 +594,12 @@
                  (-> (block/page-name->map page-name true)
                  (-> (block/page-name->map page-name true)
                      (assoc :block/type #{"hidden"}
                      (assoc :block/type #{"hidden"}
                             :block/format :markdown
                             :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-tx (when-not page-entity page)
         page-id [:block/uuid (:block/uuid page)]
         page-id [:block/uuid (:block/uuid page)]
         parent-id (db/new-block-id)
         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
         parent (-> {:block/uuid parent-id
                     :block/format :markdown
                     :block/format :markdown
                     :block/content ""
                     :block/content ""
@@ -605,7 +607,7 @@
                     :block/parent page-id
                     :block/parent page-id
                     :block/left (or (when page-entity (model/get-block-last-direct-child-id (db/get-db) (:db/id page-entity)))
                     :block/left (or (when page-entity (model/get-block-last-direct-child-id (db/get-db) (:db/id page-entity)))
                                     page-id)
                                     page-id)
-                    :block/metadata metadata}
+                    :block/properties properties}
                    sqlite-util/block-with-timestamps)
                    sqlite-util/block-with-timestamps)
         child-1-id (db/new-block-id)
         child-1-id (db/new-block-id)
         child-1 (-> {:block/uuid child-1-id
         child-1 (-> {:block/uuid child-1-id
@@ -644,19 +646,19 @@
                  (-> (block/page-name->map page-name true)
                  (-> (block/page-name->map page-name true)
                      (assoc :block/type #{"hidden"}
                      (assoc :block/type #{"hidden"}
                             :block/format :markdown
                             :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-tx (when-not page-entity page)
         page-id [:block/uuid (:block/uuid page)]
         page-id [:block/uuid (:block/uuid page)]
         block-id (db/new-block-id)
         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
         new-block (-> {:block/uuid block-id
                        :block/format :markdown
                        :block/format :markdown
                        :block/content ""
                        :block/content ""
                        :block/tags #{(:db/id template)}
                        :block/tags #{(:db/id template)}
                        :block/page page-id
                        :block/page page-id
-                       :block/metadata metadata
+                       :block/properties properties
                        :block/parent page-id
                        :block/parent page-id
                        :block/left (or (when page-entity (model/get-block-last-direct-child-id (db/get-db) (:db/id page-entity)))
                        :block/left (or (when page-entity (model/get-block-last-direct-child-id (db/get-db) (:db/id page-entity)))
                                        page-id)}
                                        page-id)}
@@ -741,7 +743,7 @@
                           (let [page (get-property-hidden-page property)
                           (let [page (get-property-hidden-page property)
                                 page-tx (when-not (e/entity? page) page)
                                 page-tx (when-not (e/entity? page) page)
                                 page-id [:block/uuid (:block/uuid 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
                                            block-id resolved-value page-id property {:icon-id icon-id
                                                                                      :icon icon
                                                                                      :icon icon
                                                                                      :description description})
                                                                                      :description description})
@@ -766,6 +768,7 @@
             values' (remove string/blank? values)
             values' (remove string/blank? values)
             closed-value-blocks (map (fn [value]
             closed-value-blocks (map (fn [value]
                                        (db-property-util/build-closed-value-block
                                        (db-property-util/build-closed-value-block
+                                        (db/get-db)
                                         (db/new-block-id)
                                         (db/new-block-id)
                                         value
                                         value
                                         [:block/uuid page-id]
                                         [:block/uuid page-id]
@@ -817,12 +820,13 @@
   [eid]
   [eid]
   (let [b (db/entity eid)
   (let [b (db/entity eid)
         parents (model/get-block-parents (state/get-current-repo) (:block/uuid b) {})
         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]
         (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-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-property (when created-from-property (db/entity [:block/uuid created-from-property]))]
     {:from-block-id (or (:db/id from-block) (:db/id b))
     {: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!
 (defn toggle-properties!
   [page-entity]
   [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)
     (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)
            _ (start-repo-db-if-not-exists! full-graph-name)
            _ (state/add-repo! {:url full-graph-name})
            _ (state/add-repo! {:url full-graph-name})
            _ (when-not file-graph-import? (route-handler/redirect-to-home!))
            _ (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)
            _ (db/transact! full-graph-name initial-data)
            _ (repo-config-handler/set-repo-config-state! full-graph-name config/config-default-content)
            _ (repo-config-handler/set-repo-config-state! full-graph-name config/config-default-content)
           ;; TODO: handle global graph
           ;; 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)]])
                                      [:db.fn/retractEntity [:block/uuid (:block/uuid block)]])
                                    blocks)
                                    blocks)
           db-based? (sqlite-util/db-based-graph? repo)]
           db-based? (sqlite-util/db-based-graph? repo)]
-      (if (ldb/built-in? page)
+      (if (ldb/built-in? @conn page)
         (do
         (do
           (error-handler {:msg "Built-in page cannot be deleted"})
           (error-handler {:msg "Built-in page cannot be deleted"})
           false)
           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])
         new-page-e (d/entity db [:block/name new-page-name])
         name-changed? (not= old-name new-name)]
         name-changed? (not= old-name new-name)]
     (cond
     (cond
-      (ldb/built-in? page-e)
+      (ldb/built-in? @conn page-e)
       :built-in-page
       :built-in-page
 
 
       (string/blank? new-name)
       (string/blank? new-name)

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

@@ -28,7 +28,7 @@
   (let [after-db (:db-after tx-report)
   (let [after-db (:db-after tx-report)
         empty-property-parents (->> (keep (fn [child-id]
         empty-property-parents (->> (keep (fn [child-id]
                                             (let [e (d/entity (:db-before tx-report) [:block/uuid 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)))]
                                                 (let [parent-now (d/entity after-db (:db/id (:block/parent e)))]
                                                   (when (empty? (:block/_parent parent-now))
                                                   (when (empty? (:block/_parent parent-now))
                                                     parent-now))))) deleted-block-uuids)
                                                     parent-now))))) deleted-block-uuids)
@@ -36,7 +36,9 @@
     (when (seq empty-property-parents)
     (when (seq empty-property-parents)
       (->>
       (->>
        (mapcat (fn [b]
        (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])
                        created-block (d/entity after-db [:block/uuid created-from-block])
                        properties (assoc (:block/properties created-block) created-from-property "")]
                        properties (assoc (:block/properties created-block) created-from-property "")]
                    (when (and 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/original-name e)
                                            ;; block generated by template
                                            ;; block generated by template
                                            (and
                                            (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))
                                             (:block/content e))
                                            ;; first child
                                            ;; first child
                                            (let [parent-id (:db/id e)]
                                            (let [parent-id (:db/id e)]