This stuff is used for informational purposes, primarily to record QueryExecution entries when a query is ran. Pass them along if applicable when writing code that creates queries, but when working on middleware and the like you can most likely ignore this stuff entirely. | (ns metabase.lib.schema.info (:require [metabase.lib.schema.common :as lib.schema.common] [metabase.lib.schema.id :as lib.schema.id] [metabase.util.malli.registry :as mr])) |
Schema for | (mr/def ::context [:enum ;; do not decode, since this should not get written to the app DB or come in from the REST API. {:decode/normalize identity} :action :ad-hoc :cache-refresh :collection :map-tiles :pulse :dashboard-subscription :dashboard :question :csv-download :xlsx-download :json-download :public-dashboard :public-question :public-csv-download :public-xlsx-download :public-json-download :embedded-dashboard :embedded-question :embedded-csv-download :embedded-xlsx-download :embedded-json-download]) |
(mr/def ::hash #?(:clj bytes? :cljs :any)) | |
Schema for query TODO - this schema is somewhat misleading because if you use a function
like [[metabase.query-processor/userland-query]] some of these keys (e.g. | (mr/def ::info [:map ;; do not decode, since this should not get written to the app DB or come in from the REST API. {:decode/normalize identity} ;; TODO -- not 100% sure info should be getting normalized, because we're not supposed to be saving this map ;; anyway, right? ;; These keys are nice to pass in if you're running queries on the backend and you know these values. They aren't ;; used for permissions checking or anything like that so don't try to be sneaky [:context {:optional true} [:maybe [:ref ::context]]] [:executed-by {:optional true} [:maybe ::lib.schema.id/user]] [:action-id {:optional true} [:maybe ::lib.schema.id/action]] [:card-id {:optional true} [:maybe ::lib.schema.id/card]] [:card-name {:optional true} [:maybe ::lib.schema.common/non-blank-string]] [:dashboard-id {:optional true} [:maybe ::lib.schema.id/dashboard]] [:alias/escaped->original {:optional true} [:maybe [:map-of :any :any]]] [:pulse-id {:optional true} [:maybe ::lib.schema.id/pulse]] ;; Metadata for datasets when querying the dataset. This ensures that user edits to dataset metadata are blended in ;; with runtime computed metadata so that edits are saved. [:metadata/model-metadata {:optional true} [:maybe [:sequential [:map-of :any :any]]]] ;; Pivot QP runs multiple queries, and in the dataset api, we need to have access to the original query ;; so that we can pass it to the pivot.qp for downloads on unsaved questions [:pivot/original-query {:optional true} [:maybe [:map-of :any :any]]] ;; `:hash` gets added automatically for userland queries (see [[metabase.query-processor/userland-query]]), so ;; don't try passing these in yourself. In fact, I would like this a lot better if we could take these keys xout of ;; `:info` entirely and have the code that saves QueryExceutions figure out their values when it goes to save them [:query-hash {:optional true} [:maybe [:ref ::hash]]]]) |