Skip to content
Snippets Groups Projects
Unverified Commit f912df3b authored by metabase-bot[bot]'s avatar metabase-bot[bot] Committed by GitHub
Browse files

backport "[MLv2] Ensure `:name` is unique on returned columns in the FE (#39118)" (#39122)


Fixes #37517.

Co-authored-by: default avatarBraden Shepherdson <braden@metabase.com>
parent 98dbf5ca
No related branches found
No related tags found
No related merge requests found
......@@ -659,9 +659,15 @@
(defn- returned-columns*
"Inner implementation for [[returned-columns]], which wraps this with caching."
[a-query stage-number]
(let [stage (lib.util/query-stage a-query stage-number)]
(let [stage (lib.util/query-stage a-query stage-number)
unique-name-fn (lib.util/unique-name-generator)]
(->> (lib.metadata.calculation/returned-columns a-query stage-number stage)
(map #(assoc % :selected? true))
(map #(-> %
(assoc :selected? true)
;; Unique names are required by the FE for compatibility.
;; This applies only for JS; Clojure usage should prefer `:lib/desired-column-alias` to `:name`, and
;; that's already unique by construction.
(update :name unique-name-fn)))
to-array)))
(defn ^:export returned-columns
......
......@@ -398,3 +398,16 @@
:day]
(lib.js/expression-clause "time-interval" [(meta/field-metadata :products :created-at)
(lib.js/expression-clause "interval" [10 "day"] nil) "day"] nil)))))
(deftest ^:parallel returned-columns-unique-names-test
(testing "returned-columns should ensure the :name fields are unique (#37517)"
(let [query (-> (lib/query meta/metadata-provider (meta/table-metadata :orders))
(lib/join (lib/join-clause (meta/table-metadata :orders)
[(lib/= (meta/field-metadata :orders :id)
(lib/with-join-alias (meta/field-metadata :orders :id)
"Orders"))])))]
(is (= #{1}
(->> (lib.js/returned-columns query -1)
(map :name)
frequencies
vals
set))))))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment