Skip to content
Snippets Groups Projects
Unverified Commit 72911ffe authored by Cam Saul's avatar Cam Saul Committed by GitHub
Browse files

MLv2: Handle missing Field metadata as long as it is present in Saved Question metadata (#31706)

* MLv2: Handle missing Field metadata as long as it is present in Saved Question metadata

* Address PR feedback
parent 8feb3c27
No related branches found
No related tags found
No related merge requests found
......@@ -42,8 +42,12 @@
(sequential? result-metadata) result-metadata))]
(mapv (fn [col]
(merge
{:base-type :type/*, :lib/type :metadata/field}
(when-let [field-id (:id col)]
(lib.metadata/field metadata-providerable field-id))
(try
(lib.metadata/field metadata-providerable field-id)
(catch #?(:clj Throwable :cljs :default) _
nil)))
(update-keys col u/->kebab-case-en)
{:lib/type :metadata/field
:lib/source :source/card
......
......@@ -4,6 +4,7 @@
[medley.core :as m]
[metabase.lib.aggregation :as lib.aggregation]
[metabase.lib.binning :as lib.binning]
[metabase.lib.card :as lib.card]
[metabase.lib.equality :as lib.equality]
[metabase.lib.expression :as lib.expression]
[metabase.lib.join :as lib.join]
......@@ -55,10 +56,13 @@
(merge
(when (lib.util/first-stage? query stage-number)
(when-let [card-id (lib.util/string-table-id->card-id (lib.util/source-table query))]
(when-let [card-metadata (lib.metadata/card query card-id)]
(when-let [card-metadata (lib.card/saved-question-metadata query card-id)]
(m/find-first #(= (:id %) field-id)
(:result-metadata card-metadata)))))
(lib.metadata/field query field-id)))
card-metadata))))
(try
(lib.metadata/field query field-id)
(catch #?(:clj Throwable :cljs :default) _
nil))))
(mu/defn ^:private resolve-column-name-in-metadata :- [:maybe lib.metadata/ColumnMetadata]
[column-name :- ::lib.schema.common/non-blank-string
......
......@@ -640,3 +640,45 @@
(lib/with-fields [(meta/field-metadata :venues :id)
(meta/field-metadata :venues :name)])
lib/fieldable-columns)))))
(deftest ^:parallel fallback-metadata-from-saved-question-when-missing-from-metadata-provider-test
(testing "Handle missing column metadata from the metadata provider; should still work if in Card result metadata (#31624)"
(let [provider (lib.tu/mock-metadata-provider
{:database {:id 1
:name "My Database"}
:tables [{:id 2
:name "My Table"}]
:cards [{:id 3
:name "Card 3"
:dataset-query {:lib/type :mbql/query
:database 1
:stages [{:lib/type :mbql.stage/mbql
:source-table 2}]}
:result-metadata [{:id 4
:name "Field 4"}]}]})
query (lib/query provider {:lib/type :mbql/query
:database 1
:stages [{:lib/type :mbql.stage/mbql
:source-table "card__3"}]})]
(is (= [{:lib/type :metadata/field
:base-type :type/*
:id 4
:name "Field 4"
:lib/source :source/card
:lib/card-id 3
:lib/source-column-alias "Field 4"
:lib/desired-column-alias "Field 4"}]
(lib.metadata.calculation/metadata query)))
(is (= {:lib/type :metadata/field
:base-type :type/Text
:effective-type :type/Text
:id 4
:name "Field 4"
:display-name "Field 4"
:lib/card-id 3
:lib/source :source/card
:lib/source-column-alias "Field 4"
:lib/source-uuid "aa0e13af-29b3-4c27-a880-a10c33e55a3e"}
(lib.metadata.calculation/metadata
query
[:field {:lib/uuid "aa0e13af-29b3-4c27-a880-a10c33e55a3e", :base-type :type/Text} 4]))))))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment