mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
831 lines
20 KiB
Text
831 lines
20 KiB
Text
include/master-slave.inc
|
|
[connection master]
|
|
connection master;
|
|
create database s_db;
|
|
grant all on s_db.* to normal_1@'%' identified by 'pass';
|
|
grant all on test.* to normal_2@'%' identified by 'pass';
|
|
grant all on s_db.* to normal_3@'%' identified by 'pass';
|
|
grant all on test.* to normal_4@'%' identified by 'pass';
|
|
grant select on test.* to normal_5@'%' identified by 'pass';
|
|
flush status;
|
|
connection slave;
|
|
connect m_normal_1, 127.0.0.1, normal_1, pass, s_db, $MASTER_MYPORT;
|
|
connect m_normal_2, 127.0.0.1, normal_2, pass, test, $MASTER_MYPORT;
|
|
connect m_normal_3, 127.0.0.1, normal_5, pass, test, $MASTER_MYPORT;
|
|
connect s_normal_3, 127.0.0.1, normal_3, pass, s_db, $SLAVE_MYPORT;
|
|
connect s_normal_4, 127.0.0.1, normal_4, pass, test, $SLAVE_MYPORT;
|
|
connection slave;
|
|
set global read_only=on;
|
|
###########################################
|
|
master and slave sync sequence.
|
|
###########################################
|
|
connection master;
|
|
use s_db;
|
|
create sequence s1;
|
|
show create table s1;
|
|
Table Create Table
|
|
s1 CREATE TABLE `s1` (
|
|
`next_not_cached_value` bigint(21) NOT NULL,
|
|
`minimum_value` bigint(21) NOT NULL,
|
|
`maximum_value` bigint(21) NOT NULL,
|
|
`start_value` bigint(21) NOT NULL COMMENT 'start value when sequences is created or value if RESTART is used',
|
|
`increment` bigint(21) NOT NULL COMMENT 'increment value',
|
|
`cache_size` bigint(21) unsigned NOT NULL,
|
|
`cycle_option` tinyint(1) unsigned NOT NULL COMMENT '0 if no cycles are allowed, 1 if the sequence should begin a new cycle when maximum_value is passed',
|
|
`cycle_count` bigint(21) NOT NULL COMMENT 'How many cycles have been done'
|
|
) ENGINE=MyISAM SEQUENCE=1
|
|
connection slave;
|
|
use s_db;
|
|
show create table s1;
|
|
Table Create Table
|
|
s1 CREATE TABLE `s1` (
|
|
`next_not_cached_value` bigint(21) NOT NULL,
|
|
`minimum_value` bigint(21) NOT NULL,
|
|
`maximum_value` bigint(21) NOT NULL,
|
|
`start_value` bigint(21) NOT NULL COMMENT 'start value when sequences is created or value if RESTART is used',
|
|
`increment` bigint(21) NOT NULL COMMENT 'increment value',
|
|
`cache_size` bigint(21) unsigned NOT NULL,
|
|
`cycle_option` tinyint(1) unsigned NOT NULL COMMENT '0 if no cycles are allowed, 1 if the sequence should begin a new cycle when maximum_value is passed',
|
|
`cycle_count` bigint(21) NOT NULL COMMENT 'How many cycles have been done'
|
|
) ENGINE=MyISAM SEQUENCE=1
|
|
connection master;
|
|
use s_db;
|
|
drop sequence s1;
|
|
###########################################
|
|
not support create table engine=sequence.
|
|
###########################################
|
|
connection master;
|
|
create table t(id int)engine=sequence;
|
|
ERROR 42000: Unknown storage engine 'sequence'
|
|
create table t(id int)engine=innodb;
|
|
alter table t engine=sequence;
|
|
ERROR 42000: Unknown storage engine 'sequence'
|
|
drop table t;
|
|
###########################################
|
|
not support alter sequence table.
|
|
###########################################
|
|
connection master;
|
|
create sequence s2;
|
|
alter table s2 add id int;
|
|
ERROR HY000: Sequence 's_db.s2' table structure is invalid (Wrong number of columns)
|
|
alter table s2 add index ind_x(start_value);
|
|
ERROR HY000: Sequence 's_db.s2' table structure is invalid (Sequence tables cannot have any keys)
|
|
drop sequence s2;
|
|
###########################################
|
|
Support create temporary sequence.
|
|
###########################################
|
|
connection master;
|
|
create temporary sequence s2;
|
|
drop temporary sequence s2;
|
|
###########################################
|
|
all invalid sequence value
|
|
###########################################
|
|
connection master;
|
|
use s_db;
|
|
create sequence s2 start with 1
|
|
minvalue 1
|
|
maxvalue 100000
|
|
increment by 1
|
|
cache 10000
|
|
cycle;
|
|
drop sequence s2;
|
|
create sequence s2 start with 1
|
|
minvalue 1
|
|
maxvalue 100000
|
|
increment by 1
|
|
cache 10000
|
|
nocycle;
|
|
drop sequence s2;
|
|
create sequence s2 start with 1
|
|
minvalue 1
|
|
maxvalue 100000
|
|
increment by 1
|
|
nocache
|
|
nocycle;
|
|
drop sequence s2;
|
|
create sequence s2 start with 1
|
|
minvalue 5
|
|
maxvalue 100000
|
|
increment by 1
|
|
nocache
|
|
nocycle;
|
|
ERROR HY000: Sequence 's_db.s2' has out of range value for options
|
|
create sequence s2 start with 1
|
|
minvalue 5
|
|
maxvalue 5
|
|
increment by 1
|
|
nocache
|
|
nocycle;
|
|
ERROR HY000: Sequence 's_db.s2' has out of range value for options
|
|
create sequence s2 start with 1
|
|
minvalue 5
|
|
maxvalue 4
|
|
increment by 1
|
|
nocache
|
|
nocycle;
|
|
ERROR HY000: Sequence 's_db.s2' has out of range value for options
|
|
create sequence s2 start with 1
|
|
minvalue 5
|
|
maxvalue 4
|
|
increment by 0
|
|
nocache
|
|
nocycle;
|
|
ERROR HY000: Sequence 's_db.s2' has out of range value for options
|
|
###########################################
|
|
global read lock prevent query sequence
|
|
###########################################
|
|
connection master;
|
|
use s_db;
|
|
create sequence s_db.s1;
|
|
flush table with read lock;
|
|
select next value for s1;
|
|
ERROR HY000: Can't execute the query because you have a conflicting read lock
|
|
unlock tables;
|
|
drop sequence s_db.s1;
|
|
###########################################
|
|
query cache test
|
|
###########################################
|
|
connection master;
|
|
use s_db;
|
|
show global variables like 'query_cache_type';
|
|
Variable_name Value
|
|
query_cache_type ON
|
|
show status like 'Qcache_hits';
|
|
Variable_name Value
|
|
Qcache_hits 0
|
|
show status like 'Qcache_inserts';
|
|
Variable_name Value
|
|
Qcache_inserts 0
|
|
###########################################
|
|
priv test
|
|
###########################################
|
|
connection m_normal_1;
|
|
create sequence s_db.s1;
|
|
select * from s_db.s1;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
1 1 9223372036854775806 1 1 1000 0 0
|
|
select next value for s_db.s1;
|
|
next value for s_db.s1
|
|
1
|
|
select * from s_db.s1;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
1001 1 9223372036854775806 1 1 1000 0 0
|
|
create sequence s_db.s2;
|
|
drop sequence s_db.s2;
|
|
connection m_normal_2;
|
|
select next value for s_db.s1;
|
|
ERROR 42000: INSERT command denied to user 'normal_2'@'localhost' for table `s_db`.`s1`
|
|
create sequence s_db.s2;
|
|
ERROR 42000: CREATE command denied to user 'normal_2'@'localhost' for table `s_db`.`s2`
|
|
connection m_normal_1;
|
|
drop sequence s_db.s1;
|
|
###########################################
|
|
run out sequence value
|
|
###########################################
|
|
connection m_normal_1;
|
|
use s_db;
|
|
create sequence s_t start with 1 cache 2 maxvalue 5;
|
|
create table t(id int);
|
|
insert into t values(1111);
|
|
insert into t select next value for s_t;
|
|
insert into t select next value for s_t;
|
|
insert into t select next value for s_t;
|
|
insert into t select next value for s_t;
|
|
insert into t select next value for s_t;
|
|
insert into t select next value for s_t;
|
|
ERROR HY000: Sequence 's_db.s_t' has run out
|
|
insert into t select next value for s_t;
|
|
ERROR HY000: Sequence 's_db.s_t' has run out
|
|
commit;
|
|
select * from t;
|
|
id
|
|
1111
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
connection master;
|
|
connection slave;
|
|
connection s_normal_3;
|
|
use s_db;
|
|
select * from t;
|
|
id
|
|
1111
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
connection m_normal_1;
|
|
use s_db;
|
|
drop sequence s_t;
|
|
drop table t;
|
|
###########################################
|
|
read_only prevent query sequence
|
|
###########################################
|
|
connection m_normal_1;
|
|
create sequence s_db.s1;
|
|
show global variables like 'read_only';
|
|
Variable_name Value
|
|
read_only OFF
|
|
select next value for s_db.s1;
|
|
next value for s_db.s1
|
|
1
|
|
connection master;
|
|
connection slave;
|
|
connection s_normal_3;
|
|
show global variables like 'read_only';
|
|
Variable_name Value
|
|
read_only ON
|
|
select next value for s_db.s1;
|
|
ERROR HY000: The MariaDB server is running with the --read-only option so it cannot execute this statement
|
|
connection m_normal_1;
|
|
drop sequence s_db.s1;
|
|
###########################################
|
|
update based table
|
|
###########################################
|
|
connection m_normal_1;
|
|
use s_db;
|
|
create sequence s_t start with 1 minvalue 1 maxvalue 20 increment by 1 cache 5 cycle;
|
|
connection master;
|
|
connection slave;
|
|
connection s_normal_3;
|
|
use s_db;
|
|
select * from s_t;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
1 1 20 1 1 5 1 0
|
|
connection m_normal_1;
|
|
select next value for s_t;
|
|
next value for s_t
|
|
1
|
|
select * from s_t;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
6 1 20 1 1 5 1 0
|
|
connection master;
|
|
connection slave;
|
|
connection s_normal_3;
|
|
select * from s_t;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
6 1 20 1 1 5 1 0
|
|
------------------------------------------
|
|
master update nextval;
|
|
------------------------------------------
|
|
connection m_normal_1;
|
|
select next value for s_t;
|
|
next value for s_t
|
|
2
|
|
update s_t set next_not_cached_value= 11;
|
|
ERROR HY000: Storage engine SEQUENCE of the table `s_db`.`s_t` doesn't have this option
|
|
alter sequence s_t restart=11;
|
|
commit;
|
|
select * from s_t;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
11 1 20 1 1 5 1 0
|
|
connection master;
|
|
connection slave;
|
|
------------------------------------------
|
|
show slave nextval;
|
|
------------------------------------------
|
|
connection s_normal_3;
|
|
select * from s_t;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
11 1 20 1 1 5 1 0
|
|
connection m_normal_1;
|
|
select next value for s_t;
|
|
next value for s_t
|
|
11
|
|
select * from s_t;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
16 1 20 1 1 5 1 0
|
|
connection master;
|
|
connection slave;
|
|
connection s_normal_3;
|
|
select * from s_t;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
16 1 20 1 1 5 1 0
|
|
------------------------------------------
|
|
update into invalid sequence
|
|
------------------------------------------
|
|
connection m_normal_1;
|
|
select * from s_t;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
16 1 20 1 1 5 1 0
|
|
update s_t set next_not_cached_value= 11,start_value=10, minimum_value=11;
|
|
ERROR HY000: Storage engine SEQUENCE of the table `s_db`.`s_t` doesn't have this option
|
|
ALTER SEQUENCE s_t restart with 11 start=10 minvalue=11;
|
|
ERROR HY000: Sequence 's_db.s_t' has out of range value for options
|
|
commit;
|
|
create table t_1(id int);
|
|
insert into t_1 value(1111);
|
|
select next value for s_t;
|
|
next value for s_t
|
|
12
|
|
insert into t_1 select next value for s_t;
|
|
commit;
|
|
select * from t_1;
|
|
id
|
|
1111
|
|
13
|
|
------------------------------------------
|
|
delete sequence row
|
|
------------------------------------------
|
|
connection m_normal_1;
|
|
delete from s_t;
|
|
ERROR HY000: Storage engine SEQUENCE of the table `s_db`.`s_t` doesn't have this option
|
|
commit;
|
|
select next value for s_t;
|
|
next value for s_t
|
|
14
|
|
connection m_normal_1;
|
|
drop sequence s_t;
|
|
drop table t_1;
|
|
###########################################
|
|
test transaction context (innodb)
|
|
###########################################
|
|
------------------------------------------
|
|
transaction table and sequence
|
|
normal transaction commit
|
|
------------------------------------------
|
|
connection m_normal_1;
|
|
use s_db;
|
|
create sequence s_1 cache 5;
|
|
create table t_1(id int)engine=innodb;
|
|
begin;
|
|
insert into t_1 values(1111);
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 values(2222);
|
|
commit;
|
|
select * from t_1;
|
|
id
|
|
1111
|
|
1
|
|
2
|
|
2222
|
|
connection master;
|
|
connection slave;
|
|
connection s_normal_3;
|
|
use s_db;
|
|
select * from t_1;
|
|
id
|
|
1111
|
|
1
|
|
2
|
|
2222
|
|
------------------------------------------
|
|
normal transaction rollback
|
|
------------------------------------------
|
|
connection m_normal_1;
|
|
begin;
|
|
insert into t_1 values(3333);
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
select * from t_1;
|
|
id
|
|
1111
|
|
1
|
|
2
|
|
2222
|
|
3333
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
rollback;
|
|
select * from t_1;
|
|
id
|
|
1111
|
|
1
|
|
2
|
|
2222
|
|
select next value for s_1;
|
|
next value for s_1
|
|
11
|
|
connection master;
|
|
connection slave;
|
|
connection s_normal_3;
|
|
use s_db;
|
|
select * from t_1;
|
|
id
|
|
1111
|
|
1
|
|
2
|
|
2222
|
|
connection m_normal_1;
|
|
use s_db;
|
|
drop sequence s_1;
|
|
drop table t_1;
|
|
###########################################
|
|
test transaction context (myisam)
|
|
###########################################
|
|
------------------------------------------
|
|
transaction table and sequence
|
|
normal transaction commit
|
|
------------------------------------------
|
|
connection m_normal_1;
|
|
use s_db;
|
|
create sequence s_1 cache 5;
|
|
create table t_1(id int)engine=myisam;
|
|
begin;
|
|
insert into t_1 values(1111);
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 values(2222);
|
|
commit;
|
|
select * from t_1;
|
|
id
|
|
1111
|
|
1
|
|
2
|
|
2222
|
|
connection master;
|
|
connection slave;
|
|
connection s_normal_3;
|
|
use s_db;
|
|
select * from t_1;
|
|
id
|
|
1111
|
|
1
|
|
2
|
|
2222
|
|
------------------------------------------
|
|
normal transaction rollback
|
|
------------------------------------------
|
|
connection m_normal_1;
|
|
begin;
|
|
insert into t_1 values(3333);
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
insert into t_1 select next value for s_1;
|
|
select * from t_1;
|
|
id
|
|
1111
|
|
1
|
|
2
|
|
2222
|
|
3333
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
rollback;
|
|
Warnings:
|
|
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
|
select * from t_1;
|
|
id
|
|
1111
|
|
1
|
|
2
|
|
2222
|
|
3333
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
select next value for s_1;
|
|
next value for s_1
|
|
11
|
|
connection master;
|
|
connection slave;
|
|
connection s_normal_3;
|
|
use s_db;
|
|
select * from t_1;
|
|
id
|
|
1111
|
|
1
|
|
2
|
|
2222
|
|
3333
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
connection m_normal_1;
|
|
use s_db;
|
|
drop sequence s_1;
|
|
drop table t_1;
|
|
###########################################
|
|
close binlog
|
|
###########################################
|
|
connection m_normal_1;
|
|
use s_db;
|
|
create sequence s1 cache 2;
|
|
select next value for s1;
|
|
next value for s1
|
|
1
|
|
select next value for s1;
|
|
next value for s1
|
|
2
|
|
select next value for s1;
|
|
next value for s1
|
|
3
|
|
select next value for s1;
|
|
next value for s1
|
|
4
|
|
commit;
|
|
select * from s1;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
5 1 9223372036854775806 1 1 2 0 0
|
|
connection master;
|
|
connection slave;
|
|
connection slave;
|
|
use s_db;
|
|
select * from s1;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
5 1 9223372036854775806 1 1 2 0 0
|
|
------------------------------------------
|
|
close session binlog.
|
|
------------------------------------------
|
|
connection master;
|
|
set session sql_log_bin=off;
|
|
select next value for s1;
|
|
next value for s1
|
|
5
|
|
select next value for s1;
|
|
next value for s1
|
|
6
|
|
select next value for s1;
|
|
next value for s1
|
|
7
|
|
select next value for s1;
|
|
next value for s1
|
|
8
|
|
set session sql_log_bin=on;
|
|
select * from s1;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
9 1 9223372036854775806 1 1 2 0 0
|
|
connection master;
|
|
connection slave;
|
|
connection slave;
|
|
use s_db;
|
|
select * from s1;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
5 1 9223372036854775806 1 1 2 0 0
|
|
connection m_normal_1;
|
|
use s_db;
|
|
drop sequence s1;
|
|
###########################################
|
|
statement binlog
|
|
###########################################
|
|
------------------------------------------
|
|
set binlog_format=statement
|
|
------------------------------------------
|
|
connection master;
|
|
set session binlog_format=statement;
|
|
select @@session.binlog_format;
|
|
@@session.binlog_format
|
|
STATEMENT
|
|
create sequence s1 cache 2;
|
|
select next value for s1;
|
|
ERROR HY000: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging.
|
|
set session binlog_format=row;
|
|
select next value for s1;
|
|
next value for s1
|
|
1
|
|
select * from s1;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
3 1 9223372036854775806 1 1 2 0 0
|
|
connection master;
|
|
connection slave;
|
|
use s_db;
|
|
select * from s1;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
3 1 9223372036854775806 1 1 2 0 0
|
|
connection m_normal_1;
|
|
use s_db;
|
|
drop sequence s1;
|
|
###########################################
|
|
test savepoint
|
|
###########################################
|
|
connection master;
|
|
set session binlog_format=row;
|
|
create sequence s1 cache 2;
|
|
create table t1(id int)engine=innodb;
|
|
begin;
|
|
insert into t1 values(1111);
|
|
savepoint sp1;
|
|
insert into t1 select next value for s1;
|
|
insert into t1 select next value for s1;
|
|
insert into t1 select next value for s1;
|
|
insert into t1 values(2222);
|
|
select * from t1;
|
|
id
|
|
1111
|
|
1
|
|
2
|
|
3
|
|
2222
|
|
rollback to sp1;
|
|
select * from t1;
|
|
id
|
|
1111
|
|
select next value for s1;
|
|
next value for s1
|
|
4
|
|
commit;
|
|
drop sequence s1;
|
|
drop table t1;
|
|
###########################################
|
|
test proc
|
|
###########################################
|
|
connection m_normal_1;
|
|
use s_db;
|
|
create table t(id int)engine=innodb;
|
|
create procedure p1()
|
|
begin
|
|
create sequence s1 cache 2;
|
|
end//
|
|
create procedure p2()
|
|
begin
|
|
insert into t select next value for s1;
|
|
commit;
|
|
end//
|
|
call p1();
|
|
call p2();
|
|
call p2();
|
|
call p2();
|
|
call p2();
|
|
select * from t;
|
|
id
|
|
1
|
|
2
|
|
3
|
|
4
|
|
connection master;
|
|
connection slave;
|
|
use s_db;
|
|
select * from t;
|
|
id
|
|
1
|
|
2
|
|
3
|
|
4
|
|
connection m_normal_1;
|
|
drop table t;
|
|
drop sequence s1;
|
|
drop procedure p1;
|
|
drop procedure p2;
|
|
###########################################
|
|
test trigger
|
|
###########################################
|
|
connection m_normal_1;
|
|
use s_db;
|
|
create sequence s1 cache 2;
|
|
create table t1(id int)engine=innodb;
|
|
create table t2(id int)engine=innodb;
|
|
CREATE TRIGGER tri_1
|
|
before INSERT ON t2 FOR EACH ROW
|
|
BEGIN
|
|
INSERT INTO t1 select next value for s1;
|
|
END//
|
|
begin;
|
|
insert into t2 values(1111);
|
|
insert into t2 values(1111);
|
|
insert into t2 values(1111);
|
|
insert into t2 values(1111);
|
|
select * from t2;
|
|
id
|
|
1111
|
|
1111
|
|
1111
|
|
1111
|
|
select * from t1;
|
|
id
|
|
1
|
|
2
|
|
3
|
|
4
|
|
rollback;
|
|
select * from t2;
|
|
id
|
|
select * from t1;
|
|
id
|
|
select next value for s1;
|
|
next value for s1
|
|
5
|
|
drop trigger tri_1;
|
|
drop table t1;
|
|
drop table t2;
|
|
drop sequence s1;
|
|
###########################################
|
|
test function
|
|
###########################################
|
|
connection m_normal_1;
|
|
use s_db;
|
|
create sequence s1 cache 2;
|
|
create table t1(id int)engine=innodb;
|
|
CREATE function f1() returns int
|
|
BEGIN
|
|
INSERT INTO t1 select next value for s1;
|
|
return (1);
|
|
END//
|
|
begin;
|
|
select f1();
|
|
f1()
|
|
1
|
|
select f1();
|
|
f1()
|
|
1
|
|
select f1();
|
|
f1()
|
|
1
|
|
select f1();
|
|
f1()
|
|
1
|
|
select * from t1;
|
|
id
|
|
1
|
|
2
|
|
3
|
|
4
|
|
rollback;
|
|
select * from t1;
|
|
id
|
|
select next value for s1;
|
|
next value for s1
|
|
5
|
|
drop function f1;
|
|
drop table t1;
|
|
drop sequence s1;
|
|
##############
|
|
Test GRANT
|
|
##############
|
|
connection m_normal_2;
|
|
create table t1 (a int);
|
|
create sequence s1;
|
|
select next value for s1;
|
|
next value for s1
|
|
1
|
|
insert into t1 values (1);
|
|
connection m_normal_3;
|
|
select * from t1;
|
|
a
|
|
1
|
|
select * from s1;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
1001 1 9223372036854775806 1 1 1000 0 0
|
|
select previous value for s1;
|
|
previous value for s1
|
|
NULL
|
|
insert into t1 values (2);
|
|
ERROR 42000: INSERT command denied to user 'normal_5'@'localhost' for table `test`.`t1`
|
|
select next value for s1;
|
|
ERROR 42000: INSERT command denied to user 'normal_5'@'localhost' for table `test`.`s1`
|
|
do setval(s1,1000,0);
|
|
ERROR 42000: INSERT command denied to user 'normal_5'@'localhost' for table `test`.`s1`
|
|
connection master;
|
|
grant insert on test.* to normal_5@'%' identified by 'pass';
|
|
disconnect m_normal_3;
|
|
connect m_normal_3, 127.0.0.1, normal_5, pass, test, $MASTER_MYPORT;
|
|
insert into t1 values (2);
|
|
select t1.*, (next value for s1) from t1;
|
|
a (next value for s1)
|
|
1 2
|
|
2 3
|
|
do setval(s1,10000,0);
|
|
select * from s1;
|
|
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
|
|
10000 1 9223372036854775806 1 1 1000 0 0
|
|
connection m_normal_2;
|
|
drop table t1;
|
|
drop sequence s1;
|
|
#
|
|
# Cleanup
|
|
#
|
|
connection master;
|
|
use s_db;
|
|
drop database s_db;
|
|
drop user normal_1@'%';
|
|
drop user normal_2@'%';
|
|
drop user normal_3@'%';
|
|
drop user normal_4@'%';
|
|
drop user normal_5@'%';
|
|
include/rpl_end.inc
|