diff options
author | Jorgen Loland <jorgen.loland@oracle.com> | 2011-02-21 16:49:03 +0100 |
---|---|---|
committer | Jorgen Loland <jorgen.loland@oracle.com> | 2011-02-21 16:49:03 +0100 |
commit | 44b41979bd4767ccffa6450ccfcf331d3bad7b9b (patch) | |
tree | bd39ce93c66ae75c0edf2138f5bba3d254039996 /sql/sql_table.cc | |
parent | c96018458402a12c0aa129a1e29d2aa8ce105405 (diff) | |
download | mariadb-git-44b41979bd4767ccffa6450ccfcf331d3bad7b9b.tar.gz |
BUG#11762751: UPDATE STATEMENT THROWS AN ERROR, BUT STILL
UPDATES THE TABLE ENTRIES (formerly 55385)
BUG#11764529: MULTI UPDATE+INNODB REPORTS ER_KEY_NOT_FOUND
IF A TABLE IS UPDATED TWICE (formerly 57373)
If multiple-table update updates a row through two aliases and
the first update physically moves the row, the second update will
fail to locate the row. This results in different errors
depending on storage engine:
* MyISAM: Got error 134 from storage engine
* InnoDB: Can't find record in 'tbl'
None of these errors accurately describe the problem.
Furthermore, since MyISAM is non-transactional, the update
executed first will be performed while the second will not.
In addition, for two equal multiple-table update statements,
one could succeed and the other fail based on whether or not
the record actually moved or not. This was inconsistent.
Two update operations may physically move a row:
1) Update of a column in a clustered primary key
2) Update of a column used to calculate which partition the
row belongs to
BUG#11764529 is about case 1) above, BUG#11762751 was about case 2).
The fix for these bugs is to return with an error if multiple-table
update is about to:
a) Update a table through multiple aliases, and
b) Perform an update that may physically more the row
in at least one of these aliases
This avoids
* partial updates as described for MyISAM above,
* provides the same error message that describes the actual problem
for all SEs
* inconsistent behavior where a statement fails or succeeds based on
e.g. the partitioning algorithm of the table.
Diffstat (limited to 'sql/sql_table.cc')
0 files changed, 0 insertions, 0 deletions