From c279053a827ea3acc288a7d3a130554c379e9d74 Mon Sep 17 00:00:00 2001 From: Case Nelson <case@metabase.com> Date: Fri, 6 Oct 2023 08:45:03 -0600 Subject: [PATCH] [MLv2] Support invisible columns with expression-parts (#34371) --- src/metabase/lib/fe_util.cljc | 13 ++++++------- test/metabase/lib/fe_util_test.cljc | 21 +++++++++++++-------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/metabase/lib/fe_util.cljc b/src/metabase/lib/fe_util.cljc index 29a75a2e73e..d1641307604 100644 --- a/src/metabase/lib/fe_util.cljc +++ b/src/metabase/lib/fe_util.cljc @@ -1,7 +1,6 @@ (ns metabase.lib.fe-util (:require [metabase.lib.common :as lib.common] - [metabase.lib.equality :as lib.equality] [metabase.lib.field :as lib.field] [metabase.lib.filter :as lib.filter] [metabase.lib.hierarchy :as lib.hierarchy] @@ -30,12 +29,12 @@ stage-number :- :int expression-clause :- ::lib.schema.expression/expression] (let [[op options & args] expression-clause - stage (lib.util/query-stage query stage-number) - columns (lib.metadata.calculation/visible-columns query stage-number stage) - ->maybe-col #(when (lib.hierarchy/isa? (first %) ::ref/ref) - (when-let [col (lib.equality/find-matching-column % columns)] - (lib.filter/add-column-operators - (lib.field/extend-column-metadata-from-ref query stage-number col %))))] + ->maybe-col #(when (lib.hierarchy/isa? (first %) ::ref/ref) + (lib.filter/add-column-operators + (lib.field/extend-column-metadata-from-ref + query stage-number + (lib.metadata.calculation/metadata query stage-number %) + %)))] {:lib/type :mbql/expression-parts :operator op :options options diff --git a/test/metabase/lib/fe_util_test.cljc b/test/metabase/lib/fe_util_test.cljc index 6787e897e61..1a2df29ac33 100644 --- a/test/metabase/lib/fe_util_test.cljc +++ b/test/metabase/lib/fe_util_test.cljc @@ -4,6 +4,7 @@ [medley.core :as m] [metabase.lib.core :as lib] [metabase.lib.test-metadata :as meta] + [metabase.lib.test-util :as lib.tu] [metabase.lib.types.isa :as lib.types.isa])) (deftest ^:parallel basic-filter-parts-test @@ -55,18 +56,15 @@ :operator := :args [{:lib/type :metadata/column - :lib/source :source/joins :lib/source-uuid string? :effective-type :type/Integer :metabase.lib.field/binning {:strategy :default} :operators (comp vector? not-empty) :active true :id (:id checkins-user-id-col) - :source-alias "Checkins" - :lib/desired-column-alias "Checkins__USER_ID" :display-name "User ID: Auto binned" :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/with-binning user-id-col {:strategy :default})))))) (testing "bucketing" @@ -74,17 +72,14 @@ :operator := :args [{:lib/type :metadata/column - :lib/source :source/joins :lib/source-uuid string? :effective-type :type/Date :operators (comp vector? not-empty) :id (:id checkins-date-col) - :source-alias "Checkins" - :lib/desired-column-alias "Checkins__DATE" :metabase.lib.field/temporal-unit :day :display-name "Date: Day" :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/with-temporal-bucket user-last-login-col :day)))))))) @@ -110,3 +105,13 @@ (lib/expression-clause := [(meta/field-metadata :products :id) 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] {})))) + +(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))))) -- GitLab