Browse Source

Extends entity for new :block/properties and direct property access

Tienson Qin 1 year ago
parent
commit
89b40b4ad8

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

@@ -8,7 +8,7 @@
             [logseq.db.frontend.content :as db-content]
             [clojure.set :as set]
             [logseq.db.frontend.rules :as rules]
-            [logseq.db.frontend.entity-plus]
+            [logseq.db.frontend.entity-plus :as entity-plus]
             [logseq.db.sqlite.util :as sqlite-util]
             [logseq.db.sqlite.common-db :as sqlite-common-db]))
 
@@ -495,10 +495,7 @@
 
 (def page? sqlite-util/page?)
 
-(defn db-based-graph?
-  "Whether the current graph is db-only"
-  [db]
-  (= "db" (:db/type (d/entity db :logseq.kv/db-type))))
+
 
 ;; File based fns
 (defn get-namespace-pages
@@ -532,3 +529,5 @@
         (d/pull-many db
                      '[:db/id :block/name :block/original-name]
                      ids)))))
+
+(def db-based-graph? entity-plus/db-based-graph?)

+ 27 - 11
deps/db/src/logseq/db/frontend/entity_plus.cljc

@@ -9,24 +9,37 @@
             #?(:org.babashka/nbb [datascript.db])
             [datascript.impl.entity :as entity :refer [Entity]]
             [logseq.db.frontend.content :as db-content]
+            [datascript.core :as d]
             [logseq.db.frontend.property :as db-property]))
 
+(defn db-based-graph?
+  "Whether the current graph is db-only"
+  [db]
+  (= "db" (:db/type (d/entity db :logseq.kv/db-type))))
+
 (def lookup-entity @#'entity/lookup-entity)
 (defn lookup-kv-then-entity
   ([e k] (lookup-kv-then-entity e k nil))
   ([^Entity e k default-value]
-   (cond
-     (= k :block/raw-content)
+   (case k
+     :block/raw-content
      (lookup-entity e :block/content default-value)
 
-     ;; Should we keep this?
-     (= k :block/properties)
-     (lookup-entity e :block/properties
-                    (->> (into {} e)
-                         (filter (fn [[k _]] (db-property/property? k)))
-                         (into {})))
+     :block/raw-properties
+     (lookup-entity e :block/properties default-value)
+
+     :block/properties
+     (let [db (.-db e)]
+       (if (db-based-graph? db)
+         (let [result (lookup-entity e k default-value)]
+           (->>
+            (map (fn [pair-e]
+                   (let [pid (:db/ident (lookup-entity pair-e :property/pair-property nil))]
+                     {pid (lookup-entity pair-e pid nil)})) result)
+            (into {})))
+         (lookup-entity e :block/properties nil)))
 
-     (= k :block/content)
+     :block/content
      (or
       (get (.-kv e) k)
       (let [result (lookup-entity e k default-value)
@@ -37,9 +50,12 @@
            (db-content/special-id-ref->page-ref result (distinct (concat refs tags))))
          default-value)))
 
-     :else
      (or (get (.-kv e) k)
-         (lookup-entity e k default-value)))))
+         (if (and (db-property/property? k)
+                  (db-based-graph? (.-db e))
+                  (not (:property/pair-property e))) ; property pair will be direct access
+           (k (first (filter #(some? (k %)) (lookup-entity e :block/properties nil))))
+           (lookup-entity e k default-value))))))
 
 #?(:org.babashka/nbb
    nil

+ 4 - 1
deps/db/src/logseq/db/frontend/schema.cljs

@@ -121,9 +121,12 @@
 (def schema-for-db-based-graph
   (merge
    (dissoc schema
-           :block/namespace :block/properties :block/properties-text-values :block/pre-block? :recent/pages :file/handle :block/file
+           :block/namespace :block/properties-text-values :block/pre-block? :recent/pages :file/handle :block/file
            :block/properties-order)
    {:block/name {:db/index true}        ; remove db/unique for :block/name
+    :block/properties {:db/valueType :db.type/ref
+                       :db/cardinality :db.cardinality/many}
+    :property/pair-property {:db/valueType :db.type/ref}
     ;; class properties
     :class/parent {:db/valueType :db.type/ref
                    :db/index true}