diff --git a/backend/mbql/src/metabase/mbql/normalize.clj b/backend/mbql/src/metabase/mbql/normalize.clj index 23e76a18970db..7d8fe10f28a38 100644 --- a/backend/mbql/src/metabase/mbql/normalize.clj +++ b/backend/mbql/src/metabase/mbql/normalize.clj @@ -250,7 +250,7 @@ "Normalize source/results metadata for a single column." [metadata] {:pre [(map? metadata)]} - (-> (reduce #(m/update-existing %1 %2 keyword) metadata [:base_type :semantic_type :visibility_type :source :unit]) + (-> (reduce #(m/update-existing %1 %2 keyword) metadata [:base_type :effective_type :semantic_type :visibility_type :source :unit]) (m/update-existing :field_ref (comp canonicalize-mbql-clauses normalize-tokens)) (m/update-existing :fingerprint walk/keywordize-keys))) diff --git a/enterprise/backend/test/metabase_enterprise/sandbox/query_processor/middleware/row_level_restrictions_test.clj b/enterprise/backend/test/metabase_enterprise/sandbox/query_processor/middleware/row_level_restrictions_test.clj index 77543152f8251..2991461f0e102 100644 --- a/enterprise/backend/test/metabase_enterprise/sandbox/query_processor/middleware/row_level_restrictions_test.clj +++ b/enterprise/backend/test/metabase_enterprise/sandbox/query_processor/middleware/row_level_restrictions_test.clj @@ -166,10 +166,12 @@ [:> $date [:absolute-datetime #t "2014-01-01T00:00Z[UTC]" :default]] [:= $user_id - [:value 5 {:base_type :type/Integer - :semantic_type :type/FK - :database_type "INTEGER" - :name "USER_ID"}]]] + [:value 5 {:base_type :type/Integer + :effective_type :type/Integer + :coercion_strategy nil + :semantic_type :type/FK + :database_type "INTEGER" + :name "USER_ID"}]]] ::row-level-restrictions/gtap? true} :joins [{:source-query {:source-table $$venues @@ -177,10 +179,12 @@ $venues.latitude $venues.longitude $venues.price] :filter [:= $venues.price - [:value 1 {:base_type :type/Integer - :semantic_type :type/Category - :database_type "INTEGER" - :name "PRICE"}]] + [:value 1 {:base_type :type/Integer + :effective_type :type/Integer + :coercion_strategy nil + :semantic_type :type/Category + :database_type "INTEGER" + :name "PRICE"}]] ::row-level-restrictions/gtap? true} :alias "v" :strategy :left-join @@ -762,6 +766,8 @@ (is (= [:= [:field (mt/id :products :category) {:join-alias "products"}] [:value "Widget" {:base_type :type/Text + :effective_type :type/Text + :coercion_strategy nil :semantic_type (db/select-one-field :semantic_type Field :id (mt/id :products :category)) :database_type "VARCHAR" diff --git a/frontend/src/metabase/admin/datamodel/containers/FieldApp.jsx b/frontend/src/metabase/admin/datamodel/containers/FieldApp.jsx index dfac2b7d388ca..4d1cd69e10b85 100644 --- a/frontend/src/metabase/admin/datamodel/containers/FieldApp.jsx +++ b/frontend/src/metabase/admin/datamodel/containers/FieldApp.jsx @@ -25,6 +25,9 @@ import { LeftNavPane, LeftNavPaneItem } from "metabase/components/LeftNavPane"; import Section, { SectionHeader } from "../components/Section"; import SelectSeparator from "../components/SelectSeparator"; +import { is_coerceable, coercions_for_type } from "cljs/metabase.types"; +import { isFK } from "metabase/lib/types"; + import { FieldVisibilityPicker, SemanticTypeAndTargetPicker, @@ -313,6 +316,35 @@ const FieldGeneralPane = ({ /> + {!isFK(field.semantic_type) && is_coerceable(field.base_type) && ( +
+ +