summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Midenkov <midenok@gmail.com>2020-04-04 11:37:20 +0300
committerAleksey Midenkov <midenok@gmail.com>2020-04-04 11:37:20 +0300
commit2fbb3462bebcb16a0ae1ffcd265bb7648a416dc9 (patch)
tree8fc1242e4fbe9c8dea2ff70ee1244f2fe7a3def2
parenta8b2adad64620b8d16b155337f5b6fb4b712b1e9 (diff)
downloadmariadb-git-bb-10.3-midenok-MDEV-21138.tar.gz
Exclude just added rowbb-10.3-midenok-MDEV-21138
-rw-r--r--sql/sql_delete.cc4
-rw-r--r--storage/innobase/include/row0upd.h19
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;
+ }
}
};