Skip to content

Commit 779fb5b

Browse files
authored
support final keyword for ClickHouse dialect (#765)
1 parent 2fee81c commit 779fb5b

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

pypika/dialects.py

+7
Original file line numberDiff line numberDiff line change
@@ -796,9 +796,14 @@ class ClickHouseQueryBuilder(QueryBuilder):
796796

797797
def __init__(self, **kwargs) -> None:
798798
super().__init__(**kwargs)
799+
self._final = False
799800
self._sample = None
800801
self._sample_offset = None
801802

803+
@builder
804+
def final(self) -> "ClickHouseQueryBuilder":
805+
self._final = True
806+
802807
@builder
803808
def sample(self, sample: int, offset: Optional[int] = None) -> "ClickHouseQueryBuilder":
804809
self._sample = sample
@@ -816,6 +821,8 @@ def _from_sql(self, with_namespace: bool = False, **kwargs: Any) -> str:
816821
if self._delete_from:
817822
return " {selectable} DELETE".format(selectable=selectable)
818823
clauses = [selectable]
824+
if self._final is not False:
825+
clauses.append("FINAL")
819826
if self._sample is not None:
820827
clauses.append(f"SAMPLE {self._sample}")
821828
if self._sample_offset is not None:

pypika/tests/dialects/test_clickhouse.py

+5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ def test_use_SAMPLE_with_offset_keyword(self):
2323
query = ClickHouseQuery.from_(t).select(t.foo).sample(10, 5)
2424
self.assertEqual(str(query), 'SELECT "foo" FROM "abc" SAMPLE 10 OFFSET 5')
2525

26+
def test_use_FINAL_keyword(self):
27+
t = Table('abc')
28+
query = ClickHouseQuery.from_(t).select(t.foo).final()
29+
self.assertEqual(str(query), 'SELECT "foo" FROM "abc" FINAL')
30+
2631

2732
class ClickHouseDeleteTests(TestCase):
2833
table_abc = Table("abc")

0 commit comments

Comments
 (0)