Skip to content
Snippets Groups Projects
Unverified Commit 0feef0b8 authored by Case Nelson's avatar Case Nelson Committed by GitHub
Browse files

[MLv2] Remove and replace clause for filters (#30002)

* [MLv2] Remove and replace clause for filters

* Convert external-op to internal for remove

* Update calls for master
parent 7129fe5f
No related branches found
No related tags found
No related merge requests found
......@@ -52,7 +52,8 @@
target-clause]
(reduce
(fn [query location]
(let [result (lib.util/update-query-stage query stage-number
(let [target-clause (lib.common/->op-arg query stage-number target-clause)
result (lib.util/update-query-stage query stage-number
lib.util/remove-clause location target-clause)]
(when (not= query result)
(case location
......@@ -62,7 +63,7 @@
result))
query
;; TODO only these top level clauses are supported at this moment
[:order-by :breakout])))
[:order-by :breakout :filters])))
(mu/defn replace-clause :- :metabase.lib.schema/query
"Replaces the `target-clause` with `new-clause` in the `query` stage."
......@@ -74,7 +75,8 @@
stage-number :- :int
target-clause
new-clause]
(let [replacement (lib.common/->op-arg query stage-number new-clause)]
(let [target-clause (lib.common/->op-arg query stage-number target-clause)
replacement (lib.common/->op-arg query stage-number new-clause)]
(reduce
(fn [query location]
(let [result (lib.util/update-query-stage query stage-number
......@@ -87,4 +89,4 @@
result))
query
;; TODO only these top level clauses are supported at this moment
[:order-by :breakout]))))
[:order-by :breakout :filters]))))
......@@ -21,6 +21,22 @@
(lib/order-bys)
count)))))
(deftest ^:parallel remove-clause-filters-test
(let [query (-> (lib/query-for-table-name meta/metadata-provider "VENUES")
(lib/filter (lib/= (lib/field "VENUES" "PRICE") 4))
(lib/filter (lib/= (lib/field "VENUES" "NAME") "x")))
filters (lib/filters query)]
(is (= 2 (count filters)))
(is (= 1 (-> query
(lib/remove-clause (first filters))
(lib/filters)
count)))
(is (= 0 (-> query
(lib/remove-clause (first filters))
(lib/remove-clause (second filters))
(lib/filters)
count)))))
(deftest ^:parallel remove-clause-breakout-test
(let [query (-> (lib/query-for-table-name meta/metadata-provider "VENUES")
(lib/breakout (lib/field "VENUES" "ID"))
......@@ -80,6 +96,21 @@
(is (= 2 (count replaced-order-bys)))
(is (= (second order-bys) (second replaced-order-bys))))))
(deftest ^:parallel replace-clause-filters-test
(let [query (-> (lib/query-for-table-name meta/metadata-provider "VENUES")
(lib/filter (lib/= (lib/field (meta/id :venues :name)) "myvenue"))
(lib/filter (lib/= (lib/field (meta/id :venues :price)) 2)))
filters (lib/filters query)]
(is (= 2 (count filters)))
(let [replaced (-> query
(lib/replace-clause (first filters) (lib/= (lib/field (meta/id :venues :id)) 1)))
replaced-filters (lib/filters replaced)]
(is (not= filters replaced-filters))
(is (=? {:operator "=" :args [[:field {} (meta/id :venues :id)] 1]}
(first replaced-filters)))
(is (= 2 (count replaced-filters)))
(is (= (second filters) (second replaced-filters))))))
(deftest ^:parallel replace-clause-breakout-by-test
(let [query (-> (lib/query-for-table-name meta/metadata-provider "VENUES")
(lib/breakout (lib/field (meta/id :venues :id)))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment