(ns metabase.query-processor.middleware.add-default-temporal-unit (:require [metabase.driver :as driver] [metabase.driver.util :as driver.u] [metabase.legacy-mbql.util :as mbql.u] [metabase.lib.metadata :as lib.metadata] [metabase.lib.util.match :as lib.util.match] [metabase.query-processor.store :as qp.store])) | |
(defn- add-default-temporal-unit* [query] (lib.util.match/replace-in query [:query] [:field (_ :guard string?) (_ :guard (every-pred :base-type #(isa? (:base-type %) :type/Temporal) (complement :temporal-unit)))] (mbql.u/with-temporal-unit &match :default) [:field (id :guard integer?) (_ :guard (complement :temporal-unit))] (let [{:keys [base-type effective-type]} (lib.metadata/field (qp.store/metadata-provider) id)] (cond-> &match (isa? (or effective-type base-type) :type/Temporal) (mbql.u/with-temporal-unit :default))))) | |
Add Only activates for drivers with the | (defn add-default-temporal-unit [query] (let [database (lib.metadata/database (qp.store/metadata-provider))] (cond-> query (driver.u/supports? driver/*driver* :temporal/requires-default-unit database) add-default-temporal-unit*))) |