Skip to content

Commit 70ba3d0

Browse files
SNOW-295953: renamed rows_Affected to stats
1 parent 7d76243 commit 70ba3d0

File tree

2 files changed

+33
-35
lines changed

2 files changed

+33
-35
lines changed

src/snowflake/connector/cursor.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ def rowcount(self) -> int | None:
459459
return self._total_rowcount if self._total_rowcount >= 0 else None
460460

461461
@property
462-
def rows_affected(self) -> RowsAffected | None:
462+
def stats(self) -> RowsAffected | None:
463463
"""Returns detailed rows affected statistics for DML operations.
464464
465465
Returns a NamedTuple with fields:
@@ -1225,9 +1225,9 @@ def _init_result_and_meta(self, data: dict[Any, Any]) -> None:
12251225
self._rownumber = -1
12261226
self._result_state = ResultState.VALID
12271227

1228-
# Extract rows_affected from stats object if available (for DML operations like CTAS, INSERT, UPDATE, DELETE)
1228+
# Extract stats object if available (for DML operations like CTAS, INSERT, UPDATE, DELETE)
12291229
self._stats_data = data.get("stats", None)
1230-
logger.debug(f"Execution stats: {self.rows_affected}")
1230+
logger.debug(f"Execution DML stats: {self.stats}")
12311231

12321232
# don't update the row count when the result is returned from `describe` method
12331233
if is_dml and "rowset" in data and len(data["rowset"]) > 0:

test/integ/test_connection.py

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1895,8 +1895,8 @@ def test_snowflake_version():
18951895

18961896

18971897
@pytest.mark.skipolddriver
1898-
def test_ctas_rows_affected_from_stats(conn_cnx):
1899-
"""Test that cursor.rowcount and cursor.rows_affected work for CTAS operations."""
1898+
def test_ctas_stats(conn_cnx):
1899+
"""Test that cursor.rowcount and cursor.stats work for CTAS operations."""
19001900
with conn_cnx() as conn:
19011901
with conn.cursor() as cur:
19021902
cur.execute(
@@ -1905,21 +1905,19 @@ def test_ctas_rows_affected_from_stats(conn_cnx):
19051905
assert (
19061906
cur.rowcount == 1
19071907
), f"Expected rowcount 1 for CTAS, got {cur.rowcount}"
1908-
# rows_affected should contain the detailed stats as a NamedTuple
1908+
# stats should contain the details as a NamedTuple
1909+
assert cur.stats is not None, "stats should not be None for CTAS"
19091910
assert (
1910-
cur.rows_affected is not None
1911-
), "rows_affected should not be None for CTAS"
1912-
assert (
1913-
cur.rows_affected.num_rows_inserted == 3
1914-
), f"Expected num_rows_inserted=3, got {cur.rows_affected.num_rows_inserted}"
1915-
assert cur.rows_affected.num_rows_deleted == 0
1916-
assert cur.rows_affected.num_rows_updated == 0
1917-
assert cur.rows_affected.num_dml_duplicates == 0
1911+
cur.stats.num_rows_inserted == 3
1912+
), f"Expected num_rows_inserted=3, got {cur.stats.num_rows_inserted}"
1913+
assert cur.stats.num_rows_deleted == 0
1914+
assert cur.stats.num_rows_updated == 0
1915+
assert cur.stats.num_dml_duplicates == 0
19181916

19191917

19201918
@pytest.mark.skipolddriver
1921-
def test_create_view_rows_affected_from_stats(conn_cnx):
1922-
"""Test that cursor.rows_affected returns None fields for VIEW operations."""
1919+
def test_create_view_stats(conn_cnx):
1920+
"""Test that cursor.stats returns None fields for VIEW operations."""
19231921
with conn_cnx() as conn:
19241922
with conn.cursor() as cur:
19251923
cur.execute(
@@ -1929,16 +1927,16 @@ def test_create_view_rows_affected_from_stats(conn_cnx):
19291927
cur.rowcount == 1
19301928
), f"Expected rowcount 1 for VIEW, got {cur.rowcount}"
19311929
# VIEW operations don't return DML stats, all fields should be None
1932-
assert cur.rows_affected is not None
1933-
assert cur.rows_affected.num_rows_inserted is None
1934-
assert cur.rows_affected.num_rows_deleted is None
1935-
assert cur.rows_affected.num_rows_updated is None
1936-
assert cur.rows_affected.num_dml_duplicates is None
1930+
assert cur.stats is not None
1931+
assert cur.stats.num_rows_inserted is None
1932+
assert cur.stats.num_rows_deleted is None
1933+
assert cur.stats.num_rows_updated is None
1934+
assert cur.stats.num_dml_duplicates is None
19371935

19381936

19391937
@pytest.mark.skipolddriver
1940-
def test_cvas_separate_cursors_rows_affected_from_stats(conn_cnx):
1941-
"""Test cursor.rows_affected with CVAS in separate cursor from the one used for CTAS of the table."""
1938+
def test_cvas_separate_cursors_stats(conn_cnx):
1939+
"""Test cursor.stats with CVAS in separate cursor from the one used for CTAS of the table."""
19421940
with conn_cnx() as conn:
19431941
with conn.cursor() as cur:
19441942
cur.execute(
@@ -1950,16 +1948,16 @@ def test_cvas_separate_cursors_rows_affected_from_stats(conn_cnx):
19501948
cur.rowcount == 1
19511949
), "Due to old behaviour we should keep rowcount equal to 1 - as the number of rows returned by the backend"
19521950
# VIEW operations don't return DML stats
1953-
assert cur.rows_affected is not None
1954-
assert cur.rows_affected.num_rows_inserted is None
1955-
assert cur.rows_affected.num_rows_deleted is None
1956-
assert cur.rows_affected.num_rows_updated is None
1957-
assert cur.rows_affected.num_dml_duplicates is None
1951+
assert cur.stats is not None
1952+
assert cur.stats.num_rows_inserted is None
1953+
assert cur.stats.num_rows_deleted is None
1954+
assert cur.stats.num_rows_updated is None
1955+
assert cur.stats.num_dml_duplicates is None
19581956

19591957

19601958
@pytest.mark.skipolddriver
1961-
def test_cvas_one_cursor_rows_affected_from_stats(conn_cnx):
1962-
"""Test cursor.rows_affected with CVAS in the same cursor - make sure it's cleaned up after usage."""
1959+
def test_cvas_one_cursor_stats(conn_cnx):
1960+
"""Test cursor.stats with CVAS in the same cursor - make sure it's cleaned up after usage."""
19631961
with conn_cnx() as conn:
19641962
with conn.cursor() as cur:
19651963
cur.execute(
@@ -1972,8 +1970,8 @@ def test_cvas_one_cursor_rows_affected_from_stats(conn_cnx):
19721970
cur.rowcount == 1
19731971
), "Due to old behaviour we should keep rowcount equal to 1 - as the number of rows returned by the backend"
19741972
# VIEW operations don't return DML stats
1975-
assert cur.rows_affected is not None
1976-
assert cur.rows_affected.num_rows_inserted is None
1977-
assert cur.rows_affected.num_rows_deleted is None
1978-
assert cur.rows_affected.num_rows_updated is None
1979-
assert cur.rows_affected.num_dml_duplicates is None
1973+
assert cur.stats is not None
1974+
assert cur.stats.num_rows_inserted is None
1975+
assert cur.stats.num_rows_deleted is None
1976+
assert cur.stats.num_rows_updated is None
1977+
assert cur.stats.num_dml_duplicates is None

0 commit comments

Comments
 (0)