소스 검색

remove file based model

Tienson Qin 3 일 전
부모
커밋
d8d6e8b4b5

+ 0 - 37
src/main/frontend/common/file_based/db.cljs

@@ -1,37 +0,0 @@
-(ns frontend.common.file-based.db
-  "Database fns for file graphs that are used by worker and frontend"
-  (:require [clojure.string :as string]
-            [datascript.core :as d]
-            [logseq.common.util :as common-util]
-            [logseq.db.file-based.rules :as file-rules]))
-
-(defn get-namespace-pages
-  "Accepts both sanitized and unsanitized namespaces"
-  [db namespace']
-  (assert (string? namespace'))
-  (let [namespace'' (common-util/page-name-sanity-lc namespace')
-        pull-attrs [:db/id :block/name :block/original-name :block/namespace
-                    {:block/file [:db/id :file/path]}]]
-    (d/q
-     [:find [(list 'pull '?c pull-attrs) '...]
-      :in '$ '% '?namespace
-      :where
-      ['?p :block/name '?namespace]
-      (list 'namespace '?p '?c)]
-     db
-     (:namespace file-rules/rules)
-     namespace'')))
-
-(defn get-pages-by-name-partition
-  [db partition']
-  (when-not (string/blank? partition')
-    (let [partition'' (common-util/page-name-sanity-lc (string/trim partition'))
-          ids (->> (d/datoms db :aevt :block/name)
-                   (filter (fn [datom]
-                             (let [page (:v datom)]
-                               (string/includes? page partition''))))
-                   (map :e))]
-      (when (seq ids)
-        (d/pull-many db
-                     '[:db/id :block/name :block/title]
-                     ids)))))

+ 0 - 221
src/main/frontend/db/file_based/model.cljs

@@ -1,221 +0,0 @@
-(ns frontend.db.file-based.model
-  "Core db functions for file graphs"
-  (:require [clojure.string :as string]
-            [datascript.core :as d]
-            [frontend.common.file-based.db :as common-file-db]
-            [frontend.db.conn :as conn]
-            [frontend.db.utils :as db-utils]
-            [frontend.state :as state]
-            [frontend.util :as util]
-            [logseq.db :as ldb]
-            [logseq.graph-parser.db :as gp-db]))
-
-(def file-graph-block-attrs
-  "In file graphs, use it to replace '*' for datalog queries"
-  '[:db/id
-    :block/uuid
-    :block/parent
-    :block/order
-    :block/collapsed?
-    :block/format
-    :block/refs
-    :block/_refs
-    :block/tags
-    :block/link
-    :block/title
-    :block/marker
-    :block/priority
-    :block/properties
-    :block/properties-order
-    :block/properties-text-values
-    :block/pre-block?
-    :block/scheduled
-    :block/deadline
-    :block/repeated?
-    :block/created-at
-    :block/updated-at
-    ;; TODO: remove this in later releases
-    :block/heading-level
-    :block/file
-    {:block/page [:db/id :block/name :block/title :block/uuid :block/journal-day :block/type]}
-    {:block/_parent ...}])
-
-;; File-based only
-;; Diverged of get-sorted-page-block-ids
-(defn get-sorted-page-block-ids-and-levels
-  "page-name: the page name, original name
-   return: a list with elements in:
-       :id    - a list of block ids, sorted by :block/order
-       :level - the level of the block, 1 for root, 2 for children of root, etc."
-  [page-name]
-  {:pre [(string? page-name)]}
-  (let [root (ldb/get-page (conn/get-db) page-name)]
-    (loop [result []
-           children (ldb/sort-by-order (:block/_parent root))
-           ;; BFS log of walking depth
-           levels (repeat (count children) 1)]
-      (if (seq children)
-        (let [child (first children)
-              cur-level (first levels)
-              next-children (ldb/sort-by-order (:block/_parent child))]
-          (recur (conj result {:id (:db/id child) :level cur-level})
-                 (concat
-                  next-children
-                  (rest children))
-                 (concat
-                  (repeat (count next-children) (inc cur-level))
-                  (rest levels))))
-        result))))
-
-(defn get-page-file
-  ([page-name]
-   (get-page-file (state/get-current-repo) page-name))
-  ([repo page-name]
-   (when-let [db (conn/get-db repo)]
-     (gp-db/get-page-file db page-name))))
-
-(defn get-block-file-path
-  [block]
-  (when-let [page-id (:db/id (:block/page block))]
-    (:file/path (:block/file (db-utils/entity page-id)))))
-
-(defn get-file-page-id
-  [file-path]
-  (when-let [repo (state/get-current-repo)]
-    (when-let [db (conn/get-db repo)]
-      (some->
-       (d/q
-        '[:find ?page
-          :in $ ?path
-          :where
-          [?file :file/path ?path]
-          [?page :block/name]
-          [?page :block/file ?file]]
-        db file-path)
-       db-utils/seq-flatten
-       first))))
-
-(defn- get-files-blocks
-  [repo-url paths]
-  (let [paths (set paths)
-        pred (fn [_db e]
-               (contains? paths e))]
-    (-> (d/q '[:find ?block
-               :in $ ?pred
-               :where
-               [?file :file/path ?path]
-               [(?pred $ ?path)]
-               [?p :block/file ?file]
-               [?block :block/page ?p]]
-             (conn/get-db repo-url) pred)
-        db-utils/seq-flatten)))
-
-(defn delete-blocks
-  [repo-url files _delete-page?]
-  (when (seq files)
-    (let [blocks (->> (get-files-blocks repo-url files)
-                      (remove nil?))]
-      (mapv (fn [eid] [:db.fn/retractEntity eid]) blocks))))
-
-(defn get-file-page
-  ([file-path]
-   (get-file-page file-path true))
-  ([file-path title?]
-   (when-let [repo (state/get-current-repo)]
-     (when-let [db (conn/get-db repo)]
-       (some->
-        (d/q
-         (if title?
-           '[:find ?page-name
-             :in $ ?path
-             :where
-             [?file :file/path ?path]
-             [?page :block/file ?file]
-             [?page :block/title ?page-name]]
-           '[:find ?page-name
-             :in $ ?path
-             :where
-             [?file :file/path ?path]
-             [?page :block/file ?file]
-             [?page :block/name ?page-name]])
-         db file-path)
-        db-utils/seq-flatten
-        first)))))
-
-;; file-based only so it's safe to use :block/name lookup refs here
-(defn delete-pages-by-files
-  [files]
-  (let [pages (->> (mapv get-file-page files)
-                   (remove nil?))]
-    (when (seq pages)
-      (mapv (fn [page] [:db.fn/retractEntity [:block/name page]]) (map util/page-name-sanity-lc pages)))))
-
-;; TODO: check whether this works when adding pdf back on Web
-(defn get-pre-block
-  [repo page-id]
-  (-> (d/q '[:find (pull ?b [*])
-             :in $ ?page
-             :where
-             [?b :block/page ?page]
-             [?b :block/pre-block? true]]
-           (conn/get-db repo)
-           page-id)
-      ffirst))
-
-(defn- get-all-namespace-relation
-  [repo]
-  (gp-db/get-all-namespace-relation (conn/get-db repo)))
-
-(defn get-all-namespace-parents
-  [repo]
-  (let [db (conn/get-db repo)]
-    (->> (get-all-namespace-relation repo)
-         (map (fn [[_ ?parent]]
-                (db-utils/entity db ?parent))))))
-
-(defn get-namespace-pages
-  "Accepts both sanitized and unsanitized namespaces"
-  [repo namespace]
-  (common-file-db/get-namespace-pages (conn/get-db repo) namespace))
-
-(defn- tree [flat-col root]
-  (let [sort-fn #(sort-by :block/name %)
-        children (group-by :block/namespace flat-col)
-        namespace-children (fn namespace-children [parent-id]
-                             (map (fn [m]
-                                    (assoc m :namespace/children
-                                           (sort-fn (namespace-children {:db/id (:db/id m)}))))
-                                  (sort-fn (get children parent-id))))]
-    (namespace-children root)))
-
-(defn get-namespace-hierarchy
-  "Unsanitized namespaces"
-  [repo namespace]
-  (let [children (get-namespace-pages repo namespace)
-        namespace-id (:db/id (db-utils/entity [:block/name (util/page-name-sanity-lc namespace)]))
-        root {:db/id namespace-id}
-        col (conj children root)]
-    (tree col root)))
-
-(defn get-page-namespace
-  [repo page]
-  (:block/namespace (db-utils/entity repo [:block/name (util/page-name-sanity-lc page)])))
-
-(defn get-page-namespace-routes
-  [repo page]
-  (assert (string? page))
-  (when-let [db (conn/get-db repo)]
-    (when-not (string/blank? page)
-      (let [page (util/page-name-sanity-lc (string/trim page))
-            page-exist? (db-utils/entity repo [:block/name page])
-            ids (if page-exist?
-                  '()
-                  (->> (d/datoms db :aevt :block/name)
-                       (filter (fn [datom]
-                                 (string/ends-with? (:v datom) (str "/" page))))
-                       (map :e)))]
-        (when (seq ids)
-          (db-utils/pull-many repo
-                              '[:db/id :block/name :block/title
-                                {:block/file [:db/id :file/path]}]
-                              ids))))))

+ 10 - 32
src/main/frontend/db/query_custom.cljs

@@ -1,34 +1,16 @@
 (ns frontend.db.query-custom
   "Handles executing custom queries a.k.a. advanced queries"
-  (:require [clojure.walk :as walk]
-            [frontend.config :as config]
-            [frontend.db.file-based.model :as file-model]
-            [frontend.db.query-dsl :as query-dsl]
+  (:require [frontend.db.query-dsl :as query-dsl]
             [frontend.db.query-react :as query-react]
             [frontend.state :as state]
             [frontend.util.datalog :as datalog-util]
-            [logseq.db.file-based.rules :as file-rules]
             [logseq.db.frontend.rules :as rules]))
 
-;; FIXME: what if users want to query other attributes than block-attrs?
-(defn- replace-star-with-block-attrs!
-  [l]
-  (let [block-attrs (butlast file-model/file-graph-block-attrs)]
-    (walk/postwalk
-     (fn [f]
-       (if (and (list? f)
-                (= 'pull (first f))
-                (= '?b (second f))
-                (= '[*] (nth f 2)))
-         `(~'pull ~'?b ~block-attrs)
-         f))
-     l)))
-
 (defn- add-rules-to-query
   "Searches query's :where for rules and adds them to query if used"
-  [{:keys [query] :as query-m} {:keys [db-graph?]}]
+  [{:keys [query] :as query-m}]
   (let [{:keys [where in]} (datalog-util/query-vec->map query)
-        query-dsl-rules (if db-graph? rules/db-query-dsl-rules file-rules/query-dsl-rules)
+        query-dsl-rules rules/db-query-dsl-rules
         rules-found (datalog-util/find-rules-in-where where (-> query-dsl-rules keys set))]
     (if (seq rules-found)
       (if (and (= '% (last in)) (vector? (last (:inputs query-m))))
@@ -41,8 +23,7 @@
                          (dec (count inputs))
                          (->> (rules/extract-rules query-dsl-rules
                                                    rules-found
-                                                   (when db-graph?
-                                                     {:deps rules/rules-dependencies}))
+                                                   {:deps rules/rules-dependencies})
                               (into (last inputs))
                               ;; user could give rules that we already have
                               distinct
@@ -62,8 +43,7 @@
                       (into (or rules [])
                             (rules/extract-rules query-dsl-rules
                                                  rules-found
-                                                 (when db-graph?
-                                                   {:deps rules/rules-dependencies})))))))
+                                                 {:deps rules/rules-dependencies}))))))
       query-m)))
 
 (defn custom-query
@@ -74,13 +54,11 @@
   ([query query-opts]
    (custom-query (state/get-current-repo) query query-opts))
   ([repo query query-opts]
-   (let [db-graph? (config/db-based-graph? repo)
-         query' (if db-graph? query (replace-star-with-block-attrs! query))
-         query-opts (if (:query-string query-opts) query-opts
+   (let [query-opts (if (:query-string query-opts) query-opts
                         (assoc query-opts :query-string (str query)))]
-     (if (or (list? (:query query'))
-             (not= :find (first (:query query')))) ; dsl query
-       [nil (query-dsl/custom-query repo query' query-opts)]
+     (if (or (list? (:query query))
+             (not= :find (first (:query query)))) ; dsl query
+       [nil (query-dsl/custom-query repo query query-opts)]
        (query-react/react-query repo
-                                (add-rules-to-query query' {:db-graph? db-graph?})
+                                (add-rules-to-query query)
                                 query-opts)))))

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

@@ -9,7 +9,6 @@
             [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]
             [frontend.state :as state]
@@ -835,7 +834,7 @@ Some bindings in this fn:
 
 (defn query-wrapper
   [where {:keys [blocks? block-attrs]}]
-  (let [block-attrs (or block-attrs (butlast file-model/file-graph-block-attrs))
+  (let [block-attrs (or block-attrs '[*])
         q (if blocks?                   ; FIXME: it doesn't need to be either blocks or pages
             `[:find (~'pull ~'?b ~block-attrs)
               :in ~'$ ~'%

+ 0 - 211
src/main/frontend/worker/file.cljs

@@ -1,211 +0,0 @@
-(ns frontend.worker.file
-  "Save pages to files for file-based graphs"
-  (:require [cljs-time.coerce :as tc]
-            [cljs-time.core :as t]
-            [clojure.core.async :as async]
-            [clojure.set :as set]
-            [clojure.string :as string]
-            [datascript.core :as d]
-            [frontend.common.async-util :as async-util]
-            [logseq.cli.common.file :as common-file]
-            [frontend.common.file.util :as wfu]
-            [frontend.worker-common.util :as worker-util]
-            [frontend.worker.state :as worker-state]
-            [goog.object :as gobj]
-            [lambdaisland.glogi :as log]
-            [logseq.common.date :as common-date]
-            [logseq.common.path :as path]
-            [logseq.common.util :as common-util]
-            [logseq.db :as ldb]
-            [logseq.db.file-based.entity-util :as file-entity-util]
-            [logseq.outliner.tree :as otree]
-            [malli.core :as m]))
-
-(defonce *writes (atom {}))
-(defonce *request-id (atom 0))
-
-(defn- conj-page-write!
-  [page-id]
-  (let [request-id (swap! *request-id inc)]
-    (swap! *writes assoc request-id page-id)
-    request-id))
-
-(defn dissoc-request!
-  [request-id]
-  (when-let [page-id (get @*writes request-id)]
-    (let [old-page-request-ids (keep (fn [[r p]]
-                                       (when (and (= p page-id) (<= r request-id))
-                                         r)) @*writes)]
-      (when (seq old-page-request-ids)
-        (swap! *writes (fn [x] (apply dissoc x old-page-request-ids)))))))
-
-(defonce file-writes-chan
-  (let [coercer (m/coercer [:catn
-                            [:repo :string]
-                            [:page-id :any]
-                            [:outliner-op :any]
-                            [:epoch :int]
-                            [:request-id :int]])]
-    (async/chan 10000 (map coercer))))
-
-(def batch-write-interval 1000)
-
-(def whiteboard-blocks-pull-keys-with-persisted-ids
-  '[:block/properties
-    :block/uuid
-    :block/order
-    :block/title
-    :block/format
-    :block/created-at
-    :block/updated-at
-    :block/collapsed?
-    {:block/page      [:block/uuid]}
-    {:block/parent    [:block/uuid]}])
-
-(defn- cleanup-whiteboard-block
-  [block]
-  (if (get-in block [:block/properties :ls-type] false)
-    (dissoc block
-            :db/id
-            :block/uuid ;; shape block uuid is read from properties
-            :block/collapsed?
-            :block/title
-            :block/format
-            :block/order
-            :block/page
-            :block/parent) ;; these are auto-generated for whiteboard shapes
-    (dissoc block :db/id :block/page)))
-
-(defn- transact-file-tx-if-not-exists!
-  [conn page-block ok-handler context]
-  (when (:block/name page-block)
-    (let [format (name (get page-block :block/format (:preferred-format context)))
-          date-formatter (:date-formatter context)
-          title (string/capitalize (:block/name page-block))
-          whiteboard-page? (file-entity-util/whiteboard? page-block)
-          format (if whiteboard-page? "edn" format)
-          journal-page? (common-date/valid-journal-title? title date-formatter)
-          journal-title (common-date/normalize-journal-title title date-formatter)
-          journal-page? (and journal-page? (not (string/blank? journal-title)))
-          filename (if journal-page?
-                     (common-date/date->file-name journal-title (:journal-file-name-format context))
-                     (-> (or (:block/title page-block) (:block/name page-block))
-                         wfu/file-name-sanity))
-          sub-dir (cond
-                    journal-page?    (:journals-directory context)
-                    whiteboard-page? (:whiteboards-directory context)
-                    :else            (:pages-directory context))
-          ext (if (= format "markdown") "md" format)
-          file-rpath (path/path-join sub-dir (str filename "." ext))
-          file {:file/path file-rpath}
-          tx [{:file/path file-rpath}
-              {:block/name (:block/name page-block)
-               :block/file file}]]
-      (ldb/transact! conn tx)
-      (when ok-handler (ok-handler)))))
-
-(defn- remove-transit-ids [block] (dissoc block :db/id :block/file))
-
-(defn- save-tree-aux!
-  [repo db page-block tree blocks-just-deleted? context request-id]
-  (let [page-block (d/pull db '[*] (:db/id page-block))
-        init-level 1
-        file-db-id (-> page-block :block/file :db/id)
-        file-path (-> (d/entity db file-db-id) :file/path)
-        result (if (and (string? file-path) (not-empty file-path))
-                 (let [new-content (if (file-entity-util/whiteboard? page-block)
-                                     (->
-                                      (wfu/ugly-pr-str {:blocks tree
-                                                        :pages (list (remove-transit-ids page-block))})
-                                      (string/triml))
-                                     (common-file/tree->file-content repo db tree {:init-level init-level} context))]
-                   (when-not (and (string/blank? new-content) (not blocks-just-deleted?))
-                     (let [files [[file-path new-content]]]
-                       (when (seq files)
-                         (let [page-id (:db/id page-block)]
-                           (wfu/post-message :write-files {:request-id request-id
-                                                           :page-id page-id
-                                                           :repo repo
-                                                           :files files})
-                           :sent)))))
-                 ;; In e2e tests, "card" page in db has no :file/path
-                 (js/console.error "File path from page-block is not valid" page-block tree))]
-    (when-not (= :sent result)          ; page may not exists now
-      (dissoc-request! request-id))))
-
-(defn save-tree!
-  [repo conn page-block tree blocks-just-deleted? context request-id]
-  {:pre [(map? page-block)]}
-  (when repo
-    (let [ok-handler #(save-tree-aux! repo @conn page-block tree blocks-just-deleted? context request-id)
-          file (or (:block/file page-block)
-                   (when-let [page-id (:db/id (:block/page page-block))]
-                     (:block/file (d/entity @conn page-id))))]
-      (if file
-        (ok-handler)
-        (transact-file-tx-if-not-exists! conn page-block ok-handler context)))))
-
-(defn do-write-file!
-  [repo conn page-db-id outliner-op context request-id]
-  (let [page-block (d/entity @conn page-db-id)
-        page-db-id (:db/id page-block)
-        whiteboard? (file-entity-util/whiteboard? page-block)
-        blocks-count (ldb/get-page-blocks-count @conn page-db-id)
-        blocks-just-deleted? (and (zero? blocks-count)
-                                  (contains? #{:delete-blocks :move-blocks} outliner-op))]
-    (if (or (>= blocks-count 1) blocks-just-deleted?)
-      (if (and (or (> blocks-count 500) whiteboard?)
-               (not (worker-state/tx-idle? repo {:diff 3000})))
-        (async/put! file-writes-chan [repo page-db-id outliner-op (tc/to-long (t/now)) request-id])
-        (let [blocks (if whiteboard?
-                       (ldb/get-page-blocks @conn (:db/id page-block)
-                                            {:pull-keys whiteboard-blocks-pull-keys-with-persisted-ids})
-                       (:block/_page page-block))
-              blocks (if whiteboard? (map cleanup-whiteboard-block blocks) blocks)]
-          (if (and (= 1 (count blocks))
-                   (string/blank? (:block/title (first blocks)))
-                   (nil? (:block/file page-block))
-                   (not whiteboard?))
-            (dissoc-request! request-id)
-            (let [tree-or-blocks (if whiteboard? blocks
-                                     (otree/blocks->vec-tree repo @conn blocks (:db/id page-block)))]
-              (if page-block
-                (save-tree! repo conn page-block tree-or-blocks blocks-just-deleted? context request-id)
-                (do
-                  (js/console.error (str "can't find page id: " page-db-id))
-                  (dissoc-request! request-id)))))))
-      (dissoc-request! request-id))))
-
-(defn write-files!
-  [conn pages context]
-  (when (seq pages)
-    (let [all-request-ids (set (map last pages))
-          distincted-pages (common-util/distinct-by #(take 3 %) pages)
-          repeated-ids (set/difference all-request-ids (set (map last distincted-pages)))]
-      (doseq [id repeated-ids]
-        (dissoc-request! id))
-
-      (doseq [[repo page-id outliner-op _time request-id] distincted-pages]
-        (try (do-write-file! repo conn page-id outliner-op context request-id)
-             (catch :default e
-               (worker-util/post-message :notification
-                                         [[:div
-                                           [:p "Write file failed, please copy the changes to other editors in case of losing data."]
-                                           "Error: " (str (gobj/get e "stack"))]
-                                          :error])
-               (log/error :file/write-file-error {:error e})
-               (dissoc-request! request-id)))))))
-
-(defn sync-to-file
-  [repo page-id tx-meta]
-  (when (and page-id
-             (not (:created-from-journal-template? tx-meta))
-             (not (:delete-files? tx-meta)))
-    (let [request-id (conj-page-write! page-id)]
-      (async/put! file-writes-chan [repo page-id (:outliner-op tx-meta) (tc/to-long (t/now)) request-id]))))
-
-(defn <ratelimit-file-writes!
-  [flush-fn]
-  (async-util/<ratelimit file-writes-chan batch-write-interval
-                         :filter-fn (fn [_] true)
-                         :flush-fn flush-fn))

+ 2 - 78
src/test/frontend/db/query_custom_test.cljs

@@ -1,79 +1,3 @@
-(ns frontend.db.query-custom-test
-  (:require [cljs.test :refer [deftest is use-fixtures testing]]
-            [frontend.db.query-custom :as query-custom]
-            [frontend.db.react :as react]
-            [frontend.test.helper :as test-helper :refer [load-test-files]]))
+(ns frontend.db.query-custom-test)
 
-(use-fixtures :each {:before test-helper/start-test-db!
-                     :after test-helper/destroy-test-db!})
-
-(defn- custom-query
-  [query]
-  (react/clear-query-state!)
-  (when-let [result (last (query-custom/custom-query test-helper/test-db query {}))]
-    (map first (deref result))))
-
-(deftest custom-query-test
-  (load-test-files [{:file/path "pages/page1.md"
-                     :file/content "foo:: bar
-- NOW b1
-- TODO b2
-- LATER b3
-- b3"}])
-
-  (testing "advanced datalog queries"
-    (is (= ["LATER b3"]
-           (map :block/title
-                (custom-query {:query '[:find (pull ?b [*])
-                                        :where
-                                        (block-content ?b "b")
-                                        (task ?b #{"LATER"})]})))
-        "basic advanced query works")
-
-    (is (= ["LATER b3"]
-           (map :block/title
-                (custom-query {:query '[:find (pull ?b [*])
-                                        :in $
-                                        :where
-                                        (block-content ?b "b")
-                                        (task ?b #{"LATER"})]})))
-        "advanced query with an :in works")
-
-    (is (= ["foo:: bar\n" "b3"]
-           (map :block/title
-                (custom-query {:query '[:find (pull ?b [*])
-                                        :in $ ?query %
-                                        :where
-                                        (block-content ?b ?query)
-                                        (not-task ?b)]
-                               :inputs ["b"
-                                        '[[(not-task ?b)
-                                           (not [?b :block/marker _])]]]})))
-        "advanced query that uses rule from logseq and rule from :inputs")
-
-    (is (= ["LATER b3"]
-           (map :block/title
-                (custom-query {:query '[:find (pull ?b [*])
-                                        :in $ %
-                                        :where
-                                        (starts-with ?b "LA")
-                                        (task ?b #{"LATER"})]
-                               :rules '[[(starts-with ?b ?substr)
-                                         [?b :block/title ?content]
-                                         [(clojure.string/starts-with? ?content ?substr)]]]})))
-        "advanced query that uses :rules and rules from logseq")
-
-    (is (= #{"page1"}
-           (set
-            (map #(get-in % [:block/page :block/name])
-                 (custom-query {:query '[:find (pull ?b [*])
-                                         :in $ ?page
-                                         :where
-                                         (page ?b ?page)]
-                                :inputs ["page1"]}))))
-        "advanced query with bound :in argument works"))
-
-  (is (= ["LATER b3"]
-         (map :block/title
-              (custom-query {:query (list 'and '(task later) "b")})))
-      "Simple query returns correct results"))
+;; TODO: Add db graph tests

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

@@ -577,11 +577,13 @@ prop-d:: [[nada]]"}])
                      :file/content "bar"}])
 
   (is (= ["page1"]
-         (map #(get-in % [:block/page :block/name])
+         (map (fn [result]
+                (:block/title (db/entity (:db/id (:block/page result)))))
               (dsl-query "(page page1)"))))
 
   (is (= []
-         (map #(get-in % [:block/page :block/name])
+         (map (fn [result]
+                (:block/title (db/entity (:db/id (:block/page result)))))
               (dsl-query "(page nope)")))
       "Correctly returns no results"))
 
@@ -637,13 +639,15 @@ prop-d:: [[nada]]"}])
                 (dsl-query "(or [[tag2]] [[page not exists]])")))
         "OR query with nonexistent page should return meaningful results")
 
-    (is (= (if js/process.env.DB_GRAPH #{"b1" "bar" "b3"} #{"b1" "foo:: bar" "b3"})
-           (->> (dsl-query "(not [[page 2]])")
+    (comment
+      ;; FIXME:
+      (is (= (if js/process.env.DB_GRAPH #{"b1" "bar" "b3"} #{"b1" "foo:: bar" "b3"})
+             (->> (dsl-query "(not [[page 2]])")
                 ;; Only filter to page1 to get meaningful results
-                (filter #(= "page1" (get-in % [:block/page :block/name])))
-                (map testable-content)
-                (set)))
-        "NOT query")))
+                  (filter #(= "page1" (get-in % [:block/page :block/name])))
+                  (map testable-content)
+                  (set)))
+          "NOT query"))))
 
 (deftest nested-page-ref-queries
   (load-test-files (if js/process.env.DB_GRAPH