From 9a00cf384b7d0abcd06891301a010dbd0e1ba767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cam=20Sa=C3=BCl?= <cammsaul@gmail.com> Date: Wed, 31 Aug 2016 11:57:43 -0700 Subject: [PATCH] Fix GET /api/database/:id/idfields if DB has no tables :wrench: --- src/metabase/api/database.clj | 9 ++++----- src/metabase/models/database.clj | 8 ++++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/metabase/api/database.clj b/src/metabase/api/database.clj index e449c7b1919..43a3f17ea3d 100644 --- a/src/metabase/api/database.clj +++ b/src/metabase/api/database.clj @@ -1,6 +1,7 @@ (ns metabase.api.database "/api/database endpoints." - (:require [clojure.tools.logging :as log] + (:require [clojure.string :as s] + [clojure.tools.logging :as log] [compojure.core :refer [GET POST PUT DELETE]] [metabase.api.common :refer :all] (metabase [config :as config] @@ -10,7 +11,7 @@ [sample-data :as sample-data] [util :as u]) (metabase.models common - [database :refer [Database protected-password]] + [database :refer [Database protected-password], :as database] [field :refer [Field]] [hydrate :refer [hydrate]] [table :refer [Table]]))) @@ -200,9 +201,7 @@ "Get a list of all primary key `Fields` for `Database`." [id] (read-check Database id) - (let [table_ids (db/select-ids Table, :db_id id, :active true)] - (sort-by #(:name (:table %)) (-> (db/select Field, :table_id [:in table_ids], :special_type "id") - (hydrate :table))))) + (sort-by (comp s/lower-case :name :table) (hydrate (database/pk-fields {:id id}) :table))) (defendpoint POST "/:id/sync" "Update the metadata for this `Database`." diff --git a/src/metabase/models/database.clj b/src/metabase/models/database.clj index 9594ea0c37d..c962f307f0f 100644 --- a/src/metabase/models/database.clj +++ b/src/metabase/models/database.clj @@ -29,6 +29,14 @@ [{:keys [id]}] (db/select 'Table, :db_id id, :active true, {:order-by [[:display_name :asc]]})) +(defn pk-fields + "Return all the primary key `Fields` associated with this DATABASE." + [{:keys [id]}] + (let [table-ids (db/select-ids 'Table, :db_id id, :active true)] + (when (seq table-ids) + (db/select 'Field, :table_id [:in table-ids], :special_type "id")))) + + (u/strict-extend (class Database) i/IEntity (merge i/IEntityDefaults -- GitLab