Middleware for checking that a normalized query is valid.

(ns metabase.query-processor.middleware.validate
  (:require
   [malli.error :as me]
   [metabase.lib.schema :as lib.schema]
   [metabase.query-processor.error-type :as qp.error-type]
   [metabase.util.i18n :as i18n]
   [metabase.util.malli.registry :as mr]))

Middleware that validates a query immediately after normalization.

(defn validate-query
  [query]
  (let [explainer (mr/explainer ::lib.schema/query)]
    (when-let [error (explainer query)]
      (let [humanized (me/humanize error)]
        (throw (ex-info (i18n/tru "Invalid query: {0}" (pr-str humanized))
                        {:type     qp.error-type/invalid-query
                         :error    humanized
                         :original error})))))
  query)