Skip to content

Commit 065b2a5

Browse files
validate identity for DECFLOAT and took out FLOAT tests
1 parent 7ddff61 commit 065b2a5

File tree

3 files changed

+39
-36
lines changed

3 files changed

+39
-36
lines changed

sqlglot/typing/snowflake.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,18 +103,17 @@ def _annotate_within_group(self: TypeAnnotator, expression: exp.WithinGroup) ->
103103
def _annotate_math_with_float_decfloat(
104104
self: TypeAnnotator, expression: exp.Expression
105105
) -> exp.Expression:
106-
"""Annotate math functions that preserve FLOAT and DECFLOAT but return DOUBLE for integers.
106+
"""Annotate math functions that preserve DECFLOAT but return DOUBLE for others.
107107
108108
In Snowflake, trigonometric and exponential math functions:
109-
- If input is FLOAT -> return FLOAT
110109
- If input is DECFLOAT -> return DECFLOAT
111110
- For integer types (INT, BIGINT, etc.) -> return DOUBLE
112111
- For other numeric types (NUMBER, DECIMAL, DOUBLE) -> return DOUBLE
113112
"""
114113
expression = self._annotate_by_args(expression, "this")
115114

116-
# If input is FLOAT or DECFLOAT, preserve that type
117-
if expression.this.is_type(exp.DataType.Type.FLOAT, exp.DataType.Type.DECFLOAT):
115+
# If input is DECFLOAT, preserve
116+
if expression.this.is_type(exp.DataType.Type.DECFLOAT):
118117
self._set_type(expression, expression.this.type)
119118
else:
120119
# For all other types (integers, decimals, etc.), return DOUBLE

tests/dialects/test_snowflake.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,10 @@ def test_snowflake(self):
180180
self.validate_identity("SELECT TO_TIMESTAMP_LTZ(x) FROM t")
181181
self.validate_identity("SELECT TO_TIMESTAMP_TZ(x) FROM t")
182182
self.validate_identity("TO_DECIMAL(expr, fmt, precision, scale)")
183+
self.validate_identity("TO_DECFLOAT('123.456')")
184+
self.validate_identity("TO_DECFLOAT('1,234.56', '999,999.99')")
185+
self.validate_identity("TRY_TO_DECFLOAT('123.456')")
186+
self.validate_identity("TRY_TO_DECFLOAT('1,234.56', '999,999.99')")
183187
self.validate_identity("ALTER TABLE authors ADD CONSTRAINT c1 UNIQUE (id, email)")
184188
self.validate_identity("RM @parquet_stage", check_command_warning=True)
185189
self.validate_identity("REMOVE @parquet_stage", check_command_warning=True)

tests/fixtures/optimizer/annotate_functions.sql

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3013,128 +3013,128 @@ SQRT(CAST(16 AS DECFLOAT));
30133013
DECFLOAT;
30143014

30153015
# dialect: snowflake
3016-
SQRT(CAST(16 AS FLOAT));
3017-
FLOAT;
3016+
SQRT(CAST(16 AS DOUBLE));
3017+
DOUBLE;
30183018

30193019
# dialect: snowflake
30203020
EXP(CAST(2 AS DECFLOAT));
30213021
DECFLOAT;
30223022

30233023
# dialect: snowflake
3024-
EXP(CAST(2 AS FLOAT));
3025-
FLOAT;
3024+
EXP(CAST(2 AS DOUBLE));
3025+
DOUBLE;
30263026

30273027
# dialect: snowflake
30283028
LN(CAST(10 AS DECFLOAT));
30293029
DECFLOAT;
30303030

30313031
# dialect: snowflake
3032-
LN(CAST(10 AS FLOAT));
3033-
FLOAT;
3032+
LN(CAST(10 AS DOUBLE));
3033+
DOUBLE;
30343034

30353035
# dialect: snowflake
30363036
LOG(CAST(100 AS DECFLOAT), 10);
30373037
DECFLOAT;
30383038

30393039
# dialect: snowflake
3040-
LOG(CAST(100 AS FLOAT), 10);
3041-
FLOAT;
3040+
LOG(CAST(100 AS DOUBLE), 10);
3041+
DOUBLE;
30423042

30433043
# dialect: snowflake
30443044
POW(CAST(2 AS DECFLOAT), 3);
30453045
DECFLOAT;
30463046

30473047
# dialect: snowflake
3048-
POW(CAST(2 AS FLOAT), 3);
3049-
FLOAT;
3048+
POW(CAST(2 AS DOUBLE), 3);
3049+
DOUBLE;
30503050

30513051
# dialect: snowflake
30523052
SIN(CAST(1.5 AS DECFLOAT));
30533053
DECFLOAT;
30543054

30553055
# dialect: snowflake
3056-
SIN(CAST(1.5 AS FLOAT));
3057-
FLOAT;
3056+
SIN(CAST(1.5 AS DOUBLE));
3057+
DOUBLE;
30583058

30593059
# dialect: snowflake
30603060
COS(CAST(1.5 AS DECFLOAT));
30613061
DECFLOAT;
30623062

30633063
# dialect: snowflake
3064-
COS(CAST(1.5 AS FLOAT));
3065-
FLOAT;
3064+
COS(CAST(1.5 AS DOUBLE));
3065+
DOUBLE;
30663066

30673067
# dialect: snowflake
30683068
TAN(CAST(1.5 AS DECFLOAT));
30693069
DECFLOAT;
30703070

30713071
# dialect: snowflake
3072-
TAN(CAST(1.5 AS FLOAT));
3073-
FLOAT;
3072+
TAN(CAST(1.5 AS DOUBLE));
3073+
DOUBLE;
30743074

30753075
# dialect: snowflake
30763076
COT(CAST(1.5 AS DECFLOAT));
30773077
DECFLOAT;
30783078

30793079
# dialect: snowflake
3080-
COT(CAST(1.5 AS FLOAT));
3081-
FLOAT;
3080+
COT(CAST(1.5 AS DOUBLE));
3081+
DOUBLE;
30823082

30833083
# dialect: snowflake
30843084
ASIN(CAST(0.5 AS DECFLOAT));
30853085
DECFLOAT;
30863086

30873087
# dialect: snowflake
3088-
ASIN(CAST(0.5 AS FLOAT));
3089-
FLOAT;
3088+
ASIN(CAST(0.5 AS DOUBLE));
3089+
DOUBLE;
30903090

30913091
# dialect: snowflake
30923092
ACOS(CAST(0.5 AS DECFLOAT));
30933093
DECFLOAT;
30943094

30953095
# dialect: snowflake
3096-
ACOS(CAST(0.5 AS FLOAT));
3097-
FLOAT;
3096+
ACOS(CAST(0.5 AS DOUBLE));
3097+
DOUBLE;
30983098

30993099
# dialect: snowflake
31003100
ATAN(CAST(1 AS DECFLOAT));
31013101
DECFLOAT;
31023102

31033103
# dialect: snowflake
3104-
ATAN(CAST(1 AS FLOAT));
3105-
FLOAT;
3104+
ATAN(CAST(1 AS DOUBLE));
3105+
DOUBLE;
31063106

31073107
# dialect: snowflake
31083108
ATAN2(CAST(1 AS DECFLOAT), 1);
31093109
DECFLOAT;
31103110

31113111
# dialect: snowflake
3112-
ATAN2(CAST(1 AS FLOAT), 1);
3113-
FLOAT;
3112+
ATAN2(CAST(1 AS DOUBLE), 1);
3113+
DOUBLE;
31143114

31153115
# dialect: snowflake
31163116
DEGREES(CAST(3.14159 AS DECFLOAT));
31173117
DECFLOAT;
31183118

31193119
# dialect: snowflake
3120-
DEGREES(CAST(3.14159 AS FLOAT));
3121-
FLOAT;
3120+
DEGREES(CAST(3.14159 AS DOUBLE));
3121+
DOUBLE;
31223122

31233123
# dialect: snowflake
31243124
RADIANS(CAST(180 AS DECFLOAT));
31253125
DECFLOAT;
31263126

31273127
# dialect: snowflake
3128-
RADIANS(CAST(180 AS FLOAT));
3129-
FLOAT;
3128+
RADIANS(CAST(180 AS DOUBLE));
3129+
DOUBLE;
31303130

31313131
# dialect: snowflake
31323132
TANH(CAST(1 AS DECFLOAT));
31333133
DECFLOAT;
31343134

31353135
# dialect: snowflake
3136-
TANH(CAST(1 AS FLOAT));
3137-
FLOAT;
3136+
TANH(CAST(1 AS DOUBLE));
3137+
DOUBLE;
31383138

31393139
# dialect: snowflake
31403140
TO_DECFLOAT('123.456');

0 commit comments

Comments
 (0)