From ce00efce757e0697fb4dad23b02963b53d7dd7a3 Mon Sep 17 00:00:00 2001
From: john-metabase <92878045+john-metabase@users.noreply.github.com>
Date: Mon, 22 May 2023 13:07:45 -0400
Subject: [PATCH] Updates Postgres format-interval to accept decimal numbers
 (#30849)

---
 src/metabase/driver/postgres.clj       | 2 +-
 test/metabase/driver/postgres_test.clj | 7 ++++---
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/metabase/driver/postgres.clj b/src/metabase/driver/postgres.clj
index dd1e1de4f98..0b5c1db1cf9 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 cc00d80a64a..82ebe1b9bb4 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"))
-- 
GitLab