diff --git a/sqlglot/dialects/snowflake.py b/sqlglot/dialects/snowflake.py index 9304740dc4..51906354a2 100644 --- a/sqlglot/dialects/snowflake.py +++ b/sqlglot/dialects/snowflake.py @@ -565,6 +565,7 @@ class Snowflake(Dialect): **Dialect.TYPE_TO_EXPRESSIONS, exp.DataType.Type.DOUBLE: { *Dialect.TYPE_TO_EXPRESSIONS[exp.DataType.Type.DOUBLE], + exp.Cosh, exp.Cot, exp.Exp, exp.Sin, diff --git a/sqlglot/expressions.py b/sqlglot/expressions.py index 461edfda06..3ad3870cfc 100644 --- a/sqlglot/expressions.py +++ b/sqlglot/expressions.py @@ -5553,6 +5553,10 @@ class Tan(Func): pass +class Cosh(Func): + pass + + class CosineDistance(Func): arg_types = {"this": True, "expression": True} diff --git a/tests/dialects/test_bigquery.py b/tests/dialects/test_bigquery.py index b03966142f..444362eabe 100644 --- a/tests/dialects/test_bigquery.py +++ b/tests/dialects/test_bigquery.py @@ -2109,6 +2109,7 @@ def test_ml_functions(self): self.validate_identity( "SELECT * FROM ML.PREDICT(MODEL mydataset.mymodel, (SELECT custom_label, column1, column2 FROM mydataset.mytable), STRUCT(0.55 AS threshold))" ) + self.validate_identity("SELECT COSH(1.5)") self.validate_identity( "SELECT * FROM ML.PREDICT(MODEL `my_project`.my_dataset.my_model, (SELECT * FROM input_data))" ) diff --git a/tests/dialects/test_databricks.py b/tests/dialects/test_databricks.py index 9a3e350940..aa52d260ea 100644 --- a/tests/dialects/test_databricks.py +++ b/tests/dialects/test_databricks.py @@ -7,6 +7,7 @@ class TestDatabricks(Validator): dialect = "databricks" def test_databricks(self): + self.validate_identity("SELECT COSH(1.5)") null_type = exp.DataType.build("VOID", dialect="databricks") self.assertEqual(null_type.sql(), "NULL") self.assertEqual(null_type.sql("databricks"), "VOID") diff --git a/tests/dialects/test_duckdb.py b/tests/dialects/test_duckdb.py index d46a3d00fa..73e0f4efd6 100644 --- a/tests/dialects/test_duckdb.py +++ b/tests/dialects/test_duckdb.py @@ -9,6 +9,7 @@ class TestDuckDB(Validator): dialect = "duckdb" def test_duckdb(self): + self.validate_identity("SELECT COSH(1.5)") with self.assertRaises(ParseError): parse_one("1 //", read="duckdb") diff --git a/tests/dialects/test_postgres.py b/tests/dialects/test_postgres.py index 3e6685b385..394c5dc4be 100644 --- a/tests/dialects/test_postgres.py +++ b/tests/dialects/test_postgres.py @@ -8,11 +8,6 @@ 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)", - ) expr = self.parse_one("SELECT * FROM r CROSS JOIN LATERAL UNNEST(ARRAY[1]) AS s(location)") unnest = expr.args["joins"][0].this.this unnest.assert_is(exp.Unnest) @@ -27,6 +22,8 @@ def test_postgres(self): expected_sql = "ARRAY[\n x" + (",\n x" * 27) + "\n]" self.validate_identity(sql, expected_sql, pretty=True) + self.validate_identity("SELECT COSH(1.5)") + self.validate_identity("SELECT EXP(1)") self.validate_identity("SELECT ST_DISTANCE(gg1, gg2, FALSE) AS sphere_dist") self.validate_identity("SHA384(x)") self.validate_identity("1.x", "1. AS x") @@ -162,6 +159,10 @@ def test_postgres(self): "pg_catalog.PG_TABLE_IS_VISIBLE(c.oid) " "ORDER BY 2, 3" ) + 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)", + ) self.validate_identity( "x::JSON -> 'duration' ->> -1", "JSON_EXTRACT_PATH_TEXT(CAST(x AS JSON) -> 'duration', -1)", diff --git a/tests/dialects/test_redshift.py b/tests/dialects/test_redshift.py index 80acc606b5..de855283f6 100644 --- a/tests/dialects/test_redshift.py +++ b/tests/dialects/test_redshift.py @@ -6,6 +6,7 @@ class TestRedshift(Validator): dialect = "redshift" def test_redshift(self): + self.validate_identity("SELECT COSH(1.5)") self.validate_all( "SELECT SPLIT_TO_ARRAY('12,345,6789')", write={ diff --git a/tests/dialects/test_snowflake.py b/tests/dialects/test_snowflake.py index cffd1710f0..36e4bef47d 100644 --- a/tests/dialects/test_snowflake.py +++ b/tests/dialects/test_snowflake.py @@ -50,6 +50,7 @@ def test_snowflake(self): self.validate_identity("SELECT SOUNDEX_P123(column_name)") self.validate_identity("SELECT ABS(x)") self.validate_identity("SELECT SIGN(x)") + self.validate_identity("SELECT COSH(1.5)") self.validate_identity("SELECT JAROWINKLER_SIMILARITY('hello', 'world')") self.validate_identity("SELECT TRANSLATE(column_name, 'abc', '123')") self.validate_identity("SELECT UNICODE(column_name)") diff --git a/tests/fixtures/optimizer/annotate_functions.sql b/tests/fixtures/optimizer/annotate_functions.sql index 4048bf8c82..55b86ce56d 100644 --- a/tests/fixtures/optimizer/annotate_functions.sql +++ b/tests/fixtures/optimizer/annotate_functions.sql @@ -1631,6 +1631,10 @@ VARCHAR; COLLATE('hello', 'utf8'); VARCHAR; +# dialect: snowflake +COSH(1.5); +DOUBLE; + # dialect: snowflake COMPRESS('Hello World', 'SNAPPY'); BINARY;