diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-08-31 15:27:26 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-08-31 15:27:26 -0400 |
| commit | c4d6596ba3dfe2674df39370bb1097df09919e42 (patch) | |
| tree | e56e5ceb20ca6cccb3d97addc56e04ac99de2774 /lib | |
| parent | b9b1e374bfbcece8259a4df5372ca68d45aaaf01 (diff) | |
| download | sqlalchemy-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.py | 14 |
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: |
