diff --git a/src/metabase/lib/stage.cljc b/src/metabase/lib/stage.cljc index 1d659d394d23d194c4a112404bcb48370b8d7d13..e0ce4031361a3a9e2b6e1c14e7ac1b106cea2895 100644 --- a/src/metabase/lib/stage.cljc +++ b/src/metabase/lib/stage.cljc @@ -107,7 +107,7 @@ :lib/source-column-alias (lib.metadata.calculation/column-name query stage-number metadata) :lib/desired-column-alias (unique-name-fn (lib.field/desired-alias query metadata))))))) -(mu/defn ^:private summary-columns :- [:maybe lib.metadata.calculation/ColumnsWithUniqueAliases] +(mu/defn ^:private breakout-ags-fields-columns :- [:maybe lib.metadata.calculation/ColumnsWithUniqueAliases] [query :- ::lib.schema/query stage-number :- :int unique-name-fn :- fn?] @@ -116,7 +116,8 @@ (mapcat (fn [f] (f query stage-number unique-name-fn))) [breakouts-columns - aggregations-columns]))) + aggregations-columns + fields-columns]))) (mu/defn ^:private previous-stage-metadata :- [:maybe lib.metadata.calculation/ColumnsWithUniqueAliases] "Metadata for the previous stage, if there is one." @@ -210,9 +211,8 @@ (mu/defn ^:private stage-metadata :- [:maybe lib.metadata.calculation/ColumnsWithUniqueAliases] "Return results metadata about the expected columns in an MBQL query stage. If the query has - aggregations/breakouts, then return those and the fields columns. - Otherwise if there are fields columns return those and the joined columns. - Otherwise return the defaults based on the source Table or previous stage + joins." + aggregations/breakouts/fields, then return THOSE. Otherwise return the defaults based on the source Table or + previous stage + joins." ([query stage-number] (stage-metadata query stage-number (lib.util/unique-name-generator))) @@ -221,23 +221,11 @@ unique-name-fn :- fn?] (or (existing-stage-metadata query stage-number) - (let [query (ensure-previous-stages-have-metadata query stage-number) - summary-cols (summary-columns query stage-number unique-name-fn) - field-cols (fields-columns query stage-number unique-name-fn)] + (let [query (ensure-previous-stages-have-metadata query stage-number)] ;; ... then calculate metadata for this stage - (cond - summary-cols - (into summary-cols field-cols) - - field-cols - (do (doall field-cols) ; force generation of unique names before join columns - (into [] - (m/distinct-by #(dissoc % :source_alias :lib/source :lib/desired-column-alias)) - (concat field-cols - (lib.join/all-joins-default-columns query stage-number unique-name-fn)))) - - :else - (lib.metadata.calculation/default-columns query stage-number (lib.util/query-stage query stage-number) unique-name-fn)))))) + (or + (breakout-ags-fields-columns query stage-number unique-name-fn) + (lib.metadata.calculation/default-columns query stage-number (lib.util/query-stage query stage-number) unique-name-fn)))))) (defmethod lib.metadata.calculation/metadata-method ::stage [query stage-number _stage] diff --git a/test/metabase/lib/join_test.cljc b/test/metabase/lib/join_test.cljc index 78a47ab7a351589d94043678d9a43a91c50266cf..0e346d98bacb229a713d6f626cc088d8987aab3f 100644 --- a/test/metabase/lib/join_test.cljc +++ b/test/metabase/lib/join_test.cljc @@ -214,12 +214,7 @@ :lib/source-column-alias "ID" :lib/desired-column-alias "Cat__ID" :metabase.lib.field/join-alias "Cat" - :lib/source :source/fields} - {:name "NAME" - :lib/source-column-alias "NAME" - :lib/desired-column-alias "Cat__NAME" - :metabase.lib.field/join-alias "Cat" - :lib/source :source/joins}] + :lib/source :source/fields}] (lib.metadata.calculation/metadata query))) (testing "Introduce a new stage" (let [query' (lib/append-stage query)] @@ -230,10 +225,6 @@ {:name "ID" :lib/source-column-alias "Cat__ID" :lib/desired-column-alias "Cat__ID" - :lib/source :source/previous-stage} - {:name "NAME" - :lib/source-column-alias "Cat__NAME" - :lib/desired-column-alias "Cat__NAME" :lib/source :source/previous-stage}] (lib.metadata.calculation/metadata query'))))))) diff --git a/test/metabase/lib/order_by_test.cljc b/test/metabase/lib/order_by_test.cljc index f86cd9333955c62186389915e057764a5d502b8c..00e8563fca90711729d9ef69d8918a7cfd100bce 100644 --- a/test/metabase/lib/order_by_test.cljc +++ b/test/metabase/lib/order_by_test.cljc @@ -473,23 +473,13 @@ :display-name "ID" :table-id (meta/id :categories) :lib/source-column-alias "Cat__ID" - :lib/desired-column-alias "Cat__ID"} - {:id (meta/id :categories :name) - :name "NAME" - :lib/source :source/previous-stage - :lib/type :metadata/field - :base-type :type/Text - :effective-type :type/Text - :display-name "Name" - :table-id (meta/id :categories) - :lib/source-column-alias "Cat__NAME" - :lib/desired-column-alias "Cat__NAME"}] + :lib/desired-column-alias "Cat__ID"}] (-> (lib/query-for-table-name meta/metadata-provider "VENUES") (lib/join (-> (lib/join-clause - (meta/table-metadata :categories) - [(lib/= - (lib/field "VENUES" "CATEGORY_ID") - (lib/with-join-alias (lib/field "CATEGORIES" "ID") "Cat"))]) + (meta/table-metadata :categories) + [(lib/= + (lib/field "VENUES" "CATEGORY_ID") + (lib/with-join-alias (lib/field "CATEGORIES" "ID") "Cat"))]) (lib/with-join-alias "Cat") (lib/with-join-fields :all))) (lib/with-fields [(lib/field "VENUES" "ID") diff --git a/test/metabase/lib/stage_test.cljc b/test/metabase/lib/stage_test.cljc index 427485e8027985b598f8b9da8f204d1cc7f6acae..c60ad86bfdb695a7909fd7855b6bd7ee78185dff 100644 --- a/test/metabase/lib/stage_test.cljc +++ b/test/metabase/lib/stage_test.cljc @@ -224,43 +224,3 @@ (not (:temporal-unit opts)))) "DATE"]] (map lib/ref cols))))) - -(deftest ^:parallel fields-should-not-hide-joined-fields - (let [query (-> (lib/query-for-table-name meta/metadata-provider "VENUES") - (lib/with-fields [(lib/field (meta/id :venues :id)) - (lib/field (meta/id :venues :name))]) - (lib/join (-> (lib/join-clause (lib/table (meta/id :categories))) - (lib/with-join-alias "Cat") - (lib/with-join-fields :all)) - [(lib/= (lib/field "VENUES" "CATEGORY_ID") - (lib/field "CATEGORIES" "ID"))]) - (lib/append-stage))] - (is (=? [{:base-type :type/BigInteger, - :semantic-type :type/PK, - :name "ID", - :lib/source :source/previous-stage - :effective-type :type/BigInteger, - :lib/desired-column-alias "ID", - :display-name "ID"} - {:base-type :type/Text, - :semantic-type :type/Name, - :name "NAME", - :lib/source :source/previous-stage, - :effective-type :type/Text, - :lib/desired-column-alias "NAME", - :display-name "Name"} - {:base-type :type/BigInteger, - :semantic-type :type/PK, - :name "ID", - :lib/source :source/previous-stage - :effective-type :type/BigInteger, - :lib/desired-column-alias "Cat__ID", - :display-name "ID"} - {:base-type :type/Text, - :semantic-type :type/Name, - :name "NAME", - :lib/source :source/previous-stage - :effective-type :type/Text, - :lib/desired-column-alias "Cat__NAME", - :display-name "Name"}] - (lib.metadata.calculation/visible-columns query)))))