diff --git a/dev/src/dev/debug_qp.clj b/dev/src/dev/debug_qp.clj index 99f9748271b4a55595d599e11a76c46a0f7560e1..65f64936bb9b0e6459ecb66ee2c97832585b286b 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 d84a9cde8ee320d17fde4f151c031e80eddfa483..c5afc27bc24dec8509f64a1f26ecd9fe1bf288da 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 e1b256606a69fed17c7ceee5b05486119ec9d5cf..c8f43ba00e0a709872e75a29d3fc5d0f0dd1c689 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))))))))