diff --git a/src/metabase/driver/postgres.clj b/src/metabase/driver/postgres.clj index dd1e1de4f987bf81b4a82dbdf059cc7c3e7334b1..0b5c1db1cf92e65d22081fffacf863ff6e1f1301 100644 --- a/src/metabase/driver/postgres.clj +++ b/src/metabase/driver/postgres.clj @@ -240,7 +240,7 @@ ;; I tried to write this with Malli but couldn't figure out how to make it work. See ;; https://metaboat.slack.com/archives/CKZEMT1MJ/p1676076592468909 [_fn [amount unit]] - {:pre [(int? amount) + {:pre [(number? amount) (#{:millisecond :second :minute :hour :day :week :month :year} unit)]} [(format "INTERVAL '%s %s'" (num amount) (name unit))]) diff --git a/test/metabase/driver/postgres_test.clj b/test/metabase/driver/postgres_test.clj index cc00d80a64ac2bff4a6e8a9221e6b7f433e1efad..82ebe1b9bb43f15ba8914b6bdb1eab3b373ebf05 100644 --- a/test/metabase/driver/postgres_test.clj +++ b/test/metabase/driver/postgres_test.clj @@ -54,13 +54,14 @@ (deftest ^:parallel interval-test (is (= ["INTERVAL '2 day'"] (sql/format-expr [::postgres/interval 2 :day]))) + (is (= ["INTERVAL '-2.5 year'"] + (sql/format-expr [::postgres/interval -2.5 :year]))) (are [amount unit msg] (thrown-with-msg? AssertionError msg (sql/format-expr [::postgres/interval amount unit])) - 2.0 :day #"\QAssert failed: (int? amount)\E" - "2" :day #"\QAssert failed: (int? amount)\E" - :day 2 #"\QAssert failed: (int? amount)\E" + "2" :day #"\QAssert failed: (number? amount)\E" + :day 2 #"\QAssert failed: (number? amount)\E" 2 "day" #"\QAssert failed: (#{:day :hour :week :second :month :year :millisecond :minute} unit)\E" 2 2 #"\QAssert failed: (#{:day :hour :week :second :month :year :millisecond :minute} unit)\E" 2 :can #"\QAssert failed: (#{:day :hour :week :second :month :year :millisecond :minute} unit)\E"))