diff --git a/src/metabase/query_processor/parameters.clj b/src/metabase/query_processor/parameters.clj index 219eeb56e4e98ce7a3096821b99ba7174be78a83..396b70f779ef7e912cf68cc5a39abbb71fe51fab 100644 --- a/src/metabase/query_processor/parameters.clj +++ b/src/metabase/query_processor/parameters.clj @@ -1,5 +1,5 @@ (ns metabase.query-processor.parameters - "Code for handling parameter substitution in MBQL & native queries." + "Code for handling parameter substitution in MBQL queries." (:require [clojure.core.match :refer [match]] [clojure.string :as s] (clj-time [core :as t] diff --git a/src/metabase/query_processor/sql_parameters.clj b/src/metabase/query_processor/sql_parameters.clj index b80a38b13f678768c0c52ebef33f56c3951c4265..61a453a4031d0fbf823347f1e418e210e87fa1af 100644 --- a/src/metabase/query_processor/sql_parameters.clj +++ b/src/metabase/query_processor/sql_parameters.clj @@ -1,5 +1,5 @@ (ns metabase.query-processor.sql-parameters - "Param substitution for *SQL* drivers." + "Param substitution for *SQL* queries." (:require [clojure.string :as s] [honeysql.core :as hsql] [metabase.db :as db] @@ -27,7 +27,7 @@ (defrecord ^:private NumberValue [value]) (defn- dimension-value->sql [dimension-type value] - (if (contains? #{"date/range" "date/month-year" "date/quarter-year"} dimension-type) + (if (contains? #{"date/range" "date/month-year" "date/quarter-year" "date/relative"} dimension-type) (->sql (map->DateRange ((resolve 'metabase.query-processor.parameters/date->range) value *timezone*))) ; TODO - get timezone from query dict (str "= " (->sql value)))) diff --git a/src/metabase/util.clj b/src/metabase/util.clj index 4b2a0621420acea6d8c7241cd6cc05ce703a4d98..3382db1d03d2d9d83c0cb262593aff4ff4ff4c62 100644 --- a/src/metabase/util.clj +++ b/src/metabase/util.clj @@ -478,7 +478,8 @@ ~@body ~'<>)) -(def ^String ^{:style/indent 2} format-color +(def ^String ^{:style/indent 2, :arglists '([color-symb x] [color-symb format-str & args])} + format-color "Like `format`, but uses a function in `colorize.core` to colorize the output. COLOR-SYMB should be a quoted symbol like `green`, `red`, `yellow`, `blue`, `cyan`, `magenta`, etc. See the entire list of avaliable colors diff --git a/test/metabase/query_processor/sql_parameters_test.clj b/test/metabase/query_processor/sql_parameters_test.clj index 6c3ebf2e33932ebce6621d528b5cf537bab5feac..369524b1c9689a6f68fcbab5840071c6f799a9d5 100644 --- a/test/metabase/query_processor/sql_parameters_test.clj +++ b/test/metabase/query_processor/sql_parameters_test.clj @@ -364,3 +364,16 @@ :native {:query (format "SELECT COUNT(*) FROM %s WHERE {{checkin_date}}" (checkins-identifier)) :template_tags {:checkin_date {:name "checkin_date", :display_name "Checkin Date", :type "dimension", :dimension ["field-id" (data/id :checkins :date)]}}} :parameters []})))) + +;; test that relative dates work correctly. It should be enough to try just one type of relative date here, +;; since handling them gets delegated to the functions in `metabase.query-processor.parameters`, which is fully-tested :D +(datasets/expect-with-engines sql-parameters-engines + [0] + (first-row + (format-rows-by [int] + (qp/process-query + {:database (data/id) + :type :native + :native {:query (format "SELECT COUNT(*) FROM %s WHERE {{checkin_date}}" (checkins-identifier)) + :template_tags {:checkin_date {:name "checkin_date", :display_name "Checkin Date", :type "dimension", :dimension ["field-id" (data/id :checkins :date)]}}} + :parameters [{:type "date/relative", :target ["dimension" ["template-tag" "checkin_date"]], :value "thismonth"}]}))))