From b1170ddfb00f0c41e37cb021d6c03454acc2663f Mon Sep 17 00:00:00 2001 From: Guillaume Tassery Date: Wed, 18 Oct 2023 11:19:23 +0700 Subject: [PATCH] support final keyword for ClickHouse dialect --- pypika/dialects.py | 7 +++++++ pypika/tests/dialects/test_clickhouse.py | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/pypika/dialects.py b/pypika/dialects.py index 8894e562..909d057b 100644 --- a/pypika/dialects.py +++ b/pypika/dialects.py @@ -783,9 +783,14 @@ class ClickHouseQueryBuilder(QueryBuilder): def __init__(self, **kwargs) -> None: super().__init__(**kwargs) + self._final = False self._sample = None self._sample_offset = None + @builder + def final(self) -> "ClickHouseQueryBuilder": + self._final = True + @builder def sample(self, sample: int, offset: Optional[int] = None) -> "ClickHouseQueryBuilder": self._sample = sample @@ -803,6 +808,8 @@ def _from_sql(self, with_namespace: bool = False, **kwargs: Any) -> str: if self._delete_from: return " {selectable} DELETE".format(selectable=selectable) clauses = [selectable] + if self._final is not False: + clauses.append("FINAL") if self._sample is not None: clauses.append(f"SAMPLE {self._sample}") if self._sample_offset is not None: diff --git a/pypika/tests/dialects/test_clickhouse.py b/pypika/tests/dialects/test_clickhouse.py index 8da62701..62afd7c2 100644 --- a/pypika/tests/dialects/test_clickhouse.py +++ b/pypika/tests/dialects/test_clickhouse.py @@ -23,6 +23,11 @@ def test_use_SAMPLE_with_offset_keyword(self): query = ClickHouseQuery.from_(t).select(t.foo).sample(10, 5) self.assertEqual(str(query), 'SELECT "foo" FROM "abc" SAMPLE 10 OFFSET 5') + def test_use_FINAL_keyword(self): + t = Table('abc') + query = ClickHouseQuery.from_(t).select(t.foo).final() + self.assertEqual(str(query), 'SELECT "foo" FROM "abc" FINAL') + class ClickHouseDeleteTests(TestCase): table_abc = Table("abc")