From 486895eaf0100756c72d12debb9e7e92ec54b85f Mon Sep 17 00:00:00 2001 From: Rene Date: Thu, 22 Oct 2026 08:45:23 +0200 Subject: [PATCH] fix: raise CompileError on unsupported TIME type compilation (#79) --- databend_sqlalchemy/databend_dialect.py | 6 ++++-- databend_sqlalchemy/requirements.py | 4 ++-- tests/unit/test_databend_dialect.py | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/databend_sqlalchemy/databend_dialect.py b/databend_sqlalchemy/databend_dialect.py index 9af3ef3..3ecc5b4 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, @@ -1273,7 +1273,9 @@ def visit_JSON(self, type_, **kw): return "JSON" # or VARIANT def visit_TIME(self, type_, **kw): - return "DATETIME" + raise CompileError( + "Databend does not support the TIME data type; consider using TIMESTAMP or VARCHAR." + ) def visit_INTERVAL(self, type, **kw): return "INTERVAL" diff --git a/databend_sqlalchemy/requirements.py b/databend_sqlalchemy/requirements.py index acee519..de0aae7 100644 --- a/databend_sqlalchemy/requirements.py +++ b/databend_sqlalchemy/requirements.py @@ -143,14 +143,14 @@ def time(self): """target dialect supports representation of Python datetime.time() objects.""" - return exclusions.open() + return exclusions.closed() @property def time_microseconds(self): """target dialect supports representation of Python datetime.time() with microsecond objects.""" - return exclusions.open() + return exclusions.closed() @property def time_timezone(self): diff --git a/tests/unit/test_databend_dialect.py b/tests/unit/test_databend_dialect.py index 122e037..69417cc 100644 --- a/tests/unit/test_databend_dialect.py +++ b/tests/unit/test_databend_dialect.py @@ -258,3 +258,17 @@ 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_visit_time_raises_compile_error(): + import pytest + from sqlalchemy import Column, MetaData, Table, Time + from sqlalchemy.exc import CompileError + from sqlalchemy.schema import CreateTable + + dialect = databend_sqlalchemy.databend_dialect.DatabendDialect() + metadata = MetaData() + table = Table("probe", metadata, Column("clock", Time())) + + with pytest.raises(CompileError, match="does not support the TIME data type"): + CreateTable(table).compile(dialect=dialect)