1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-07 00:04:31 +03:00

MDEV-29721 Inconsistency upon inserting history with visible system versioning columns

This commit is contained in:
Sergei Golubchik
2022-10-17 19:09:47 +02:00
parent b6a608700d
commit fe44d46a03
4 changed files with 53 additions and 4 deletions

View File

@@ -0,0 +1,25 @@
set time_zone='+00:00';
#
# MDEV-29721 Inconsistency upon inserting history with visible system versioning columns
#
create table t1 (a int, s timestamp(6) as row start, e timestamp(6) as row end, period for system_time(s,e)) with system versioning;
set system_versioning_insert_history=on;
set timestamp=unix_timestamp('2010-10-10 10:10:10');
insert t1 (a,s,e) values (1,'2020-01-01',default), (2,'2020-02-02',ignore),(3,default,'2020-03-03'), (4,ignore,'2020-04-04');
set timestamp=unix_timestamp('2010-11-11 11:11:11');
insert t1 values (5,'2020-01-01',default), (6,'2020-02-02',ignore),(7,default,'2020-03-03'), (8,ignore,'2020-04-04');
set timestamp=default;
select * from t1 for system_time all;
a s e
1 2020-01-01 00:00:00.000000 2038-01-19 03:14:07.999999
2 2020-02-02 00:00:00.000000 2038-01-19 03:14:07.999999
3 2010-10-10 10:10:10.000000 2020-03-03 00:00:00.000000
4 2010-10-10 10:10:10.000000 2020-04-04 00:00:00.000000
5 2020-01-01 00:00:00.000000 2038-01-19 03:14:07.999999
6 2020-02-02 00:00:00.000000 2038-01-19 03:14:07.999999
7 2010-11-11 11:11:11.000000 2020-03-03 00:00:00.000000
8 2010-11-11 11:11:11.000000 2020-04-04 00:00:00.000000
drop table t1;
#
# End of 10.11 tests
#

View File

@@ -0,0 +1,21 @@
#
# simple tests that don't need to be run in multiple various combinations
#
set time_zone='+00:00';
--echo #
--echo # MDEV-29721 Inconsistency upon inserting history with visible system versioning columns
--echo #
create table t1 (a int, s timestamp(6) as row start, e timestamp(6) as row end, period for system_time(s,e)) with system versioning;
set system_versioning_insert_history=on;
set timestamp=unix_timestamp('2010-10-10 10:10:10');
insert t1 (a,s,e) values (1,'2020-01-01',default), (2,'2020-02-02',ignore),(3,default,'2020-03-03'), (4,ignore,'2020-04-04');
set timestamp=unix_timestamp('2010-11-11 11:11:11');
insert t1 values (5,'2020-01-01',default), (6,'2020-02-02',ignore),(7,default,'2020-03-03'), (8,ignore,'2020-04-04');
set timestamp=default;
select * from t1 for system_time all;
drop table t1;
--echo #
--echo # End of 10.11 tests
--echo #

View File

@@ -11307,7 +11307,13 @@ bool Field::save_in_field_default_value(bool view_error_processing)
This condition will go away as well as other conditions with vers_sys_field().
*/
if (vers_sys_field())
{
if (flags & VERS_ROW_START)
set_time();
else
set_max();
return false;
}
if (unlikely(flags & NO_DEFAULT_VALUE_FLAG &&
real_type() != MYSQL_TYPE_ENUM))

View File

@@ -9159,11 +9159,8 @@ bool TABLE::vers_update_fields()
bool res= false;
if (versioned(VERS_TIMESTAMP) && !vers_start_field()->has_explicit_value())
{
if (vers_start_field()->store_timestamp(in_use->query_start(),
in_use->query_start_sec_part()))
{
if (vers_start_field()->set_time())
DBUG_ASSERT(0);
}
}
if (!versioned(VERS_TIMESTAMP) || !vers_end_field()->has_explicit_value())