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