mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
9fd89afca0
Problem: SELECTs prohibited for a transactional SE in autocommit mode if read_only is set. Fix: allow them. mysql-test/r/read_only_innodb.result: Fix for bug #35732: read-only blocks SELECT statements in InnoDB - test result. mysql-test/t/read_only_innodb.test: Fix for bug #35732: read-only blocks SELECT statements in InnoDB - test case. sql/handler.cc: Fix for bug #35732: read-only blocks SELECT statements in InnoDB - in autocommit mode thd->transaction.all list is empty thus is_real_trans set to TRUE for any SELECTs, so using it in the "read_only" check is insufficient. ha_check_and_coalesce_trx_read_only() changed to return number of engines with read-write changes. This value is used in the "read-only" check and checks for GLOBAL READ LOCK. sql/lock.cc: Fix for bug #35732: read-only blocks SELECT statements in InnoDB - added assert(protect_against_global_read_lock) before decreasing, in order to catch (uint) 0 - 1 situation due to wrong wait_if_global_read_lock()/start_waiting_global_read_lock() call sequence.
48 lines
907 B
Text
48 lines
907 B
Text
DROP TABLE IF EXISTS table_11733 ;
|
|
grant CREATE, SELECT, DROP on *.* to test@localhost;
|
|
set global read_only=0;
|
|
create table table_11733 (a int) engine=InnoDb;
|
|
BEGIN;
|
|
insert into table_11733 values(11733);
|
|
set global read_only=1;
|
|
select @@global.read_only;
|
|
@@global.read_only
|
|
1
|
|
select * from table_11733 ;
|
|
a
|
|
11733
|
|
COMMIT;
|
|
ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
|
|
set global read_only=0;
|
|
drop table table_11733 ;
|
|
drop user test@localhost;
|
|
GRANT CREATE, SELECT, DROP ON *.* TO test@localhost;
|
|
CREATE TABLE t1(a INT) ENGINE=INNODB;
|
|
INSERT INTO t1 VALUES (0), (1);
|
|
SET GLOBAL read_only=1;
|
|
SELECT * FROM t1;
|
|
a
|
|
0
|
|
1
|
|
BEGIN;
|
|
SELECT * FROM t1;
|
|
a
|
|
0
|
|
1
|
|
COMMIT;
|
|
SET GLOBAL read_only=0;
|
|
FLUSH TABLES WITH READ LOCK;
|
|
SELECT * FROM t1;
|
|
a
|
|
0
|
|
1
|
|
BEGIN;
|
|
SELECT * FROM t1;
|
|
a
|
|
0
|
|
1
|
|
COMMIT;
|
|
UNLOCK TABLES;
|
|
DROP TABLE t1;
|
|
DROP USER test@localhost;
|
|
echo End of 5.1 tests
|