summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/suite/versioning/r/insert.result6
-rw-r--r--mysql-test/suite/versioning/r/update.result6
-rw-r--r--mysql-test/suite/versioning/t/insert.test4
-rw-r--r--mysql-test/suite/versioning/t/update.test5
-rw-r--r--sql/sql_delete.cc2
-rw-r--r--sql/sql_insert.cc9
-rw-r--r--sql/table.cc9
-rw-r--r--sql/table.h1
8 files changed, 27 insertions, 15 deletions
diff --git a/mysql-test/suite/versioning/r/insert.result b/mysql-test/suite/versioning/r/insert.result
index e99d45011d5..0c9718c106b 100644
--- a/mysql-test/suite/versioning/r/insert.result
+++ b/mysql-test/suite/versioning/r/insert.result
@@ -353,6 +353,12 @@ a
select * from t1 for system_time as of sysdate(6);
a
1
+update t1 set a=2;
+delete from t1;
+select *, row_start > @a, row_end > @a from t1 for system_time all;
+a row_start > @a row_end > @a
+1 0 1
+2 1 1
#
# MDEV-14871 Server crashes in fill_record / fill_record_n_invoke_before_triggers upon inserting into versioned table with trigger
#
diff --git a/mysql-test/suite/versioning/r/update.result b/mysql-test/suite/versioning/r/update.result
index 08be6825b7f..e0daf1d6588 100644
--- a/mysql-test/suite/versioning/r/update.result
+++ b/mysql-test/suite/versioning/r/update.result
@@ -616,12 +616,10 @@ No A B C D
2 1 1 1 1
3 1 1 1 1
### Issue #365, bug 7 (duplicate of historical row)
-set timestamp= 1000000019;
create or replace table t1 (a int primary key, b int)
with system versioning engine myisam;
insert into t1 (a) values (1);
-update t1 set b= 2;
-insert into t1 (a) values (1) on duplicate key update a= 2;
-ERROR 23000: Duplicate entry '1-2001-09-09 01:46:59.000000' for key 'PRIMARY'
+replace t1 values (1,2),(1,3),(2,4);
+ERROR 23000: Duplicate entry '1-YYYY-MM-DD hh:mm:ss.uuuuuu' for key 'PRIMARY'
drop database test;
create database test;
diff --git a/mysql-test/suite/versioning/t/insert.test b/mysql-test/suite/versioning/t/insert.test
index f70ba344b13..482f0dd77ce 100644
--- a/mysql-test/suite/versioning/t/insert.test
+++ b/mysql-test/suite/versioning/t/insert.test
@@ -251,6 +251,10 @@ set @a=sysdate(6);
select * from t1 for system_time as of now(6);
select * from t1 for system_time as of sysdate(6);
+update t1 set a=2;
+delete from t1;
+--sorted_result
+select *, row_start > @a, row_end > @a from t1 for system_time all;
--echo #
--echo # MDEV-14871 Server crashes in fill_record / fill_record_n_invoke_before_triggers upon inserting into versioned table with trigger
diff --git a/mysql-test/suite/versioning/t/update.test b/mysql-test/suite/versioning/t/update.test
index bda908f4b54..60f20705276 100644
--- a/mysql-test/suite/versioning/t/update.test
+++ b/mysql-test/suite/versioning/t/update.test
@@ -277,13 +277,12 @@ call test_07('bigint unsigned', 'innodb', 'vtq_commit_ts(sys_trx_end)');
call verify_vtq;
--echo ### Issue #365, bug 7 (duplicate of historical row)
-set timestamp= 1000000019;
create or replace table t1 (a int primary key, b int)
with system versioning engine myisam;
insert into t1 (a) values (1);
-update t1 set b= 2;
+--replace_regex /'1-[- .\d:]+'/'1-YYYY-MM-DD hh:mm:ss.uuuuuu'/
--error ER_DUP_ENTRY
-insert into t1 (a) values (1) on duplicate key update a= 2;
+replace t1 values (1,2),(1,3),(2,4);
drop database test;
create database test;
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index a382fdb7c03..14d04dcc2ad 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -253,7 +253,7 @@ int TABLE::delete_row()
return file->ha_delete_row(record[0]);
store_record(this, record[1]);
- vers_end_field()->set_time();
+ vers_update_end();
return file->ha_update_row(record[1], record[0]);
}
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index 203838dac10..cb46b4847bd 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -1638,8 +1638,7 @@ int vers_insert_history_row(TABLE *table)
restore_record(table,record[1]);
// Set Sys_end to now()
- if (table->vers_end_field()->set_time())
- DBUG_ASSERT(0);
+ table->vers_update_end();
return table->file->ha_write_row(table->record[0]);
}
@@ -1971,11 +1970,7 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
DBUG_ASSERT(table->insert_values);
store_record(table,insert_values);
restore_record(table,record[1]);
- if (table->vers_end_field()->set_time())
- {
- error= 1;
- goto err;
- }
+ table->vers_update_end();
error= table->file->ha_update_row(table->record[1],
table->record[0]);
restore_record(table,insert_values);
diff --git a/sql/table.cc b/sql/table.cc
index 5a87acd4ed4..cd635d32b71 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -7800,6 +7800,15 @@ void TABLE::vers_update_fields()
}
+void TABLE::vers_update_end()
+{
+ vers_end_field()->set_notnull();
+ if (vers_end_field()->store_timestamp(in_use->system_time,
+ in_use->system_time_sec_part))
+ DBUG_ASSERT(0);
+}
+
+
bool TABLE_LIST::vers_vtmd_name(String& out) const
{
static const char *vtmd_suffix= "_vtmd";
diff --git a/sql/table.h b/sql/table.h
index 71858be6229..3882bfad279 100644
--- a/sql/table.h
+++ b/sql/table.h
@@ -1588,6 +1588,7 @@ public:
int delete_row();
void vers_update_fields();
+ void vers_update_end();
/** Number of additional fields used in versioned tables */
#define VERSIONING_FIELDS 2