diff --git a/src/metabase/query_processor/store.clj b/src/metabase/query_processor/store.clj index 786d9ec07a515f004061d18c1ac9433a946b2915..93ee2bc0e050f409a1f9b66eb8f823de0319589c 100644 --- a/src/metabase/query_processor/store.clj +++ b/src/metabase/query_processor/store.clj @@ -67,6 +67,7 @@ "Columns you should fetch for any Table you want to stash in the Store." [:id :name + :display_name :schema]) (def ^:private TableInstanceWithRequiredStoreKeys diff --git a/test/metabase/query_processor/middleware/annotate_test.clj b/test/metabase/query_processor/middleware/annotate_test.clj index 0020e444162da55e5961563b14ea8e65fd5879d1..30071e986bdd7859494b1204296040efe5b47a6e 100644 --- a/test/metabase/query_processor/middleware/annotate_test.clj +++ b/test/metabase/query_processor/middleware/annotate_test.clj @@ -4,12 +4,16 @@ [metabase [driver :as driver] [util :as u]] - [metabase.models.field :refer [Field]] + [metabase.models + [field :refer [Field]] + [table :refer [Table]]] [metabase.query-processor [store :as qp.store] [test-util :as qp.test-util]] [metabase.query-processor.middleware.annotate :as annotate] - [metabase.test.data :as data] + [metabase.test + [data :as data] + [util :as tu]] [toucan.db :as db] [toucan.util.test :as tt])) @@ -91,7 +95,7 @@ (expect [(data/$ids venues (assoc (info-for-field :categories :name) - :display_name "VENUES → Name" + :display_name "Venues → Name" :fk_field_id %category_id :source :fields :field_ref &CATEGORIES__via__CATEGORY_ID.categories.name))] @@ -108,6 +112,28 @@ :fk-field-id %category_id}]}} {:columns [:name]}))))) +;; we shuld use the `display_name` of a Table instead of its `name` in joined display names +(expect + [(data/$ids venues + (assoc (info-for-field :categories :name) + :display_name "Geographical locations to share Tips about → Name" ; RIP GeoTips + :fk_field_id %category_id + :source :fields + :field_ref &CATEGORIES__via__CATEGORY_ID.categories.name))] + (qp.test-util/with-everything-store + (data/$ids venues + (tu/with-temp-vals-in-db Table $$venues {:display_name "Geographical locations to share Tips about"} + (doall + (annotate/column-info + {:type :query + :query {:fields [&CATEGORIES__via__CATEGORY_ID.categories.name] + :joins [{:alias "CATEGORIES__via__CATEGORY_ID" + :source-table $$venues + :condition [:= $category_id &CATEGORIES__via__CATEGORY_ID.categories.id] + :strategy :left-join + :fk-field-id %category_id}]}} + {:columns [:name]})))))) + ;; when using `:joined-field` clauses for a join a source query (instead of a source table), `display_name` should ;; include the join alias (expect @@ -117,18 +143,18 @@ :fk_field_id %category_id :source :fields :field_ref &cats.categories.name))] - (qp.test-util/with-everything-store - (data/$ids venues - (doall - (annotate/column-info - {:type :query - :query {:fields [&cats.categories.name] - :joins [{:alias "cats" - :source-query {:source-table $$venues} - :condition [:= $category_id &cats.categories.id] - :strategy :left-join - :fk-field-id %category_id}]}} - {:columns [:name]}))))) + (qp.test-util/with-everything-store + (data/$ids venues + (doall + (annotate/column-info + {:type :query + :query {:fields [&cats.categories.name] + :joins [{:alias "cats" + :source-query {:source-table $$venues} + :condition [:= $category_id &cats.categories.id] + :strategy :left-join + :fk-field-id %category_id}]}} + {:columns [:name]}))))) ;; when a `:datetime-field` form is used, we should add in info about the `:unit` (expect diff --git a/test/metabase/query_processor_test.clj b/test/metabase/query_processor_test.clj index 6ae7ef3b4b020d2bd9269923cbaca5f0001c0bf5..7dee4e9bf434871d653a67333dde29753a1961f1 100644 --- a/test/metabase/query_processor_test.clj +++ b/test/metabase/query_processor_test.clj @@ -169,12 +169,13 @@ (defn fk-col "Return expected `:cols` info for a Field that came in via an implicit join (i.e, via an `fk->` clause)." [source-table-kw source-field-kw, dest-table-kw dest-field-kw] - (let [source-col (col source-table-kw source-field-kw) - dest-col (col dest-table-kw dest-field-kw) - dest-table-name (db/select-one-field :name Table :id (data/id dest-table-kw)) - join-alias (#'add-implicit-joins/join-alias dest-table-name (:name source-col))] + (let [source-col (col source-table-kw source-field-kw) + dest-col (col dest-table-kw dest-field-kw) + dest-table-display-name (db/select-one-field :display_name Table :id (data/id dest-table-kw)) + dest-table-name (db/select-one-field :name Table :id (data/id dest-table-kw)) + join-alias (#'add-implicit-joins/join-alias dest-table-name (:name source-col))] (-> dest-col - (update :display_name (partial format "%s → %s" dest-table-name)) + (update :display_name (partial format "%s → %s" (or dest-table-display-name dest-table-name))) (assoc :field_ref [:joined-field join-alias [:field-id (:id dest-col)]] :fk_field_id (:id source-col))))) diff --git a/test/metabase/test/util.clj b/test/metabase/test/util.clj index 108d190fb86be0389534cab13b486bfcf04e50bb..fcb2eb13f2ffa64bc0c5b40894d607f071326344 100644 --- a/test/metabase/test/util.clj +++ b/test/metabase/test/util.clj @@ -337,6 +337,8 @@ [original-column->value] (db/query {:select (keys column->temp-value) :from [model] :where [:= :id (u/get-id object-or-id)]})] + (assert original-column->value + (format "%s %d not found." (name model) (u/get-id object-or-id))) (try (db/update! model (u/get-id object-or-id) column->temp-value)