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