summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2017-08-31 15:27:26 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2017-08-31 15:27:26 -0400
commitc4d6596ba3dfe2674df39370bb1097df09919e42 (patch)
treee56e5ceb20ca6cccb3d97addc56e04ac99de2774 /lib
parentb9b1e374bfbcece8259a4df5372ca68d45aaaf01 (diff)
downloadsqlalchemy-c4d6596ba3dfe2674df39370bb1097df09919e42.tar.gz
Additional fixes to sane rowcount
Implement rowcount assertions and single row check for post_update as well as deletes. Change-Id: I4e5ba7e8747bf0e0b41f569089eb8cdbf064b7a9 Fixes: #4062
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/orm/persistence.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/sqlalchemy/orm/persistence.py b/lib/sqlalchemy/orm/persistence.py
index 24c9743d4..b8fd0c79f 100644
--- a/lib/sqlalchemy/orm/persistence.py
+++ b/lib/sqlalchemy/orm/persistence.py
@@ -934,11 +934,16 @@ def _emit_post_update_statements(base_mapper, uowtransaction,
records = list(records)
connection = key[0]
- assert_singlerow = connection.dialect.supports_sane_rowcount
+ assert_singlerow = (
+ connection.dialect.supports_sane_rowcount
+ if mapper.version_id_col is None
+ else connection.dialect.supports_sane_rowcount_returning
+ )
assert_multirow = assert_singlerow and \
connection.dialect.supports_sane_multi_rowcount
allow_multirow = not needs_version_id or assert_multirow
+
if not allow_multirow:
check_rowcount = assert_singlerow
for state, state_dict, mapper_rec, \
@@ -1043,7 +1048,12 @@ def _emit_delete_statements(base_mapper, uowtransaction, cached_connections,
stacklevel=12)
connection.execute(statement, del_objects)
else:
- connection.execute(statement, del_objects)
+ c = connection.execute(statement, del_objects)
+
+ if not need_version_id:
+ only_warn = True
+
+ rows_matched = c.rowcount
if base_mapper.confirm_deleted_rows and \
rows_matched > -1 and expected != rows_matched: