diff options
author | Aleksey Midenkov <midenok@gmail.com> | 2020-04-04 11:37:20 +0300 |
---|---|---|
committer | Aleksey Midenkov <midenok@gmail.com> | 2020-04-04 11:37:20 +0300 |
commit | 2fbb3462bebcb16a0ae1ffcd265bb7648a416dc9 (patch) | |
tree | 8fc1242e4fbe9c8dea2ff70ee1244f2fe7a3def2 | |
parent | a8b2adad64620b8d16b155337f5b6fb4b712b1e9 (diff) | |
download | mariadb-git-bb-10.3-midenok-MDEV-21138.tar.gz |
Exclude just added rowbb-10.3-midenok-MDEV-21138
-rw-r--r-- | sql/sql_delete.cc | 4 | ||||
-rw-r--r-- | storage/innobase/include/row0upd.h | 19 |
2 files changed, 22 insertions, 1 deletions
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 929455977e6..af0ed6abc0c 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -246,6 +246,10 @@ int TABLE::delete_row() store_record(this, record[1]); vers_update_end(); + Field *row_start= vers_start_field(); + /* Don't create history for records inserted in same query */ + if (0 == row_start->cmp(row_start->ptr, vers_end_field()->ptr) >= 0) + return file->ha_delete_row(record[1]); return file->ha_update_row(record[1], record[0]); } diff --git a/storage/innobase/include/row0upd.h b/storage/innobase/include/row0upd.h index 51ed7a7f006..b3ae2f0b65d 100644 --- a/storage/innobase/include/row0upd.h +++ b/storage/innobase/include/row0upd.h @@ -613,8 +613,25 @@ public: void make_versioned_delete(const trx_t* trx) { update->n_fields = 0; - is_delete = VERSIONED_DELETE; make_versioned_helper(trx, table->vers_end); + const dfield_t* dfield_start = dtuple_get_nth_field( + row, table->vers_start); + const dfield_t* dfield_end = dtuple_get_nth_field( + row, table->vers_end); + if (0 == cmp_data_data(dfield_get_type(dfield_start)->mtype, + dfield_get_type(dfield_start)->prtype, + static_cast<const byte*>( + dfield_get_data(dfield_start)), + dfield_get_len(dfield_start), + static_cast<const byte*>( + dfield_get_data(dfield_end)), + dfield_get_len(dfield_end))) { + + is_delete = PLAIN_DELETE; + } + else { + is_delete = VERSIONED_DELETE; + } } }; |