diff --git a/src/metabase/api/meta/table.clj b/src/metabase/api/meta/table.clj index 07e83da6196d3899eca13cef94391e276a2d8207..552bac779f07c5f38133a6618c81def79d3059bd 100644 --- a/src/metabase/api/meta/table.clj +++ b/src/metabase/api/meta/table.clj @@ -62,7 +62,7 @@ {include_sensitive_fields String->Boolean} (->404 (sel :one Table :id id) read-check - (hydrate :db [:fields [:target]] :field_values) + (hydrate :db [:fields :target] :field_values) (update-in [:fields] (if include_sensitive_fields ;; If someone passes include_sensitive_fields return hydrated :fields as-is identity diff --git a/src/metabase/models/hydrate.clj b/src/metabase/models/hydrate.clj index 1c684efec9f4172b884879564cd2490217b1d43e..b5f81f4cc741af974601a5f22496f149cb6b8d75 100644 --- a/src/metabase/models/hydrate.clj +++ b/src/metabase/models/hydrate.clj @@ -117,7 +117,10 @@ (defn- hydrate-vector "Hydrate a nested hydration form (vector) by recursively calling `hydrate`." - [results [k & more]] + [results [k & more :as vect]] + ;; TODO - it would be super snazzy if we could make this a compile-time check + (assert (> (count vect) 1) + (format "Replace '%s' with '%s'. Vectors are for nested hydration. There's no need to use one when you only have a single key." vect (first vect))) (let [results (hydrate results k)] (if-not (seq more) results (counts-apply results k #(apply hydrate % more))))) diff --git a/test/metabase/models/hydrate_test.clj b/test/metabase/models/hydrate_test.clj index bf98426bc2b7e51c829d403f7186bd8ca7806a83..af9098d703a87208e5a90e0272cd8f94690d9894 100644 --- a/test/metabase/models/hydrate_test.clj +++ b/test/metabase/models/hydrate_test.clj @@ -237,11 +237,13 @@ :b d2} :b)) -;; specifying "nested" hydration with no "nested" keys should still work -(expect {:a 1 :b 2} - (hydrate {:a 1 - :b d2} - [:b])) +;; specifying "nested" hydration with no "nested" keys should throw an exception and tell you not to do it +(expect "Assert failed: Replace '[:b]' with ':b'. Vectors are for nested hydration. There's no need to use one when you only have a single key.\n(> (count vect) 1)" + (try (hydrate {:a 1 + :b d2} + [:b]) + (catch Throwable e + (.getMessage e)))) ;; check that returning an array works correctly (expect {:c [1 2 3]}