Skip to content
Snippets Groups Projects
Unverified Commit 5da20602 authored by metamben's avatar metamben Committed by GitHub
Browse files

Handle MultipleValues parameter (#27443)

parent 3dbe497d
No related merge requests found
......@@ -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
......
......@@ -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
......
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