From b78e2de2884bc6021c909c0e6334f9359d29c4a5 Mon Sep 17 00:00:00 2001 From: Rene Date: Wed, 21 Oct 2026 14:40:37 +0200 Subject: [PATCH] fix: raise CompileError on Index.create and drop instead of silent no-op (#78) --- databend_sqlalchemy/databend_dialect.py | 10 +++++++--- tests/unit/test_databend_dialect.py | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/databend_sqlalchemy/databend_dialect.py b/databend_sqlalchemy/databend_dialect.py index 9af3ef3..610874e 100644 --- a/databend_sqlalchemy/databend_dialect.py +++ b/databend_sqlalchemy/databend_dialect.py @@ -71,7 +71,7 @@ from .types import DOUBLE from sqlalchemy.engine import ExecutionContext, default -from sqlalchemy.exc import DBAPIError, NoSuchTableError +from sqlalchemy.exc import DBAPIError, NoSuchTableError, CompileError from .dml import ( Merge, @@ -1316,10 +1316,14 @@ def create_table_constraints( def visit_create_index( self, create, include_schema=False, include_table_schema=True, **kw ): - return "" + raise CompileError( + "Databend does not support standard secondary indexes; consider CLUSTER BY or INVERTED INDEX." + ) def visit_drop_index(self, drop, **kw): - return "" + raise CompileError( + "Databend does not support standard secondary indexes." + ) def visit_drop_schema(self, drop, **kw): # Override - Databend does not support the CASCADE option diff --git a/tests/unit/test_databend_dialect.py b/tests/unit/test_databend_dialect.py index 122e037..c8b1c04 100644 --- a/tests/unit/test_databend_dialect.py +++ b/tests/unit/test_databend_dialect.py @@ -258,3 +258,21 @@ def test_datetime_result_processor_timezone_handling(): process_tz = DatabendDateTime(timezone=True).result_processor(None, None) assert process_tz(aware_utc) == aware_utc assert process_tz(aware_utc).tzinfo is not None + + +def test_create_and_drop_index_raises_compile_error(): + import pytest + from sqlalchemy import MetaData, Table, Column, Integer, Index + from sqlalchemy.schema import CreateIndex, DropIndex + from sqlalchemy.exc import CompileError + + d = databend_sqlalchemy.databend_dialect.DatabendDialect() + m = MetaData() + t = Table("t", m, Column("id", Integer), Column("x", Integer)) + ix = Index("ix_t_x", t.c.x) + + with pytest.raises(CompileError, match="does not support"): + CreateIndex(ix).compile(dialect=d) + + with pytest.raises(CompileError, match="does not support"): + DropIndex(ix).compile(dialect=d)