From 2a3cadbdb3be76c2ab9d186c86cfabce3c5da9bd Mon Sep 17 00:00:00 2001 From: Minh Vu Date: Sun, 2 Aug 2026 02:24:50 +0200 Subject: [PATCH] Fix ignored DataFrameReader time travel parameters --- src/snowflake/snowpark/dataframe_reader.py | 19 +++++++---- tests/unit/test_dataframe.py | 37 ++++++++++++++++++++++ 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/src/snowflake/snowpark/dataframe_reader.py b/src/snowflake/snowpark/dataframe_reader.py index 2b855251ce..b5417fef98 100644 --- a/src/snowflake/snowpark/dataframe_reader.py +++ b/src/snowflake/snowpark/dataframe_reader.py @@ -833,12 +833,19 @@ def table( start_snapshot_id=start_snapshot_id, end_snapshot_id=end_snapshot_id, ) - elif ( - time_travel_mode is not None - or version is not None - or version_tag is not None - or version_ref is not None - or branch is not None + elif any( + value is not None + for value in ( + time_travel_mode, + statement, + offset, + timestamp, + stream, + version, + version_tag, + version_ref, + branch, + ) ): # If version / named-ref params are provided without mode, # default to 'at'. diff --git a/tests/unit/test_dataframe.py b/tests/unit/test_dataframe.py index 4d3e94f5f2..0ad9853a13 100644 --- a/tests/unit/test_dataframe.py +++ b/tests/unit/test_dataframe.py @@ -102,6 +102,43 @@ def test_dataframe_method_alias(): ) +@pytest.mark.parametrize( + ("parameter", "value"), + [ + ("statement", "query-id"), + ("offset", -60), + ("timestamp", "2026-01-01 00:00:00"), + ("stream", "my_stream"), + ], +) +def test_dataframe_reader_direct_time_travel_parameter_requires_mode( + mock_server_connection, parameter, value +): + session = Session(mock_server_connection) + + with pytest.raises(ValueError, match="Must specify time travel mode"): + session.read.table("my_table", _emit_ast=False, **{parameter: value}) + + +@pytest.mark.parametrize( + ("parameter", "value"), + [ + ("statement", "query-id"), + ("offset", -60), + ("timestamp", "2026-01-01 00:00:00"), + ("stream", "my_stream"), + ], +) +def test_dataframe_reader_direct_time_travel_parameter_overrides_options( + mock_server_connection, parameter, value +): + session = Session(mock_server_connection) + reader = session.read.option("time_travel_mode", "at").option("offset", -3600) + + with pytest.raises(ValueError, match="Must specify time travel mode"): + reader.table("my_table", _emit_ast=False, **{parameter: value}) + + @pytest.mark.parametrize( "format_type", [