From e4d884951691a8812b48b83eef7eb561450f5a64 Mon Sep 17 00:00:00 2001 From: metamben <103100869+metamben@users.noreply.github.com> Date: Wed, 14 Aug 2024 02:43:30 +0300 Subject: [PATCH] Fix handling explicit joins in metrics (#46798) --- dev/src/dev/debug_qp.clj | 2 +- .../query_processor/middleware/metrics.clj | 2 +- .../query_processor/middleware/metrics_test.clj | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/dev/src/dev/debug_qp.clj b/dev/src/dev/debug_qp.clj index 99f9748271b..65f64936bb9 100644 --- a/dev/src/dev/debug_qp.clj +++ b/dev/src/dev/debug_qp.clj @@ -6,7 +6,7 @@ ;; run a query with debugging enabled (binding [metabase.query-processor.debug/*debug* true] - (metabase.query-processor/process-query query)" + (metabase.query-processor/process-query query))" (:require [clojure.java.io :as io] [clojure.string :as str] diff --git a/src/metabase/query_processor/middleware/metrics.clj b/src/metabase/query_processor/middleware/metrics.clj index d84a9cde8ee..c5afc27bc24 100644 --- a/src/metabase/query_processor/middleware/metrics.clj +++ b/src/metabase/query_processor/middleware/metrics.clj @@ -108,7 +108,7 @@ (map (juxt :fk-field-id :alias)) (lib/joins query agg-stage-index)) new-joins (remove (comp existing-joins (juxt :fk-field-id :alias)) metric-joins) - source-field->join-alias (into {} (map (juxt :fk-field-id :alias)) new-joins) + source-field->join-alias (dissoc (into {} (map (juxt :fk-field-id :alias)) new-joins) nil) query-with-joins (reduce #(lib/join %1 agg-stage-index %2) query new-joins)] diff --git a/test/metabase/query_processor/middleware/metrics_test.clj b/test/metabase/query_processor/middleware/metrics_test.clj index e1b256606a6..c8f43ba00e0 100644 --- a/test/metabase/query_processor/middleware/metrics_test.clj +++ b/test/metabase/query_processor/middleware/metrics_test.clj @@ -652,3 +652,20 @@ (lib/aggregate $q (lib/count)))] (is (=? (mt/rows (qp/process-query etalon-query)) (mt/rows (qp/process-query metric-query)))))))) + +(deftest ^:parallel metric-with-explicit-join-test + (let [mp (lib.metadata.jvm/application-database-metadata-provider (mt/id)) + metric-query (-> (lib/query mp (lib.metadata/table mp (mt/id :orders))) + (lib/join (-> (lib/join-clause (lib.metadata/table mp (mt/id :people)) + [(lib/= + (lib.metadata/field mp (mt/id :orders :user_id)) + (lib.metadata/field mp (mt/id :people :id)))]))) + (lib/aggregate (lib/sum (lib.metadata/field mp (mt/id :orders :total)))) + (lib/breakout (lib.metadata/field mp (mt/id :orders :created_at))))] + (mt/with-temp [:model/Card metric {:dataset_query (lib.convert/->legacy-MBQL metric-query) + :database_id (mt/id) + :name "Orders Total Sum metric" + :type :metric}] + (let [query (lib/query mp (lib.metadata/card mp (:id metric)))] + (is (=? (mt/rows (qp/process-query metric-query)) + (mt/rows (qp/process-query query)))))))) -- GitLab