Sfoglia il codice sorgente

fix: rm the last file-based namespaces in db dep

Also remove the following related file schema
attributes and their dependent code:
:block/marker, :block/priority, :block/scheduled,
:block/deadline,:block/repeated?, :block/pre-block?,
:block/properties-order, :block/properties-text-values, :block/macros,
:block/invalid-properties
Gabriel Horner 1 settimana fa
parent
commit
44b5111ecc
31 ha cambiato i file con 166 aggiunte e 371 eliminazioni
  1. 0 3
      .clj-kondo/config.edn
  2. 1 5
      deps/db/.carve/ignore
  3. 0 3
      deps/db/.clj-kondo/config.edn
  4. 3 13
      deps/db/src/logseq/db.cljs
  5. 3 13
      deps/db/src/logseq/db/common/delete_blocks.cljs
  6. 3 6
      deps/db/src/logseq/db/common/entity_plus.cljc
  7. 0 26
      deps/db/src/logseq/db/common/entity_util.cljs
  8. 4 5
      deps/db/src/logseq/db/common/initial_data.cljs
  9. 5 10
      deps/db/src/logseq/db/common/sqlite_cli.cljs
  10. 0 14
      deps/db/src/logseq/db/file_based/entity_util.cljs
  11. 0 120
      deps/db/src/logseq/db/file_based/schema.cljs
  12. 1 2
      deps/db/src/logseq/db/frontend/content.cljs
  13. 6 0
      deps/db/src/logseq/db/frontend/entity_util.cljs
  14. 54 10
      deps/db/src/logseq/db/frontend/schema.cljs
  15. 8 1
      deps/graph-parser/src/logseq/graph_parser/block.cljs
  16. 19 3
      deps/graph-parser/src/logseq/graph_parser/exporter.cljs
  17. 6 2
      deps/graph-parser/test/logseq/graph_parser/extract_test.cljs
  18. 6 29
      deps/outliner/src/logseq/outliner/core.cljs
  19. 1 2
      scripts/src/logseq/tasks/dev/db_and_file_graphs.clj
  20. 8 54
      src/main/frontend/components/block.cljs
  21. 2 4
      src/main/frontend/format/block.cljs
  22. 1 1
      src/main/frontend/handler/code.cljs
  23. 6 3
      src/main/frontend/handler/editor.cljs
  24. 4 5
      src/main/frontend/worker/db/fix.cljs
  25. 5 5
      src/main/frontend/worker/db_worker.cljs
  26. 5 5
      src/main/frontend/worker/publish.cljs
  27. 1 1
      src/main/frontend/worker/rtc/remote_update.cljs
  28. 1 2
      src/main/logseq/api/db_based.cljs
  29. 4 4
      src/main/logseq/sdk/utils.cljs
  30. 8 8
      src/test/frontend/components/query/result_test.cljs
  31. 1 12
      src/test/frontend/db/query_dsl_test.cljs

+ 0 - 3
.clj-kondo/config.edn

@@ -169,14 +169,11 @@
              logseq.common.util.page-ref page-ref
              logseq.common.util.page-ref page-ref
              logseq.db ldb
              logseq.db ldb
              logseq.db.common.entity-plus entity-plus
              logseq.db.common.entity-plus entity-plus
-             logseq.db.common.entity-util common-entity-util
              logseq.db.common.initial-data common-initial-data
              logseq.db.common.initial-data common-initial-data
              logseq.db.common.order db-order
              logseq.db.common.order db-order
              logseq.db.common.property-util db-property-util
              logseq.db.common.property-util db-property-util
              logseq.db.common.sqlite common-sqlite
              logseq.db.common.sqlite common-sqlite
              logseq.db.common.view db-view
              logseq.db.common.view db-view
-             logseq.db.file-based.schema file-schema
-             logseq.db.file-based.entity-util file-entity-util
              logseq.db.frontend.class db-class
              logseq.db.frontend.class db-class
              logseq.db.frontend.content db-content
              logseq.db.frontend.content db-content
              logseq.db.frontend.db db-db
              logseq.db.frontend.db db-db

+ 1 - 5
deps/db/.carve/ignore

@@ -1,8 +1,4 @@
 ;; API
 ;; API
-logseq.db.file-based.rules/rules
-;; API
-logseq.db.file-based.schema/retract-attributes
-;; API
 logseq.db.frontend.rules/db-query-dsl-rules
 logseq.db.frontend.rules/db-query-dsl-rules
 ;; API
 ;; API
 logseq.db.frontend.rules/extract-rules
 logseq.db.frontend.rules/extract-rules
@@ -51,6 +47,6 @@ logseq.db.sqlite.gc/gc-kvs-table-node-version!
 ;; API
 ;; API
 logseq.db.sqlite.gc/ensure-no-garbage
 logseq.db.sqlite.gc/ensure-no-garbage
 ;; API
 ;; API
-logseq.db.common.entity-util/entity->map
+logseq.db.frontend.entity-util/entity->map
 ;; documenting keywords
 ;; documenting keywords
 logseq.db.frontend.kv-entity/kv-entities
 logseq.db.frontend.kv-entity/kv-entities

+ 0 - 3
deps/db/.clj-kondo/config.edn

@@ -10,7 +10,6 @@
   {:aliases {clojure.string string
   {:aliases {clojure.string string
              logseq.db ldb
              logseq.db ldb
              logseq.db.common.entity-plus entity-plus
              logseq.db.common.entity-plus entity-plus
-             logseq.db.common.entity-util common-entity-util
              logseq.db.common.order db-order
              logseq.db.common.order db-order
              logseq.db.common.property-util db-property-util
              logseq.db.common.property-util db-property-util
              logseq.db.common.sqlite common-sqlite
              logseq.db.common.sqlite common-sqlite
@@ -23,8 +22,6 @@
              logseq.db.frontend.property db-property
              logseq.db.frontend.property db-property
              logseq.db.frontend.property.build db-property-build
              logseq.db.frontend.property.build db-property-build
              logseq.db.frontend.property.type db-property-type
              logseq.db.frontend.property.type db-property-type
-             logseq.db.file-based.schema file-schema
-             logseq.db.file-based.entity-util file-entity-util
              logseq.db.frontend.rules rules
              logseq.db.frontend.rules rules
              logseq.db.frontend.schema db-schema
              logseq.db.frontend.schema db-schema
              logseq.db.frontend.validate db-validate
              logseq.db.frontend.validate db-validate

+ 3 - 13
deps/db/src/logseq/db.cljs

@@ -12,14 +12,11 @@
             [logseq.common.uuid :as common-uuid]
             [logseq.common.uuid :as common-uuid]
             [logseq.db.common.delete-blocks :as delete-blocks] ;; Load entity extensions
             [logseq.db.common.delete-blocks :as delete-blocks] ;; Load entity extensions
             [logseq.db.common.entity-plus :as entity-plus]
             [logseq.db.common.entity-plus :as entity-plus]
-            [logseq.db.common.entity-util :as common-entity-util]
             [logseq.db.common.initial-data :as common-initial-data]
             [logseq.db.common.initial-data :as common-initial-data]
-            [logseq.db.file-based.schema :as file-schema]
             [logseq.db.frontend.class :as db-class]
             [logseq.db.frontend.class :as db-class]
             [logseq.db.frontend.db :as db-db]
             [logseq.db.frontend.db :as db-db]
             [logseq.db.frontend.entity-util :as entity-util]
             [logseq.db.frontend.entity-util :as entity-util]
             [logseq.db.frontend.property :as db-property]
             [logseq.db.frontend.property :as db-property]
-            [logseq.db.frontend.schema :as db-schema]
             [logseq.db.frontend.validate :as db-validate]
             [logseq.db.frontend.validate :as db-validate]
             [logseq.db.sqlite.util :as sqlite-util])
             [logseq.db.sqlite.util :as sqlite-util])
   (:refer-clojure :exclude [object?]))
   (:refer-clojure :exclude [object?]))
@@ -205,13 +202,13 @@
         ;; transact tx-data to `conn` and validate db
         ;; transact tx-data to `conn` and validate db
         (transact! conn tx-data tx-meta)))))
         (transact! conn tx-data tx-meta)))))
 
 
-(def page? common-entity-util/page?)
+(def page? entity-util/page?)
 (def internal-page? entity-util/internal-page?)
 (def internal-page? entity-util/internal-page?)
 (def class? entity-util/class?)
 (def class? entity-util/class?)
 (def property? entity-util/property?)
 (def property? entity-util/property?)
 (def closed-value? entity-util/closed-value?)
 (def closed-value? entity-util/closed-value?)
-(def whiteboard? common-entity-util/whiteboard?)
-(def journal? common-entity-util/journal?)
+(def whiteboard? entity-util/whiteboard?)
+(def journal? entity-util/journal?)
 (def hidden? entity-util/hidden?)
 (def hidden? entity-util/hidden?)
 (def object? entity-util/object?)
 (def object? entity-util/object?)
 (def asset? entity-util/asset?)
 (def asset? entity-util/asset?)
@@ -654,13 +651,6 @@
          [?page :block/tags ?tag]]
          [?page :block/tags ?tag]]
        db))
        db))
 
 
-(defn get-schema
-  "Returns schema for given repo"
-  [repo]
-  (if (sqlite-util/db-based-graph? repo)
-    db-schema/schema
-    file-schema/schema))
-
 (defn page-in-library?
 (defn page-in-library?
   "Check whether a `page` exists on the Library page"
   "Check whether a `page` exists on the Library page"
   [db page]
   [db page]

+ 3 - 13
deps/db/src/logseq/db/common/delete_blocks.cljs

@@ -5,8 +5,6 @@
             [logseq.common.util :as common-util]
             [logseq.common.util :as common-util]
             [logseq.common.util.block-ref :as block-ref]
             [logseq.common.util.block-ref :as block-ref]
             [logseq.common.util.page-ref :as page-ref]
             [logseq.common.util.page-ref :as page-ref]
-            [logseq.db.common.entity-plus :as entity-plus]
-            [logseq.db.common.entity-util :as common-entity-util]
             [logseq.db.frontend.entity-util :as entity-util]))
             [logseq.db.frontend.entity-util :as entity-util]))
 
 
 (defn- replace-ref-with-deleted-block-title
 (defn- replace-ref-with-deleted-block-title
@@ -56,19 +54,11 @@
                                                     (contains? #{:db.fn/retractEntity :db/retractEntity} (first tx)))
                                                     (contains? #{:db.fn/retractEntity :db/retractEntity} (first tx)))
                                            (second tx))) txs)
                                            (second tx))) txs)
                                  (filter (fn [id]
                                  (filter (fn [id]
-                                           (not (common-entity-util/page? (d/entity db id))))))]
+                                           (not (entity-util/page? (d/entity db id))))))]
     (when (seq retracted-block-ids)
     (when (seq retracted-block-ids)
       (let [retracted-blocks (map #(d/entity db %) retracted-block-ids)
       (let [retracted-blocks (map #(d/entity db %) retracted-block-ids)
             retracted-tx (build-retracted-tx retracted-blocks)
             retracted-tx (build-retracted-tx retracted-blocks)
             retract-history-tx (mapcat (fn [e]
             retract-history-tx (mapcat (fn [e]
                                          (map (fn [history] [:db/retractEntity (:db/id history)])
                                          (map (fn [history] [:db/retractEntity (:db/id history)])
-                                              (:logseq.property.history/_block e))) retracted-blocks)
-            macros-tx (when-not (entity-plus/db-based-graph? db)
-                        (mapcat (fn [b]
-                                  ;; Only delete if last reference
-                                  (keep #(when (<= (count (:block/_macros (d/entity db (:db/id %))))
-                                                   1)
-                                           (when (:db/id %) (vector :db.fn/retractEntity (:db/id %))))
-                                        (:block/macros b)))
-                                retracted-blocks))]
-        (concat txs retracted-tx retract-history-tx macros-tx)))))
+                                              (:logseq.property.history/_block e))) retracted-blocks)]
+        (concat txs retracted-tx retract-history-tx)))))

+ 3 - 6
deps/db/src/logseq/db/common/entity_plus.cljc

@@ -17,12 +17,9 @@
 
 
 (def nil-db-ident-entities
 (def nil-db-ident-entities
   "No such entities with these :db/ident, but `(d/entity <db> <ident>)` has been called somewhere."
   "No such entities with these :db/ident, but `(d/entity <db> <ident>)` has been called somewhere."
-  #{:block/tx-id :block/uuid :block/journal-day :block/_refs :block/level :block/heading-level :block/warning
-    ;; File graph only attributes. Can these be removed if this is only called in db graphs?
-    :block/pre-block? :block/scheduled :block/deadline :block/type :block/name :block/marker
-
-    :block.temp/ast-title
-    :block.temp/load-status :block.temp/has-children? :block.temp/ast-body
+  #{:block/tx-id :block/uuid :block/journal-day :block/_refs :block/level :block/heading-level
+    :block/warning :block/name
+    :block.temp/ast-title :block.temp/load-status :block.temp/has-children? :block.temp/ast-body
 
 
     :db/valueType :db/cardinality :db/ident :db/index
     :db/valueType :db/cardinality :db/ident :db/index
 
 

+ 0 - 26
deps/db/src/logseq/db/common/entity_util.cljs

@@ -1,26 +0,0 @@
-(ns logseq.db.common.entity-util
-  "Lower level entity util fns for DB and file graphs"
-  (:require [datascript.impl.entity :as de]
-            [logseq.db.file-based.entity-util :as file-entity-util]
-            [logseq.db.frontend.entity-util :as entity-util]))
-
-(defn whiteboard?
-  [entity]
-  (or (entity-util/whiteboard? entity)
-      (file-entity-util/whiteboard? entity)))
-
-(defn journal?
-  [entity]
-  (or (entity-util/journal? entity)
-      (file-entity-util/journal? entity)))
-
-(defn page?
-  [entity]
-  (or (entity-util/page? entity)
-      (file-entity-util/page? entity)))
-
-(defn entity->map
-  "Convert a db Entity to a map"
-  [e]
-  (assert (de/entity? e))
-  (assoc (into {} e) :db/id (:db/id e)))

+ 4 - 5
deps/db/src/logseq/db/common/initial_data.cljs

@@ -7,7 +7,6 @@
             [logseq.common.util :as common-util]
             [logseq.common.util :as common-util]
             [logseq.common.util.date-time :as date-time-util]
             [logseq.common.util.date-time :as date-time-util]
             [logseq.db.common.entity-plus :as entity-plus]
             [logseq.db.common.entity-plus :as entity-plus]
-            [logseq.db.common.entity-util :as common-entity-util]
             [logseq.db.common.order :as db-order]
             [logseq.db.common.order :as db-order]
             [logseq.db.frontend.class :as db-class]
             [logseq.db.frontend.class :as db-class]
             [logseq.db.frontend.db :as db-db]
             [logseq.db.frontend.db :as db-db]
@@ -29,7 +28,7 @@
   (->> (d/datoms db :avet :block/title page-name)
   (->> (d/datoms db :avet :block/title page-name)
        (filter (fn [d]
        (filter (fn [d]
                  (let [e (d/entity db (:e d))]
                  (let [e (d/entity db (:e d))]
-                   (common-entity-util/page? e))))
+                   (entity-util/page? e))))
        (map :e)
        (map :e)
        sort
        sort
        first))
        first))
@@ -98,7 +97,7 @@
                           (let [e (d/entity db eid)]
                           (let [e (d/entity db eid)]
                             (when (or include-collapsed-children?
                             (when (or include-collapsed-children?
                                       (not (:block/collapsed? e))
                                       (not (:block/collapsed? e))
-                                      (common-entity-util/page? e))
+                                      (entity-util/page? e))
                               (:block/_parent e)))) eids-to-expand)
                               (:block/_parent e)))) eids-to-expand)
                 ids-to-add (keep :db/id children)]
                 ids-to-add (keep :db/id children)]
             (vswap! seen (partial apply conj) ids-to-add)
             (vswap! seen (partial apply conj) ids-to-add)
@@ -263,7 +262,7 @@
          (keep (fn [d]
          (keep (fn [d]
                  (when (<= (:v d) today)
                  (when (<= (:v d) today)
                    (let [e (d/entity db (:e d))]
                    (let [e (d/entity db (:e d))]
-                     (when (and (common-entity-util/journal? e) (:db/id e))
+                     (when (and (entity-util/journal? e) (:db/id e))
                        e))))))))
                        e))))))))
 
 
 (defn- get-structured-datoms
 (defn- get-structured-datoms
@@ -311,7 +310,7 @@
                                (string/blank? title)))
                                (string/blank? title)))
                  (let [e (d/entity db (:e datom))]
                  (let [e (d/entity db (:e datom))]
                    (when (and
                    (when (and
-                          (common-entity-util/page? e)
+                          (entity-util/page? e)
                           (not (entity-util/hidden? e)))
                           (not (entity-util/hidden? e)))
                      e))))))
                      e))))))
      (take 15))))
      (take 15))))

+ 5 - 10
deps/db/src/logseq/db/common/sqlite_cli.cljs

@@ -8,7 +8,6 @@
             [clojure.string :as string]
             [clojure.string :as string]
             [datascript.storage :refer [IStorage]]
             [datascript.storage :refer [IStorage]]
             [logseq.db.common.sqlite :as common-sqlite]
             [logseq.db.common.sqlite :as common-sqlite]
-            [logseq.db.file-based.schema :as file-schema]
             [logseq.db.frontend.schema :as db-schema]
             [logseq.db.frontend.schema :as db-schema]
             [logseq.db.sqlite.util :as sqlite-util]))
             [logseq.db.sqlite.util :as sqlite-util]))
 
 
@@ -76,18 +75,14 @@
   ([db-full-path]
   ([db-full-path]
    (open-sqlite-datascript! nil db-full-path))
    (open-sqlite-datascript! nil db-full-path))
   ([graphs-dir db-name]
   ([graphs-dir db-name]
-   (let [[base-name db-full-path]
+   (let [db-full-path
          (if (nil? graphs-dir)
          (if (nil? graphs-dir)
-           [(node-path/basename db-name) db-name]
-           [db-name (second (common-sqlite/get-db-full-path graphs-dir db-name))])
-         db (new sqlite db-full-path nil)
-        ;; For both desktop and CLI, only file graphs have db-name that indicate their db type
-         schema (if (common-sqlite/local-file-based-graph? base-name)
-                  file-schema/schema
-                  db-schema/schema)]
+           db-name
+           (second (common-sqlite/get-db-full-path graphs-dir db-name)))
+         db (new sqlite db-full-path nil)]
      (common-sqlite/create-kvs-table! db)
      (common-sqlite/create-kvs-table! db)
      (let [storage (new-sqlite-storage db)
      (let [storage (new-sqlite-storage db)
-           conn (common-sqlite/get-storage-conn storage schema)]
+           conn (common-sqlite/get-storage-conn storage db-schema/schema)]
        {:sqlite db
        {:sqlite db
         :conn conn}))))
         :conn conn}))))
 
 

+ 0 - 14
deps/db/src/logseq/db/file_based/entity_util.cljs

@@ -1,14 +0,0 @@
-(ns logseq.db.file-based.entity-util
-  "Lower level entity util fns for file graphs")
-
-(defn whiteboard?
-  [entity]
-  (identical? "whiteboard" (:block/type entity)))
-
-(defn journal?
-  [entity]
-  (identical? "journal" (:block/type entity)))
-
-(defn page?
-  [entity]
-  (contains? #{"page" "journal" "whiteboard"} (:block/type entity)))

+ 0 - 120
deps/db/src/logseq/db/file_based/schema.cljs

@@ -1,120 +0,0 @@
-(ns logseq.db.file-based.schema
-  "Schema related vars for file graphs")
-
-;; A page is a special block, a page can corresponds to multiple files with the same ":block/name".
-(def ^:large-vars/data-var schema
-  "Schema for file graphs"
-  {:db/ident        {:db/unique :db.unique/identity}
-   :kv/value       {}
-   :recent/pages {}
-
-   ;; :block/type is a string type of the current block
-   ;; "whiteboard" for whiteboards
-   ;; "property" for property blocks
-   ;; "class" for structured page
-   :block/type {:db/index true}
-   :block/uuid {:db/unique :db.unique/identity}
-   :block/parent {:db/valueType :db.type/ref
-                  :db/index true}
-   :block/order {:db/index true}
-   :block/collapsed? {}
-
-   ;; :markdown, :org
-   :block/format {}
-
-   ;; belongs to which page
-   :block/page {:db/valueType :db.type/ref
-                :db/index true}
-   ;; reference blocks
-   :block/refs {:db/valueType :db.type/ref
-                :db/cardinality :db.cardinality/many}
-   :block/tags {:db/valueType :db.type/ref
-                :db/cardinality :db.cardinality/many}
-
-   ;; which block this block links to, used for tag, embeds
-   :block/link {:db/valueType :db.type/ref
-                :db/index true}
-
-   ;; page's namespace
-   :block/namespace {:db/valueType :db.type/ref}
-
-   ;; for pages
-   :block/alias {:db/valueType :db.type/ref
-                 :db/cardinality :db.cardinality/many
-                 :db/index true}
-
-   ;; todo keywords, e.g. "TODO", "DOING", "DONE"
-   :block/marker {}
-
-   ;; "A", "B", "C"
-   :block/priority {}
-
-   ;; map, key -> set of refs in property value or full text if none are found
-   :block/properties {}
-   ;; vector
-   :block/properties-order {}
-   ;; map, key -> original property value's content
-   :block/properties-text-values {}
-
-   ;; first block that's not a heading or unordered list
-   :block/pre-block? {}
-
-   ;; scheduled day
-   :block/scheduled {}
-
-   ;; deadline day
-   :block/deadline {}
-
-   ;; whether blocks is a repeated block (usually a task)
-   :block/repeated? {}
-
-   :block/created-at {:db/index true}
-   :block/updated-at {:db/index true}
-
-   ;; page additional attributes
-   ;; page's name, lowercase
-   :block/name {:db/unique :db.unique/identity}
-
-   ;; page's original name
-   :block/title {:db/index true}
-
-   ;; page's journal day
-   :block/journal-day {:db/index true}
-
-   ;; macros in block
-   :block/macros {:db/valueType :db.type/ref
-                  :db/cardinality :db.cardinality/many}
-
-   ;; block's file
-   :block/file {:db/valueType :db.type/ref}
-
-   ;; latest tx that affected the block
-   :block/tx-id {}
-
-   ;; file
-   :file/path {:db/unique :db.unique/identity}
-   :file/content {}
-   :file/created-at {}
-   :file/last-modified-at {}
-   :file/size {}})
-
-(def file-only-attributes
-  [:block/namespace :block/properties-text-values :block/pre-block? :recent/pages :block/file
-   :block/properties :block/properties-order :block/repeated? :block/deadline :block/scheduled :block/priority
-   :block/marker :block/macros :block/type :block/format])
-
-(def retract-attributes
-  #{:block/tags
-    :block/alias
-    :block/marker
-    :block/priority
-    :block/scheduled
-    :block/deadline
-    :block/repeated?
-    :block/pre-block?
-    :block/properties
-    :block/properties-order
-    :block/properties-text-values
-    :block/macros
-    :block/invalid-properties
-    :block/warning})

+ 1 - 2
deps/db/src/logseq/db/frontend/content.cljs

@@ -4,7 +4,6 @@
             [datascript.core :as d]
             [datascript.core :as d]
             [logseq.common.util :as common-util]
             [logseq.common.util :as common-util]
             [logseq.common.util.page-ref :as page-ref]
             [logseq.common.util.page-ref :as page-ref]
-            [logseq.db.common.entity-util :as common-entity-util]
             [logseq.db.frontend.entity-util :as entity-util]))
             [logseq.db.frontend.entity-util :as entity-util]))
 
 
 ;; [[uuid]]
 ;; [[uuid]]
@@ -49,7 +48,7 @@
                  ;; The caller need to handle situations including
                  ;; The caller need to handle situations including
                  ;; mutual references and circle references.
                  ;; mutual references and circle references.
                  refs*
                  refs*
-                 (cond->> (filter common-entity-util/page? refs*)
+                 (cond->> (filter entity-util/page? refs*)
                    (and db (false? replace-pages-with-same-name?))
                    (and db (false? replace-pages-with-same-name?))
                    (remove (fn [e]
                    (remove (fn [e]
                              (> (count (entity-util/get-pages-by-name db (:block/title e))) 1)))))
                              (> (count (entity-util/get-pages-by-name db (:block/title e))) 1)))))

+ 6 - 0
deps/db/src/logseq/db/frontend/entity_util.cljs

@@ -92,3 +92,9 @@
 (defn get-pages-by-name
 (defn get-pages-by-name
   [db page-name]
   [db page-name]
   (d/datoms db :avet :block/name (common-util/page-name-sanity-lc page-name)))
   (d/datoms db :avet :block/name (common-util/page-name-sanity-lc page-name)))
+
+(defn entity->map
+  "Convert a db Entity to a map"
+  [e]
+  (assert (de/entity? e))
+  (assoc (into {} e) :db/id (:db/id e)))

+ 54 - 10
deps/db/src/logseq/db/frontend/schema.cljs

@@ -1,8 +1,7 @@
 (ns logseq.db.frontend.schema
 (ns logseq.db.frontend.schema
   "Schema related fns for DB and file graphs"
   "Schema related fns for DB and file graphs"
   (:require [clojure.set :as set]
   (:require [clojure.set :as set]
-            [clojure.string :as string]
-            [logseq.db.file-based.schema :as file-schema]))
+            [clojure.string :as string]))
 
 
 (def schema-version? (every-pred map? :major))
 (def schema-version? (every-pred map? :major))
 
 
@@ -60,14 +59,59 @@
       (str (:major schema-version)))
       (str (:major schema-version)))
     :else (throw (ex-info "Not a schema-version" {:data schema-version}))))
     :else (throw (ex-info "Not a schema-version" {:data schema-version}))))
 
 
-(def schema
-  "Schema for DB graphs. :block/tags are classes in this schema"
-  (merge
-   (apply dissoc file-schema/schema file-schema/file-only-attributes)
-   {:block/name {:db/index true}        ; remove db/unique for :block/name
-    ;; closed value
-    :block/closed-value-property {:db/valueType :db.type/ref
-                                  :db/cardinality :db.cardinality/many}}))
+(def ^:large-vars/data-var schema
+  "Schema for file graphs"
+  {:db/ident        {:db/unique :db.unique/identity}
+   :kv/value       {}
+
+   :block/uuid {:db/unique :db.unique/identity}
+   :block/parent {:db/valueType :db.type/ref
+                  :db/index true}
+   :block/order {:db/index true}
+   :block/collapsed? {}
+
+   ;; belongs to which page
+   :block/page {:db/valueType :db.type/ref
+                :db/index true}
+   ;; reference blocks
+   :block/refs {:db/valueType :db.type/ref
+                :db/cardinality :db.cardinality/many}
+   :block/tags {:db/valueType :db.type/ref
+                :db/cardinality :db.cardinality/many}
+
+   ;; which block this block links to, used for tag, embeds
+   :block/link {:db/valueType :db.type/ref
+                :db/index true}
+
+   ;; for pages
+   :block/alias {:db/valueType :db.type/ref
+                 :db/cardinality :db.cardinality/many
+                 :db/index true}
+
+   :block/created-at {:db/index true}
+   :block/updated-at {:db/index true}
+
+   ;; page additional attributes
+   ;; page's name, lowercase
+   :block/name {:db/index true} ; remove db/unique for :block/name
+
+   ;; page's original name
+   :block/title {:db/index true}
+
+   ;; page's journal day
+   :block/journal-day {:db/index true}
+
+   ;; latest tx that affected the block
+   :block/tx-id {}
+   :block/closed-value-property {:db/valueType :db.type/ref
+                                 :db/cardinality :db.cardinality/many}
+
+   ;; file
+   :file/path {:db/unique :db.unique/identity}
+   :file/content {}
+   :file/created-at {}
+   :file/last-modified-at {}
+   :file/size {}})
 
 
 ;; If only block/title changes
 ;; If only block/title changes
 (def retract-attributes
 (def retract-attributes

+ 8 - 1
deps/graph-parser/src/logseq/graph_parser/block.cljs

@@ -15,6 +15,7 @@
             [logseq.db :as ldb]
             [logseq.db :as ldb]
             [logseq.db.common.order :as db-order]
             [logseq.db.common.order :as db-order]
             [logseq.db.frontend.class :as db-class]
             [logseq.db.frontend.class :as db-class]
+            [logseq.db.frontend.entity-util :as entity-util]
             [logseq.graph-parser.mldoc :as gp-mldoc]
             [logseq.graph-parser.mldoc :as gp-mldoc]
             [logseq.graph-parser.property :as gp-property]
             [logseq.graph-parser.property :as gp-property]
             [logseq.graph-parser.text :as text]
             [logseq.graph-parser.text :as text]
@@ -365,6 +366,12 @@
   [s]
   [s]
   (string/replace s "#" "HashTag-"))
   (string/replace s "#" "HashTag-"))
 
 
+(defn- page-entity?
+  "Support DB or file graphs because of exporter"
+  [entity]
+  (or (entity-util/page? entity)
+      (contains? #{"page" "journal" "whiteboard"} (:block/type entity))))
+
 ;; TODO: refactor
 ;; TODO: refactor
 (defn page-name->map
 (defn page-name->map
   "Create a page's map structure given a original page name (string).
   "Create a page's map structure given a original page name (string).
@@ -376,7 +383,7 @@
   [original-page-name db with-timestamp? date-formatter
   [original-page-name db with-timestamp? date-formatter
    & {:keys [page-uuid class?] :as options}]
    & {:keys [page-uuid class?] :as options}]
   (when-not (and db (common-util/uuid-string? original-page-name)
   (when-not (and db (common-util/uuid-string? original-page-name)
-                 (not (ldb/page? (d/entity db [:block/uuid (uuid original-page-name)]))))
+                 (not (page-entity? (d/entity db [:block/uuid (uuid original-page-name)]))))
     (let [db-based? (ldb/db-based-graph? db)
     (let [db-based? (ldb/db-based-graph? db)
           original-page-name (cond-> (string/trim original-page-name)
           original-page-name (cond-> (string/trim original-page-name)
                                db-based?
                                db-based?

+ 19 - 3
deps/graph-parser/src/logseq/graph_parser/exporter.cljs

@@ -27,6 +27,7 @@
             [logseq.db.frontend.class :as db-class]
             [logseq.db.frontend.class :as db-class]
             [logseq.db.frontend.content :as db-content]
             [logseq.db.frontend.content :as db-content]
             [logseq.db.frontend.db-ident :as db-ident]
             [logseq.db.frontend.db-ident :as db-ident]
+            [logseq.db.frontend.entity-util :as entity-util]
             [logseq.db.frontend.malli-schema :as db-malli-schema]
             [logseq.db.frontend.malli-schema :as db-malli-schema]
             [logseq.db.frontend.property :as db-property]
             [logseq.db.frontend.property :as db-property]
             [logseq.db.frontend.property.build :as db-property-build]
             [logseq.db.frontend.property.build :as db-property-build]
@@ -328,6 +329,21 @@
        (string/includes? path (str "whiteboards" "/"))
        (string/includes? path (str "whiteboards" "/"))
        (string/ends-with? path ".edn")))
        (string/ends-with? path ".edn")))
 
 
+(defn- whiteboard-entity?
+  [entity]
+  (or (entity-util/whiteboard? entity)
+      (identical? "whiteboard" (:block/type entity))))
+
+(defn- journal-entity?
+  [entity]
+  (or (entity-util/journal? entity)
+      (identical? "journal" (:block/type entity))))
+
+(defn- page-entity?
+  [entity]
+  (or (entity-util/page? entity)
+      (contains? #{"page" "journal" "whiteboard"} (:block/type entity))))
+
 (defn- find-or-create-deadline-scheduled-value
 (defn- find-or-create-deadline-scheduled-value
   "Given a :block/scheduled or :block/deadline value, creates the datetime property value
   "Given a :block/scheduled or :block/deadline value, creates the datetime property value
    and any optional journal tx associated with that value"
    and any optional journal tx associated with that value"
@@ -413,7 +429,7 @@
   (let [prop-type (cond (and (coll? prop-val)
   (let [prop-type (cond (and (coll? prop-val)
                              (seq prop-val)
                              (seq prop-val)
                              (set/subset? prop-val
                              (set/subset? prop-val
-                                          (set (keep #(when (ldb/journal? %)
+                                          (set (keep #(when (journal-entity? %)
                                                         (:block/title %)) refs))))
                                                         (:block/title %)) refs))))
                         :date
                         :date
                         (and (coll? prop-val) (seq prop-val) (text-with-refs? prop-val prop-val-text))
                         (and (coll? prop-val) (seq prop-val) (text-with-refs? prop-val prop-val-text))
@@ -1863,7 +1879,7 @@
           {:keys [pages-tx page-properties-tx per-file-state existing-pages]} (build-pages-tx conn pages blocks tx-options)
           {:keys [pages-tx page-properties-tx per-file-state existing-pages]} (build-pages-tx conn pages blocks tx-options)
           whiteboard-pages (->> pages-tx
           whiteboard-pages (->> pages-tx
                                 ;; support old and new whiteboards
                                 ;; support old and new whiteboards
-                                (filter ldb/whiteboard?)
+                                (filter whiteboard-entity?)
                                 (map (fn [page-block]
                                 (map (fn [page-block]
                                        (-> page-block
                                        (-> page-block
                                            (assoc :logseq.property/ls-type :whiteboard-page)))))
                                            (assoc :logseq.property/ls-type :whiteboard-page)))))
@@ -2136,7 +2152,7 @@
                               (keep (fn [d]
                               (keep (fn [d]
                                       (let [child (d/entity db (:e d))
                                       (let [child (d/entity db (:e d))
                                             parent (d/entity db (:v d))]
                                             parent (d/entity db (:v d))]
-                                        (when (and (nil? (:block/parent parent)) (ldb/page? child) (ldb/page? parent))
+                                        (when (and (nil? (:block/parent parent)) (page-entity? child) (page-entity? parent))
                                           parent))))
                                           parent))))
                               (common-util/distinct-by :block/uuid))
                               (common-util/distinct-by :block/uuid))
         tx-data (map
         tx-data (map

+ 6 - 2
deps/graph-parser/test/logseq/graph_parser/extract_test.cljs

@@ -1,7 +1,6 @@
 (ns logseq.graph-parser.extract-test
 (ns logseq.graph-parser.extract-test
   (:require [cljs.test :refer [deftest is are]]
   (:require [cljs.test :refer [deftest is are]]
             [datascript.core :as d]
             [datascript.core :as d]
-            [logseq.db.file-based.schema :as file-schema]
             [logseq.graph-parser.extract :as extract]))
             [logseq.graph-parser.extract :as extract]))
 
 
 ;; This is a copy of frontend.components.repo/multiplatform-reserved-chars for reserved chars testing
 ;; This is a copy of frontend.components.repo/multiplatform-reserved-chars for reserved chars testing
@@ -42,10 +41,15 @@
   (is (= "asldk lakls" (#'extract/path->file-body "file://data/app/asldk lakls.as")))
   (is (= "asldk lakls" (#'extract/path->file-body "file://data/app/asldk lakls.as")))
   (is (= "中文asldk lakls" (#'extract/path->file-body "file://中文data/app/中文asldk lakls.as"))))
   (is (= "中文asldk lakls" (#'extract/path->file-body "file://中文data/app/中文asldk lakls.as"))))
 
 
+;; Bare minimum schema to test extract
+(def file-schema
+  {:block/uuid {:db/unique :db.unique/identity}
+   :block/name {:db/unique :db.unique/identity}})
+
 (defn- extract [file content & [options]]
 (defn- extract [file content & [options]]
   (extract/extract file
   (extract/extract file
                    content
                    content
-                   (merge {:block-pattern "-" :db (d/empty-db file-schema/schema)
+                   (merge {:block-pattern "-" :db (d/empty-db file-schema)
                            :verbose false}
                            :verbose false}
                           options)))
                           options)))
 
 

+ 6 - 29
deps/outliner/src/logseq/outliner/core.cljs

@@ -83,28 +83,13 @@
           (swap! txs-state (fn [state] (vec (concat state tx)))))))))
           (swap! txs-state (fn [state] (vec (concat state tx)))))))))
 
 
 (defn- update-page-when-save-block
 (defn- update-page-when-save-block
-  [txs-state block-entity m]
+  [txs-state block-entity]
   (when-let [e (:block/page block-entity)]
   (when-let [e (:block/page block-entity)]
     (let [m' (cond-> {:db/id (:db/id e)
     (let [m' (cond-> {:db/id (:db/id e)
                       :block/updated-at (common-util/time-ms)}
                       :block/updated-at (common-util/time-ms)}
                (not (:block/created-at e))
                (not (:block/created-at e))
                (assoc :block/created-at (common-util/time-ms)))
                (assoc :block/created-at (common-util/time-ms)))
-          txs (if (or (:block/pre-block? block-entity)
-                      (:block/pre-block? m))
-                (let [properties (:block/properties m)
-                      alias (set (:alias properties))
-                      tags (set (:tags properties))
-                      alias (map (fn [p] {:block/name (common-util/page-name-sanity-lc p)}) alias)
-                      tags (map (fn [p] {:block/name (common-util/page-name-sanity-lc p)}) tags)
-                      deleteable-page-attributes {:block/alias alias
-                                                  :block/tags tags
-                                                  :block/properties properties
-                                                  :block/properties-text-values (:block/properties-text-values m)}
-                            ;; Retract page attributes to allow for deletion of page attributes
-                      page-retractions
-                      (mapv #(vector :db/retract (:db/id e) %) (keys deleteable-page-attributes))]
-                  (conj page-retractions (merge m' deleteable-page-attributes)))
-                [m'])]
+          txs [m']]
       (swap! txs-state into txs))))
       (swap! txs-state into txs))))
 
 
 (defn- remove-orphaned-refs-when-save
 (defn- remove-orphaned-refs-when-save
@@ -295,7 +280,7 @@
               (outliner-validate/validate-block-title db (:block/title m*) block-entity))
               (outliner-validate/validate-block-title db (:block/title m*) block-entity))
           m (cond-> m*
           m (cond-> m*
               true
               true
-              (dissoc :block/format :block/pre-block? :block/priority :block/marker :block/properties-order))]
+              (dissoc :block/format))]
       ;; Ensure block UUID never changes
       ;; Ensure block UUID never changes
       (let [e (d/entity db db-id)]
       (let [e (d/entity db db-id)]
         (when (and e block-uuid)
         (when (and e block-uuid)
@@ -320,7 +305,7 @@
 
 
         ;; Update block's page attributes
         ;; Update block's page attributes
         (when-not collapse-or-expand?
         (when-not collapse-or-expand?
-          (update-page-when-save-block *txs-state block-entity m))
+          (update-page-when-save-block *txs-state block-entity))
         ;; Remove orphaned refs from block
         ;; Remove orphaned refs from block
         (when (and (:block/title m) (not= (:block/title m) (:block/title block-entity)))
         (when (and (:block/title m) (not= (:block/title m) (:block/title block-entity)))
           (remove-orphaned-refs-when-save db *txs-state block-entity m)))
           (remove-orphaned-refs-when-save db *txs-state block-entity m)))
@@ -355,16 +340,8 @@
                                   [:db/retract (:db/id block) :block/order]
                                   [:db/retract (:db/id block) :block/order]
                                   [:db/retract (:db/id block) :block/page]])
                                   [:db/retract (:db/id block) :block/page]])
         (let [ids (cons (:db/id this) (ldb/get-block-full-children-ids db (:db/id block)))
         (let [ids (cons (:db/id this) (ldb/get-block-full-children-ids db (:db/id block)))
-              txs (map (fn [id] [:db.fn/retractEntity id]) ids)
-              page-tx (let [block (d/entity db [:block/uuid block-id])]
-                        (when (:block/pre-block? block)
-                          (when-let [id (:db/id (:block/page block))]
-                            [[:db/retract id :block/properties]
-                             [:db/retract id :block/properties-order]
-                             [:db/retract id :block/properties-text-values]
-                             [:db/retract id :block/alias]
-                             [:db/retract id :block/tags]])))]
-          (swap! *txs-state concat txs page-tx)
+              txs (map (fn [id] [:db.fn/retractEntity id]) ids)]
+          (swap! *txs-state concat txs)
           block-id)))))
           block-id)))))
 
 
 (defn- assoc-level-aux
 (defn- assoc-level-aux

+ 1 - 2
scripts/src/logseq/tasks/dev/db_and_file_graphs.clj

@@ -74,8 +74,7 @@
 
 
 (def file-graph-paths
 (def file-graph-paths
   "Paths _only_ for file graphs"
   "Paths _only_ for file graphs"
-  ["deps/db/src/logseq/db/file_based"
-   "deps/graph-parser/src/logseq/graph_parser/extract.cljc"
+  ["deps/graph-parser/src/logseq/graph_parser/extract.cljc"
    "deps/graph-parser/src/logseq/graph_parser/property.cljs"
    "deps/graph-parser/src/logseq/graph_parser/property.cljs"
    "src/main/frontend/fs"])
    "src/main/frontend/fs"])
 
 

+ 8 - 54
src/main/frontend/components/block.cljs

@@ -1287,12 +1287,7 @@
                (= (string/lower-case (:protocol path)) "id")
                (= (string/lower-case (:protocol path)) "id")
                (string? (:link path))
                (string? (:link path))
                (util/uuid-string? (:link path)))       ; org mode id
                (util/uuid-string? (:link path)))       ; org mode id
-          (let [id (uuid (:link path))
-                block (db/entity [:block/uuid id])]
-            (if (:block/pre-block? block)
-              (let [page (:block/page block)]
-                (page-reference config (:block/name page) label))
-              (block-reference config (:link path) label)))
+          (block-reference config (:link path) label)
 
 
           (= protocol "file")
           (= protocol "file")
           (if (show-link? config metadata href full_text)
           (if (show-link? config metadata href full_text)
@@ -1885,8 +1880,7 @@
   [config block]
   [config block]
   (let [format :markdown
   (let [format :markdown
         block (if-not (:block.temp/ast-title block)
         block (if-not (:block.temp/ast-title block)
-                (merge block (block/parse-title-and-body uuid format false
-                                                         (:block/title block)))
+                (merge block (block/parse-title-and-body uuid format (:block/title block)))
                 block)
                 block)
         block-ast-title (:block.temp/ast-title block)
         block-ast-title (:block.temp/ast-title block)
         config (assoc config :block block)
         config (assoc config :block block)
@@ -2166,14 +2160,13 @@
                    (state/set-selection-start-block! block-dom-element)))))))))))
                    (state/set-selection-start-block! block-dom-element)))))))))))
 
 
 (rum/defc dnd-separator-wrapper < rum/reactive
 (rum/defc dnd-separator-wrapper < rum/reactive
-  [block block-id top?]
+  [_block block-id top?]
   (let [dragging? (rum/react *dragging?)
   (let [dragging? (rum/react *dragging?)
         drag-to-block (rum/react *drag-to-block)
         drag-to-block (rum/react *drag-to-block)
         move-to (rum/react *move-to)]
         move-to (rum/react *move-to)]
     (when (and
     (when (and
            dragging?
            dragging?
            (= block-id drag-to-block)
            (= block-id drag-to-block)
-           (not (:block/pre-block? block))
            move-to)
            move-to)
       (when-not (or (and top? (not= move-to :top))
       (when-not (or (and top? (not= move-to :top))
                     (and (not top?) (= move-to :top)))
                     (and (not top?) (= move-to :top)))
@@ -2400,7 +2393,7 @@
         content (:block/raw-title block)
         content (:block/raw-title block)
         content (if (string? content) (string/trim content) "")
         content (if (string? content) (string/trim content) "")
         block-ref? (:block-ref? config)
         block-ref? (:block-ref? config)
-        block (merge block (block/parse-title-and-body uuid format false content))
+        block (merge block (block/parse-title-and-body uuid format content))
         ast-body (:block.temp/ast-body block)
         ast-body (:block.temp/ast-body block)
         ast-title (:block.temp/ast-title block)
         ast-title (:block.temp/ast-title block)
         block (assoc block :block/title content)
         block (assoc block :block/title content)
@@ -2702,7 +2695,6 @@
                                (let [result (block/parse-title-and-body
                                (let [result (block/parse-title-and-body
                                              uuid
                                              uuid
                                              (get block :block/format :markdown)
                                              (get block :block/format :markdown)
-                                             (:block/pre-block? block)
                                              title)
                                              title)
                                      ast-body (:block.temp/ast-body result)
                                      ast-body (:block.temp/ast-body result)
                                      ast-title (:block.temp/ast-title result)
                                      ast-title (:block.temp/ast-title result)
@@ -2974,7 +2966,7 @@
         custom-query? (boolean (:custom-query? config*))
         custom-query? (boolean (:custom-query? config*))
         ref-or-custom-query? (or ref? custom-query?)
         ref-or-custom-query? (or ref? custom-query?)
         *navigating-block (get container-state ::navigating-block)
         *navigating-block (get container-state ::navigating-block)
-        {:block/keys [uuid pre-block? title]} block
+        {:block/keys [uuid title]} block
         config (build-config config* block {:navigated? navigated? :navigating-block navigating-block})
         config (build-config config* block {:navigated? navigated? :navigating-block navigating-block})
         level (:level config)
         level (:level config)
         *control-show? (get container-state ::control-show?)
         *control-show? (get container-state ::control-show?)
@@ -3043,7 +3035,6 @@
        :ref #(when (nil? @*ref) (reset! *ref %))
        :ref #(when (nil? @*ref) (reset! *ref %))
        :data-collapsed (and collapsed? has-child?)
        :data-collapsed (and collapsed? has-child?)
        :class (str (when selected? "selected")
        :class (str (when selected? "selected")
-                   (when pre-block? " pre-block")
                    (when order-list? " is-order-list")
                    (when order-list? " is-order-list")
                    (when (string/blank? title) " is-blank")
                    (when (string/blank? title) " is-blank")
                    (when original-block " embed-block"))
                    (when original-block " embed-block"))
@@ -3146,7 +3137,7 @@
 
 
           ;; Not embed self
           ;; Not embed self
           [:div.flex.flex-col.w-full
           [:div.flex.flex-col.w-full
-           (let [block (merge block (block/parse-title-and-body uuid (get block :block/format :markdown) pre-block? title))
+           (let [block (merge block (block/parse-title-and-body uuid (get block :block/format :markdown) title))
                  hide-block-refs-count? (or (and (:embed? config)
                  hide-block-refs-count? (or (and (:embed? config)
                                                  (= (:block/uuid block) (:embed-id config)))
                                                  (= (:block/uuid block) (:embed-id config)))
                                             table?)]
                                             table?)]
@@ -3450,33 +3441,6 @@
        tb-col-groups
        tb-col-groups
        (cons head groups)))]))
        (cons head groups)))]))
 
 
-(defn logbook-cp
-  [log]
-  (let [clocks (filter #(string/starts-with? % "CLOCK:") log)
-        clocks (reverse (sort-by str clocks))]
-    ;; TODO: display states change log
-    ; states (filter #(not (string/starts-with? % "CLOCK:")) log)
-
-    (when (seq clocks)
-      (let [tr (fn [elm cols] (->elem :tr
-                                      (mapv (fn [col] (->elem elm col)) cols)))
-            head [:thead.overflow-x-scroll (tr :th.py-0 ["Type" "Start" "End" "Span"])]
-            clock-tbody (->elem
-                         :tbody.overflow-scroll.sm:overflow-auto
-                         (mapv (fn [clock]
-                                 (let [cols (->> (string/split clock #": |--|=>")
-                                                 (map string/trim))]
-                                   (mapv #(tr :td.py-0 %) [cols])))
-                               clocks))]
-        [:div.overflow-x-scroll.sm:overflow-auto
-         (->elem
-          :table.m-0
-          {:class "logbook-table"
-           :border 0
-           :style {:width "max-content"}
-           :cell-spacing 15}
-          (cons head [clock-tbody]))]))))
-
 (defn map-inline
 (defn map-inline
   [config col]
   [config col]
   (map #(inline config %) col))
   (map #(inline config %) col))
@@ -3578,15 +3542,7 @@
   (try
   (try
     (match item
     (match item
       ["Drawer" name lines]
       ["Drawer" name lines]
-      (when (or (not= name "logbook")
-                (and
-                 (= name "logbook")
-                 (state/enable-timetracking?)
-                 (or (get-in (state/get-config) [:logbook/settings :enabled-in-all-blocks])
-                     (when (get-in (state/get-config)
-                                   [:logbook/settings :enabled-in-timestamped-blocks] true)
-                       (or (:block/scheduled (:block config))
-                           (:block/deadline (:block config)))))))
+      (when (not= name "logbook")
         [:div
         [:div
          [:div.text-sm
          [:div.text-sm
           [:div.drawer {:data-drawer-name name}
           [:div.drawer {:data-drawer-name name}
@@ -3594,9 +3550,7 @@
             [:div.opacity-50.font-medium.logbook
             [:div.opacity-50.font-medium.logbook
              (util/format ":%s:" (string/upper-case name))]
              (util/format ":%s:" (string/upper-case name))]
             [:div.opacity-50.font-medium
             [:div.opacity-50.font-medium
-             (if (= name "logbook")
-               (logbook-cp lines)
-               (apply str lines))
+             (apply str lines)
              [:div ":END:"]]
              [:div ":END:"]]
             {:default-collapsed? true
             {:default-collapsed? true
              :title-trigger? true})]]])
              :title-trigger? true})]]])

+ 2 - 4
src/main/frontend/format/block.cljs

@@ -120,12 +120,10 @@ and handles unexpected failure."
      (merge block
      (merge block
             (parse-title-and-body (:block/uuid block)
             (parse-title-and-body (:block/uuid block)
                                   (get block :block/format :markdown)
                                   (get block :block/format :markdown)
-                                  (:block/pre-block? block)
                                   (:block/title block)))))
                                   (:block/title block)))))
-  ([_block-uuid format pre-block? content]
+  ([_block-uuid format content]
    (when-not (string/blank? content)
    (when-not (string/blank? content)
-     (let [content (if pre-block? content
-                       (str (config/get-block-pattern format) " " (string/triml content)))]
+     (let [content (str (config/get-block-pattern format) " " (string/triml content))]
        (cached-parse-title-and-body-helper format content)))))
        (cached-parse-title-and-body-helper format content)))))
 
 
 (defn break-line-paragraph?
 (defn break-line-paragraph?

+ 1 - 1
src/main/frontend/handler/code.cljs

@@ -31,7 +31,7 @@
             (let [block (db/entity [:block/uuid (:block/uuid config)])
             (let [block (db/entity [:block/uuid (:block/uuid config)])
                   content (:block/raw-title block)
                   content (:block/raw-title block)
                   {:keys [start_pos end_pos]} (:pos_meta @(:code-options state))
                   {:keys [start_pos end_pos]} (:pos_meta @(:code-options state))
-                  offset (if (:block/pre-block? block) 0 2)
+                  offset 2
                   raw-content (utf8/encode content) ;; NOTE: :pos_meta is based on byte position
                   raw-content (utf8/encode content) ;; NOTE: :pos_meta is based on byte position
                   prefix (utf8/decode (.slice raw-content 0 (- start_pos offset)))
                   prefix (utf8/decode (.slice raw-content 0 (- start_pos offset)))
                   surfix (utf8/decode (.slice raw-content (- end_pos offset)))
                   surfix (utf8/decode (.slice raw-content (- end_pos offset)))

+ 6 - 3
src/main/frontend/handler/editor.cljs

@@ -52,7 +52,6 @@
             [logseq.common.util.page-ref :as page-ref]
             [logseq.common.util.page-ref :as page-ref]
             [logseq.db :as ldb]
             [logseq.db :as ldb]
             [logseq.db.common.entity-plus :as entity-plus]
             [logseq.db.common.entity-plus :as entity-plus]
-            [logseq.db.file-based.schema :as file-schema]
             [logseq.db.frontend.asset :as db-asset]
             [logseq.db.frontend.asset :as db-asset]
             [logseq.db.frontend.db :as db-db]
             [logseq.db.frontend.db :as db-db]
             [logseq.db.frontend.property :as db-property]
             [logseq.db.frontend.property :as db-property]
@@ -356,6 +355,10 @@
                                                                            :keep-uuid? true})]
                                                                            :keep-uuid? true})]
       [result sibling? prev-block])))
       [result sibling? prev-block])))
 
 
+;; This used to be a list of file attributes. Unclear if remaining ones should be removed
+(def retract-attributes
+  #{:block/tags :block/alias :block/properties :block/warning})
+
 (defn insert-new-block-aux!
 (defn insert-new-block-aux!
   [config
   [config
    {:block/keys [uuid]
    {:block/keys [uuid]
@@ -367,7 +370,7 @@
         selection-end (util/get-selection-end input)
         selection-end (util/get-selection-end input)
         [fst-block-text snd-block-text] (compute-fst-snd-block-text value selection-start selection-end)
         [fst-block-text snd-block-text] (compute-fst-snd-block-text value selection-start selection-end)
         current-block (assoc block :block/title fst-block-text)
         current-block (assoc block :block/title fst-block-text)
-        current-block (apply dissoc current-block file-schema/retract-attributes)
+        current-block (apply dissoc current-block retract-attributes)
         new-m {:block/uuid (db/new-block-id)
         new-m {:block/uuid (db/new-block-id)
                :block/title snd-block-text}
                :block/title snd-block-text}
         next-block (-> (merge (select-keys block [:block/parent :block/format :block/page])
         next-block (-> (merge (select-keys block [:block/parent :block/format :block/page])
@@ -1813,7 +1816,7 @@
         (if content-update-fn
         (if content-update-fn
           (content-update-fn (:block/title block))
           (content-update-fn (:block/title block))
           (:block/title block))]
           (:block/title block))]
-    (merge (apply dissoc block (conj (if-not keep-uuid? [:block/_refs] []) :block/pre-block? :block/meta))
+    (merge (apply dissoc block (conj (if-not keep-uuid? [:block/_refs] [])))
            {:block/page {:db/id (:db/id page)}
            {:block/page {:db/id (:db/id page)}
             :block/title new-content})))
             :block/title new-content})))
 
 

+ 4 - 5
src/main/frontend/worker/db/fix.cljs

@@ -1,12 +1,11 @@
 (ns frontend.worker.db.fix
 (ns frontend.worker.db.fix
   "fix db"
   "fix db"
   (:require [datascript.core :as d]
   (:require [datascript.core :as d]
-            [logseq.db :as ldb]))
+            [logseq.db.frontend.schema :as db-schema]))
 
 
 (defn check-and-fix-schema!
 (defn check-and-fix-schema!
-  [repo conn]
-  (let [schema (ldb/get-schema repo)
-        db-schema (:schema @conn)
+  [conn]
+  (let [db-schema (:schema @conn)
         diffs (->> (keep (fn [[k v]]
         diffs (->> (keep (fn [[k v]]
                            (let [schema-v (-> (get db-schema k)
                            (let [schema-v (-> (get db-schema k)
                                               (dissoc :db/ident))
                                               (dissoc :db/ident))
@@ -18,6 +17,6 @@
                                              (dissoc :db/index))]
                                              (dissoc :db/index))]
                              (when-not (or (= v schema-v') (= k :db/ident))
                              (when-not (or (= v schema-v') (= k :db/ident))
                                (assoc v :db/ident k))))
                                (assoc v :db/ident k))))
-                         schema))]
+                         db-schema/schema))]
     (when (seq diffs)
     (when (seq diffs)
       (d/transact! conn diffs))))
       (d/transact! conn diffs))))

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

@@ -41,14 +41,15 @@
             [logseq.common.util :as common-util]
             [logseq.common.util :as common-util]
             [logseq.db :as ldb]
             [logseq.db :as ldb]
             [logseq.db.common.entity-plus :as entity-plus]
             [logseq.db.common.entity-plus :as entity-plus]
-            [logseq.db.common.entity-util :as common-entity-util]
             [logseq.db.common.initial-data :as common-initial-data]
             [logseq.db.common.initial-data :as common-initial-data]
             [logseq.db.common.order :as db-order]
             [logseq.db.common.order :as db-order]
             [logseq.db.common.reference :as db-reference]
             [logseq.db.common.reference :as db-reference]
             [logseq.db.common.sqlite :as common-sqlite]
             [logseq.db.common.sqlite :as common-sqlite]
             [logseq.db.common.view :as db-view]
             [logseq.db.common.view :as db-view]
             [logseq.db.frontend.class :as db-class]
             [logseq.db.frontend.class :as db-class]
+            [logseq.db.frontend.entity-util :as entity-util]
             [logseq.db.frontend.property :as db-property]
             [logseq.db.frontend.property :as db-property]
+            [logseq.db.frontend.schema :as db-schema]
             [logseq.db.sqlite.create-graph :as sqlite-create-graph]
             [logseq.db.sqlite.create-graph :as sqlite-create-graph]
             [logseq.db.sqlite.export :as sqlite-export]
             [logseq.db.sqlite.export :as sqlite-export]
             [logseq.db.sqlite.gc :as sqlite-gc]
             [logseq.db.sqlite.gc :as sqlite-gc]
@@ -247,9 +248,8 @@
       (rtc-debug-log/create-tables! debug-log-db)
       (rtc-debug-log/create-tables! debug-log-db)
       (search/create-tables-and-triggers! search-db)
       (search/create-tables-and-triggers! search-db)
       (ldb/register-transact-pipeline-fn! worker-pipeline/transact-pipeline)
       (ldb/register-transact-pipeline-fn! worker-pipeline/transact-pipeline)
-      (let [schema (ldb/get-schema repo)
-            conn (common-sqlite/get-storage-conn storage schema)
-            _ (db-fix/check-and-fix-schema! repo conn)
+      (let [conn (common-sqlite/get-storage-conn storage db-schema/schema)
+            _ (db-fix/check-and-fix-schema! conn)
             _ (when datoms
             _ (when datoms
                 (let [eid->datoms (group-by :e datoms)
                 (let [eid->datoms (group-by :e datoms)
                       {properties true non-properties false} (group-by
                       {properties true non-properties false} (group-by
@@ -695,7 +695,7 @@
   [repo class-id]
   [repo class-id]
   (let [db @(worker-state/get-datascript-conn repo)]
   (let [db @(worker-state/get-datascript-conn repo)]
     (->> (db-class/get-class-objects db class-id)
     (->> (db-class/get-class-objects db class-id)
-         (map common-entity-util/entity->map))))
+         (map entity-util/entity->map))))
 
 
 (def-thread-api :thread-api/get-property-values
 (def-thread-api :thread-api/get-property-values
   [repo {:keys [property-ident] :as option}]
   [repo {:keys [property-ident] :as option}]

+ 5 - 5
src/main/frontend/worker/publish.cljs

@@ -6,8 +6,8 @@
             [frontend.worker.state :as worker-state]
             [frontend.worker.state :as worker-state]
             [logseq.common.util :as common-util]
             [logseq.common.util :as common-util]
             [logseq.db :as ldb]
             [logseq.db :as ldb]
-            [logseq.db.common.entity-util :as common-entity-util]
             [logseq.db.frontend.content :as db-content]
             [logseq.db.frontend.content :as db-content]
+            [logseq.db.frontend.entity-util :as entity-util]
             [logseq.db.frontend.property :as db-property]
             [logseq.db.frontend.property :as db-property]
             [logseq.db.frontend.schema :as db-schema]))
             [logseq.db.frontend.schema :as db-schema]))
 
 
@@ -38,7 +38,7 @@
   [db blocks page-entity graph-uuid]
   [db blocks page-entity graph-uuid]
   (let [page-uuid (:block/uuid page-entity)
   (let [page-uuid (:block/uuid page-entity)
         page-title (publish-entity-title page-entity)
         page-title (publish-entity-title page-entity)
-        page? (common-entity-util/page? page-entity)
+        page? (entity-util/page? page-entity)
         graph-uuid (str graph-uuid)]
         graph-uuid (str graph-uuid)]
     (mapcat (fn [block]
     (mapcat (fn [block]
               (let [block-uuid (:block/uuid block)
               (let [block-uuid (:block/uuid block)
@@ -74,7 +74,7 @@
 
 
 (defn- collect-publish-blocks
 (defn- collect-publish-blocks
   [db entity]
   [db entity]
-  (if (common-entity-util/page? entity)
+  (if (entity-util/page? entity)
     (:block/_page entity)
     (:block/_page entity)
     (ldb/get-block-and-children db (:block/uuid entity))))
     (ldb/get-block-and-children db (:block/uuid entity))))
 
 
@@ -209,10 +209,10 @@
                             eids)
                             eids)
                     (remove (fn [[_e a _v _tx _added]]
                     (remove (fn [[_e a _v _tx _added]]
                               (contains? #{:block/tx-id :logseq.property.user/email :logseq.property.embedding/hnsw-label-updated-at} a))))
                               (contains? #{:block/tx-id :logseq.property.user/email :logseq.property.embedding/hnsw-label-updated-at} a))))
-        datoms (if (common-entity-util/page? entity)
+        datoms (if (entity-util/page? entity)
                  raw-datoms
                  raw-datoms
                  (normalize-block-publish-datoms raw-datoms (set (map :db/id blocks)) (:db/id entity)))]
                  (normalize-block-publish-datoms raw-datoms (set (map :db/id blocks)) (:db/id entity)))]
-    {:page (common-entity-util/entity->map entity)
+    {:page (entity-util/entity->map entity)
      :page-uuid (:block/uuid entity)
      :page-uuid (:block/uuid entity)
      :page-title (publish-entity-title entity)
      :page-title (publish-entity-title entity)
      :graph-uuid (some-> graph-uuid str)
      :graph-uuid (some-> graph-uuid str)

+ 1 - 1
src/main/frontend/worker/rtc/remote_update.cljs

@@ -187,7 +187,7 @@
   (when (or (seq remote-parents) remote-block-order) ;at least one of parent|order exists
   (when (or (seq remote-parents) remote-block-order) ;at least one of parent|order exists
     (let [first-remote-parent (first remote-parents)
     (let [first-remote-parent (first remote-parents)
           local-parent (when first-remote-parent (d/entity @conn [:block/uuid first-remote-parent]))
           local-parent (when first-remote-parent (d/entity @conn [:block/uuid first-remote-parent]))
-          whiteboard-page-block? (ldb/whiteboard? local-parent)
+          whiteboard-page-block? (boolean (ldb/whiteboard? local-parent))
           b (d/entity @conn [:block/uuid block-uuid])]
           b (d/entity @conn [:block/uuid block-uuid])]
       (case [whiteboard-page-block? (some? local-parent) (some? remote-block-order)]
       (case [whiteboard-page-block? (some? local-parent) (some? remote-block-order)]
         [false true true]
         [false true true]

+ 1 - 2
src/main/logseq/api/db_based.cljs

@@ -21,7 +21,6 @@
             [goog.object :as gobj]
             [goog.object :as gobj]
             [logseq.api.block :as api-block]
             [logseq.api.block :as api-block]
             [logseq.db :as ldb]
             [logseq.db :as ldb]
-            [logseq.db.common.entity-util :as common-entity-util]
             [logseq.db.frontend.entity-util :as entity-util]
             [logseq.db.frontend.entity-util :as entity-util]
             [logseq.graph-parser.text :as text]
             [logseq.graph-parser.text :as text]
             [logseq.outliner.core :as outliner-core]
             [logseq.outliner.core :as outliner-core]
@@ -56,7 +55,7 @@
         {:keys [sibling before schema]} opts
         {:keys [sibling before schema]} opts
         block (if before
         block (if before
                 (db/pull (:db/id (ldb/get-left-sibling (db/entity (:db/id target))))) target)
                 (db/pull (:db/id (ldb/get-left-sibling (db/entity (:db/id target))))) target)
-        sibling? (if (common-entity-util/page? block) false sibling)
+        sibling? (if (entity-util/page? block) false sibling)
         uuid->properties (let [blocks (outliner-core/tree-vec-flatten blocks' :children)]
         uuid->properties (let [blocks (outliner-core/tree-vec-flatten blocks' :children)]
                            (when (some (fn [b] (seq (:properties b))) blocks)
                            (when (some (fn [b] (seq (:properties b))) blocks)
                              (zipmap (map :uuid blocks)
                              (zipmap (map :uuid blocks)

+ 4 - 4
src/main/logseq/sdk/utils.cljs

@@ -8,8 +8,8 @@
             [frontend.util :as util]
             [frontend.util :as util]
             [goog.object :as gobj]
             [goog.object :as gobj]
             [logseq.cli.common.mcp.tools :as cli-common-mcp-tools]
             [logseq.cli.common.mcp.tools :as cli-common-mcp-tools]
-            [logseq.db.common.entity-util :as common-entity-util]
-            [logseq.db.frontend.content :as db-content]))
+            [logseq.db.frontend.content :as db-content]
+            [logseq.db.frontend.entity-util :as entity-util]))
 
 
 (defn- keep-json-keyword?
 (defn- keep-json-keyword?
   [k]
   [k]
@@ -40,9 +40,9 @@
                            (gobj/get "runtime"))
                            (gobj/get "runtime"))
            cljs? (= "cljs" runtime)
            cljs? (= "cljs" runtime)
            input (cond
            input (cond
-                   (de/entity? input) (common-entity-util/entity->map input)
+                   (de/entity? input) (entity-util/entity->map input)
                    (sequential? input) (map #(if (de/entity? %)
                    (sequential? input) (map #(if (de/entity? %)
-                                               (common-entity-util/entity->map %)
+                                               (entity-util/entity->map %)
                                                %) input)
                                                %) input)
                    :else input)]
                    :else input)]
        (walk/prewalk
        (walk/prewalk

+ 8 - 8
src/test/frontend/components/query/result_test.cljs

@@ -11,10 +11,10 @@
 (deftest transform-query-result-with-transforms-and-grouping
 (deftest transform-query-result-with-transforms-and-grouping
   (let [result (mapv
   (let [result (mapv
                 #(assoc % :block/page {:db/id 1} :block/parent {:db/id 2})
                 #(assoc % :block/page {:db/id 1} :block/parent {:db/id 2})
-                [{:block/uuid (random-uuid) :block/scheduled 20230418}
-                 {:block/uuid (random-uuid) :block/scheduled 20230415}
-                 {:block/uuid (random-uuid) :block/scheduled 20230417}])
-        sorted-result (sort-by :block/scheduled result)]
+                [{:block/uuid (random-uuid) :logseq.property/scheduled 20230418}
+                 {:block/uuid (random-uuid) :logseq.property/scheduled 20230415}
+                 {:block/uuid (random-uuid) :logseq.property/scheduled 20230417}])
+        sorted-result (sort-by :logseq.property/scheduled result)]
     (testing "For list view"
     (testing "For list view"
       (are [query-m expected]
       (are [query-m expected]
            (= expected (transform-query-result {:table? false} query-m result))
            (= expected (transform-query-result {:table? false} query-m result))
@@ -28,11 +28,11 @@
         result
         result
 
 
         ;; Return transformed result for list view
         ;; Return transformed result for list view
-        {:result-transform '(partial sort-by :block/scheduled)}
+        {:result-transform '(partial sort-by :logseq.property/scheduled)}
         sorted-result
         sorted-result
 
 
         ; User overrides transform to return grouped result
         ; User overrides transform to return grouped result
-        {:result-transform '(partial sort-by :block/scheduled) :group-by-page? true}
+        {:result-transform '(partial sort-by :logseq.property/scheduled) :group-by-page? true}
         {{:db/id 1} sorted-result})
         {{:db/id 1} sorted-result})
 
 
       (testing "For table view"
       (testing "For table view"
@@ -44,7 +44,7 @@
           result
           result
 
 
           ;; Return transformed result
           ;; Return transformed result
-          {:result-transform '(partial sort-by :block/scheduled)}
+          {:result-transform '(partial sort-by :logseq.property/scheduled)}
           sorted-result
           sorted-result
 
 
           ;; Ignore override and return normal result
           ;; Ignore override and return normal result
@@ -53,7 +53,7 @@
 
 
       (testing "current block in results"
       (testing "current block in results"
         (is (= result
         (is (= result
-               (let [current-block {:block/uuid (random-uuid) :block/scheduled 20230420 :block/page {:db/id 1}}]
+               (let [current-block {:block/uuid (random-uuid) :logseq.property/scheduled 20230420 :block/page {:db/id 1}}]
                  (transform-query-result {:table? false
                  (transform-query-result {:table? false
                                           :current-block-uuid (:block/uuid current-block)}
                                           :current-block-uuid (:block/uuid current-block)}
                                          {:group-by-page? false}
                                          {:group-by-page? false}

+ 1 - 12
src/test/frontend/db/query_dsl_test.cljs

@@ -700,15 +700,4 @@
       :where
       :where
       [?b :block/name]]
       [?b :block/name]]
     (frontend.db/get-db test-helper/test-db)))
     (frontend.db/get-db test-helper/test-db)))
-
- ;; (or (priority a) (not (priority a)))
- ;; FIXME: Error: Insufficient bindings: #{?priority} not bound in [(contains? #{"A"} ?priority)]
-  (pprint/pprint
-   (d/q
-    '[:find (pull ?b [*])
-      :where
-      [?b :block/uuid]
-      (or (and [?b :block/priority ?priority] [(contains? #{"A"} ?priority)])
-          (not [?b :block/priority #{"A"}]
-               [(contains? #{"A"} ?priority)]))]
-    (frontend.db/get-db test-helper/test-db))))
+  )