From 280b11c48a8d0b2b17aabd9039daad0c371a6074 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 29 May 2026 23:26:47 +0000 Subject: [PATCH 1/4] test: add seed warning regressions --- sqlmesh/core/engine_adapter/snowflake.py | 2 +- sqlmesh/core/model/seed.py | 2 +- tests/core/engine_adapter/test_snowflake.py | 20 ++++++++++++++ tests/core/test_model.py | 29 ++++++++++++++++++++- 4 files changed, 50 insertions(+), 3 deletions(-) diff --git a/sqlmesh/core/engine_adapter/snowflake.py b/sqlmesh/core/engine_adapter/snowflake.py index 09c530b8f3..d589b5d15b 100644 --- a/sqlmesh/core/engine_adapter/snowflake.py +++ b/sqlmesh/core/engine_adapter/snowflake.py @@ -407,7 +407,7 @@ def query_factory() -> Query: elif isinstance(df, pd.DataFrame): from snowflake.connector.pandas_tools import write_pandas - ordered_df = df[list(source_columns_to_types)] + ordered_df = df[list(source_columns_to_types)].reset_index(drop=True) # Workaround for https://github.com/snowflakedb/snowflake-connector-python/issues/1034 # The above issue has already been fixed upstream, but we keep the following diff --git a/sqlmesh/core/model/seed.py b/sqlmesh/core/model/seed.py index 9fd57fe6d3..ff12085690 100644 --- a/sqlmesh/core/model/seed.py +++ b/sqlmesh/core/model/seed.py @@ -113,7 +113,7 @@ def read(self, batch_size: t.Optional[int] = None) -> t.Generator[pd.DataFrame, batch_size = batch_size or df.size batch_start = 0 while batch_start < df.shape[0]: - yield df.iloc[batch_start : batch_start + batch_size, :] + yield df.iloc[batch_start : batch_start + batch_size, :].copy() batch_start += batch_size def _get_df(self) -> pd.DataFrame: diff --git a/tests/core/engine_adapter/test_snowflake.py b/tests/core/engine_adapter/test_snowflake.py index dcb6820297..fda053ca65 100644 --- a/tests/core/engine_adapter/test_snowflake.py +++ b/tests/core/engine_adapter/test_snowflake.py @@ -469,6 +469,26 @@ def test_df_to_source_queries_use_schema( assert 'USE SCHEMA "other_catalog"."other_db"' in to_sql_calls(adapter) +def test_df_to_source_queries_reset_non_default_index( + make_mocked_engine_adapter: t.Callable, mocker: MockerFixture +): + mocker.patch( + "sqlmesh.core.engine_adapter.snowflake.SnowflakeEngineAdapter.table_exists", + return_value=False, + ) + write_pandas = mocker.patch("snowflake.connector.pandas_tools.write_pandas", return_value=None) + adapter = make_mocked_engine_adapter(SnowflakeEngineAdapter) + + df = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]}).iloc[1:] + adapter.replace_query( + "other_db.test_table", df, {"a": exp.DataType.build("INT"), "b": exp.DataType.build("INT")} + ) + + uploaded_df = write_pandas.call_args.args[1] + assert uploaded_df.index.equals(pd.RangeIndex(start=0, stop=2, step=1)) + assert uploaded_df.to_dict("list") == {"a": [2, 3], "b": [5, 6]} + + def test_create_managed_table(make_mocked_engine_adapter: t.Callable, mocker: MockerFixture): adapter = make_mocked_engine_adapter(SnowflakeEngineAdapter) diff --git a/tests/core/test_model.py b/tests/core/test_model.py index d4279a9c90..f95776088f 100644 --- a/tests/core/test_model.py +++ b/tests/core/test_model.py @@ -1,7 +1,7 @@ # ruff: noqa: F811 import json -import typing as t import re +import typing as t from datetime import date, datetime from pathlib import Path from unittest.mock import patch, PropertyMock @@ -1537,6 +1537,33 @@ def test_seed_model_custom_types(tmp_path): assert df["empty_date"].iloc[0] is None +def test_seed_model_batched_render_returns_independent_dataframes(tmp_path): + model_csv_path = (tmp_path / "model.csv").absolute() + + with open(model_csv_path, "w", encoding="utf-8") as fd: + fd.write( + """key,value +1,one +2,two +""" + ) + + model = create_seed_model( + "test_db.test_model", + SeedKind(path=str(model_csv_path), batch_size=1), + columns={ + "key": "int", + "value": "text", + }, + ) + + batches = list(model.render_seed()) + batches[0].iloc[0, 1] = "changed" + + assert [df["value"].tolist() for df in batches] == [["changed"], ["two"]] + assert model.seed.reader()._get_df()["value"].tolist() == ["one", "two"] + + def test_seed_with_special_characters_in_column(tmp_path, assert_exp_eq): config = Config(model_defaults=ModelDefaultsConfig(dialect="duckdb")) context = Context(config=config) From 4712e70f72be55a531c66b83a3f47fe9c691769e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 29 May 2026 23:32:57 +0000 Subject: [PATCH 2/4] fix: suppress seed pandas warnings --- tests/core/test_model.py | 27 --------------------------- tests/core/test_seed.py | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 27 deletions(-) diff --git a/tests/core/test_model.py b/tests/core/test_model.py index f95776088f..dd7e796a86 100644 --- a/tests/core/test_model.py +++ b/tests/core/test_model.py @@ -1537,33 +1537,6 @@ def test_seed_model_custom_types(tmp_path): assert df["empty_date"].iloc[0] is None -def test_seed_model_batched_render_returns_independent_dataframes(tmp_path): - model_csv_path = (tmp_path / "model.csv").absolute() - - with open(model_csv_path, "w", encoding="utf-8") as fd: - fd.write( - """key,value -1,one -2,two -""" - ) - - model = create_seed_model( - "test_db.test_model", - SeedKind(path=str(model_csv_path), batch_size=1), - columns={ - "key": "int", - "value": "text", - }, - ) - - batches = list(model.render_seed()) - batches[0].iloc[0, 1] = "changed" - - assert [df["value"].tolist() for df in batches] == [["changed"], ["two"]] - assert model.seed.reader()._get_df()["value"].tolist() == ["one", "two"] - - def test_seed_with_special_characters_in_column(tmp_path, assert_exp_eq): config = Config(model_defaults=ModelDefaultsConfig(dialect="duckdb")) context = Context(config=config) diff --git a/tests/core/test_seed.py b/tests/core/test_seed.py index a22805cbd2..459eaf3e50 100644 --- a/tests/core/test_seed.py +++ b/tests/core/test_seed.py @@ -58,6 +58,21 @@ def test_read_custom_settings(): pd.testing.assert_frame_equal(next(dfs), expected_df) +def test_read_returns_independent_batches(): + content = """key,value +1,one +2,two +""" + seed = Seed(content=content) + seed_reader = seed.reader() + + batches = list(seed_reader.read(batch_size=1)) + batches[0].loc[batches[0].index[0], "value"] = "changed" + + assert [df["value"].tolist() for df in batches] == [["changed"], ["two"]] + assert next(seed_reader.read())["value"].tolist() == ["one", "two"] + + def test_column_hashes(): content = """key,value,ds 1,one,2022-01-01 From ca927d932753870151420eb0f6f773f70b17410f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 29 May 2026 23:34:48 +0000 Subject: [PATCH 3/4] test: polish warning regressions --- tests/core/engine_adapter/test_snowflake.py | 2 +- tests/core/test_seed.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/core/engine_adapter/test_snowflake.py b/tests/core/engine_adapter/test_snowflake.py index fda053ca65..085c51098b 100644 --- a/tests/core/engine_adapter/test_snowflake.py +++ b/tests/core/engine_adapter/test_snowflake.py @@ -479,7 +479,7 @@ def test_df_to_source_queries_reset_non_default_index( write_pandas = mocker.patch("snowflake.connector.pandas_tools.write_pandas", return_value=None) adapter = make_mocked_engine_adapter(SnowflakeEngineAdapter) - df = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]}).iloc[1:] + df = pd.DataFrame({"a": [2, 3], "b": [5, 6]}, index=[1, 2]) adapter.replace_query( "other_db.test_table", df, {"a": exp.DataType.build("INT"), "b": exp.DataType.build("INT")} ) diff --git a/tests/core/test_seed.py b/tests/core/test_seed.py index 459eaf3e50..b6f335b0c6 100644 --- a/tests/core/test_seed.py +++ b/tests/core/test_seed.py @@ -67,7 +67,7 @@ def test_read_returns_independent_batches(): seed_reader = seed.reader() batches = list(seed_reader.read(batch_size=1)) - batches[0].loc[batches[0].index[0], "value"] = "changed" + batches[0].at[0, "value"] = "changed" assert [df["value"].tolist() for df in batches] == [["changed"], ["two"]] assert next(seed_reader.read())["value"].tolist() == ["one", "two"] From 076301b73fa36c2c83fdce0b856c069debe1b233 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 31 May 2026 13:17:48 +0000 Subject: [PATCH 4/4] Revert tests/core/test_model.py to origin/main --- tests/core/test_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/core/test_model.py b/tests/core/test_model.py index dd7e796a86..d4279a9c90 100644 --- a/tests/core/test_model.py +++ b/tests/core/test_model.py @@ -1,7 +1,7 @@ # ruff: noqa: F811 import json -import re import typing as t +import re from datetime import date, datetime from pathlib import Path from unittest.mock import patch, PropertyMock