소스 검색

fix: not able to create case sensitive classes

Also important to keep db graphs decoupled from file specific
:block/name. Made sure that related fix in logseq/db-test#9 still works
Gabriel Horner 1 년 전
부모
커밋
85e358e57b

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

@@ -189,19 +189,31 @@
   "Whether a page exists with the `type`."
   [db page-name type]
   (when page-name
-    (let [page-name (common-util/page-name-sanity-lc page-name)]
-      (if (db-based-graph? db)
+    (if (db-based-graph? db)
+      ;; Classes and properties are case sensitive
+      (if (#{"class" "property"} type)
         (seq
          (d/q
           '[:find [?p ...]
             :in $ ?name ?type
             :where
-            [?p :block/name ?name]
+            [?p :block/title ?name]
             [?p :block/type ?type]]
           db
           page-name
           type))
-        (d/entity db [:block/name page-name])))))
+        ;; TODO: Decouple db graphs from file specific :block/name
+        (seq
+         (d/q
+          '[:find [?p ...]
+            :in $ ?name ?type
+            :where
+            [?p :block/name ?name]
+            [?p :block/type ?type]]
+          db
+          (common-util/page-name-sanity-lc page-name)
+          type)))
+      (d/entity db [:block/name (common-util/page-name-sanity-lc page-name)]))))
 
 (defn get-page
   "Get a page given its unsanitized name"
@@ -212,6 +224,15 @@
       (d/entity db [:block/uuid id])
       (d/entity db (get-first-page-by-name db (name page-name-or-uuid))))))
 
+(defn get-case-page
+  "Case sensitive version of get-page. For use with DB graphs"
+  [db page-name-or-uuid]
+  (when db
+    (if-let [id (if (uuid? page-name-or-uuid) page-name-or-uuid
+                    (parse-uuid page-name-or-uuid))]
+      (d/entity db [:block/uuid id])
+      (d/entity db (sqlite-common-db/get-first-page-by-title db page-name-or-uuid)))))
+
 (defn page-empty?
   "Whether a page is empty. Does it has a non-page block?
   `page-id` could be either a string or a db/id."

+ 5 - 2
deps/graph-parser/src/logseq/graph_parser/block.cljs

@@ -317,7 +317,10 @@
                                      namespace? (and (not db-based?)
                                                      (not (boolean (text/get-nested-page-name original-page-name)))
                                                      (text/namespace-page? original-page-name))
-                                     page-entity (when (and db (not skip-existing-page-check?)) (ldb/get-page db original-page-name))
+                                     page-entity (when (and db (not skip-existing-page-check?))
+                                                   (if class?
+                                                     (ldb/get-case-page db original-page-name)
+                                                     (ldb/get-page db original-page-name)))
                                      original-page-name (or from-page (:block/title page-entity) original-page-name)
                                      page (merge
                                            {:block/name page-name
@@ -424,7 +427,7 @@
           refs (->> (ref->map-fn *refs false)
                     (remove nil?)
                     (map (fn [ref]
-                           (if-let [entity (ldb/get-page db (:block/title ref))]
+                           (if-let [entity (ldb/get-case-page db (:block/title ref))]
                              (if (= (:db/id parse-block) (:db/id entity))
                                ref
                                (select-keys entity [:block/uuid :block/title :block/name]))

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

@@ -95,7 +95,8 @@
                               ;; anything org mode
                               "org"
                               "pre-block"
-                              "namespace"]))
+                              "namespace"
+                              "db/get-page"]))
         res (apply shell {:out :string :continue true}
                    "git grep -E" (str "(" (string/join "|" file-concepts) ")")
                    db-graph-paths)]

+ 1 - 1
src/main/frontend/components/cmdk/core.cljs

@@ -497,7 +497,7 @@
         create-page? (page-handler/<create! @!input {:redirect? true}))
       (state/close-modal!)
       (when create-class?
-        (state/pub-event! [:class/configure (db/get-page class)])))))
+        (state/pub-event! [:class/configure (db/get-case-page class)])))))
 
 (defn- get-filter-user-input
   [input]

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

@@ -13,7 +13,7 @@
            (let [k (:property-key (last (:rum/args state)))]
              (assoc state
                     ::property-key (atom k)
-                    ::property (atom (when k (db/get-page k))))))}
+                    ::property (atom (when k (db/get-case-page k))))))}
   [state blocks opts]
   (when (seq blocks)
     (let [*property-key (::property-key state)

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

@@ -165,11 +165,11 @@
             (let [gd (goog.date.Date. (.getFullYear d) (.getMonth d) (.getDate d))]
               (let [journal (date/js-date->journal-title gd)]
                 (p/do!
-                 (when-not (db/get-page journal)
+                 (when-not (db/get-case-page journal)
                    (page-handler/<create! journal {:redirect? false
                                                    :create-first-block? false}))
                  (when (fn? on-change)
-                   (on-change (db/get-page journal)))
+                   (on-change (db/get-case-page journal)))
                  (shui/popup-hide! id)
                  (ui/hide-popups-until-preview-popup!)
                  (shui/dialog-close!))))))]
@@ -253,7 +253,7 @@
                               (or (seq (map string/trim (rest (re-find #"(.*)#(.*)$" page*))))
                                   [page* nil])
                               [page* nil])
-        page-entity (ldb/get-page (db/get-db) page)
+        page-entity (ldb/get-case-page (db/get-db) page)
         id (:db/id page-entity)
         class? (= :block/tags (:db/ident property))
         ;; Note: property and other types shouldn't be converted to class
@@ -263,7 +263,7 @@
       (or (nil? id) (and class? (not page?)))
       (let [inline-class-uuid
             (when inline-class
-              (or (:block/uuid (ldb/get-page (db/get-db) inline-class))
+              (or (:block/uuid (ldb/get-case-page (db/get-db) inline-class))
                   (do (log/error :msg "Given inline class does not exist" :inline-class inline-class)
                       nil)))
             create-options {:redirect? false

+ 1 - 1
src/main/frontend/db.cljs

@@ -33,7 +33,7 @@
   get-custom-css
   get-file-last-modified-at get-file get-file-page get-file-page-id file-exists?
   get-files-blocks get-files-full get-journals-length
-  get-latest-journals get-page get-page-alias-names
+  get-latest-journals get-page get-case-page get-page-alias-names
   get-page-blocks-count get-page-blocks-no-cache get-page-file get-page-format
   get-referenced-blocks get-page-referenced-blocks-full get-page-referenced-pages
   get-all-pages get-pages-relation get-pages-that-mentioned-page

+ 5 - 0
src/main/frontend/db/model.cljs

@@ -470,6 +470,11 @@ independent of format as format specific heading characters are stripped"
   (when page-name-or-uuid
     (ldb/get-page (conn/get-db) page-name-or-uuid)))
 
+(defn get-case-page
+  [page-name-or-uuid]
+  (when page-name-or-uuid
+    (ldb/get-case-page (conn/get-db) page-name-or-uuid)))
+
 (defn get-redirect-page-name
   "Given any readable page-name, return the exact page-name in db. If page
    doesn't exists yet, will return the passed `page-name`. Accepts both

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

@@ -82,7 +82,7 @@
                    "journal"
                    :else
                    "page")]
-    (when-not (ldb/page-exists? @conn page-name type)
+    (when-not (ldb/page-exists? @conn title type)
       (let [format    :markdown
             page      (-> (gp-block/page-name->map title @conn true date-formatter
                                                    {:class? class?

+ 1 - 1
src/main/logseq/api/block.cljs

@@ -41,7 +41,7 @@
           (if multi?
             (-> (for [v value]
                   (when-let [page (some-> v (str) (string/trim))]
-                    (let [id (:db/id (ldb/get-page (conn/get-db) page))]
+                    (let [id (:db/id (ldb/get-case-page (conn/get-db) page))]
                       (if (nil? id)
                         (-> (page-handler/<create! page {:redirect? false :create-first-block? false})
                           (p/then #(:db/id %)))

+ 8 - 8
src/test/frontend/db/db_based_model_test.cljs

@@ -29,7 +29,7 @@
 (deftest get-class-objects-test
   (let [opts {:redirect? false :create-first-block? false :class? true}
         _ (test-helper/create-page! "class1" opts)
-        class (db/get-page "class1")
+        class (db/get-case-page "class1")
         _ (test-helper/save-block! repo fbid "Block 1" {:tags ["class1"]})]
     (is (= (map :db/id (model/get-class-objects repo (:db/id class)))
            [(:db/id (db/entity [:block/uuid fbid]))]))
@@ -37,7 +37,7 @@
     (testing "classes parent"
       (test-helper/create-page! "class2" opts)
       ;; set class2's parent to class1
-      (let [class2 (db/get-page "class2")]
+      (let [class2 (db/get-case-page "class2")]
         (db/transact! [{:db/id (:db/id class2)
                         :class/parent (:db/id class)}]))
       (test-helper/save-block! repo sbid "Block 2" {:tags ["class2"]})
@@ -49,8 +49,8 @@
   (let [opts {:redirect? false :create-first-block? false :class? true}
         _ (test-helper/create-page! "class1" opts)
         _ (test-helper/create-page! "class2" opts)
-        class1 (db/get-page "class1")
-        class2 (db/get-page "class2")
+        class1 (db/get-case-page "class1")
+        class2 (db/get-case-page "class2")
         conn (db/get-db false)]
     (outliner-property/upsert-property! conn :user.property/property-1 {:type :node} {})
     (outliner-property/class-add-property! conn (:db/id class1) :user.property/property-1)
@@ -72,13 +72,13 @@
         _ (test-helper/create-page! "class1" opts)
         _ (test-helper/create-page! "class2" opts)
         _ (test-helper/create-page! "class3" opts)
-        class1 (db/get-page "class1")
-        class2 (db/get-page "class2")
-        class3 (db/get-page "class3")
+        class1 (db/get-case-page "class1")
+        class2 (db/get-case-page "class2")
+        class3 (db/get-case-page "class3")
         _ (db/transact! [{:db/id (:db/id class2)
                           :class/parent (:db/id class1)}
                          {:db/id (:db/id class3)
                           :class/parent (:db/id class2)}])]
     (is
-     (= (model/get-class-children repo (:db/id (db/get-page "class1")))
+     (= (model/get-class-children repo (:db/id (db/get-case-page "class1")))
         [(:db/id class2) (:db/id class3)]))))