From 10b70589d9686fc22c9f1903a95047c69c956afd Mon Sep 17 00:00:00 2001 From: Greg Campion Date: Thu, 22 Oct 2026 11:03:05 -0700 Subject: [PATCH 1/2] feat(sql): add support for TINYINT type in BaseEngineSpec and corresponding unit test --- superset/db_engine_specs/base.py | 5 +++++ tests/unit_tests/db_engine_specs/test_base.py | 1 + 2 files changed, 6 insertions(+) diff --git a/superset/db_engine_specs/base.py b/superset/db_engine_specs/base.py index 57d531aa90d1..717ee39f42b1 100644 --- a/superset/db_engine_specs/base.py +++ b/superset/db_engine_specs/base.py @@ -469,6 +469,11 @@ def normalize_custom_sql_metric(cls, expression: str) -> str: types.SmallInteger(), GenericDataType.NUMERIC, ), + ( + re.compile(r"^tinyint", re.IGNORECASE), + types.SmallInteger(), + GenericDataType.NUMERIC, + ), ( re.compile(r"^int(eger)?", re.IGNORECASE), types.Integer(), diff --git a/tests/unit_tests/db_engine_specs/test_base.py b/tests/unit_tests/db_engine_specs/test_base.py index 6eba3e68af1e..c51f12288985 100644 --- a/tests/unit_tests/db_engine_specs/test_base.py +++ b/tests/unit_tests/db_engine_specs/test_base.py @@ -168,6 +168,7 @@ def test_cte_query_parsing(original: types.TypeEngine, expected: str) -> None: "native_type,sqla_type,attrs,generic_type,is_dttm", [ ("SMALLINT", types.SmallInteger, None, GenericDataType.NUMERIC, False), + ("TINYINT", types.SmallInteger, None, GenericDataType.NUMERIC, False), ("INTEGER", types.Integer, None, GenericDataType.NUMERIC, False), ("BIGINT", types.BigInteger, None, GenericDataType.NUMERIC, False), ("DECIMAL", types.Numeric, None, GenericDataType.NUMERIC, False), From 0c351aea39cfc41aa4eb2d7c3eaa0e6195487f20 Mon Sep 17 00:00:00 2001 From: Greg Campion Date: Fri, 30 Oct 2026 14:38:18 -0700 Subject: [PATCH 2/2] fix(tests): add TINYINT to DuckDB column type recognition tests --- tests/unit_tests/db_engine_specs/test_duckdb.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/tests/unit_tests/db_engine_specs/test_duckdb.py b/tests/unit_tests/db_engine_specs/test_duckdb.py index 7ba1413f5034..41c77fedeab8 100644 --- a/tests/unit_tests/db_engine_specs/test_duckdb.py +++ b/tests/unit_tests/db_engine_specs/test_duckdb.py @@ -142,6 +142,7 @@ def test_column_type_recognition() -> None: "INTEGER", "BIGINT", "SMALLINT", + "TINYINT", # DuckDB-specific unsigned types "HUGEINT", "UBIGINT", @@ -158,12 +159,6 @@ def test_column_type_recognition() -> None: f"got {col_spec.generic_type}" ) - # Test that TINYINT (non-unsigned) is also recognized - # Note: TINYINT is not in the default mappings, but should be handled - col_spec = DuckDBEngineSpec.get_column_spec("TINYINT") - # TINYINT matches the pattern "^int" so it should be recognized - assert col_spec is None, "TINYINT doesn't match any patterns" - def test_motherduck_impersonation(mocker: MockerFixture) -> None: """