You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2026/07/07 23:40:12 UTC
(superset) 01/01: fix(clickhouse): use equality for boolean filters instead of IS
This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a commit to branch fix/issue-33235-clickhouse-boolean-equality
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 5147a6423249e970864eb7d540196166e098af2e
Author: Evan Rusackas <ev...@rusackas.com>
AuthorDate: Tue Jul 7 16:38:46 2026 -0700
fix(clickhouse): use equality for boolean filters instead of IS
ClickHouse rejects the `column IS true/false` syntax that Superset
generates for boolean filters, producing queries like
`WHERE is_cancelled IS false` that fail to execute.
Set `use_equality_for_boolean_filters = True` on
`ClickHouseBaseEngineSpec` so boolean filters render as
`= true`/`= false`, reusing the engine-spec toggle already added for
Snowflake in #34199 (also used by Athena and Presto).
Fixes #33235
Co-Authored-By: Claude Sonnet 5 <no...@anthropic.com>
---
superset/db_engine_specs/clickhouse.py | 3 ++
.../unit_tests/db_engine_specs/test_clickhouse.py | 40 ++++++++++++++++++++++
2 files changed, 43 insertions(+)
diff --git a/superset/db_engine_specs/clickhouse.py b/superset/db_engine_specs/clickhouse.py
index a998dce75e5..ae200ce831a 100644
--- a/superset/db_engine_specs/clickhouse.py
+++ b/superset/db_engine_specs/clickhouse.py
@@ -56,6 +56,9 @@ class ClickHouseBaseEngineSpec(BaseEngineSpec):
time_groupby_inline = True
supports_multivalues_insert = True
+ # ClickHouse doesn't support IS true/false syntax, use = true/false instead
+ use_equality_for_boolean_filters = True
+
_time_grain_expressions = {
None: "{col}",
"PT1M": "toStartOfMinute(toDateTime({col}))",
diff --git a/tests/unit_tests/db_engine_specs/test_clickhouse.py b/tests/unit_tests/db_engine_specs/test_clickhouse.py
index 5f56554e82d..9706d5bf4fc 100644
--- a/tests/unit_tests/db_engine_specs/test_clickhouse.py
+++ b/tests/unit_tests/db_engine_specs/test_clickhouse.py
@@ -233,3 +233,43 @@ def test_adjust_engine_params_fully_qualified(
uri = spec.adjust_engine_params(url, {}, None, schema)[0]
assert str(uri) == expected_result
+
+
+def test_handle_boolean_filter() -> None:
+ """
+ Test that ClickHouse uses equality operators for boolean filters instead of IS.
+
+ ClickHouse rejects the ``column IS true/false`` form, so boolean filters must
+ render as ``column = true/false``.
+ """
+ from sqlalchemy import Boolean, Column
+
+ from superset.db_engine_specs.clickhouse import ClickHouseBaseEngineSpec
+ from superset.utils.core import FilterOperator
+
+ bool_col = Column("test_col", Boolean)
+
+ result_true = ClickHouseBaseEngineSpec.handle_boolean_filter(
+ bool_col, FilterOperator.IS_TRUE, True
+ )
+ assert (
+ str(result_true.compile(compile_kwargs={"literal_binds": True}))
+ == "test_col = true"
+ )
+
+ result_false = ClickHouseBaseEngineSpec.handle_boolean_filter(
+ bool_col, FilterOperator.IS_FALSE, False
+ )
+ assert (
+ str(result_false.compile(compile_kwargs={"literal_binds": True}))
+ == "test_col = false"
+ )
+
+
+def test_use_equality_for_boolean_filters_property() -> None:
+ """
+ Test that ClickHouse has the use_equality_for_boolean_filters property set.
+ """
+ from superset.db_engine_specs.clickhouse import ClickHouseBaseEngineSpec
+
+ assert ClickHouseBaseEngineSpec.use_equality_for_boolean_filters is True