From bf431b258f7c374517fb53ba5c3ad1bbf5f37d72 Mon Sep 17 00:00:00 2001 From: Ilia Ablamonov Date: Tue, 20 Jan 2026 09:49:03 +0100 Subject: [PATCH 1/2] Fix "Unknown SQL type: oid" --- src/iron_sql/sqlc.py | 4 +--- tests/test_type_system.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/iron_sql/sqlc.py b/src/iron_sql/sqlc.py index 786f371..a07f04c 100644 --- a/src/iron_sql/sqlc.py +++ b/src/iron_sql/sqlc.py @@ -97,14 +97,12 @@ class SQLCResult(pydantic.BaseModel): queries: list[Query] def used_schemas(self) -> list[str]: - table_schemas = { + result = { c.table.schema_name for q in self.queries for c in q.columns if c.table is not None } - type_schemas = {c.type.schema_name for q in self.queries for c in q.columns} - result = {*table_schemas, *type_schemas} if "" in result: result.remove("") result.add(self.catalog.default_schema) diff --git a/tests/test_type_system.py b/tests/test_type_system.py index fab9261..59c928c 100644 --- a/tests/test_type_system.py +++ b/tests/test_type_system.py @@ -1,6 +1,8 @@ import keyword from enum import StrEnum +import pytest + from tests.conftest import ProjectBuilder @@ -176,3 +178,13 @@ async def test_pg_catalog_type_does_not_break_generation( row = await mod.testdb_sql(sql).query_single_row() assert row == 1 + + +def test_pg_catalog_does_not_trigger_warnings( + test_project: ProjectBuilder, caplog: pytest.LogCaptureFixture +) -> None: + test_project.add_query("get_user", "SELECT * FROM users") + + test_project.generate() + + assert "Unknown SQL type" not in caplog.text From 752d721fc053130b5978786bf14493d0870b93fc Mon Sep 17 00:00:00 2001 From: Ilia Ablamonov Date: Tue, 20 Jan 2026 09:49:21 +0100 Subject: [PATCH 2/2] Do not generate unused enums --- src/iron_sql/generator.py | 6 ------ tests/test_type_system.py | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/iron_sql/generator.py b/src/iron_sql/generator.py index f320b94..e2ae742 100644 --- a/src/iron_sql/generator.py +++ b/src/iron_sql/generator.py @@ -39,12 +39,6 @@ def _collect_used_enums(sqlc_res: SQLCResult) -> set[tuple[str, str]]: for col in ( *(c for q in sqlc_res.queries for c in q.columns), *(p.column for q in sqlc_res.queries for p in q.params), - *( - c - for schema_name in sqlc_res.used_schemas() - for table in sqlc_res.catalog.schema_by_name(schema_name).tables - for c in table.columns - ), ) for schema in (sqlc_res.catalog.schema_by_ref(col.type),) if schema.has_enum(col.type.name) diff --git a/tests/test_type_system.py b/tests/test_type_system.py index 59c928c..03cd41c 100644 --- a/tests/test_type_system.py +++ b/tests/test_type_system.py @@ -188,3 +188,23 @@ def test_pg_catalog_does_not_trigger_warnings( test_project.generate() assert "Unknown SQL type" not in caplog.text + + +async def test_table_column_enum_not_in_query_is_skipped( + test_project: ProjectBuilder, +) -> None: + extra_schema = """ + CREATE TYPE table_only_status AS ENUM ('pending', 'processed'); + CREATE TABLE status_log ( + id SERIAL PRIMARY KEY, + status table_only_status NOT NULL + ); + """ + + await test_project.extend_schema(extra_schema) + + test_project.add_query("get_users", "SELECT * FROM users") + + mod = test_project.generate() + + assert not hasattr(mod, "TestdbTableOnlyStatus")