Skip to content
Snippets Groups Projects
Unverified Commit be231ec8 authored by Braden Shepherdson's avatar Braden Shepherdson Committed by GitHub
Browse files

[MLv2] Add `display-info` for queries (#37675)

Fixes #36973.
parent 045a54da
No related branches found
No related tags found
No related merge requests found
......@@ -220,7 +220,8 @@
If metadata for the `:source-table` or `:source-card` can be found, then the query is editable."
[query :- ::lib.schema/query]
(let [{:keys [source-table source-card] :as stage0} (lib.util/query-stage query 0)]
(boolean (and (database query)
(boolean (and (when-let [{:keys [id]} (database query)]
(= (:database query) id))
(or (and source-table (table query source-table))
(and source-card (card query source-card))
(= (:lib/type stage0) :mbql.stage/native))))))
......@@ -40,6 +40,17 @@
[query stage-number x style]
(lib.metadata.calculation/display-name query stage-number (lib.util/query-stage x stage-number) style))
(mu/defn native? :- :boolean
"Given a query, return whether it is a native query."
[query :- ::lib.schema/query]
(let [stage (lib.util/query-stage query 0)]
(= (:lib/type stage) :mbql.stage/native)))
(defmethod lib.metadata.calculation/display-info-method :mbql/query
[_query _stage-number query]
{:is-native (native? query)
:is-editable (lib.metadata/editable? query)})
(mu/defn stage-count :- ::lib.schema.common/int-greater-than-or-equal-to-zero
"Returns the count of stages in query"
[query :- ::lib.schema/query]
......
(ns metabase.lib.query-test
(:require
#?@(:cljs ([metabase.test-runner.assert-exprs.approximately-equal]))
[clojure.test :refer [deftest is testing]]
[clojure.test :refer [are deftest is testing]]
[clojure.walk :as walk]
[metabase.lib.convert :as lib.convert]
[metabase.lib.core :as lib]
[metabase.lib.query :as lib.query]
[metabase.lib.test-metadata :as meta]
[metabase.lib.test-util :as lib.tu]))
[metabase.lib.test-util :as lib.tu]
[metabase.lib.util :as lib.util]
[metabase.util.malli :as mu]))
#?(:cljs (comment metabase.test-runner.assert-exprs.approximately-equal/keep-me))
......@@ -95,3 +98,36 @@
(is (= 1 (lib/stage-count lib.tu/venues-query)))
(is (= 2 (lib/stage-count (lib/append-stage lib.tu/venues-query))))
(is (= 3 (lib/stage-count (lib/append-stage (lib/append-stage lib.tu/venues-query))))))
(deftest ^:parallel native?-test
(testing "MBQL queries are not native"
(is (not (lib.query/native? (lib/query meta/metadata-provider (meta/table-metadata :orders))))))
(testing "SQL queries are native"
(is (lib.query/native? (lib/native-query meta/metadata-provider "SELECT * FROM Orders;")))))
(deftest ^:parallel display-info-test
(testing "display-info"
(testing "on MBQL queries"
(let [editable (lib/query meta/metadata-provider (meta/table-metadata :orders))]
(are [editable? query] (= {:is-native false
:is-editable editable?}
(mu/disable-enforcement
(lib/display-info query -1 query)))
true editable
false (assoc editable :database 999999999) ; database unknown - no permissions
false (assoc-in editable [:stages 0 :source-table] 999999999) ; source-table not visible
false (lib.util/update-query-stage
editable 0
#(-> %
; source-card not visible
(assoc :source-card 999999999)
(dissoc :source-table))))))
(testing "on native queries"
(let [editable (lib/native-query meta/metadata-provider "SELECT * FROM Venues;")
bad-db (assoc editable :database 999999999)]
(is (= {:is-native true
:is-editable true}
(lib/display-info editable -1 editable)))
(is (= {:is-native true
:is-editable false}
(lib/display-info bad-db -1 bad-db)))))))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment