Skip to content
Snippets Groups Projects
Unverified Commit d1de1e56 authored by Noah Moss's avatar Noah Moss Committed by GitHub
Browse files

Optimize loading of admin permissions pages (add skip_fields flag to database...

Optimize loading of admin permissions pages (add skip_fields flag to database metadata endpoint) (#42062)

* add skip_fields flag to database metadata endpoint

* skips loading fields on database metadata requests while on admin permissions pages

---------

Co-authored-by: default avatarSloan Sparger <sloansparger@gmail.com>
parent a330f612
No related branches found
No related tags found
No related merge requests found
......@@ -71,6 +71,7 @@ export interface TableListQuery {
include_hidden?: boolean;
include_editable_data_model?: boolean;
remove_inactive?: boolean;
skip_fields?: boolean;
}
export interface ForeignKey {
......
......@@ -73,6 +73,7 @@ function DataPermissionsPage({
dbId: params.databaseId,
include_hidden: true,
remove_inactive: true,
skip_fields: true,
},
enabled: params.databaseId !== undefined,
});
......
......@@ -453,15 +453,14 @@
[]
(saved-cards-virtual-db-metadata :question :include-tables? true, :include-fields? true))
(defn- db-metadata [id include-hidden? include-editable-data-model? remove_inactive?]
(defn- db-metadata [id include-hidden? include-editable-data-model? remove_inactive? skip-fields?]
(let [db (-> (if include-editable-data-model?
(api/check-404 (t2/select-one Database :id id))
(api/read-check Database id))
(t2/hydrate [:tables [:fields
:has_field_values
[:target :has_field_values]]
:segments
:metrics]))
(t2/hydrate
(if skip-fields?
[:tables :segments :metrics]
[:tables [:fields :has_field_values [:target :has_field_values]] :segments :metrics])))
db (if include-editable-data-model?
;; We need to check data model perms after hydrating tables, since this will also filter out tables for
;; which the *current-user* does not have data model perms
......@@ -498,15 +497,17 @@
permissions, if Enterprise Edition code is available and a token with the advanced-permissions feature is present.
In addition, if the user has no data access for the DB (aka block permissions), it will return only the DB name, ID
and tables, with no additional metadata."
[id include_hidden include_editable_data_model remove_inactive]
[id include_hidden include_editable_data_model remove_inactive skip_fields]
{id ms/PositiveInt
include_hidden [:maybe ms/BooleanValue]
include_editable_data_model [:maybe ms/BooleanValue]
remove_inactive [:maybe ms/BooleanValue]}
remove_inactive [:maybe ms/BooleanValue]
skip_fields [:maybe ms/BooleanValue]}
(db-metadata id
include_hidden
include_editable_data_model
remove_inactive))
remove_inactive
skip_fields))
;;; --------------------------------- GET /api/database/:id/autocomplete_suggestions ---------------------------------
......
......@@ -688,9 +688,20 @@
(mt/with-temp [Database {db-id :id} {}
Table _ {:db_id db-id, :active false}]
(testing "GET /api/database/:id/metadata?include_hidden=true"
(let [tables (->> (mt/user-http-request :rasta :get 200 (format "database/%d/metadata?remove_inactive=true" db-id))
:tables)]
(is (= () tables))))))
(let [tables (->> (mt/user-http-request :rasta :get 200 (format "database/%d/metadata?remove_inactive=true" db-id))
:tables)]
(is (= () tables))))))
(deftest fetch-database-metadata-skip-fields-test
(mt/with-temp [Database {db-id :id} {}
Table table {:db_id db-id}
Field _ {:table_id (u/the-id table)}]
(testing "GET /api/database/:id/metadata?skip_fields=true"
(let [fields (->> (mt/user-http-request :rasta :get 200 (format "database/%d/metadata?skip_fields=true" db-id))
:tables
first
:fields)]
(is (= () fields))))))
(deftest autocomplete-suggestions-test
(let [prefix-fn (fn [db-id prefix]
......
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