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