From dd63971616c917331876ad0c50dd433423a6f1a9 Mon Sep 17 00:00:00 2001 From: Ben Kogan Date: Wed, 27 May 2026 13:47:29 -0700 Subject: [PATCH 1/2] Fix DecFloat schema nullability when SQL simplifier is disabled. Use cast syntax for non-null DecFloat schema placeholders so describe queries preserve NOT NULL metadata. --- src/snowflake/snowpark/_internal/analyzer/datatype_mapper.py | 2 +- tests/unit/test_datatype_mapper.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/snowflake/snowpark/_internal/analyzer/datatype_mapper.py b/src/snowflake/snowpark/_internal/analyzer/datatype_mapper.py index 99bccdca1d..a4be295944 100644 --- a/src/snowflake/snowpark/_internal/analyzer/datatype_mapper.py +++ b/src/snowflake/snowpark/_internal/analyzer/datatype_mapper.py @@ -519,7 +519,7 @@ def schema_expression(data_type: DataType, is_nullable: bool) -> str: return "NULL :: " + convert_sp_to_sf_type(data_type) if isinstance(data_type, DecFloatType): - return "DECFLOAT '0'" + return "0 :: " + convert_sp_to_sf_type(data_type) if isinstance(data_type, _NumericType): return "0 :: " + convert_sp_to_sf_type(data_type) if isinstance(data_type, StringType): diff --git a/tests/unit/test_datatype_mapper.py b/tests/unit/test_datatype_mapper.py index 3df7de666a..7ce9a25363 100644 --- a/tests/unit/test_datatype_mapper.py +++ b/tests/unit/test_datatype_mapper.py @@ -770,6 +770,7 @@ def test_schema_expression(): assert schema_expression(LongType(), False) == "0 :: BIGINT" assert schema_expression(FloatType(), False) == "0 :: FLOAT" assert schema_expression(DoubleType(), False) == "0 :: DOUBLE" + assert schema_expression(DecFloatType(), False) == "0 :: DECFLOAT" assert schema_expression(StringType(), False) == "'a' :: STRING" assert schema_expression(StringType(19), False) == "'a' :: STRING (19)" assert schema_expression(BooleanType(), False) == "true" From 9a24acdd03553760653e29b08e0e194a0a167545 Mon Sep 17 00:00:00 2001 From: Ben Kogan Date: Wed, 27 May 2026 13:49:47 -0700 Subject: [PATCH 2/2] Remove redundant DecFloat branch from schema_expression. DecFloatType is handled by the existing _NumericType branch. --- src/snowflake/snowpark/_internal/analyzer/datatype_mapper.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/snowflake/snowpark/_internal/analyzer/datatype_mapper.py b/src/snowflake/snowpark/_internal/analyzer/datatype_mapper.py index a4be295944..c824927ec9 100644 --- a/src/snowflake/snowpark/_internal/analyzer/datatype_mapper.py +++ b/src/snowflake/snowpark/_internal/analyzer/datatype_mapper.py @@ -518,8 +518,6 @@ def schema_expression(data_type: DataType, is_nullable: bool) -> str: return "PARSE_JSON('NULL') :: VARIANT" return "NULL :: " + convert_sp_to_sf_type(data_type) - if isinstance(data_type, DecFloatType): - return "0 :: " + convert_sp_to_sf_type(data_type) if isinstance(data_type, _NumericType): return "0 :: " + convert_sp_to_sf_type(data_type) if isinstance(data_type, StringType):