Compare commits

...

1 Commits

Author SHA1 Message Date
Tim Macdonald
bfaa12335e Create the query-validator EE feature; move QueryField over 2024-06-17 16:37:38 +01:00
7 changed files with 21 additions and 11 deletions

View File

@@ -784,6 +784,7 @@
metabase-enterprise.serialization.test-util/with-world macros.metabase-enterprise.serialization.test-util/with-world
metabase-enterprise.test/with-gtaps! macros.metabase-enterprise.sandbox.test-util/with-gtaps!
metabase-enterprise.advanced-permissions.api.util-test/with-impersonations! macros.metabase-enterprise.advanced-permissions.api.util-test/with-impersonations!
metabase-enterprise.query-validator.models.query-field-test/with-test-setup macros.metabase-enterprise.query-validator.models.query-field-test/with-test-setup
metabase.api.card-test/with-ordered-items macros.metabase.api.card-test/with-ordered-items
metabase.api.collection-test/with-collection-hierarchy macros.metabase.api.collection-test/with-collection-hierarchy
metabase.api.collection-test/with-some-children-of-collection macros.metabase.api.collection-test/with-some-children-of-collection
@@ -796,7 +797,6 @@
metabase.lib.common/defop macros.metabase.lib.common/defop
metabase.models.params.chain-filter-test/chain-filter macros.metabase.models.params.chain-filter-test/chain-filter
metabase.models.params.chain-filter-test/chain-filter-search macros.metabase.models.params.chain-filter-test/chain-filter
metabase.models.query-field-test/with-test-setup macros.metabase.models.query-field-test/with-test-setup
metabase.models.user-test/with-groups macros.metabase.models.user-test/with-groups
metabase.query-processor.streaming/streaming-response macros.metabase.query-processor.streaming/streaming-response
metabase.related-test/with-world macros.metabase.related-test/with-world

View File

@@ -1,4 +1,4 @@
(ns macros.metabase.models.query-field-test
(ns macros.metabase-enterprise.query-validator.models.query-field-test
(:require [macros.common]))
(defmacro with-test-setup [& body]

View File

@@ -1,9 +1,11 @@
(ns metabase.models.query-field
(ns metabase-enterprise.query-validator.models.query-field
"A join table connecting queries (both MBQL and native) with the Fields that are referenced within them."
(:require
[metabase.legacy-mbql.util :as mbql.u]
[metabase.lib.core :as lib]
[metabase.lib.util :as lib.util]
[metabase.native-query-analyzer :as query-analyzer]
[metabase.public-settings.premium-features :refer [defenterprise]]
[metabase.util :as u]
[metabase.util.log :as log]
[methodical.core :as methodical]
@@ -31,12 +33,13 @@
:mbql/query {:explicit (lib.util/referenced-field-ids query)}
nil))
(defn update-query-fields-for-card!
(defenterprise update-query-fields-for-card!
"Clears QueryFields associated with this card and creates fresh, up-to-date-ones.
If you're invoking this from a test, be sure to turn on [[*parse-queries-in-test?*]].
Returns `nil` (and logs the error) if there was a parse error."
:feature :query-validator
[{card-id :id, query :dataset_query}]
(try
(let [{:keys [explicit implicit] :as res} (query-field-ids query)

View File

@@ -1,12 +1,12 @@
(ns metabase.models.query-field-test
(ns metabase-enterprise.query-validator.models.query-field-test
(:require
[clojure.set :as set]
[clojure.test :refer :all]
[metabase-enterprise.query-validator.models.query-field :as query-field]
[metabase.lib.core :as lib]
[metabase.lib.metadata :as lib.metadata]
[metabase.lib.metadata.jvm :as lib.metadata.jvm]
[metabase.models :refer [Card]]
[metabase.models.query-field :as query-field]
[metabase.native-query-analyzer :as query-analyzer]
[metabase.test :as mt]
[toucan2.core :as t2]

View File

@@ -33,7 +33,6 @@
[metabase.models.permissions :as perms]
[metabase.models.pulse :as pulse]
[metabase.models.query :as query]
[metabase.models.query-field :as query-field]
[metabase.models.query.permissions :as query-perms]
[metabase.models.revision :as revision]
[metabase.models.serialization :as serdes]
@@ -543,6 +542,10 @@
(pre-update-check-sandbox-constraints changes)
(assert-valid-type (merge old-card-info changes)))))
(defenterprise update-query-fields-for-card!
"The EE feature syncs the QueryFields associated with the card; this OSS stub is a no-op"
metabase-enterprise.query-validator.models.query-field
[_card])
(t2/define-after-select :model/Card
[card]
@@ -565,7 +568,7 @@
(log/info "Card references Fields in params:" field-ids)
(field-values/update-field-values-for-on-demand-dbs! field-ids))
(parameter-card/upsert-or-delete-from-parameters! "card" (:id card) (:parameters card))
(query-field/update-query-fields-for-card! card)))
(update-query-fields-for-card! card)))
(t2/define-before-update :model/Card
[{:keys [verified-result-metadata?] :as card}]
@@ -593,7 +596,7 @@
[card]
(u/prog1 card
(when (contains? (t2/changes card) :dataset_query)
(query-field/update-query-fields-for-card! card))))
(update-query-fields-for-card! card))))
;; Cards don't normally get deleted (they get archived instead) so this mostly affects tests
(t2/define-before-delete :model/Card

View File

@@ -470,6 +470,10 @@
"Enable automatic descriptions of questions and dashboards by LLMs?"
:llm-autodescription)
(define-premium-feature ^{:added "0.51.0"} query-validator
"Enable the Query Validator tool?"
:query-validator)
(define-premium-feature enable-upload-management?
"Should we allow admins to clean up tables created from uploads?"
:upload-management)

View File

@@ -2,7 +2,7 @@
(:require
[clojurewerkz.quartzite.jobs :as jobs]
[clojurewerkz.quartzite.triggers :as triggers]
[metabase.models.query-field :as query-field]
[metabase.models.card :as card]
[metabase.task :as task]
[toucan2.core :as t2]))
@@ -15,7 +15,7 @@
:where [:and
[:not :c.archived]
[:= :f.id nil]]}])]
(run! query-field/update-query-fields-for-card! cards)))
(run! card/update-query-fields-for-card! cards)))
(jobs/defjob ^{org.quartz.DisallowConcurrentExecution true
:doc "Backfill QueryField for cards created earlier. Runs once per instance."}