diff --git a/src/metabase/db.clj b/src/metabase/db.clj
index 1543ca4a64fd560dc30fb40d578a6747cc1ce451..ae11a585774a130afad090ceead26aef30c05521 100644
--- a/src/metabase/db.clj
+++ b/src/metabase/db.clj
@@ -176,28 +176,7 @@
 
 ;; ## SEL
 
-(comment
-  :id->field `(let [[entity# field#] ~entity]
-                (->> (sel :many :fields [entity# field# :id] ~@forms)
-                     (map (fn [{id# :id field-val# field#}]
-                            {id# field-val#}))
-                     (into {})))
-  :field->id `(let [[entity# field#] ~entity]
-                (->> (sel :many :fields [entity# field# :id] ~@forms)
-                     (map (fn [{id# :id field-val# field#}]
-                            {field-val# id#}))
-                     (into {})))
-  :field->field `(let [[entity# field1# field2#] ~entity]
-                   (->> (sel :many entity# ~@forms)
-                        (map (fn [obj#]
-                               {(field1# obj#) (field2# obj#)}))
-                        (into {})))
-  :field->obj `(let [[entity# field#] ~entity]
-                 (->> (sel :many entity# ~@forms)
-                      (map (fn [obj#]
-                             {(field# obj#) obj#}))
-                      (into {})))
-  )
+(def ^:dynamic *sel-disable-logging* false)
 
 (defmacro sel
   "Wrapper for korma `select` that calls `post-select` on results and provides a few other conveniences.
diff --git a/src/metabase/db/internal.clj b/src/metabase/db/internal.clj
index 2758e3d906c9847dbe7b436b7b7a5afac68bdd8b..fb7c7fc0c9eaab058a55e69f9336624f0bf3255b 100644
--- a/src/metabase/db/internal.clj
+++ b/src/metabase/db/internal.clj
@@ -82,9 +82,10 @@
     ;; Log if applicable
     (future
       (when (config/config-bool :mb-db-logging)
-        (log/debug "DB CALL: " (:name entity)
-                   (or (:fields entity+fields) "*")
-                   (s/replace log-str #"korma.core/" ""))))
+        (when-not @(resolve 'metabase.db/*sel-disable-logging*)
+          (log/debug "DB CALL: " (:name entity)
+                     (or (:fields entity+fields) "*")
+                     (s/replace log-str #"korma.core/" "")))))
 
     (->> (k/exec (select-fn entity+fields))
          (map (partial models/internal-post-select entity))
diff --git a/src/metabase/models/field.clj b/src/metabase/models/field.clj
index 6c7eb417005cb58b6edaf8081065caee99e12270..3155fbde6121047c25bf89de8e96c6f1f907d24b 100644
--- a/src/metabase/models/field.clj
+++ b/src/metabase/models/field.clj
@@ -109,7 +109,7 @@
               (contains? field :special_type))
       (future (create-field-values-if-needed (sel :one [this :id :table_id :base_type :special_type :field_type] :id id)))))
 
-  (post-select [_ {:keys [table_id parent_id] :as field}]
+  (post-select [this {:keys [table_id parent_id] :as field}]
     (map->FieldInstance
       (u/assoc* field
         :table                     (delay (sel :one 'metabase.models.table/Table :id table_id))
@@ -118,8 +118,8 @@
         :human_readable_name       (when (name :field)
                                      (delay (common/name->human-readable-name (:name field))))
         :parent                    (when parent_id
-                                     (delay (sel :one Field :id parent_id)))
-        :children                  (delay (sel :many Field :parent_id (:id field)))
+                                     (delay (this parent_id)))
+        :children                  (delay (sel :many this :parent_id (:id field)))
         :qualified-name-components (delay (qualified-name-components <>))
         :qualified-name            (delay (apply str (interpose "." @(:qualified-name-components <>)))))))
 
diff --git a/src/metabase/models/interface.clj b/src/metabase/models/interface.clj
index ac46ee92c838387dc30b58202125acc2ce34db6e..89346f5f1847b11e66c08dff58ca7c75556e0c62 100644
--- a/src/metabase/models/interface.clj
+++ b/src/metabase/models/interface.clj
@@ -153,8 +153,9 @@
   [entity id]
   (when id
     (when (metabase.config/config-bool :mb-db-logging)
-      (clojure.tools.logging/debug
-       "DB CALL: " (:name entity) id))
+      (when-not @(resolve 'metabase.db/*sel-disable-logging*)
+        (clojure.tools.logging/debug
+         "DB CALL: " (:name entity) id)))
     (let [[obj] (k/select (assoc entity :fields (::default-fields entity))
                           (k/where {:id id})
                           (k/limit 1))]
diff --git a/test/metabase/api/meta/table_test.clj b/test/metabase/api/meta/table_test.clj
index 3216385b33bf217673596c191b7d8d824864d5a0..2065edbe4c541d5a5863188b8f3477365538f578 100644
--- a/test/metabase/api/meta/table_test.clj
+++ b/test/metabase/api/meta/table_test.clj
@@ -160,11 +160,118 @@
                          :base_type       "TextField"
                          :parent_id       nil
                          :parent          nil})]
-       ;; :field_values {}
+       :field_values {}
        :rows         75
        :updated_at   $
        :entity_name  nil
        :active       true
+       :id           (id :categories)
+       :db_id        (db-id)
+       :created_at   $})
+  ((user->client :rasta) :get 200 (format "meta/table/%d/query_metadata" (id :categories))))
+
+
+(def ^:private user-last-login-date-strs
+  "In an effort to be really annoying, the date strings returned by the API are different on Circle than they are locally.
+   Generate strings like '2014-01-01' at runtime so we get matching values."
+  (let [format-inst (fn [^java.util.Date inst]
+                      (format "%d-%02d-%02d"
+                              (+ (.getYear inst) 1900)
+                              (+ (.getMonth inst) 1)
+                              (.getDate inst)))]
+    (->> data/test-data
+         :table-definitions
+         first
+         :rows
+         (map second)
+         (map format-inst)
+         set
+         sort
+         vec)))
+
+;;; GET api/meta/table/:id/query_metadata?include_sensitive_fields
+;;; Make sure that getting the User table *does* include info about the password field, but not actual values themselves
+(expect
+    (match-$ (sel :one Table :id (id :users))
+      {:description  nil
+       :entity_type  nil
+       :db           (match-$ (db)
+                       {:created_at      $
+                        :engine          "h2"
+                        :id              $
+                        :updated_at      $
+                        :name            "Test Database"
+                        :organization_id nil
+                        :description     nil})
+       :name         "USERS"
+       :fields       [(match-$ (sel :one Field :id (id :users :id))
+                        {:description     nil
+                         :table_id        (id :users)
+                         :special_type    "id"
+                         :name            "ID"
+                         :updated_at      $
+                         :active          true
+                         :id              $
+                         :field_type      "info"
+                         :position        0
+                         :target          nil
+                         :preview_display true
+                         :created_at      $
+                         :base_type       "BigIntegerField"
+                         :parent_id       nil
+                         :parent          nil})
+                      (match-$ (sel :one Field :id (id :users :last_login))
+                        {:description     nil
+                         :table_id        (id :users)
+                         :special_type    "category"
+                         :name            "LAST_LOGIN"
+                         :updated_at      $
+                         :active          true
+                         :id              $
+                         :field_type      "info"
+                         :position        0
+                         :target          nil
+                         :preview_display true
+                         :created_at      $
+                         :base_type       "DateTimeField"
+                         :parent_id       nil
+                         :parent          nil})
+                      (match-$ (sel :one Field :id (id :users :name))
+                        {:description     nil
+                         :table_id        (id :users)
+                         :special_type    "category"
+                         :name            "NAME"
+                         :updated_at      $
+                         :active          true
+                         :id              $
+                         :field_type      "info"
+                         :position        0
+                         :target          nil
+                         :preview_display true
+                         :created_at      $
+                         :base_type       "TextField"
+                         :parent_id       nil
+                         :parent          nil})
+                      (match-$ (sel :one Field :table_id (id :users) :name "PASSWORD")
+                        {:description     nil
+                         :table_id        (id :users)
+                         :special_type    "category"
+                         :name            "PASSWORD"
+                         :updated_at      $
+                         :active          true
+                         :id              $
+                         :field_type      "sensitive"
+                         :position        0
+                         :target          nil
+                         :preview_display true
+                         :created_at      $
+                         :base_type       "TextField"
+                         :parent_id       nil
+                         :parent          nil})]
+       :rows         15
+       :updated_at   $
+       :entity_name  nil
+       :active       true
        :id           (id :users)
        :db_id        (db-id)
        :field_values {(keyword (str (id :users :last_login)))