From 0474fe32ebfd8f30589ba4841aaa42031bf07fb7 Mon Sep 17 00:00:00 2001 From: Mandy Alimaa Date: Mon, 27 Jul 2026 11:34:01 -0500 Subject: [PATCH 1/4] feat: add configurable DML row counts and skip disabled features instead of strict xfails --- adbc_drivers_validation/model.py | 2 ++ adbc_drivers_validation/tests/connection.py | 2 +- adbc_drivers_validation/tests/statement.py | 21 +++++++++++++-------- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/adbc_drivers_validation/model.py b/adbc_drivers_validation/model.py index 9c81743..0515ab5 100644 --- a/adbc_drivers_validation/model.py +++ b/adbc_drivers_validation/model.py @@ -133,6 +133,8 @@ class DriverFeatures(BaseModel): statement_get_parameter_schema: bool = Field(default=False) statement_prepare: bool = Field(default=False) statement_rows_affected: bool = Field(default=False) + # Some backends report zero for every ordinary DML statement (ex: Databend) + statement_rows_affected_dml_returns_zero: bool = Field(default=False) statement_rows_affected_ddl: bool = Field(default=False) _current_catalog: str | FromEnv | None = PrivateAttr(default=None) _current_schema: str | FromEnv | None = PrivateAttr(default=None) diff --git a/adbc_drivers_validation/tests/connection.py b/adbc_drivers_validation/tests/connection.py index 7cf7835..53276cd 100644 --- a/adbc_drivers_validation/tests/connection.py +++ b/adbc_drivers_validation/tests/connection.py @@ -103,7 +103,7 @@ def generate_tests( elif not f.get_objects and metafunc.definition.name.startswith( "test_get_objects_" ): - marks.append(pytest.mark.xfail(reason="not implemented")) + marks.append(pytest.mark.skip(reason="not implemented")) combinations.append(pytest.param(driver_param, id=driver_param, marks=marks)) metafunc.parametrize( diff --git a/adbc_drivers_validation/tests/statement.py b/adbc_drivers_validation/tests/statement.py index 01fe590..b703dba 100644 --- a/adbc_drivers_validation/tests/statement.py +++ b/adbc_drivers_validation/tests/statement.py @@ -59,11 +59,7 @@ def generate_tests( metafunc.definition.name == "test_prepare" and not quirks.features.statement_prepare ): - marks.append( - pytest.mark.xfail( - raises=adbc_driver_manager.dbapi.NotSupportedError, strict=True - ) - ) + marks.append(pytest.mark.skip("prepare not supported")) combinations.append(pytest.param(driver_param, id=driver_param, marks=marks)) @@ -249,7 +245,10 @@ def test_rows_affected( ) rows_affected = cursor.adbc_statement.execute_update() if driver.features.statement_rows_affected: - assert rows_affected == 1 + if driver.features.statement_rows_affected_dml_returns_zero: + assert rows_affected == 0 + else: + assert rows_affected == 1 else: assert rows_affected == -1 @@ -258,7 +257,10 @@ def test_rows_affected( ) rows_affected = cursor.adbc_statement.execute_update() if driver.features.statement_rows_affected: - assert rows_affected == 1 + if driver.features.statement_rows_affected_dml_returns_zero: + assert rows_affected == 0 + else: + assert rows_affected == 1 else: assert rows_affected == -1 @@ -267,7 +269,10 @@ def test_rows_affected( ) rows_affected = cursor.adbc_statement.execute_update() if driver.features.statement_rows_affected: - assert rows_affected == 1 + if driver.features.statement_rows_affected_dml_returns_zero: + assert rows_affected == 0 + else: + assert rows_affected == 1 else: assert rows_affected == -1 From ea00f3044974a28d0d78f18b5974840ea9f4c9d3 Mon Sep 17 00:00:00 2001 From: Mandy Alimaa Date: Mon, 27 Jul 2026 12:13:25 -0500 Subject: [PATCH 2/4] cleanup --- adbc_drivers_validation/tests/statement.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/adbc_drivers_validation/tests/statement.py b/adbc_drivers_validation/tests/statement.py index b703dba..5adbf21 100644 --- a/adbc_drivers_validation/tests/statement.py +++ b/adbc_drivers_validation/tests/statement.py @@ -59,7 +59,11 @@ def generate_tests( metafunc.definition.name == "test_prepare" and not quirks.features.statement_prepare ): - marks.append(pytest.mark.skip("prepare not supported")) + marks.append( + pytest.mark.xfail( + raises=adbc_driver_manager.dbapi.NotSupportedError, strict=True + ) + ) combinations.append(pytest.param(driver_param, id=driver_param, marks=marks)) From 6fcf9d53a7921595557ac865fa417119eb86f27f Mon Sep 17 00:00:00 2001 From: Mandy Alimaa Date: Tue, 28 Jul 2026 11:32:48 -0500 Subject: [PATCH 3/4] rename the dml row counts to quirk --- adbc_drivers_validation/model.py | 2 +- adbc_drivers_validation/tests/statement.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/adbc_drivers_validation/model.py b/adbc_drivers_validation/model.py index 0515ab5..91b8bc2 100644 --- a/adbc_drivers_validation/model.py +++ b/adbc_drivers_validation/model.py @@ -134,7 +134,7 @@ class DriverFeatures(BaseModel): statement_prepare: bool = Field(default=False) statement_rows_affected: bool = Field(default=False) # Some backends report zero for every ordinary DML statement (ex: Databend) - statement_rows_affected_dml_returns_zero: bool = Field(default=False) + quirk_statement_rows_affected_dml_returns_zero: bool = Field(default=False) statement_rows_affected_ddl: bool = Field(default=False) _current_catalog: str | FromEnv | None = PrivateAttr(default=None) _current_schema: str | FromEnv | None = PrivateAttr(default=None) diff --git a/adbc_drivers_validation/tests/statement.py b/adbc_drivers_validation/tests/statement.py index 5adbf21..8e3e07f 100644 --- a/adbc_drivers_validation/tests/statement.py +++ b/adbc_drivers_validation/tests/statement.py @@ -249,7 +249,7 @@ def test_rows_affected( ) rows_affected = cursor.adbc_statement.execute_update() if driver.features.statement_rows_affected: - if driver.features.statement_rows_affected_dml_returns_zero: + if driver.features.quirk_statement_rows_affected_dml_returns_zero: assert rows_affected == 0 else: assert rows_affected == 1 @@ -261,7 +261,7 @@ def test_rows_affected( ) rows_affected = cursor.adbc_statement.execute_update() if driver.features.statement_rows_affected: - if driver.features.statement_rows_affected_dml_returns_zero: + if driver.features.quirk_statement_rows_affected_dml_returns_zero: assert rows_affected == 0 else: assert rows_affected == 1 @@ -273,7 +273,7 @@ def test_rows_affected( ) rows_affected = cursor.adbc_statement.execute_update() if driver.features.statement_rows_affected: - if driver.features.statement_rows_affected_dml_returns_zero: + if driver.features.quirk_statement_rows_affected_dml_returns_zero: assert rows_affected == 0 else: assert rows_affected == 1 From 9dc489b2107ef0228698113d2686c11f571151ed Mon Sep 17 00:00:00 2001 From: Mandy Alimaa Date: Tue, 28 Jul 2026 11:35:20 -0500 Subject: [PATCH 4/4] cleanup --- adbc_drivers_validation/model.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/adbc_drivers_validation/model.py b/adbc_drivers_validation/model.py index 91b8bc2..ea62810 100644 --- a/adbc_drivers_validation/model.py +++ b/adbc_drivers_validation/model.py @@ -133,8 +133,6 @@ class DriverFeatures(BaseModel): statement_get_parameter_schema: bool = Field(default=False) statement_prepare: bool = Field(default=False) statement_rows_affected: bool = Field(default=False) - # Some backends report zero for every ordinary DML statement (ex: Databend) - quirk_statement_rows_affected_dml_returns_zero: bool = Field(default=False) statement_rows_affected_ddl: bool = Field(default=False) _current_catalog: str | FromEnv | None = PrivateAttr(default=None) _current_schema: str | FromEnv | None = PrivateAttr(default=None) @@ -153,6 +151,8 @@ class DriverFeatures(BaseModel): quirk_get_objects_constraints_foreign_normalized: bool = Field(default=False) quirk_get_objects_constraints_primary_normalized: bool = Field(default=False) quirk_get_objects_constraints_unique_normalized: bool = Field(default=False) + # Some backends report zero for every ordinary DML statement (ex: Databend) + quirk_statement_rows_affected_dml_returns_zero: bool = Field(default=False) def __init__(self, **data: typing.Any) -> None: super().__init__(**data)