diff --git a/sqlglot/dialects/snowflake.py b/sqlglot/dialects/snowflake.py index d788210fd6..9304740dc4 100644 --- a/sqlglot/dialects/snowflake.py +++ b/sqlglot/dialects/snowflake.py @@ -566,6 +566,7 @@ class Snowflake(Dialect): exp.DataType.Type.DOUBLE: { *Dialect.TYPE_TO_EXPRESSIONS[exp.DataType.Type.DOUBLE], exp.Cot, + exp.Exp, exp.Sin, exp.Tan, }, diff --git a/tests/dialects/test_bigquery.py b/tests/dialects/test_bigquery.py index a61ea17a53..b03966142f 100644 --- a/tests/dialects/test_bigquery.py +++ b/tests/dialects/test_bigquery.py @@ -56,6 +56,7 @@ def test_bigquery(self): select_with_quoted_udf = self.validate_identity("SELECT `p.d.UdF`(data) FROM `p.d.t`") self.assertEqual(select_with_quoted_udf.selects[0].name, "p.d.UdF") + self.validate_identity("SELECT EXP(1)") self.validate_identity("DATE_TRUNC(x, @foo)").unit.assert_is(exp.Parameter) self.validate_identity("ARRAY_CONCAT_AGG(x ORDER BY ARRAY_LENGTH(x) LIMIT 2)") self.validate_identity("ARRAY_CONCAT_AGG(x LIMIT 2)") diff --git a/tests/dialects/test_databricks.py b/tests/dialects/test_databricks.py index 854e34ea7e..9a3e350940 100644 --- a/tests/dialects/test_databricks.py +++ b/tests/dialects/test_databricks.py @@ -11,6 +11,7 @@ def test_databricks(self): self.assertEqual(null_type.sql(), "NULL") self.assertEqual(null_type.sql("databricks"), "VOID") + self.validate_identity("SELECT EXP(1)") self.validate_identity("REGEXP_LIKE(x, y)") self.validate_identity("SELECT CAST(NULL AS VOID)") self.validate_identity("SELECT void FROM t") diff --git a/tests/dialects/test_duckdb.py b/tests/dialects/test_duckdb.py index 590d0f4979..d46a3d00fa 100644 --- a/tests/dialects/test_duckdb.py +++ b/tests/dialects/test_duckdb.py @@ -193,6 +193,7 @@ def test_duckdb(self): }, ) + self.validate_identity("SELECT EXP(1)") self.validate_identity("""SELECT '{"duck": [1, 2, 3]}' -> '$.duck[#-1]'""") self.validate_all( """SELECT JSON_EXTRACT('{"duck": [1, 2, 3]}', '/duck/0')""", diff --git a/tests/dialects/test_postgres.py b/tests/dialects/test_postgres.py index 8a7b39cb51..3e6685b385 100644 --- a/tests/dialects/test_postgres.py +++ b/tests/dialects/test_postgres.py @@ -8,6 +8,7 @@ class TestPostgres(Validator): dialect = "postgres" def test_postgres(self): + self.validate_identity("SELECT EXP(1)") self.validate_identity( "select count() OVER(partition by a order by a range offset preceding exclude current row)", "SELECT COUNT() OVER (PARTITION BY a ORDER BY a range BETWEEN offset preceding AND CURRENT ROW EXCLUDE CURRENT ROW)", diff --git a/tests/dialects/test_redshift.py b/tests/dialects/test_redshift.py index 16c9cd2e30..80acc606b5 100644 --- a/tests/dialects/test_redshift.py +++ b/tests/dialects/test_redshift.py @@ -326,6 +326,7 @@ def test_redshift(self): ) def test_identity(self): + self.validate_identity("SELECT EXP(1)") self.validate_identity("ALTER TABLE table_name ALTER COLUMN bla TYPE VARCHAR") self.validate_identity("SELECT CAST(value AS FLOAT(8))") self.validate_identity("1 div", "1 AS div") diff --git a/tests/dialects/test_snowflake.py b/tests/dialects/test_snowflake.py index fe4391a712..cffd1710f0 100644 --- a/tests/dialects/test_snowflake.py +++ b/tests/dialects/test_snowflake.py @@ -30,6 +30,7 @@ def test_snowflake(self): expr.selects[0].assert_is(exp.AggFunc) self.assertEqual(expr.sql(dialect="snowflake"), "SELECT APPROX_TOP_K(C4, 3, 5) FROM t") + self.validate_identity("SELECT EXP(1)") self.validate_identity("SELECT BIT_LENGTH('abc')") self.validate_identity("SELECT BIT_LENGTH(x'A1B2')") self.validate_identity("SELECT RTRIMMED_LENGTH(' ABCD ')") diff --git a/tests/dialects/test_tsql.py b/tests/dialects/test_tsql.py index baeb544958..407d37f96b 100644 --- a/tests/dialects/test_tsql.py +++ b/tests/dialects/test_tsql.py @@ -19,6 +19,7 @@ def test_tsql(self): # tsql allows .. which means use the default schema self.validate_identity("SELECT * FROM a..b") + self.validate_identity("SELECT EXP(1)") self.validate_identity("SELECT SYSDATETIMEOFFSET()") self.validate_identity("SELECT COMPRESS('Hello World')") self.validate_identity("GO").assert_is(exp.Command) diff --git a/tests/fixtures/optimizer/annotate_functions.sql b/tests/fixtures/optimizer/annotate_functions.sql index 343fd8ae45..4048bf8c82 100644 --- a/tests/fixtures/optimizer/annotate_functions.sql +++ b/tests/fixtures/optimizer/annotate_functions.sql @@ -1743,6 +1743,14 @@ INT; EDITDISTANCE('hello', 'world', 3); INT; +# dialect: snowflake +EXP(1); +DOUBLE; + +# dialect: snowflake +EXP(5.5); +DOUBLE; + # dialect: snowflake ENDSWITH('hello world', 'world'); BOOLEAN;