QueryExecution is a log of very time a query is executed, and other information such as the User who executed it, run time, context it was executed in, etc. | (ns metabase.models.query-execution (:require [malli.error :as me] [metabase.analytics.core :as analytics] [metabase.lib.schema.info :as lib.schema.info] [metabase.models.interface :as mi] [metabase.util :as u] [metabase.util.i18n :refer [tru]] [metabase.util.malli.registry :as mr] [methodical.core :as methodical] [toucan2.core :as t2] [toucan2.tools.disallow :as t2.disallow])) |
(methodical/defmethod t2/table-name :model/QueryExecution [_model] :query_execution) | |
(derive :model/QueryExecution :metabase/model) (derive :model/QueryExecution ::t2.disallow/update) | |
(t2/deftransforms :model/QueryExecution {:json_query mi/transform-json :status mi/transform-keyword :context mi/transform-keyword}) | |
(defn- validate-context [context] (when-let [error (me/humanize (mr/explain ::lib.schema.info/context context))] (throw (ex-info (tru "Invalid query execution context: {0}" (pr-str error)) {:error error})))) | |
(t2/define-before-insert :model/QueryExecution [{context :context, :as query-execution}] (u/prog1 (analytics/include-sdk-info query-execution) (validate-context context))) | |
(t2/define-after-select :model/QueryExecution [{:keys [result_rows] :as query-execution}] ;; sadly we have 2 ways to reference the row count :( (assoc query-execution :row_count (or result_rows 0))) | |