1
0
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:
Sergei Golubchik
2022-09-06 19:28:42 +02:00
parent a2cda88631
commit 8d2ec37a40
16 changed files with 162 additions and 88 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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;