summaryrefslogtreecommitdiffstats
path: root/tests/dialects/test_clickhouse.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-10-22 17:00:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-10-22 17:00:13 +0000
commit0eb41e161f19d59c03217bb9aa9d303b2e68a154 (patch)
tree4c03442c62e3312bb434055848a795be401dcc3a /tests/dialects/test_clickhouse.py
parentAdding upstream version 25.24.5. (diff)
downloadsqlglot-upstream.tar.xz
sqlglot-upstream.zip
Adding upstream version 25.26.0.upstream/25.26.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/dialects/test_clickhouse.py')
-rw-r--r--tests/dialects/test_clickhouse.py40
1 files changed, 35 insertions, 5 deletions
diff --git a/tests/dialects/test_clickhouse.py b/tests/dialects/test_clickhouse.py
index b4fc587..56ff06f 100644
--- a/tests/dialects/test_clickhouse.py
+++ b/tests/dialects/test_clickhouse.py
@@ -2,6 +2,7 @@ from datetime import date
from sqlglot import exp, parse_one
from sqlglot.dialects import ClickHouse
from sqlglot.expressions import convert
+from sqlglot.optimizer import traverse_scope
from tests.dialects.test_dialect import Validator
from sqlglot.errors import ErrorLevel
@@ -28,6 +29,7 @@ class TestClickhouse(Validator):
self.assertEqual(expr.sql(dialect="clickhouse"), "COUNT(x)")
self.assertIsNone(expr._meta)
+ self.validate_identity("CAST(1 AS Bool)")
self.validate_identity("SELECT toString(CHAR(104.1, 101, 108.9, 108.9, 111, 32))")
self.validate_identity("@macro").assert_is(exp.Parameter).this.assert_is(exp.Var)
self.validate_identity("SELECT toFloat(like)")
@@ -420,11 +422,6 @@ class TestClickhouse(Validator):
" GROUP BY loyalty ORDER BY loyalty ASC"
},
)
- self.validate_identity("SELECT s, arr FROM arrays_test ARRAY JOIN arr")
- self.validate_identity("SELECT s, arr, a FROM arrays_test LEFT ARRAY JOIN arr AS a")
- self.validate_identity(
- "SELECT s, arr_external FROM arrays_test ARRAY JOIN [1, 2, 3] AS arr_external"
- )
self.validate_all(
"SELECT quantile(0.5)(a)",
read={"duckdb": "SELECT quantile(a, 0.5)"},
@@ -1100,3 +1097,36 @@ LIFETIME(MIN 0 MAX 0)""",
def test_grant(self):
self.validate_identity("GRANT SELECT(x, y) ON db.table TO john WITH GRANT OPTION")
self.validate_identity("GRANT INSERT(x, y) ON db.table TO john")
+
+ def test_array_join(self):
+ expr = self.validate_identity(
+ "SELECT * FROM arrays_test ARRAY JOIN arr1, arrays_test.arr2 AS foo, ['a', 'b', 'c'] AS elem"
+ )
+ joins = expr.args["joins"]
+ self.assertEqual(len(joins), 1)
+
+ join = joins[0]
+ self.assertEqual(join.kind, "ARRAY")
+ self.assertIsInstance(join.this, exp.Column)
+
+ self.assertEqual(len(join.expressions), 2)
+ self.assertIsInstance(join.expressions[0], exp.Alias)
+ self.assertIsInstance(join.expressions[0].this, exp.Column)
+
+ self.assertIsInstance(join.expressions[1], exp.Alias)
+ self.assertIsInstance(join.expressions[1].this, exp.Array)
+
+ self.validate_identity("SELECT s, arr FROM arrays_test ARRAY JOIN arr")
+ self.validate_identity("SELECT s, arr, a FROM arrays_test LEFT ARRAY JOIN arr AS a")
+ self.validate_identity(
+ "SELECT s, arr_external FROM arrays_test ARRAY JOIN [1, 2, 3] AS arr_external"
+ )
+ self.validate_identity(
+ "SELECT * FROM arrays_test ARRAY JOIN [1, 2, 3] AS arr_external1, ['a', 'b', 'c'] AS arr_external2, splitByString(',', 'asd,qwerty,zxc') AS arr_external3"
+ )
+
+ def test_traverse_scope(self):
+ sql = "SELECT * FROM t FINAL"
+ scopes = traverse_scope(parse_one(sql, dialect=self.dialect))
+ self.assertEqual(len(scopes), 1)
+ self.assertEqual(set(scopes[0].sources), {"t"})