diff --git a/src/metabase/api/database.clj b/src/metabase/api/database.clj index 0a3cd6be988892ab5f21d27d8fa83d8a1e52caec..611b7d6b74890d21abc1c3041f5fb2ce587f5147 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 82aa32200ce58003b4b881c82f23cb40cd93b5a6..6b1970bbeb5bb725cd563d6680f4df16114884c6 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"}