Przeglądaj źródła

fix: (tags ...) query doesn't return child tag objects

Tienson Qin 1 tydzień temu
rodzic
commit
f3f6c0ce6a

+ 3 - 4
deps/db/src/logseq/db/frontend/rules.cljc

@@ -230,10 +230,9 @@
 
     :tags
     '[(tags ?b ?tags)
-      [?b :block/tags ?t]
-      [?t :block/name ?tag]
-      [(missing? $ ?b :block/link)]
-      [(contains? ?tags ?tag)]]
+      [?b :block/tags ?tag]
+      [(contains? ?tags ?tag)]
+      [(missing? $ ?b :block/link)]]
 
     :task
     '[(task ?b ?statuses)

+ 18 - 3
src/main/frontend/db/query_dsl.cljs

@@ -8,6 +8,7 @@
             [clojure.walk :as walk]
             [frontend.config :as config]
             [frontend.date :as date]
+            [frontend.db.conn :as db-conn]
             [frontend.db.file-based.model :as file-model]
             [frontend.db.query-react :as query-react]
             [frontend.db.utils :as db-utils]
@@ -18,7 +19,9 @@
             [logseq.common.util :as common-util]
             [logseq.common.util.date-time :as date-time-util]
             [logseq.common.util.page-ref :as page-ref]
+            [logseq.db :as ldb]
             [logseq.db.file-based.rules :as file-rules]
+            [logseq.db.frontend.class :as db-class]
             [logseq.db.frontend.property :as db-property]
             [logseq.db.frontend.rules :as rules]
             [logseq.graph-parser.text :as text]))
@@ -414,10 +417,22 @@
   (let [tags (if (coll? (first (rest e)))
                (first (rest e))
                (rest e))
-        tags (map (comp string/lower-case name) tags)]
+        tags (map name tags)]
     (when (seq tags)
-      (let [tags (set (map (comp page-ref/get-page-name! string/lower-case name) tags))]
-        {:query (list 'tags (if db-graph? '?b '?p) tags)
+      (let [tags (set (map (comp page-ref/get-page-name!) tags))
+            lower-cased-tags (set (map (comp page-ref/get-page-name! string/lower-case) tags))]
+        {:query (list 'tags
+                      (if db-graph? '?b '?p)
+                      (if db-graph?
+                        (let [db (db-conn/get-db)]
+                          (->> tags
+                               (mapcat (fn [tag-name]
+                                         (when-let [tag-id (first (ldb/page-exists? db tag-name #{:logseq.class/Tag}))]
+                                           (when-let [tag (db-utils/entity tag-id)]
+                                             (->> (db-class/get-structured-children db (:db/id tag))
+                                                  (cons (:db/id tag)))))))
+                               set))
+                        lower-cased-tags))
          :rules [:tags]}))))
 
 (defn- build-page-tags

+ 2 - 2
src/main/frontend/db/utils.cljs

@@ -36,10 +36,10 @@
                (str "Invalid entity eid: " (pr-str eid))))
      (let [eid (if (uuid? eid) [:block/uuid eid] eid)]
        (when-let [db (if (string? repo-or-db)
-                     ;; repo
+                       ;; repo
                        (let [repo (or repo-or-db (state/get-current-repo))]
                          (conn/get-db repo))
-                     ;; db
+                       ;; db
                        repo-or-db)]
          (d/entity db eid))))))