summaryrefslogtreecommitdiff
path: root/mysql-test/t/read_only_innodb.test
blob: f8c25fdee1dd2410b64641a3f19c73b0292c67cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# should work with embedded server after mysqltest is fixed
-- source include/not_embedded.inc
-- source include/have_innodb.inc

#
# BUG#11733: COMMITs should not happen if read-only is set
#

--disable_warnings
DROP TABLE IF EXISTS table_11733 ;
--enable_warnings

# READ_ONLY does nothing to SUPER users
# so we use a non-SUPER one:

grant CREATE, SELECT, DROP on *.* to test@localhost;

connect (con1,localhost,test,,test);

connection default;
set global read_only=0;

# Any transactional engine will do
create table table_11733 (a int) engine=InnoDb;

connection con1;
BEGIN;
insert into table_11733 values(11733);

connection default;
set global read_only=1;

connection con1;
select @@global.read_only;
select * from table_11733 ;
-- error ER_OPTION_PREVENTS_STATEMENT
COMMIT;

connection default;
set global read_only=0;
drop table table_11733 ;
drop user test@localhost;

disconnect con1;

#
# Bug #35732: read-only blocks SELECT statements in InnoDB
#
# Test 1: read only mode
GRANT CREATE, SELECT, DROP ON *.* TO test@localhost;
connect(con1, localhost, test, , test);

connection default;
CREATE TABLE t1(a INT) ENGINE=INNODB;
INSERT INTO t1 VALUES (0), (1);
SET GLOBAL read_only=1;

connection con1;
SELECT * FROM t1;
BEGIN;
SELECT * FROM t1;
COMMIT;

connection default;
SET GLOBAL read_only=0;

#
# Test 2: global read lock
#
FLUSH TABLES WITH READ LOCK;

connection con1;
SELECT * FROM t1;
BEGIN;
SELECT * FROM t1;
COMMIT;

connection default;
UNLOCK TABLES;
DROP TABLE t1;
DROP USER test@localhost;

disconnect con1;

--echo echo End of 5.1 tests