From 5da206026831b465b4fe0197d9f26da3f3a055f5 Mon Sep 17 00:00:00 2001 From: metamben <103100869+metamben@users.noreply.github.com> Date: Thu, 29 Dec 2022 14:54:55 +0300 Subject: [PATCH] Handle MultipleValues parameter (#27443) --- .../mongo/src/metabase/driver/mongo/parameters.clj | 10 +++++++--- .../test/metabase/driver/mongo/parameters_test.clj | 11 +++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/modules/drivers/mongo/src/metabase/driver/mongo/parameters.clj b/modules/drivers/mongo/src/metabase/driver/mongo/parameters.clj index a4410982fec..f83c5db356a 100644 --- a/modules/drivers/mongo/src/metabase/driver/mongo/parameters.clj +++ b/modules/drivers/mongo/src/metabase/driver/mongo/parameters.clj @@ -18,7 +18,7 @@ [metabase.util.date-2 :as u.date] [metabase.util.i18n :refer [tru]]) (:import java.time.temporal.Temporal - [metabase.driver.common.parameters CommaSeparatedNumbers Date])) + [metabase.driver.common.parameters CommaSeparatedNumbers Date MultipleValues])) (defn- ->utc-instant [t] (t/instant @@ -34,10 +34,14 @@ (sequential? x) (format "{$in: [%s]}" (str/join ", " (map (partial param-value->str field) x))) + ;; MultipleValues get converted as sequences + (instance? MultipleValues x) + (recur field (:values x)) + ;; Date = the Parameters Date type, not an java.util.Date or java.sql.Date type ;; convert to a `Temporal` instance and recur (instance? Date x) - (param-value->str field (u.date/parse (:s x))) + (recur field (u.date/parse (:s x))) (and (instance? Temporal x) (isa? coercion :Coercion/UNIXSeconds->DateTime)) @@ -53,7 +57,7 @@ ;; there's a special record type for sequences of numbers; pull the sequence it wraps out and recur (instance? CommaSeparatedNumbers x) - (param-value->str field (:numbers x)) + (recur field (:numbers x)) ;; for everything else, splice it in as its string representation :else diff --git a/modules/drivers/mongo/test/metabase/driver/mongo/parameters_test.clj b/modules/drivers/mongo/test/metabase/driver/mongo/parameters_test.clj index f2082853755..9c297fb31e5 100644 --- a/modules/drivers/mongo/test/metabase/driver/mongo/parameters_test.clj +++ b/modules/drivers/mongo/test/metabase/driver/mongo/parameters_test.clj @@ -42,6 +42,9 @@ (defn- comma-separated-numbers [nums] (params/->CommaSeparatedNumbers nums)) +(defn- multiple-values [& values] + (params/->MultipleValues values)) + (deftest substitute-test (testing "non-parameterized strings should not be substituted" (is (= "wow" @@ -93,6 +96,14 @@ (testing "comma-separated numbers" (is (= "{$in: [1, 2, 3]}" (substitute {:id (comma-separated-numbers [1 2 3])} + [(param :id)])))) + (testing "multiple-values single (#22486)" + (is (= "{$in: [\"33 Taps\"]}" + (substitute {:id (multiple-values "33 Taps")} + [(param :id)])))) + (testing "multiple-values multi (#22486)" + (is (= "{$in: [\"33 Taps\", \"Cha Cha Chicken\"]}" + (substitute {:id (multiple-values "33 Taps" "Cha Cha Chicken")} [(param :id)]))))) (defprotocol ^:private ToBSON -- GitLab