mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-16546 post-review fixes
* clarify the help text for --system-versioning-insert-history * move the vers_write=false check from Item_field::fix_fields() next to other vers field checks in find_field_in_table() * move row_start validation from handler::write_row() next to vers_update_fields() * make secure_timestamp check to happen in one place only, extract it into a function is_set_timestamp_vorbidden(). * overwriting vers fields is an error, just like setting @@timestamp * don't run vers_insert_history() for every row
This commit is contained in:
@@ -108,6 +108,8 @@ show create table t1;
|
||||
insert into t1(x, row_start, row_end) values (3, '1980-01-01 00:00:00', '1980-01-01 00:00:01');
|
||||
insert into t2(y, row_start, row_end) values (4, '1980-01-01 00:00:00', '1980-01-01 00:00:01');
|
||||
insert into t3 values (5, '1980-01-01 00:00:00', '1980-01-01 00:00:01');
|
||||
--error ER_WRONG_VALUE
|
||||
insert into t3 values (5, '1980-01-02 00:00:00', '1980-01-01 00:00:01');
|
||||
|
||||
select x, row_start, row_end from t1 for system_time all;
|
||||
select y, row_start, row_end from t2 for system_time all;
|
||||
@@ -215,22 +217,25 @@ select row_start = '1980-01-01 00:00:00', row_end = '1980-01-01 00:00:01' from t
|
||||
--let $restart_parameters= --secure-timestamp=YES
|
||||
--source include/restart_mysqld.inc
|
||||
set @@system_versioning_insert_history= 1;
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
--error ER_OPTION_PREVENTS_STATEMENT
|
||||
insert into t1(x, row_start, row_end) values (8, '1980-01-01 00:00:00', '1980-01-01 00:00:01');
|
||||
--let $restart_parameters= --secure-timestamp=REPLICATION
|
||||
--source include/restart_mysqld.inc
|
||||
create user nobody;
|
||||
grant all privileges on test.* to nobody;
|
||||
change_user nobody;
|
||||
set @@system_versioning_insert_history= 1;
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
insert into t1(x, row_start, row_end) values (9, '1980-01-01 00:00:00', '1980-01-01 00:00:01');
|
||||
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
||||
insert into test.t1(x, row_start, row_end) values (9, '1980-01-01 00:00:00', '1980-01-01 00:00:01');
|
||||
change_user root;
|
||||
--let $restart_parameters= --secure-timestamp=SUPER
|
||||
--source include/restart_mysqld.inc
|
||||
set @@system_versioning_insert_history= 1;
|
||||
insert into t1(x, row_start, row_end) values (10, '1980-01-01 00:00:00', '1980-01-01 00:00:01');
|
||||
create user nobody;
|
||||
insert into test.t1(x, row_start, row_end) values (10, '1980-01-01 00:00:00', '1980-01-01 00:00:01');
|
||||
change_user nobody;
|
||||
use test;
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
insert into t1(x, row_start, row_end) values (7, '1980-01-01 00:00:00', '1980-01-01 00:00:01');
|
||||
set @@system_versioning_insert_history= 1;
|
||||
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
||||
insert into test.t1(x, row_start, row_end) values (7, '1980-01-01 00:00:00', '1980-01-01 00:00:01');
|
||||
change_user root;
|
||||
use test;
|
||||
--let $restart_parameters= --secure-timestamp=NO
|
||||
|
@@ -2494,8 +2494,8 @@ lock tables t write;
|
||||
--error ER_UNKNOWN_PARTITION
|
||||
delete from t partition (px);
|
||||
unlock tables;
|
||||
# cleanup
|
||||
drop table t;
|
||||
set timestamp= default;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-28978 Assertion failure in THD::binlog_query or unexpected
|
||||
@@ -2508,6 +2508,23 @@ update t set a = 2 limit 0;
|
||||
# cleanup
|
||||
drop table t;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-16546 System versioning setting to allow history modification
|
||||
--echo #
|
||||
create table t1 (a varchar(100)) with system versioning
|
||||
partition by system_time interval 1 day
|
||||
starts '2021-09-30 00:00:00' partitions 3;
|
||||
set system_versioning_insert_history=1;
|
||||
insert into t1 (a,row_start,row_end) values
|
||||
('p0', '2021-09-30', '2021-09-30 10:00:00'),
|
||||
('p1', '2021-09-30', '2021-10-01 10:00:00'),
|
||||
('overflows, so also p1','2021-09-30', '2021-10-10 10:00:00'),
|
||||
('pn, current', '2021-09-30', '2038-01-19 03:14:07.999999');
|
||||
select table_name,partition_name,partition_ordinal_position,partition_method,partition_description,table_rows
|
||||
from information_schema.partitions where table_schema='test';
|
||||
drop table t1;
|
||||
set system_versioning_insert_history=0;
|
||||
|
||||
--disable_prepare_warnings
|
||||
set global innodb_stats_persistent= @save_persistent;
|
||||
--source suite/versioning/common_finish.inc
|
||||
|
@@ -336,6 +336,19 @@ select x, check_row_ts(row_start, row_end) from t3 for system_time all order by
|
||||
select row_start = '1980-01-01 00:00:00', row_end = '1980-01-01 00:00:01' from t3 for system_time all where x = 3;
|
||||
--remove_file $DATAFILE
|
||||
|
||||
--echo # why a slave cannot have system_versioning_insert_history always on
|
||||
connection master;
|
||||
set @@system_versioning_insert_history= 0;
|
||||
set sql_mode='';
|
||||
create or replace table t1 (a int,
|
||||
rs timestamp(6) as row start, re timestamp(6) as row end,
|
||||
period for system_time (rs,re)) with system versioning;
|
||||
insert t1 values (1, '2000-01-01 02:03:04', '2001-01-01 02:03.04');
|
||||
select a,check_row_ts(rs,re) from t1 for system_time all;
|
||||
sync_slave_with_master;
|
||||
select a,check_row_ts(rs,re) from t1 for system_time all;
|
||||
set sql_mode=default;
|
||||
|
||||
connection master;
|
||||
drop tables t1, t2, t3;
|
||||
|
||||
|
Reference in New Issue
Block a user