From 1d023f3e80535df0c06fb9072db7ac81d09e0b43 Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Wed, 23 Sep 2026 06:55:17 +0100 Subject: [PATCH] fix: upgrade Polyglot to 0.12.3 for PIVOT and UNPIVOT star lineage --- Cargo.lock | 8 +- Cargo.toml | 2 +- pyproject.toml | 2 +- .../sqlbuild/compiler/pipeline/_test_types.py | 18 ++++ .../src/sqlbuild/compiler/pipeline/helpers.py | 45 ++++++++- .../pipeline/test_reshaped_star_lineage.py | 99 +++++++++++++++++++ uv.lock | 34 ++----- 7 files changed, 177 insertions(+), 31 deletions(-) create mode 100644 tests/integration/src/sqlbuild/compiler/pipeline/test_reshaped_star_lineage.py diff --git a/Cargo.lock b/Cargo.lock index 5265b4323c..f429d637f0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -310,8 +310,8 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "polyglot-sql" -version = "0.12.2" -source = "git+https://github.com/chio-labs/polyglot.git?rev=dd7154035566933a0f9acae17a2c102afb4dbfde#dd7154035566933a0f9acae17a2c102afb4dbfde" +version = "0.12.3" +source = "git+https://github.com/chio-labs/polyglot.git?rev=f3774102f518f716cd648e4fdebb9d8558a0b63a#f3774102f518f716cd648e4fdebb9d8558a0b63a" dependencies = [ "polyglot-sql-ast-derive", "serde", @@ -323,8 +323,8 @@ dependencies = [ [[package]] name = "polyglot-sql-ast-derive" -version = "0.12.2" -source = "git+https://github.com/chio-labs/polyglot.git?rev=dd7154035566933a0f9acae17a2c102afb4dbfde#dd7154035566933a0f9acae17a2c102afb4dbfde" +version = "0.12.3" +source = "git+https://github.com/chio-labs/polyglot.git?rev=f3774102f518f716cd648e4fdebb9d8558a0b63a#f3774102f518f716cd648e4fdebb9d8558a0b63a" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index e39097ff7f..6ab304e510 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ fensu-policy = "=0.22.0" globset = "0.4" proc-macro2 = { version = "1", features = ["span-locations"] } pyo3 = { version = "0.26", features = ["abi3-py312"] } -polyglot-sql = { git = "https://github.com/chio-labs/polyglot.git", rev = "dd7154035566933a0f9acae17a2c102afb4dbfde", default-features = false, features = [ +polyglot-sql = { git = "https://github.com/chio-labs/polyglot.git", rev = "f3774102f518f716cd648e4fdebb9d8558a0b63a", default-features = false, features = [ "ast-tools", "builder", "dialect-bigquery", diff --git a/pyproject.toml b/pyproject.toml index ee9ca09412..b76ad065cd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ dependencies = [ "duckdb>=1.3.2", "filelock>=3.20.3", "orjson>=3.10.0", - "polyglot-sql-chio==0.12.2", + "polyglot-sql-chio==0.12.3", "pydantic-settings>=2,<3", "PyYAML>=6.0.2", "rich>=15.0.0", diff --git a/tests/integration/src/sqlbuild/compiler/pipeline/_test_types.py b/tests/integration/src/sqlbuild/compiler/pipeline/_test_types.py index 88c03a9ad1..efe84796b8 100644 --- a/tests/integration/src/sqlbuild/compiler/pipeline/_test_types.py +++ b/tests/integration/src/sqlbuild/compiler/pipeline/_test_types.py @@ -231,3 +231,21 @@ class SetOperationTypeIntegrationTestCase: class SetOperationLineageIntegrationTestCase: description: str expected_sources: frozenset[tuple[str, str]] + + +@dataclass(frozen=True) +class ReshapedStarIntegrationTestCase: + """One PIVOT or UNPIVOT star query whose compiled columns must match DuckDB.""" + + description: str + query_sql: str + expected_columns: tuple[str, ...] + + +@dataclass(frozen=True) +class ReshapedStarLineageIntegrationTestCase: + """One PIVOT star query with the expected upstream columns of each output.""" + + description: str + query_sql: str + expected_sources: tuple[frozenset[tuple[str, str]], ...] diff --git a/tests/integration/src/sqlbuild/compiler/pipeline/helpers.py b/tests/integration/src/sqlbuild/compiler/pipeline/helpers.py index 7e0189d618..68b7497597 100644 --- a/tests/integration/src/sqlbuild/compiler/pipeline/helpers.py +++ b/tests/integration/src/sqlbuild/compiler/pipeline/helpers.py @@ -8,11 +8,18 @@ from sqlbuild.adapter.contract.classes.base_adapter import BaseAdapter from sqlbuild.adapters.duckdb.classes.duckdb_adapter import DuckDbAdapter from sqlbuild.compiler.compile.main._build_compile_inputs import build_compile_inputs -from sqlbuild.compiler.compile.models import CompileAdapterContext, CompileAuditInput +from sqlbuild.compiler.compile.models import ( + CompileAdapterContext, + CompileAuditInput, + CompiledLineageColumnFact, + CompiledModel, + CompiledProject, +) from sqlbuild.compiler.discovery.main.discover import discover_project_inputs from sqlbuild.compiler.discovery.models import DiscoveredProjectInputs from sqlbuild.compiler.manifest.main.build import build_manifest from sqlbuild.compiler.pipeline.main.compile import run_compile_pipeline +from sqlbuild.compiler.pipeline.main.project import compile_project from sqlbuild.compiler.pipeline.models import CompilePipelineOptions, CompilePipelineResult from sqlbuild.runtime.contracts.models import ConnectionHooks from sqlbuild.sql_values.types import CollectionRendering @@ -20,6 +27,11 @@ _SCHEMA_FIXTURE_PATH: Path = ( Path(__file__).resolve().parents[5] / "fixtures" / "dbt_manifest_v12_schema.json" ) +_RESHAPED_STAR_PROJECT_TOML: str = 'name = "orders"\nadapter = "duckdb"\n[rules]\nselect = []\n' +RESHAPED_STAR_UPSTREAM_MODELS: dict[str, str] = { + "staged_orders": "SELECT 1 AS customer_id, 'books' AS category, 10 AS amount", + "wide_orders": "SELECT 1 AS customer_id, 2 AS books, 3 AS games", +} _SEMANTIC_BINDING_PROJECT_TOML: str = 'name = "semantic_binding"\nadapter = "duckdb"\n' _AUDIT_FACTORY_ADAPTER_CONTEXT: CompileAdapterContext = CompileAdapterContext( value_renderer=DuckDbAdapter(), @@ -125,3 +137,34 @@ def write_semantic_binding_project( models_dir.mkdir() _ = (models_dir / "upstream.sql").write_text(upstream_sql, encoding="utf-8") _ = (models_dir / "downstream.sql").write_text(downstream_sql, encoding="utf-8") + + +def compile_reshaped_star_model( + *, project_dir: Path, query_sql: str +) -> tuple[CompiledProject, CompiledModel]: + """Compile one reshaped-star model over the shared upstream order models.""" + + (project_dir / "sqlbuild_project.toml").write_text( + _RESHAPED_STAR_PROJECT_TOML, encoding="utf-8" + ) + models: Path = project_dir / "models" + models.mkdir() + for name, sql in RESHAPED_STAR_UPSTREAM_MODELS.items(): + (models / f"{name}.sql").write_text(f"MODEL (materialized table);\n{sql}", encoding="utf-8") + (models / "reshaped_orders.sql").write_text( + f"MODEL (materialized table);\n{query_sql}", encoding="utf-8" + ) + project: CompiledProject = compile_project( + discovered_inputs=discover_project_inputs(project_dir=project_dir), + adapter=DuckDbAdapter(), + ) + models_by_name: dict[str, CompiledModel] = {model.name: model for model in project.models} + return project, models_by_name["reshaped_orders"] + + +def lineage_source_pairs(column: CompiledLineageColumnFact) -> frozenset[tuple[str, str]]: + """Return one lineage column's upstream (resource, column) pairs.""" + + return frozenset( + (source.resource_name, source.column_name) for source in column.upstream_columns + ) diff --git a/tests/integration/src/sqlbuild/compiler/pipeline/test_reshaped_star_lineage.py b/tests/integration/src/sqlbuild/compiler/pipeline/test_reshaped_star_lineage.py new file mode 100644 index 0000000000..2ce082132d --- /dev/null +++ b/tests/integration/src/sqlbuild/compiler/pipeline/test_reshaped_star_lineage.py @@ -0,0 +1,99 @@ +"""Compile star projections over PIVOT and UNPIVOT sources against DuckDB results.""" + +from __future__ import annotations + +import re +from collections.abc import Sequence +from pathlib import Path + +import duckdb +import pytest + +from sqlbuild.compiler.compile.models import CompiledLineageColumnFact +from tests.integration.src.sqlbuild.compiler.pipeline._test_types import ( + ReshapedStarIntegrationTestCase, + ReshapedStarLineageIntegrationTestCase, +) +from tests.integration.src.sqlbuild.compiler.pipeline.helpers import ( + RESHAPED_STAR_UPSTREAM_MODELS, + compile_reshaped_star_model, + lineage_source_pairs, +) + +_REF_PATTERN: re.Pattern[str] = re.compile(r'__ref\("(\w+)"\)') +_PIVOT_OVER_CTE_SQL: str = ( + "WITH pivot_input AS (SELECT customer_id, category, amount " + 'FROM __ref("staged_orders")) ' + "SELECT * FROM pivot_input PIVOT (MAX(amount) FOR category IN ('books', 'games'))" +) +_UNPIVOT_OVER_CTE_SQL: str = ( + 'WITH wide AS (SELECT customer_id, books, games FROM __ref("wide_orders")) ' + "SELECT * FROM wide UNPIVOT (amount FOR category IN (books, games))" +) + + +@pytest.mark.parametrize( + "test_case", + ( + ReshapedStarIntegrationTestCase( + description="pivot over cte", + query_sql=_PIVOT_OVER_CTE_SQL, + expected_columns=("customer_id", "books", "games"), + ), + ReshapedStarIntegrationTestCase( + description="unpivot over cte", + query_sql=_UNPIVOT_OVER_CTE_SQL, + expected_columns=("customer_id", "category", "amount"), + ), + ), + ids=lambda case: case.description, +) +def test_given_star_over_reshaped_cte_when_compiling_then_columns_match_duckdb( + test_case: ReshapedStarIntegrationTestCase, + tmp_path: Path, +) -> None: + project, model = compile_reshaped_star_model( + project_dir=tmp_path, query_sql=test_case.query_sql + ) + with duckdb.connect() as connection: + for name, sql in RESHAPED_STAR_UPSTREAM_MODELS.items(): + connection.execute(f"CREATE TABLE {name} AS {sql}") + duckdb_columns: tuple[str, ...] = tuple( + column[0] + for column in connection.execute( + _REF_PATTERN.sub(r"\1", test_case.query_sql) + ).description + ) + + assert project.diagnostics == () + assert duckdb_columns == test_case.expected_columns + assert model.inferred_columns is not None + assert tuple(column.name for column in model.inferred_columns) == test_case.expected_columns + + +@pytest.mark.parametrize( + "test_case", + ( + ReshapedStarLineageIntegrationTestCase( + description="pivot over cte", + query_sql=_PIVOT_OVER_CTE_SQL, + expected_sources=( + frozenset({("staged_orders", "customer_id")}), + frozenset({("staged_orders", "amount")}), + frozenset({("staged_orders", "amount")}), + ), + ), + ), + ids=lambda case: case.description, +) +def test_given_star_over_pivoted_cte_when_compiling_then_lineage_follows_pivot_inputs( + test_case: ReshapedStarLineageIntegrationTestCase, + tmp_path: Path, +) -> None: + _project, model = compile_reshaped_star_model( + project_dir=tmp_path, query_sql=test_case.query_sql + ) + lineage: Sequence[CompiledLineageColumnFact] | None = model.fast_lineage_columns + + assert lineage is not None + assert tuple(lineage_source_pairs(column) for column in lineage) == test_case.expected_sources diff --git a/uv.lock b/uv.lock index 83f57355e9..eaa0fb37a7 100644 --- a/uv.lock +++ b/uv.lock @@ -2866,29 +2866,15 @@ wheels = [ [[package]] name = "polyglot-sql-chio" -version = "0.12.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/78/ff/d2e3e00fbe48a9fdce820af813e59e778a6e9873a9c64b48fa9b0caf6095/polyglot_sql_chio-0.12.2.tar.gz", hash = "sha256:e927175444ae5a0dbd1b5caa945cac5df1cb77f27cb9545275b9eec066d4ff7b", size = 2002986, upload-time = "2026-09-22T23:27:09.887Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/a7/95727b3fe0e6e6e3a4fb3c31526462be04a17e5869b293a114c0d0de6ad9/polyglot_sql_chio-0.12.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:815897873c7d141517520884206970f4985db6b257e9b88bac9bad409fbc847a", size = 12059902, upload-time = "2026-09-22T23:26:19.476Z" }, - { url = "https://files.pythonhosted.org/packages/ce/a2/ae0af0b2b8a91c9072207950fee5bb68cb294160fca22f01bfed61065a79/polyglot_sql_chio-0.12.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6acb8e9301b691166af8d47ef1bda870894c54cfda29cee986cabff039943552", size = 11350476, upload-time = "2026-09-22T23:26:21.737Z" }, - { url = "https://files.pythonhosted.org/packages/eb/00/47c9d01b7a05f28cc4efdf24d796af7406e08981f247c7c1157b374f6a01/polyglot_sql_chio-0.12.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d0a465759b2c5c1f6e3e894e41198267f09aa5b518e1717767ee8536fb945e6", size = 12213376, upload-time = "2026-09-22T23:26:24.051Z" }, - { url = "https://files.pythonhosted.org/packages/c7/6e/3b8455526d64bfe8c7df50af34551b20539af2fd71e63de7a263bc142d1e/polyglot_sql_chio-0.12.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:faaee830b405d3cc5667543f63ebd00c5089f16a2474d9aed0f33c0e3071422f", size = 11257956, upload-time = "2026-09-22T23:26:26.116Z" }, - { url = "https://files.pythonhosted.org/packages/bb/27/802c3bb71d94210781afc6cc3e4ab9fddfdeddd51ddf6d8e03b6360229a1/polyglot_sql_chio-0.12.2-cp312-cp312-win_amd64.whl", hash = "sha256:097a8c6445fae0b3fb144ad1be1d8aebbc572bb5e94a34d9f169e918697fb593", size = 11013413, upload-time = "2026-09-22T23:26:28.425Z" }, - { url = "https://files.pythonhosted.org/packages/c4/d9/64e08ab2c6758caaeb5d2341b549cea4481f7b9f517400ad642b54607c21/polyglot_sql_chio-0.12.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:85cba6c35b7b003e571ee4b4dd4f94a402f499a23a509587992abfb4f7bbfa1e", size = 12059437, upload-time = "2026-09-22T23:26:30.495Z" }, - { url = "https://files.pythonhosted.org/packages/93/41/1f229475a410f86fa711993c88214229868a1a6d5b2d0e37d867291edff2/polyglot_sql_chio-0.12.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a4d30ae9b88057844c2b369608a8248c6b00dd60d9db67300bca259afee4ddc2", size = 11350666, upload-time = "2026-09-22T23:26:32.631Z" }, - { url = "https://files.pythonhosted.org/packages/44/92/ede4c6d033bf8e567ecc39bff32fd444022dc28b2b590165808cd2859eae/polyglot_sql_chio-0.12.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b971424b63e01926e9ed2b074b844da01b375a13589157f716075793db31d6ed", size = 12211101, upload-time = "2026-09-22T23:26:35.135Z" }, - { url = "https://files.pythonhosted.org/packages/21/f8/08e4ca37ea5dab73d6113fe13802328161b87eafcd9d09fb46a556ee0c56/polyglot_sql_chio-0.12.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8173c06ff17c8797d8d4f2cae44792bb85275f91a8bbe899b58a94ce027d959", size = 11257651, upload-time = "2026-09-22T23:26:37.103Z" }, - { url = "https://files.pythonhosted.org/packages/55/a8/6bcdd68a978fac0115cc9bbc8c06f41a8cbb5455eaf9f135e7a6dca34065/polyglot_sql_chio-0.12.2-cp313-cp313-win_amd64.whl", hash = "sha256:a5631bd05e02b81993874f659454f0e78977ad037928cce5a4c13695a08c6d74", size = 11013192, upload-time = "2026-09-22T23:26:39.294Z" }, - { url = "https://files.pythonhosted.org/packages/6c/65/8008b6428b042280196d33e5762e4d130b7a0c4ea0c1082d6513cbc1a940/polyglot_sql_chio-0.12.2-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:06dab9afaf264a5d0172dcf8b6425c503986c71a3ff678e03493aa79f82ca75a", size = 12060516, upload-time = "2026-09-22T23:26:41.429Z" }, - { url = "https://files.pythonhosted.org/packages/94/ff/b43706fbd4d486004cbad1f7d54858c877a52125736c3c6340416625b901/polyglot_sql_chio-0.12.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:500f75f1fdaffd63f010380d9c9a3bb14270cfe30c778ef6d20b89d07be8df82", size = 11351238, upload-time = "2026-09-22T23:26:43.465Z" }, - { url = "https://files.pythonhosted.org/packages/f2/b1/7345974d67a86e1f006ab1cdd90b1f2b334cfc47f870d6b7412650e940b0/polyglot_sql_chio-0.12.2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d833909639d97f0319cd9ef09a064538eaea7c469cb7805b018cc3713f225244", size = 12214602, upload-time = "2026-09-22T23:26:45.778Z" }, - { url = "https://files.pythonhosted.org/packages/29/c7/91efe51051e5a30764e3e8719ab64aacadadb6fe8391e7a7ce8663a4d5fc/polyglot_sql_chio-0.12.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:267ebbc19a3f77b1877b20cba01ffa5ffa5391c91136087987a4d85bf9cb3da6", size = 11258677, upload-time = "2026-09-22T23:26:47.951Z" }, - { url = "https://files.pythonhosted.org/packages/be/c3/92a3651af6ffc60f1978ba9b89422bff1e505c1ec725cf9b499cef93b47b/polyglot_sql_chio-0.12.2-cp314-cp314-win_amd64.whl", hash = "sha256:daa618d58a8223e82e72521b9fee6d21f4245b28b61c66759470970acc0c0f0f", size = 11014391, upload-time = "2026-09-22T23:26:49.873Z" }, - { url = "https://files.pythonhosted.org/packages/52/51/75939ed4ce1e0745c6b595c931c91da823572fa8578459df41efd6ffa993/polyglot_sql_chio-0.12.2-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f189d445739ac52a4ae83728d660eee12f9b0394ba1f55be48f7ea0917426541", size = 12311577, upload-time = "2026-09-22T23:26:52.3Z" }, - { url = "https://files.pythonhosted.org/packages/0e/a4/e74a3d3e2879f7cd55c28762faa17ced26026dbcc5b5b9f2b846bac3afab/polyglot_sql_chio-0.12.2-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57e7316fafd6774784563a3242ced836326620c7ccea5134835f2b4013f0d75c", size = 11331490, upload-time = "2026-09-22T23:26:54.608Z" }, - { url = "https://files.pythonhosted.org/packages/b6/da/737c3fcdba8d291bdad510b586421916c4838dd84761818a480cc2834a37/polyglot_sql_chio-0.12.2-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1a1f21da77c9a652299eac3732cbe0d141f7bd48c2148b9e33cb054c6eae343", size = 11258677, upload-time = "2026-09-22T23:26:56.893Z" }, - { url = "https://files.pythonhosted.org/packages/01/39/e0cddc4bd970e08cce0c29e7dace3de5d0d2140d3e786c39abccb3dd6b40/polyglot_sql_chio-0.12.2-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59df75b9cbc1b0d4f32ae7d10015413c6d51cbe8ff323cbe694325fe533bc94b", size = 11331496, upload-time = "2026-09-22T23:26:59.097Z" }, +version = "0.12.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/22/176f03abf1ed12718817e0b23958bc620792e7118272133fff5eaf65dd98/polyglot_sql_chio-0.12.3.tar.gz", hash = "sha256:2838af4dc1e318c56c2e39b35b0a87c68ef776114f09a9f183c54738a4b8efcb", size = 2004064, upload-time = "2026-09-23T05:37:32.777Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/e9/14fc347556bef588dff15b12482891c712b3ce0a2ac5cb4e8ce32a268163/polyglot_sql_chio-0.12.3-cp312-abi3-macosx_10_12_x86_64.whl", hash = "sha256:17aa5d9b6e40965db1d42a1ce697522dc9db4ae90c88848c9f7da068f092807e", size = 12170576, upload-time = "2026-09-23T05:37:20.162Z" }, + { url = "https://files.pythonhosted.org/packages/4e/88/cf0f47bd5b6f855aae33fcc7aeafa09f82669e9facbd0d6e31fa85736012/polyglot_sql_chio-0.12.3-cp312-abi3-macosx_11_0_arm64.whl", hash = "sha256:d3fb7bd68b857ca29bec17058c18e08a2296e62a87560d54b22ba7f83e14aee2", size = 11462028, upload-time = "2026-09-23T05:37:23.018Z" }, + { url = "https://files.pythonhosted.org/packages/64/d7/e47be834ecdd3c1cb2e70683f7cf0ce512edb85511e009912d160478c1ee/polyglot_sql_chio-0.12.3-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4a8254389d2a07cbf14726181cf9a1a35d6e3e9127745b5fb6825791e14a2d5", size = 12313913, upload-time = "2026-09-23T05:37:25.499Z" }, + { url = "https://files.pythonhosted.org/packages/51/3c/2f33dad022391d5784ece619456807264344a71299619473a37c1902051b/polyglot_sql_chio-0.12.3-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75a69bc3d44cb63fd08c0b6f0d4d2841849dc7c3c65d7d846d3ec2a68d3960ed", size = 11334274, upload-time = "2026-09-23T05:37:28.409Z" }, + { url = "https://files.pythonhosted.org/packages/b0/ba/4d5afc99b280119dcfac07c3fdf54132a7c3f5c066a853836ba8edc8566c/polyglot_sql_chio-0.12.3-cp312-abi3-win_amd64.whl", hash = "sha256:3d4d3f9b84a0fb26a6705c0950d679d13a0844efffab0564ef3fc5e0eaa4988d", size = 11127160, upload-time = "2026-09-23T05:37:30.804Z" }, ] [[package]] @@ -4232,7 +4218,7 @@ requires-dist = [ { name = "ingestr", marker = "extra == 'ingestr'", specifier = ">=1.0.0" }, { name = "jinja2", marker = "extra == 'dbt'", specifier = ">=3.1" }, { name = "orjson", specifier = ">=3.10.0" }, - { name = "polyglot-sql-chio", specifier = "==0.12.2" }, + { name = "polyglot-sql-chio", specifier = "==0.12.3" }, { name = "psycopg", extras = ["binary"], marker = "extra == 'postgres'", specifier = ">=3.2.0" }, { name = "pydantic-settings", specifier = ">=2,<3" }, { name = "pymssql", marker = "extra == 'sqlserver'", specifier = ">=2.3.0" },