Skip to content

Commit f6a39ec

Browse files
nickmuohCopilot
andauthored
Fix and polish seed warnings in tests (#5822)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
1 parent fa46264 commit f6a39ec

4 files changed

Lines changed: 37 additions & 2 deletions

File tree

sqlmesh/core/engine_adapter/snowflake.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ def query_factory() -> Query:
407407
elif isinstance(df, pd.DataFrame):
408408
from snowflake.connector.pandas_tools import write_pandas
409409

410-
ordered_df = df[list(source_columns_to_types)]
410+
ordered_df = df[list(source_columns_to_types)].reset_index(drop=True)
411411

412412
# Workaround for https://github.com/snowflakedb/snowflake-connector-python/issues/1034
413413
# The above issue has already been fixed upstream, but we keep the following

sqlmesh/core/model/seed.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def read(self, batch_size: t.Optional[int] = None) -> t.Generator[pd.DataFrame,
113113
batch_size = batch_size or df.size
114114
batch_start = 0
115115
while batch_start < df.shape[0]:
116-
yield df.iloc[batch_start : batch_start + batch_size, :]
116+
yield df.iloc[batch_start : batch_start + batch_size, :].copy()
117117
batch_start += batch_size
118118

119119
def _get_df(self) -> pd.DataFrame:

tests/core/engine_adapter/test_snowflake.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,26 @@ def test_df_to_source_queries_use_schema(
469469
assert 'USE SCHEMA "other_catalog"."other_db"' in to_sql_calls(adapter)
470470

471471

472+
def test_df_to_source_queries_reset_non_default_index(
473+
make_mocked_engine_adapter: t.Callable, mocker: MockerFixture
474+
):
475+
mocker.patch(
476+
"sqlmesh.core.engine_adapter.snowflake.SnowflakeEngineAdapter.table_exists",
477+
return_value=False,
478+
)
479+
write_pandas = mocker.patch("snowflake.connector.pandas_tools.write_pandas", return_value=None)
480+
adapter = make_mocked_engine_adapter(SnowflakeEngineAdapter)
481+
482+
df = pd.DataFrame({"a": [2, 3], "b": [5, 6]}, index=[1, 2])
483+
adapter.replace_query(
484+
"other_db.test_table", df, {"a": exp.DataType.build("INT"), "b": exp.DataType.build("INT")}
485+
)
486+
487+
uploaded_df = write_pandas.call_args.args[1]
488+
assert uploaded_df.index.equals(pd.RangeIndex(start=0, stop=2, step=1))
489+
assert uploaded_df.to_dict("list") == {"a": [2, 3], "b": [5, 6]}
490+
491+
472492
def test_create_managed_table(make_mocked_engine_adapter: t.Callable, mocker: MockerFixture):
473493
adapter = make_mocked_engine_adapter(SnowflakeEngineAdapter)
474494

tests/core/test_seed.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,21 @@ def test_read_custom_settings():
5858
pd.testing.assert_frame_equal(next(dfs), expected_df)
5959

6060

61+
def test_read_returns_independent_batches():
62+
content = """key,value
63+
1,one
64+
2,two
65+
"""
66+
seed = Seed(content=content)
67+
seed_reader = seed.reader()
68+
69+
batches = list(seed_reader.read(batch_size=1))
70+
batches[0].at[0, "value"] = "changed"
71+
72+
assert [df["value"].tolist() for df in batches] == [["changed"], ["two"]]
73+
assert next(seed_reader.read())["value"].tolist() == ["one", "two"]
74+
75+
6176
def test_column_hashes():
6277
content = """key,value,ds
6378
1,one,2022-01-01

0 commit comments

Comments
 (0)