Skip to content

Commit 80a4863

Browse files
feat(optimizer)!: annotate type for Snowflake EXP function
1 parent bced710 commit 80a4863

File tree

9 files changed

+18
-0
lines changed

9 files changed

+18
-0
lines changed

sqlglot/dialects/snowflake.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,9 @@ class Snowflake(Dialect):
608608
exp.ParseUrl,
609609
exp.ParseIp,
610610
},
611+
exp.DataType.Type.FLOAT: {
612+
exp.Exp,
613+
},
611614
}
612615

613616
ANNOTATORS = {

tests/dialects/test_bigquery.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ def test_bigquery(self):
5656
select_with_quoted_udf = self.validate_identity("SELECT `p.d.UdF`(data) FROM `p.d.t`")
5757
self.assertEqual(select_with_quoted_udf.selects[0].name, "p.d.UdF")
5858

59+
self.validate_identity("SELECT EXP(1)")
5960
self.validate_identity("DATE_TRUNC(x, @foo)").unit.assert_is(exp.Parameter)
6061
self.validate_identity("ARRAY_CONCAT_AGG(x ORDER BY ARRAY_LENGTH(x) LIMIT 2)")
6162
self.validate_identity("ARRAY_CONCAT_AGG(x LIMIT 2)")

tests/dialects/test_databricks.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ def test_databricks(self):
1111
self.assertEqual(null_type.sql(), "NULL")
1212
self.assertEqual(null_type.sql("databricks"), "VOID")
1313

14+
self.validate_identity("SELECT EXP(1)")
1415
self.validate_identity("REGEXP_LIKE(x, y)")
1516
self.validate_identity("SELECT CAST(NULL AS VOID)")
1617
self.validate_identity("SELECT void FROM t")

tests/dialects/test_duckdb.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ def test_duckdb(self):
193193
},
194194
)
195195

196+
self.validate_identity("SELECT EXP(1)")
196197
self.validate_identity("""SELECT '{"duck": [1, 2, 3]}' -> '$.duck[#-1]'""")
197198
self.validate_all(
198199
"""SELECT JSON_EXTRACT('{"duck": [1, 2, 3]}', '/duck/0')""",

tests/dialects/test_postgres.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ class TestPostgres(Validator):
88
dialect = "postgres"
99

1010
def test_postgres(self):
11+
self.validate_identity("SELECT EXP(1)")
1112
self.validate_identity(
1213
"select count() OVER(partition by a order by a range offset preceding exclude current row)",
1314
"SELECT COUNT() OVER (PARTITION BY a ORDER BY a range BETWEEN offset preceding AND CURRENT ROW EXCLUDE CURRENT ROW)",

tests/dialects/test_redshift.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ def test_redshift(self):
326326
)
327327

328328
def test_identity(self):
329+
self.validate_identity("SELECT EXP(1)")
329330
self.validate_identity("ALTER TABLE table_name ALTER COLUMN bla TYPE VARCHAR")
330331
self.validate_identity("SELECT CAST(value AS FLOAT(8))")
331332
self.validate_identity("1 div", "1 AS div")

tests/dialects/test_snowflake.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def test_snowflake(self):
2929
expr.selects[0].assert_is(exp.AggFunc)
3030
self.assertEqual(expr.sql(dialect="snowflake"), "SELECT APPROX_TOP_K(C4, 3, 5) FROM t")
3131

32+
self.validate_identity("SELECT EXP(1)")
3233
self.validate_identity("SELECT BIT_LENGTH('abc')")
3334
self.validate_identity("SELECT BIT_LENGTH(x'A1B2')")
3435
self.validate_identity("SELECT RTRIMMED_LENGTH(' ABCD ')")

tests/dialects/test_tsql.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ def test_tsql(self):
1919
# tsql allows .. which means use the default schema
2020
self.validate_identity("SELECT * FROM a..b")
2121

22+
self.validate_identity("SELECT EXP(1)")
2223
self.validate_identity("SELECT SYSDATETIMEOFFSET()")
2324
self.validate_identity("SELECT COMPRESS('Hello World')")
2425
self.validate_identity("GO").assert_is(exp.Command)

tests/fixtures/optimizer/annotate_functions.sql

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1715,6 +1715,14 @@ INT;
17151715
EDITDISTANCE('hello', 'world', 3);
17161716
INT;
17171717

1718+
# dialect: snowflake
1719+
EXP(1);
1720+
FLOAT;
1721+
1722+
# dialect: snowflake
1723+
EXP(5.5);
1724+
FLOAT;
1725+
17181726
# dialect: snowflake
17191727
ENDSWITH('hello world', 'world');
17201728
BOOLEAN;

0 commit comments

Comments
 (0)