diff options
author | Igor Babaev <igor@askmonty.org> | 2014-04-17 12:53:53 -0700 |
---|---|---|
committer | Igor Babaev <igor@askmonty.org> | 2014-04-17 12:53:53 -0700 |
commit | 12eb6d88f70100e6da7a5931f99b661bba01737b (patch) | |
tree | a4356fbfaf7b4249d08ef88b85d317a22f1a6fd0 /sql/sql_update.cc | |
parent | bd44c086b33a7b324ac41f8eb0826c31da1c4103 (diff) | |
download | mariadb-git-12eb6d88f70100e6da7a5931f99b661bba01737b.tar.gz |
Fixed the problem of mdev-5970:
back-ported the patch for bug #13256831 from mysql-5.6 code line.
Here's the comment this patch was provided with:
Fixed bug#13256831 - ERROR 1032 (HY000): CAN'T FIND RECORD.
This bug only occurs if a user tries to update a base table using
an updatable view and this view was created as a join for which
the clause 'WITH CHECK OPTION' was specified.
The reason for the bug was that when such an update was
executed, row positions were not properly handled for tables
that were not updated but had constraints that had to be
checked due to the 'WITH CHECK OPTION' clause.
The reason for the bug was that when such update is executed
then for tables specified in the view definition and
also listed in the 'WITH CHECK OPTION' clause the positioning to
row being updated is not performed.
Diffstat (limited to 'sql/sql_update.cc')
-rw-r--r-- | sql/sql_update.cc | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sql/sql_update.cc b/sql/sql_update.cc index 01fe0336814..8ad3a2950d7 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -1917,6 +1917,13 @@ loop_end: TABLE *tbl= table; do { + /* + Signal each table (including tables referenced by WITH CHECK OPTION + clause) for which we will store row position in the temporary table + that we need a position to be read first. + */ + tbl->prepare_for_position(); + Field_string *field= new Field_string(tbl->file->ref_length, 0, tbl->alias.c_ptr(), &my_charset_bin); |