From 8697d59b72517e283b1dec527aa05342c8dc92e9 Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Thu, 20 Apr 2023 12:20:56 -0400 Subject: [PATCH] Add test to prevent regression on #9119 --- deps/db/src/logseq/db/rules.cljc | 1 + src/test/frontend/db/query_dsl_test.cljs | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/deps/db/src/logseq/db/rules.cljc b/deps/db/src/logseq/db/rules.cljc index a6d5391d3..46acf4521 100644 --- a/deps/db/src/logseq/db/rules.cljc +++ b/deps/db/src/logseq/db/rules.cljc @@ -134,6 +134,7 @@ [(str ?val) ?str-val] (or [(= ?v ?val)] [(contains? ?v ?val)] + ;; For integer pages that aren't strings [(contains? ?v ?str-val)])] :page-ref diff --git a/src/test/frontend/db/query_dsl_test.cljs b/src/test/frontend/db/query_dsl_test.cljs index 80a9cdcd0..ebbda9a6b 100644 --- a/src/test/frontend/db/query_dsl_test.cljs +++ b/src/test/frontend/db/query_dsl_test.cljs @@ -1,7 +1,9 @@ (ns frontend.db.query-dsl-test (:require [cljs.test :refer [are deftest testing use-fixtures is]] [clojure.string :as str] + [logseq.graph-parser.util.page-ref :as page-ref] [frontend.db :as db] + [frontend.util :as util] [frontend.db.query-dsl :as query-dsl] [frontend.test.helper :as test-helper :include-macros true :refer [load-test-files]])) @@ -142,6 +144,21 @@ prop-d:: nada"}]) (test-helper/with-config {} (block-property-queries-test)))) +(deftest block-property-query-performance + (let [pages (->> (repeat 10 {:tags ["tag1" "tag2"]}) + (map-indexed (fn [idx {:keys [tags]}] + {:file/path (str "pages/page" idx ".md") + :file/content (if (seq tags) + (str "tags:: " (str/join ", " (map page-ref/->page-ref tags))) + "")}))) + _ (load-test-files pages) + {:keys [result time]} + (util/with-time (dsl-query "(and (property tags tag1) (property tags tag2))"))] + ;; Specific number isn't as important as ensuring query doesn't take orders + ;; of magnitude longer + (is (> 25.0 time) "multi property query perf is reasonable") + (is (= 10 (count result))))) + (defn- page-property-queries-test [] (load-test-files [{:file/path "pages/page1.md"