Replace {{variable}}s and {{field filters}} in SQL queries with parse-able equivalents. | (ns metabase.query-analysis.native-query-analyzer.parameter-substitution (:require [metabase.query-processor.compile :as qp.compile])) |
Map of default values for each type | (def default-values
{;; Normal variables
:date "2024-01-09"
:number "1"
:text "sample text"
;; Potentially deprecated
:boolean "true"
:id "1"
:category "sample category"
:date/single "2024-01-09"
;; Card ref: doesn't matter
:card nil
;; Field filters
:date/range "2023-01-09~2024-01-09"
:date/month-year "2024-01"
:date/quarter-year "Q1-2024"
:date/relative "past1years"
:date/all-options "2024-01"
:number/!= ["1"]
:number/<= ["1"]
:number/= ["1"]
:number/>= ["1"]
:number/between ["1" "2"]
:string/!= ["sample text"]
:string/= ["sample text"]
:string/contains ["sample text"]
:string/does-not-contain ["sample text"]
:string/ends-with ["sample text"]
:string/starts-with ["sample text"]
;; Potentially deprecated
:location/city ["Moon Twp"]
:location/state ["PA"]
:location/zip_code ["15108"]
:location/country ["USA"]}) |
(defn- type->value [t] (default-values t)) | |
(defn- tag-default
[{:keys [default type widget-type] :as tag}]
(assoc tag :default
(or default
(if (= type :dimension)
(type->value widget-type)
(type->value type))))) | |
Given a native dataset_query, return a | (defn replace-tags
[query]
(if-let [name->tag (seq (get-in query [:native :template-tags]))]
(qp.compile/compile (assoc-in query [:native :template-tags] (update-vals name->tag tag-default)))
(:native query))) |