Skip to content

Commit 534f882

Browse files
committed
Refactor(clickhouse): clean up chr, lag, lead generation
1 parent 143f176 commit 534f882

File tree

3 files changed

+23
-26
lines changed

3 files changed

+23
-26
lines changed

sqlglot/dialects/clickhouse.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -887,13 +887,10 @@ class Generator(generator.Generator):
887887
exp.Stddev: rename_func("stddevSamp"),
888888
exp.Chr: lambda self, e: self.func("char", e.this),
889889
exp.Lag: lambda self, e: self.func(
890-
"lagInFrame", e.this, e.args["offset"], e.args["default"]
890+
"lagInFrame", e.this, e.args.get("offset"), e.args.get("default")
891891
),
892892
exp.Lead: lambda self, e: self.func(
893-
"leadInFrame",
894-
e.this,
895-
e.args["offset"],
896-
e.args["default"],
893+
"leadInFrame", e.this, e.args.get("offset"), e.args.get("default")
897894
),
898895
}
899896

tests/dialects/test_clickhouse.py

+21
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,27 @@ def test_clickhouse(self):
159159
"SELECT SUM(1) AS impressions FROM (SELECT ['Istanbul', 'Berlin', 'Bobruisk'] AS cities) WHERE arrayJoin(cities) IN ('Istanbul', 'Berlin')",
160160
)
161161

162+
self.validate_all(
163+
"char(67) || char(65) || char(84)",
164+
read={
165+
"clickhouse": "char(67) || char(65) || char(84)",
166+
"oracle": "chr(67) || chr(65) || chr(84)",
167+
},
168+
)
169+
self.validate_all(
170+
"SELECT lagInFrame(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal FROM employees",
171+
read={
172+
"clickhouse": "SELECT lagInFrame(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal FROM employees",
173+
"oracle": "SELECT LAG(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal FROM employees",
174+
},
175+
)
176+
self.validate_all(
177+
"SELECT leadInFrame(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal FROM employees",
178+
read={
179+
"clickhouse": "SELECT leadInFrame(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal FROM employees",
180+
"oracle": "SELECT LEAD(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal FROM employees",
181+
},
182+
)
162183
self.validate_all(
163184
"SELECT CAST(STR_TO_DATE('05 12 2000', '%d %m %Y') AS DATE)",
164185
read={

tests/test_transpile.py

-21
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from unittest import mock
44

55
from sqlglot import parse_one, transpile
6-
from sqlglot.dialects import Oracle, ClickHouse
76
from sqlglot.errors import ErrorLevel, ParseError, UnsupportedError
87
from sqlglot.helper import logger as helper_logger
98
from sqlglot.parser import logger as parser_logger
@@ -22,26 +21,6 @@ class TestTranspile(unittest.TestCase):
2221
def validate(self, sql, target, **kwargs):
2322
self.assertEqual(transpile(sql, **kwargs)[0], target)
2423

25-
def test_functions(self):
26-
self.validate(
27-
'SELECT CHR(67)||CHR(65)||CHR(84) "Dog" FROM DUAL',
28-
'SELECT char(67) || char(65) || char(84) AS "Dog" FROM DUAL',
29-
read=Oracle,
30-
write=ClickHouse,
31-
)
32-
self.validate(
33-
"SELECT LAG(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal FROM employees",
34-
"SELECT lagInFrame(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal FROM employees",
35-
read=Oracle,
36-
write=ClickHouse,
37-
)
38-
self.validate(
39-
"SELECT LEAD(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal FROM employees",
40-
"SELECT leadInFrame(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal FROM employees",
41-
read=Oracle,
42-
write=ClickHouse,
43-
)
44-
4524
def test_weird_chars(self):
4625
self.assertEqual(transpile("0Êß")[0], "0 AS Êß")
4726

0 commit comments

Comments
 (0)