From c6fda28b4a111a3babf0e53ed4662586fbf79d78 Mon Sep 17 00:00:00 2001 From: dpsutton <dan@dpsutton.com> Date: Tue, 10 Jan 2023 08:42:11 -0600 Subject: [PATCH] fix api/database/<id>/fields to include table's name (#27558) * fix api/database/<id>/fields to include table's name including name and display name for field, and table name (not display name) which was original complaint. * tests --- src/metabase/api/database.clj | 9 +++++---- test/metabase/api/database_test.clj | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/metabase/api/database.clj b/src/metabase/api/database.clj index 0a3cd6be988..611b7d6b748 100644 --- a/src/metabase/api/database.clj +++ b/src/metabase/api/database.clj @@ -565,16 +565,17 @@ "Get a list of all `Fields` in `Database`." [id] (api/read-check Database id) - (let [fields (filter mi/can-read? (-> (db/select [Field :id :display_name :table_id :base_type :semantic_type] + (let [fields (filter mi/can-read? (-> (db/select [Field :id :name :display_name :table_id :base_type :semantic_type] :table_id [:in (db/select-field :id Table, :db_id id)] :visibility_type [:not-in ["sensitive" "retired"]]) (hydrate :table)))] - (for [{:keys [id display_name table base_type semantic_type]} fields] + (for [{:keys [id name display_name table base_type semantic_type]} fields] {:id id - :name display_name + :name name + :display_name display_name :base_type base_type :semantic_type semantic_type - :table_name (:display_name table) + :table_name (:name table) :schema (:schema table)}))) diff --git a/test/metabase/api/database_test.clj b/test/metabase/api/database_test.clj index 82aa32200ce..6b1970bbeb5 100644 --- a/test/metabase/api/database_test.clj +++ b/test/metabase/api/database_test.clj @@ -340,6 +340,23 @@ (let [resp (mt/derecordize (mt/user-http-request :rasta :get 200 (format "database/%d/metadata" (mt/id))))] (assoc resp :tables (filter #(= "CATEGORIES" (:name %)) (:tables resp)))))))) +(deftest fetch-database-fields-test + (letfn [(f [fields] (m/index-by #(str (:table_name %) "." (:name %)) fields))] + (testing "GET /api/database/:id/fields" + (is (partial= {"VENUES.ID" {:name "ID" :display_name "ID" + :table_name "VENUES"} + "CHECKINS.USER_ID" {:name "USER_ID" :display_name "User ID" + :table_name "CHECKINS"}} + (f (mt/user-http-request :rasta :get 200 (format "database/%d/fields" (mt/id)))))) + (testing "shows display names" + (mt/with-temp* [Table [{t-id :id} {:name "FOO_TABLE" :display_name "irrelevant" + :db_id (mt/id)}] + Field [_ {:name "F_NAME" :display_name "user editable" + :table_id t-id}]] + (is (partial= {"FOO_TABLE.F_NAME" {:name "F_NAME" :display_name "user editable" + :table_name "FOO_TABLE"}} + (f (mt/user-http-request :rasta :get 200 (format "database/%d/fields" (mt/id))))))))))) + (deftest fetch-database-metadata-include-hidden-test ;; NOTE: test for the exclude_uneditable parameter lives in metabase-enterprise.advanced-permissions.common-test (mt/with-temp-vals-in-db Table (mt/id :categories) {:visibility_type "hidden"} -- GitLab