Fix simple queries not working in advanced query - close #4498

Also removed unused repo fn in query-dsl ns and configured custom-query
to throw exception
This commit is contained in:
Gabriel Horner
2022-03-08 15:55:53 -05:00
committed by Tienson Qin
parent 6200ec70d3
commit f9cb132482
5 changed files with 88 additions and 81 deletions

View File

@@ -13,7 +13,6 @@
[frontend.template :as template]
[frontend.text :as text]
[frontend.util :as util]
[frontend.state :as state]
[lambdaisland.glogi :as log]))
@@ -169,9 +168,9 @@
(defonce remove-nil? (partial remove nil?))
(defn- build-and-or-not
[repo e {:keys [current-filter vars] :as env} level fe]
[e {:keys [current-filter vars] :as env} level fe]
(let [raw-clauses (map (fn [form]
(build-query repo form (assoc env :current-filter fe) (inc level)))
(build-query form (assoc env :current-filter fe) (inc level)))
(rest e))
clauses (->> raw-clauses
(map :query)
@@ -384,9 +383,9 @@ Some bindings in this fn:
* e - the list being processed
* fe - the query operator e.g. `property`"
([repo e env]
(build-query repo e (assoc env :vars (atom {})) 0))
([repo e {:keys [sort-by blocks? sample] :as env} level]
([e env]
(build-query e (assoc env :vars (atom {})) 0))
([e {:keys [sort-by blocks? sample] :as env :or {blocks? (atom nil)}} level]
(let [fe (first e)
fe (when fe (symbol (string/lower-case (name fe))))
page-ref? (text/page-ref? e)]
@@ -406,7 +405,7 @@ Some bindings in this fn:
(build-block-content e)
(contains? #{'and 'or 'not} fe)
(build-and-or-not repo e env level fe)
(build-and-or-not e env level fe)
(= 'between fe)
(build-between e)
@@ -503,7 +502,7 @@ Some bindings in this fn:
q)))
(defn parse
[repo s]
[s]
(when (and (string? s)
(not (string/blank? s)))
(try
@@ -517,9 +516,9 @@ Some bindings in this fn:
blocks? (atom nil)
sample (atom nil)
{result :query rules :rules}
(when form (build-query repo form {:sort-by sort-by
:blocks? blocks?
:sample sample}))]
(when form (build-query form {:sort-by sort-by
:blocks? blocks?
:sample sample}))]
(cond
(and (nil? result) (string? form))
form
@@ -566,58 +565,58 @@ Some bindings in this fn:
result)))
(defn query
([query-string]
(query (state/get-current-repo) query-string))
([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 repo query-string)
query (if (string? query) (string/trim query) query)
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?)]
(let [sort-by (or sort-by identity)
random-samples (if @sample
(fn [col]
(take @sample (shuffle col)))
identity)
transform-fn (comp sort-by random-samples)]
(try
(react/react-query repo
{:query query
:query-string query-string
:rules rules
:throw-exception true}
{:use-cache? false
:transform-fn transform-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)))))))))))))
"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)
query (if (string? query) (string/trim query) query)
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?)]
(let [sort-by (or sort-by identity)
random-samples (if @sample
(fn [col]
(take @sample (shuffle col)))
identity)
transform-fn (comp sort-by random-samples)]
(try
(react/react-query repo
{:query query
:query-string query-string
:rules rules
:throw-exception true}
{:use-cache? false
:transform-fn transform-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))))))))))))
(defn custom-query
"Runs a dsl query with query as a seq. Primary use is from advanced query"
[repo query-m query-opts]
(when (seq (:query query-m))
(let [query-string (pr-str (:query query-m))
query-string (template/resolve-dynamic-template! query-string)
{:keys [query sort-by blocks?]} (parse repo query-string)
(let [query-string (template/resolve-dynamic-template! (pr-str (:query query-m)))
{:keys [query sort-by blocks? rules]} (parse query-string)
query (if (string? query) (string/trim query) query)]
(when query
(when-let [query (query-wrapper query blocks?)]
(react/react-query repo
(merge
query-m
{:query query})
(merge
query-opts
(when sort-by
{:transform-fn sort-by}))))))))
(when-let [query (query-wrapper query blocks?)]
(react/react-query repo
(merge
query-m
{:query query
:rules rules
:throw-exception true})
(merge
query-opts
(when sort-by
{:transform-fn sort-by})))))))
(comment
;; {{query (and (page-property foo bar) [[hello]])}}