diff --git a/src/metabase/lib/schema/expression/string.cljc b/src/metabase/lib/schema/expression/string.cljc index c9daf62c1399608c01423a45dc1e849c7e3fb50a..6a488a7891209b7f3347b68bc63d1b559e60f89f 100644 --- a/src/metabase/lib/schema/expression/string.cljc +++ b/src/metabase/lib/schema/expression/string.cljc @@ -27,4 +27,4 @@ [:length [:? [:schema [:ref ::expression/integer]]]]) (mbql-clause/define-catn-mbql-clause :concat :- :type/Text - [:args [:repeat {:min 2} [:schema [:ref ::expression/string]]]]) + [:args [:repeat {:min 2} [:schema [:ref ::expression/expression]]]]) diff --git a/test/metabase/lib/expression_test.cljc b/test/metabase/lib/expression_test.cljc index aba11cd7dfa125fb96bb21ff77d852fc538dc8f0..f24acf962d6e5680d1e26a514fabab1be1f69fd1 100644 --- a/test/metabase/lib/expression_test.cljc +++ b/test/metabase/lib/expression_test.cljc @@ -298,3 +298,32 @@ (is (= ["ID" "Subtotal" "Total" "Tax" "Discount" "Quantity" "Created At" "Product ID" "User ID" "Unit price"] (map (partial lib/display-name query) (lib/returned-columns query))))))) + +(deftest ^:parallel mixed-type-concat-expression-test + (testing "#34150" + (testing "various pemutations on venues" + (let [query (reduce (fn [query [label expr]] + (lib/expression query -1 label expr)) + lib.tu/venues-query + [["name+price" (lib/concat (meta/field-metadata :venues :name) + (meta/field-metadata :venues :price))] + ["$price" (lib/concat "$" (meta/field-metadata :venues :price))] + ["latXlong" (lib/concat (meta/field-metadata :venues :latitude) + " X " + (meta/field-metadata :venues :longitude))]])] + (is (=? [{:name "name+price"} + {:name "$price"} + {:name "latXlong"}] + (->> (lib/visible-columns query) + (filter (comp #{:source/expressions} :lib/source))))))) + (testing "dates" + (let [query (-> (lib/query meta/metadata-provider (meta/table-metadata :orders)) + (lib/expression "description" + (lib/concat (meta/field-metadata :orders :total) + " on " + (meta/field-metadata :orders :quantity) + " as of " + (meta/field-metadata :orders :created-at))))] + (is (=? [{:name "description"}] + (->> (lib/visible-columns query) + (filter (comp #{:source/expressions} :lib/source)))))))))