mirror of https://github.com/logseq/logseq
query-dsl + tests cleanup
Remove old string checks that no longer apply. Also added another blank string case that causes an issuepull/4573/head
parent
5f0efcf2d8
commit
8468602881
|
@ -374,6 +374,7 @@ Some bindings in this fn:
|
|||
([e env]
|
||||
(build-query e (assoc env :vars (atom {})) 0))
|
||||
([e {:keys [sort-by blocks? sample] :as env :or {blocks? (atom nil)}} level]
|
||||
; {:post [(or (nil? %) (map? %))]}
|
||||
(let [fe (first e)
|
||||
fe (when fe (symbol (string/lower-case (name fe))))
|
||||
page-ref? (text/page-ref? e)]
|
||||
|
@ -506,16 +507,8 @@ Some bindings in this fn:
|
|||
{result :query rules :rules}
|
||||
(when form (build-query form {:sort-by sort-by
|
||||
:blocks? blocks?
|
||||
:sample sample}))]
|
||||
(cond
|
||||
(and (nil? result) (string? form))
|
||||
form
|
||||
|
||||
(string? result)
|
||||
(string/trim result)
|
||||
|
||||
:else
|
||||
(let [result (when (seq result)
|
||||
:sample sample}))
|
||||
result' (when (seq result)
|
||||
(let [key (if (coll? (first result))
|
||||
(keyword (ffirst result))
|
||||
(keyword (first result)))
|
||||
|
@ -525,11 +518,11 @@ Some bindings in this fn:
|
|||
|
||||
result)]
|
||||
(add-bindings! form result)))]
|
||||
{:query result
|
||||
{:query result'
|
||||
:rules (mapv rules/query-dsl-rules rules)
|
||||
:sort-by @sort-by
|
||||
:blocks? (boolean @blocks?)
|
||||
:sample sample})))))
|
||||
:sample sample})))
|
||||
(catch js/Error e
|
||||
(log/error :query-dsl/parse-error e)))))
|
||||
|
||||
|
@ -538,7 +531,6 @@ Some bindings in this fn:
|
|||
|
||||
(defn query-wrapper
|
||||
[where blocks?]
|
||||
(when where
|
||||
(let [q (if blocks? ; FIXME: it doesn't need to be either blocks or pages
|
||||
`[:find (~'pull ~'?b ~model/block-attrs)
|
||||
:in ~'$ ~'%
|
||||
|
@ -550,22 +542,15 @@ Some bindings in this fn:
|
|||
(apply conj q where)
|
||||
(conj q where))]
|
||||
(prn "Datascript query: " result)
|
||||
result)))
|
||||
result))
|
||||
|
||||
(defn query
|
||||
"Runs a dsl query with query as a string. Primary use is from '{{query }}'"
|
||||
[repo query-string]
|
||||
(when (string? query-string)
|
||||
(let [query-string (template/resolve-dynamic-template! query-string)]
|
||||
(when-not (string/blank? query-string)
|
||||
(let [{:keys [query rules sort-by blocks? sample] :as result} (parse query-string)
|
||||
full-text-query? (and (string? result)
|
||||
(not (string/includes? result " ")))]
|
||||
(if full-text-query?
|
||||
(if (= "\"" (first result) (last result))
|
||||
(subs result 1 (dec (count result)))
|
||||
result)
|
||||
(when-let [query (query-wrapper query blocks?)]
|
||||
(when (and (string? query-string) (not= "\"\"" query-string))
|
||||
(let [query-string' (template/resolve-dynamic-template! query-string)
|
||||
{:keys [query rules sort-by blocks? sample]} (parse query-string')]
|
||||
(when-let [query' (some-> query (query-wrapper blocks?))]
|
||||
(let [sort-by (or sort-by identity)
|
||||
random-samples (if @sample
|
||||
(fn [col]
|
||||
|
@ -574,7 +559,7 @@ Some bindings in this fn:
|
|||
transform-fn (comp sort-by random-samples)]
|
||||
(try
|
||||
(query-react/react-query repo
|
||||
{:query query
|
||||
{:query query'
|
||||
:query-string query-string
|
||||
:rules rules}
|
||||
{:use-cache? false
|
||||
|
@ -582,8 +567,8 @@ Some bindings in this fn:
|
|||
(catch ExceptionInfo e
|
||||
;; Allow non-existent page queries to be ignored
|
||||
(if (string/includes? (str (.-message e)) "Nothing found for entity")
|
||||
(log/error :query-dsl-error e)
|
||||
(throw e))))))))))))
|
||||
(log/error :nothing-found-error e)
|
||||
(throw e)))))))))
|
||||
|
||||
(defn custom-query
|
||||
"Runs a dsl query with query as a seq. Primary use is from advanced query"
|
||||
|
@ -591,11 +576,11 @@ Some bindings in this fn:
|
|||
(when (seq (:query query-m))
|
||||
(let [query-string (template/resolve-dynamic-template! (pr-str (:query query-m)))
|
||||
{:keys [query sort-by blocks? rules]} (parse query-string)]
|
||||
(when-let [query (query-wrapper query blocks?)]
|
||||
(when-let [query' (some-> query (query-wrapper blocks?))]
|
||||
(query-react/react-query repo
|
||||
(merge
|
||||
query-m
|
||||
{:query query
|
||||
{:query query'
|
||||
:rules rules})
|
||||
(merge
|
||||
query-opts
|
||||
|
|
|
@ -42,14 +42,6 @@
|
|||
(when-let [result (query-dsl/custom-query test-helper/test-db query {})]
|
||||
(map first (deref result))))
|
||||
|
||||
(defn- q
|
||||
[s]
|
||||
(db/clear-query-state!)
|
||||
(let [parse-result (query-dsl/parse s)
|
||||
query (:query parse-result)]
|
||||
{:query (if (seq query) (vec query) query)
|
||||
:result (query-dsl/query test-helper/test-db s)}))
|
||||
|
||||
;; Tests
|
||||
;; =====
|
||||
|
||||
|
@ -351,17 +343,17 @@ tags: other
|
|||
"Correctly returns no results"))
|
||||
|
||||
(deftest empty-queries
|
||||
(let [empty-result {:query nil :result nil}]
|
||||
(testing "nil or blank strings should be ignored"
|
||||
(are [x y] (= (q x) y)
|
||||
nil empty-result
|
||||
"" empty-result
|
||||
" " empty-result))
|
||||
(are [x] (nil? (dsl-query x))
|
||||
nil
|
||||
""
|
||||
" "
|
||||
"\"\""))
|
||||
|
||||
(testing "Non exists page should be ignored"
|
||||
(are [x y] (nil? (:result (q x)))
|
||||
"[[page-not-exist]]" empty-result
|
||||
"[[another-page-not-exist]]" empty-result))))
|
||||
(are [x] (nil? (dsl-query x))
|
||||
"[[page-not-exist]]"
|
||||
"[[another-page-not-exist]]")))
|
||||
|
||||
(deftest page-ref-and-boolean-queries
|
||||
(load-test-files [{:file/path "pages/page1.md"
|
||||
|
@ -487,60 +479,48 @@ last-modified-at:: 1609084800002"}]]
|
|||
(load-test-files-with-timestamps)
|
||||
;; (testing "sort-by (created-at defaults to desc)"
|
||||
;; (db/clear-query-state!)
|
||||
;; (let [result (->> (q "(and (task now later done)
|
||||
;; (let [result (->> (dsl-query "(and (task now later done)
|
||||
;; (sort-by created-at))")
|
||||
;; :result
|
||||
;; deref
|
||||
;; (map #(get-in % [:block/properties "created-at"])))]
|
||||
;; (is (= result
|
||||
;; '(1609052959376 1609052958714 1608968448115 1608968448114 1608968448113)))))
|
||||
|
||||
;; (testing "sort-by (created-at desc)"
|
||||
;; (db/clear-query-state!)
|
||||
;; (let [result (->> (q "(and (todo now later done)
|
||||
;; (let [result (->> (dsl-query "(and (todo now later done)
|
||||
;; (sort-by created-at desc))")
|
||||
;; :result
|
||||
;; deref
|
||||
;; (map #(get-in % [:block/properties "created-at"])))]
|
||||
;; (is (= result
|
||||
;; '(1609052959376 1609052958714 1608968448115 1608968448114 1608968448113)))))
|
||||
|
||||
;; (testing "sort-by (created-at asc)"
|
||||
;; (db/clear-query-state!)
|
||||
;; (let [result (->> (q "(and (todo now later done)
|
||||
;; (let [result (->> (dsl-query "(and (todo now later done)
|
||||
;; (sort-by created-at asc))")
|
||||
;; :result
|
||||
;; deref
|
||||
;; (map #(get-in % [:block/properties "created-at"])))]
|
||||
;; (is (= result
|
||||
;; '(1608968448113 1608968448114 1608968448115 1609052958714 1609052959376)))))
|
||||
|
||||
;; (testing "sort-by (last-modified-at defaults to desc)"
|
||||
;; (db/clear-query-state!)
|
||||
;; (let [result (->> (q "(and (todo now later done)
|
||||
;; (let [result (->> (dsl-query "(and (todo now later done)
|
||||
;; (sort-by last-modified-at))")
|
||||
;; :result
|
||||
;; deref
|
||||
;; (map #(get-in % [:block/properties "last-modified-at"])))]
|
||||
;; (is (= result
|
||||
;; '(1609052974285 1609052958714 1608968448120 1608968448115 1608968448113)))))
|
||||
|
||||
;; (testing "sort-by (last-modified-at desc)"
|
||||
;; (db/clear-query-state!)
|
||||
;; (let [result (->> (q "(and (todo now later done)
|
||||
;; (let [result (->> (dsl-query "(and (todo now later done)
|
||||
;; (sort-by last-modified-at desc))")
|
||||
;; :result
|
||||
;; deref
|
||||
;; (map #(get-in % [:block/properties "last-modified-at"])))]
|
||||
;; (is (= result
|
||||
;; '(1609052974285 1609052958714 1608968448120 1608968448115 1608968448113)))))
|
||||
|
||||
;; (testing "sort-by (last-modified-at desc)"
|
||||
;; (db/clear-query-state!)
|
||||
;; (let [result (->> (q "(and (todo now later done)
|
||||
;; (let [result (->> (dsl-query "(and (todo now later done)
|
||||
;; (sort-by last-modified-at asc))")
|
||||
;; :result
|
||||
;; deref
|
||||
;; (map #(get-in % [:block/properties "last-modified-at"])))]
|
||||
;; (is (= result
|
||||
;; '(1608968448113 1608968448115 1608968448120 1609052958714 1609052974285)))))
|
||||
|
|
Loading…
Reference in New Issue