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

[MLv2] Support invisible columns with expression-parts (#34371)

parent ea17aa78
No related branches found
No related tags found
No related merge requests found
(ns metabase.lib.fe-util (ns metabase.lib.fe-util
(:require (:require
[metabase.lib.common :as lib.common] [metabase.lib.common :as lib.common]
[metabase.lib.equality :as lib.equality]
[metabase.lib.field :as lib.field] [metabase.lib.field :as lib.field]
[metabase.lib.filter :as lib.filter] [metabase.lib.filter :as lib.filter]
[metabase.lib.hierarchy :as lib.hierarchy] [metabase.lib.hierarchy :as lib.hierarchy]
...@@ -30,12 +29,12 @@ ...@@ -30,12 +29,12 @@
stage-number :- :int stage-number :- :int
expression-clause :- ::lib.schema.expression/expression] expression-clause :- ::lib.schema.expression/expression]
(let [[op options & args] expression-clause (let [[op options & args] expression-clause
stage (lib.util/query-stage query stage-number) ->maybe-col #(when (lib.hierarchy/isa? (first %) ::ref/ref)
columns (lib.metadata.calculation/visible-columns query stage-number stage) (lib.filter/add-column-operators
->maybe-col #(when (lib.hierarchy/isa? (first %) ::ref/ref) (lib.field/extend-column-metadata-from-ref
(when-let [col (lib.equality/find-matching-column % columns)] query stage-number
(lib.filter/add-column-operators (lib.metadata.calculation/metadata query stage-number %)
(lib.field/extend-column-metadata-from-ref query stage-number col %))))] %)))]
{:lib/type :mbql/expression-parts {:lib/type :mbql/expression-parts
:operator op :operator op
:options options :options options
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
[medley.core :as m] [medley.core :as m]
[metabase.lib.core :as lib] [metabase.lib.core :as lib]
[metabase.lib.test-metadata :as meta] [metabase.lib.test-metadata :as meta]
[metabase.lib.test-util :as lib.tu]
[metabase.lib.types.isa :as lib.types.isa])) [metabase.lib.types.isa :as lib.types.isa]))
(deftest ^:parallel basic-filter-parts-test (deftest ^:parallel basic-filter-parts-test
...@@ -55,18 +56,15 @@ ...@@ -55,18 +56,15 @@
:operator := :operator :=
:args :args
[{:lib/type :metadata/column [{:lib/type :metadata/column
:lib/source :source/joins
:lib/source-uuid string? :lib/source-uuid string?
:effective-type :type/Integer :effective-type :type/Integer
:metabase.lib.field/binning {:strategy :default} :metabase.lib.field/binning {:strategy :default}
:operators (comp vector? not-empty) :operators (comp vector? not-empty)
:active true :active true
:id (:id checkins-user-id-col) :id (:id checkins-user-id-col)
:source-alias "Checkins"
:lib/desired-column-alias "Checkins__USER_ID"
:display-name "User ID: Auto binned" :display-name "User ID: Auto binned"
:metabase.lib.join/join-alias "Checkins"} :metabase.lib.join/join-alias "Checkins"}
(assoc user-id-col :display-name "ID: Auto binned")]} (assoc (meta/field-metadata :users :id) :display-name "ID: Auto binned")]}
(lib/expression-parts query (lib/= (lib/with-binning checkins-user-id-col {:strategy :default}) (lib/expression-parts query (lib/= (lib/with-binning checkins-user-id-col {:strategy :default})
(lib/with-binning user-id-col {:strategy :default})))))) (lib/with-binning user-id-col {:strategy :default}))))))
(testing "bucketing" (testing "bucketing"
...@@ -74,17 +72,14 @@ ...@@ -74,17 +72,14 @@
:operator := :operator :=
:args :args
[{:lib/type :metadata/column [{:lib/type :metadata/column
:lib/source :source/joins
:lib/source-uuid string? :lib/source-uuid string?
:effective-type :type/Date :effective-type :type/Date
:operators (comp vector? not-empty) :operators (comp vector? not-empty)
:id (:id checkins-date-col) :id (:id checkins-date-col)
:source-alias "Checkins"
:lib/desired-column-alias "Checkins__DATE"
:metabase.lib.field/temporal-unit :day :metabase.lib.field/temporal-unit :day
:display-name "Date: Day" :display-name "Date: Day"
:metabase.lib.join/join-alias "Checkins"} :metabase.lib.join/join-alias "Checkins"}
(assoc user-last-login-col :display-name "Last Login: Day")]} (assoc (meta/field-metadata :users :last-login) :display-name "Last Login: Day")]}
(lib/expression-parts query (lib/= (lib/with-temporal-bucket checkins-date-col :day) (lib/expression-parts query (lib/= (lib/with-temporal-bucket checkins-date-col :day)
(lib/with-temporal-bucket user-last-login-col :day)))))))) (lib/with-temporal-bucket user-last-login-col :day))))))))
...@@ -110,3 +105,13 @@ ...@@ -110,3 +105,13 @@
(lib/expression-clause := [(meta/field-metadata :products :id) 1] {}))) (lib/expression-clause := [(meta/field-metadata :products :id) 1] {})))
(is (=? [:= {:lib/uuid string?} [:+ {} [:field {:lib/uuid string?} (meta/id :products :id)] 2] 1] (is (=? [:= {:lib/uuid string?} [:+ {} [:field {:lib/uuid string?} (meta/id :products :id)] 2] 1]
(lib/expression-clause := [(lib/expression-clause :+ [(meta/field-metadata :products :id) 2] {}) 1] {})))) (lib/expression-clause := [(lib/expression-clause :+ [(meta/field-metadata :products :id) 2] {}) 1] {}))))
(deftest ^:parallel invisible-expression-parts-test
(is (=? {:lib/type :mbql/expression-parts
:operator :=
:args [{:lib/type :metadata/column
:name "ID"
:display-name "ID"}
1]}
(lib/expression-parts lib.tu/venues-query -1 (lib/= (lib/ref (meta/field-metadata :products :id))
1)))))
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