From d99b8004e6b46e2a1b321bf50825254bf841cddb Mon Sep 17 00:00:00 2001 From: Alexey Botchkov Date: Sat, 25 Aug 2012 20:57:17 +0500 Subject: [PATCH] SQL syntax extended with START TRANSACTION READ ONLY|READ WRITE and SET TRANSACTION READ ONLT|READ WRITE statements. per-file comments: mysql-test/include/check-warnings.test READ ONLY transaction flag cleaned. mysql-test/r/commit.result result updated mysql-test/r/read_only.result result updated mysql-test/t/commit.test tests added. mysql-test/t/read_only.test tests added sql/lex.h ONLY symbol added. sql/sql_base.cc DBUG_RETURN added. sql/sql_parse.cc implementations added. sql/sql_yacc.yy SQL syntax extended. storage/perfschema/gen_pfs_lex_token changes forced by lex.h storage/perfschema/pfs_lex_token.h changes forced by lex.h --- mysql-test/include/check-warnings.test | 6 +- mysql-test/r/commit.result | 306 +++++++++++++- mysql-test/r/read_only.result | 37 ++ mysql-test/r/trans_read_only.result | 40 ++ mysql-test/t/commit.test | 359 +++++++++++++++- mysql-test/t/read_only.test | 59 +++ mysql-test/t/trans_read_only-master.opt | 1 + mysql-test/t/trans_read_only.test | 50 +++ sql/lex.h | 1 + sql/sql_base.cc | 2 +- sql/sql_parse.cc | 1 + sql/sql_yacc.yy | 482 ++++++++++++++------- storage/perfschema/gen_pfs_lex_token | Bin 160124 -> 132216 bytes storage/perfschema/pfs_lex_token.h | 535 ++++++++++++------------ 14 files changed, 1456 insertions(+), 423 deletions(-) create mode 100644 mysql-test/r/trans_read_only.result create mode 100644 mysql-test/t/trans_read_only-master.opt create mode 100644 mysql-test/t/trans_read_only.test diff --git a/mysql-test/include/check-warnings.test b/mysql-test/include/check-warnings.test index 3a26f7eecb1..720f90d7b02 100644 --- a/mysql-test/include/check-warnings.test +++ b/mysql-test/include/check-warnings.test @@ -14,10 +14,12 @@ set SQL_LOG_BIN=0; # Turn off any debug crashes, allow the variable to be # non existent in release builds --error 0,1193 -set debug_dbug=""; - +set debug=""; use mtr; +# Allow this session to read-write even if server is started +# with --transaction-read-only +set session transaction read write; create temporary table error_log ( row int auto_increment primary key, diff --git a/mysql-test/r/commit.result b/mysql-test/r/commit.result index 00e39c29768..a62d2940d85 100644 --- a/mysql-test/r/commit.result +++ b/mysql-test/r/commit.result @@ -264,9 +264,313 @@ Should only read the '1000' as this transaction is now in REP READ COMMIT AND NO CHAIN; SET @@completion_type=0; COMMIT AND NO CHAIN; -SET @autocommit=1; +SET @@autocommit=1; COMMIT; DROP TABLE t1; # # End of test cases for Bug#20837 # +# +# WL#5968 Implement START TRANSACTION READ (WRITE|ONLY); +# +# +# Test 1: Check supported syntax +START TRANSACTION; +COMMIT; +START TRANSACTION READ ONLY; +COMMIT; +START TRANSACTION READ WRITE; +COMMIT; +START TRANSACTION READ ONLY, READ WRITE; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 +START TRANSACTION READ ONLY, WITH CONSISTENT SNAPSHOT; +COMMIT; +START TRANSACTION READ WRITE, WITH CONSISTENT SNAPSHOT; +COMMIT; +START TRANSACTION WITH CONSISTENT SNAPSHOT, READ ONLY; +COMMIT; +START TRANSACTION WITH CONSISTENT SNAPSHOT, READ WRITE; +COMMIT; +START TRANSACTION READ ONLY, WITH CONSISTENT SNAPSHOT, READ WRITE; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 +SET TRANSACTION READ ONLY; +SET TRANSACTION READ WRITE; +SET TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ ONLY; +SET TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ WRITE; +SET TRANSACTION READ ONLY, ISOLATION LEVEL READ COMMITTED; +SET TRANSACTION READ WRITE, ISOLATION LEVEL READ COMMITTED; +SET TRANSACTION READ ONLY, READ WRITE; +ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'READ WRITE' at line 1 +COMMIT; +# +# Test 2: Check setting of variable. +SET SESSION TRANSACTION READ WRITE; +SELECT @@tx_read_only; +@@tx_read_only +0 +SET SESSION TRANSACTION READ ONLY; +SELECT @@tx_read_only; +@@tx_read_only +1 +SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE; +SELECT @@tx_read_only; +@@tx_read_only +0 +SET SESSION TRANSACTION READ ONLY, ISOLATION LEVEL REPEATABLE READ; +SELECT @@tx_read_only; +@@tx_read_only +1 +START TRANSACTION; +# Not allowed inside a transaction +SET TRANSACTION READ ONLY; +ERROR 25001: Transaction characteristics can't be changed while a transaction is in progress +# But these are allowed. +SET SESSION TRANSACTION READ ONLY; +SET GLOBAL TRANSACTION READ ONLY; +COMMIT; +SET SESSION TRANSACTION READ WRITE; +SET GLOBAL TRANSACTION READ WRITE; +# +# Test 3: Test that write operations are properly blocked. +CREATE TABLE t1(a INT); +CREATE TEMPORARY TABLE temp_t2(a INT); +SET SESSION TRANSACTION READ ONLY; +# 1: DDL should be blocked, also on temporary tables. +CREATE TABLE t3(a INT); +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +ALTER TABLE t1 COMMENT "Test"; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +DROP TABLE t1; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +CREATE TEMPORARY TABLE temp_t3(a INT); +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +ALTER TABLE temp_t2 COMMENT "Test"; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +DROP TEMPORARY TABLE temp_t2; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +CREATE FUNCTION f1() RETURNS INT RETURN 1; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +DROP FUNCTION f1; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +CREATE PROCEDURE p1() BEGIN END; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +DROP PROCEDURE p1; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +CREATE VIEW v1 AS SELECT 1; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +SET SESSION TRANSACTION READ WRITE; +CREATE VIEW v1 AS SELECT 1; +SET SESSION TRANSACTION READ ONLY; +DROP VIEW v1; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +SET SESSION TRANSACTION READ WRITE; +DROP VIEW v1; +SET SESSION TRANSACTION READ ONLY; +RENAME TABLE t1 TO t2; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +RENAME TABLE temp_t2 TO temp_t3; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +TRUNCATE TABLE t1; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +CREATE DATABASE db1; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +DROP DATABASE db1; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +SET SESSION TRANSACTION READ WRITE; +# 2: DML should be blocked on non-temporary tables. +START TRANSACTION READ ONLY; +INSERT INTO t1 VALUES (1), (2); +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +UPDATE t1 SET a= 3; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +DELETE FROM t1; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +# 3: DML should be allowed on temporary tables. +INSERT INTO temp_t2 VALUES (1), (2); +UPDATE temp_t2 SET a= 3; +DELETE FROM temp_t2; +# 4: Queries should not be blocked. +SELECT * FROM t1; +a +SELECT * FROM temp_t2; +a +HANDLER t1 OPEN; +HANDLER t1 READ FIRST; +a +HANDLER t1 CLOSE; +HANDLER temp_t2 OPEN; +HANDLER temp_t2 READ FIRST; +a +HANDLER temp_t2 CLOSE; +# 5: Prepared statements +PREPARE stmt FROM "DELETE FROM t1"; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +PREPARE stmt FROM "DELETE FROM temp_t2"; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +COMMIT; +# 6: Stored routines +CREATE FUNCTION f1() RETURNS INT +BEGIN +DELETE FROM t1; +RETURN 1; +END| +CREATE FUNCTION f2() RETURNS INT +BEGIN +DELETE FROM temp_t2; +RETURN 1; +END| +CREATE PROCEDURE p1() DELETE FROM t1; +CREATE PROCEDURE p2() DELETE FROM temp_t2; +START TRANSACTION READ ONLY; +SELECT f1(); +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +SELECT f2(); +f2() +1 +CALL p1(); +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +CALL p2(); +COMMIT; +DROP FUNCTION f1; +DROP FUNCTION f2; +DROP PROCEDURE p1; +DROP PROCEDURE p2; +# 7: Views +CREATE VIEW v1 AS SELECT a FROM t1; +START TRANSACTION READ ONLY; +INSERT INTO v1 VALUES (1), (2); +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +SELECT * FROM v1; +a +COMMIT; +DROP VIEW v1; +# 8: LOCK TABLE +SET SESSION TRANSACTION READ ONLY; +LOCK TABLE t1 WRITE; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +LOCK TABLE t1 READ; +UNLOCK TABLES; +SET SESSION TRANSACTION READ WRITE; +DROP TABLE temp_t2, t1; +# +# Test 4: SET TRANSACTION, CHAINing transactions +CREATE TABLE t1(a INT); +SET SESSION TRANSACTION READ ONLY; +START TRANSACTION; +DELETE FROM t1; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +COMMIT; +START TRANSACTION READ WRITE; +DELETE FROM t1; +COMMIT; +SET SESSION TRANSACTION READ WRITE; +SET TRANSACTION READ ONLY; +START TRANSACTION; +DELETE FROM t1; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +COMMIT; +START TRANSACTION READ WRITE; +DELETE FROM t1; +COMMIT; +START TRANSACTION READ ONLY; +SELECT * FROM t1; +a +COMMIT AND CHAIN; +DELETE FROM t1; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +COMMIT; +START TRANSACTION READ ONLY; +SELECT * FROM t1; +a +ROLLBACK AND CHAIN; +DELETE FROM t1; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +COMMIT; +DROP TABLE t1; +# +# Test 5: Test that reserved keyword ONLY is still allowed as +# identifier - both directly and in SPs. +SET @only= 1; +CREATE TABLE t1 (only INT); +INSERT INTO t1 (only) values (1); +SELECT only FROM t1 WHERE only = 1; +only +1 +DROP TABLE t1; +CREATE PROCEDURE p1() +BEGIN +DECLARE only INT DEFAULT 1; +END| +CALL p1(); +DROP PROCEDURE p1; +# +# Test 6: Check that XA transactions obey default access mode. +CREATE TABLE t1(a INT); +SET TRANSACTION READ ONLY; +XA START 'test1'; +INSERT INTO t1 VALUES (1); +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +UPDATE t1 SET a=2; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +DELETE FROM t1; +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +XA END 'test1'; +XA PREPARE 'test1'; +XA COMMIT 'test1'; +DROP TABLE t1; +# +# Test 7: SET TRANSACTION inside stored routines +CREATE PROCEDURE p1() SET SESSION TRANSACTION READ ONLY; +CALL p1(); +SELECT @@tx_read_only; +@@tx_read_only +1 +SET SESSION TRANSACTION READ WRITE; +DROP PROCEDURE p1; +CREATE PROCEDURE p1() SET SESSION TRANSACTION READ ONLY, +ISOLATION LEVEL SERIALIZABLE; +CALL p1(); +SELECT @@tx_read_only; +@@tx_read_only +1 +SET SESSION TRANSACTION READ WRITE, ISOLATION LEVEL REPEATABLE READ; +DROP PROCEDURE p1; +CREATE FUNCTION f1() RETURNS INT +BEGIN +SET SESSION TRANSACTION READ ONLY; +RETURN 1; +END| +SELECT f1(); +f1() +1 +SELECT @@tx_read_only; +@@tx_read_only +1 +SET SESSION TRANSACTION READ WRITE; +DROP FUNCTION f1; +CREATE FUNCTION f1() RETURNS INT +BEGIN +SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ ONLY; +RETURN 1; +END| +SELECT f1(); +f1() +1 +SELECT @@tx_read_only; +@@tx_read_only +1 +SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE; +DROP FUNCTION f1; +# +# Test 8: SET TRANSACTION and auto-commit +SELECT @@autocommit; +@@autocommit +1 +CREATE TABLE t1(a INT) engine=InnoDB; +SET TRANSACTION READ ONLY; +SELECT * FROM t1; +a +# This statement should work, since last statement committed. +INSERT INTO t1 VALUES (1); +DROP TABLE t1; diff --git a/mysql-test/r/read_only.result b/mysql-test/r/read_only.result index 1ffe2b86f70..3811c6c5487 100644 --- a/mysql-test/r/read_only.result +++ b/mysql-test/r/read_only.result @@ -157,3 +157,40 @@ delete from mysql.columns_priv where User like 'mysqltest_%'; flush privileges; drop database mysqltest_db1; set global read_only= @start_read_only; +# +# WL#5968 Implement START TRANSACTION READ (WRITE|ONLY); +# +# +# Test interaction with read_only system variable. +DROP TABLE IF EXISTS t1; +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (1), (2); +CREATE USER user1; +SET GLOBAL read_only= 1; +# All allowed with super privilege +START TRANSACTION; +COMMIT; +START TRANSACTION READ ONLY; +COMMIT; +START TRANSACTION READ WRITE; +COMMIT; +# We allow implicit RW transaction without super privilege +# for compatibility reasons +START TRANSACTION; +# Check that table updates are still disallowed. +INSERT INTO t1 VALUES (3); +ERROR HY000: The MariaDB server is running with the --read-only option so it cannot execute this statement +UPDATE t1 SET a= 1; +ERROR HY000: The MariaDB server is running with the --read-only option so it cannot execute this statement +DELETE FROM t1; +ERROR HY000: The MariaDB server is running with the --read-only option so it cannot execute this statement +COMMIT; +START TRANSACTION READ ONLY; +COMMIT; +# Explicit RW trans is not allowed without super privilege +START TRANSACTION READ WRITE; +ERROR HY000: The MariaDB server is running with the --read-only option so it cannot execute this statement +COMMIT; +DROP USER user1; +SET GLOBAL read_only= 0; +DROP TABLE t1; diff --git a/mysql-test/r/trans_read_only.result b/mysql-test/r/trans_read_only.result new file mode 100644 index 00000000000..2b1055d4a7b --- /dev/null +++ b/mysql-test/r/trans_read_only.result @@ -0,0 +1,40 @@ +# +# WL#5968: Implement START TRANSACTION READ (WRITE|ONLY); +# +# +# Test9: The --transaction-read-only startup option. +# Check that the option was set by the .opt file. +SELECT @@tx_read_only; +@@tx_read_only +1 +# Also for new connections. Switching to con1 +SELECT @@tx_read_only; +@@tx_read_only +1 +SET SESSION TRANSACTION READ WRITE; +SELECT @@tx_read_only; +@@tx_read_only +0 +# Connection default +SELECT @@tx_read_only; +@@tx_read_only +1 +# +# Test 10: SET TRANSACTION / START TRANSACTION + implicit commit. +SET SESSION TRANSACTION READ WRITE; +SET TRANSACTION READ ONLY; +# Since DDL does implicit commit before starting, SET TRANSACTION +# will have no effect because the "next" transaction will already +# be over before the DDL statement starts. +CREATE TABLE t1 (a INT); +START TRANSACTION READ ONLY; +# The same happens with START TRANSACTION +DROP TABLE t1; +# +# Test 11: INSERT DELAYED +CREATE TABLE t1(a INT); +START TRANSACTION READ ONLY; +INSERT DELAYED INTO t1 VALUES (1); +ERROR 25006: Cannot execute statement in a READ ONLY transaction. +COMMIT; +DROP TABLE t1; diff --git a/mysql-test/t/commit.test b/mysql-test/t/commit.test index 6ed784df3c2..c2051358073 100644 --- a/mysql-test/t/commit.test +++ b/mysql-test/t/commit.test @@ -338,7 +338,7 @@ COMMIT AND NO CHAIN; # # Cleanup # -SET @autocommit=1; +SET @@autocommit=1; COMMIT; disconnect con1; @@ -348,3 +348,360 @@ DROP TABLE t1; --echo # --echo # End of test cases for Bug#20837 --echo # + + +--echo # +--echo # WL#5968 Implement START TRANSACTION READ (WRITE|ONLY); +--echo # + +--echo # +--echo # Test 1: Check supported syntax + +START TRANSACTION; +COMMIT; + +START TRANSACTION READ ONLY; +COMMIT; + +START TRANSACTION READ WRITE; +COMMIT; + +--error ER_PARSE_ERROR +START TRANSACTION READ ONLY, READ WRITE; + +START TRANSACTION READ ONLY, WITH CONSISTENT SNAPSHOT; +COMMIT; + +START TRANSACTION READ WRITE, WITH CONSISTENT SNAPSHOT; +COMMIT; + +START TRANSACTION WITH CONSISTENT SNAPSHOT, READ ONLY; +COMMIT; + +START TRANSACTION WITH CONSISTENT SNAPSHOT, READ WRITE; +COMMIT; + +--error ER_PARSE_ERROR +START TRANSACTION READ ONLY, WITH CONSISTENT SNAPSHOT, READ WRITE; + +SET TRANSACTION READ ONLY; +SET TRANSACTION READ WRITE; +SET TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ ONLY; +SET TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ WRITE; +SET TRANSACTION READ ONLY, ISOLATION LEVEL READ COMMITTED; +SET TRANSACTION READ WRITE, ISOLATION LEVEL READ COMMITTED; +--error ER_PARSE_ERROR +SET TRANSACTION READ ONLY, READ WRITE; +COMMIT; + +--echo # +--echo # Test 2: Check setting of variable. + +SET SESSION TRANSACTION READ WRITE; +SELECT @@tx_read_only; + +SET SESSION TRANSACTION READ ONLY; +SELECT @@tx_read_only; + +SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE; +SELECT @@tx_read_only; + +SET SESSION TRANSACTION READ ONLY, ISOLATION LEVEL REPEATABLE READ; +SELECT @@tx_read_only; + +START TRANSACTION; +--echo # Not allowed inside a transaction +--error ER_CANT_CHANGE_TX_CHARACTERISTICS +SET TRANSACTION READ ONLY; +--echo # But these are allowed. +SET SESSION TRANSACTION READ ONLY; +SET GLOBAL TRANSACTION READ ONLY; +COMMIT; + +# Reset to defaults +SET SESSION TRANSACTION READ WRITE; +SET GLOBAL TRANSACTION READ WRITE; + +--echo # +--echo # Test 3: Test that write operations are properly blocked. + +CREATE TABLE t1(a INT); +CREATE TEMPORARY TABLE temp_t2(a INT); + +SET SESSION TRANSACTION READ ONLY; + +--echo # 1: DDL should be blocked, also on temporary tables. +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +CREATE TABLE t3(a INT); +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +ALTER TABLE t1 COMMENT "Test"; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +DROP TABLE t1; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +CREATE TEMPORARY TABLE temp_t3(a INT); +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +ALTER TABLE temp_t2 COMMENT "Test"; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +DROP TEMPORARY TABLE temp_t2; + +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +CREATE FUNCTION f1() RETURNS INT RETURN 1; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +DROP FUNCTION f1; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +CREATE PROCEDURE p1() BEGIN END; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +DROP PROCEDURE p1; + +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +CREATE VIEW v1 AS SELECT 1; +SET SESSION TRANSACTION READ WRITE; +CREATE VIEW v1 AS SELECT 1; +SET SESSION TRANSACTION READ ONLY; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +DROP VIEW v1; +SET SESSION TRANSACTION READ WRITE; +DROP VIEW v1; +SET SESSION TRANSACTION READ ONLY; + +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +RENAME TABLE t1 TO t2; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +RENAME TABLE temp_t2 TO temp_t3; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +TRUNCATE TABLE t1; + +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +CREATE DATABASE db1; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +DROP DATABASE db1; +SET SESSION TRANSACTION READ WRITE; + +--echo # 2: DML should be blocked on non-temporary tables. +START TRANSACTION READ ONLY; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +INSERT INTO t1 VALUES (1), (2); +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +UPDATE t1 SET a= 3; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +DELETE FROM t1; + +--echo # 3: DML should be allowed on temporary tables. +INSERT INTO temp_t2 VALUES (1), (2); +UPDATE temp_t2 SET a= 3; +DELETE FROM temp_t2; + +--echo # 4: Queries should not be blocked. +SELECT * FROM t1; +SELECT * FROM temp_t2; + +HANDLER t1 OPEN; +HANDLER t1 READ FIRST; +HANDLER t1 CLOSE; + +HANDLER temp_t2 OPEN; +HANDLER temp_t2 READ FIRST; +HANDLER temp_t2 CLOSE; + +--echo # 5: Prepared statements +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +PREPARE stmt FROM "DELETE FROM t1"; + +PREPARE stmt FROM "DELETE FROM temp_t2"; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; +COMMIT; + +--echo # 6: Stored routines + +delimiter |; +CREATE FUNCTION f1() RETURNS INT +BEGIN + DELETE FROM t1; + RETURN 1; +END| + +CREATE FUNCTION f2() RETURNS INT +BEGIN + DELETE FROM temp_t2; + RETURN 1; +END| +delimiter ;| + +CREATE PROCEDURE p1() DELETE FROM t1; +CREATE PROCEDURE p2() DELETE FROM temp_t2; + +START TRANSACTION READ ONLY; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +SELECT f1(); +SELECT f2(); +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +CALL p1(); +CALL p2(); +COMMIT; + +DROP FUNCTION f1; +DROP FUNCTION f2; +DROP PROCEDURE p1; +DROP PROCEDURE p2; + +--echo # 7: Views +CREATE VIEW v1 AS SELECT a FROM t1; +# Not supported for temporary tables. + +START TRANSACTION READ ONLY; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +INSERT INTO v1 VALUES (1), (2); +SELECT * FROM v1; +COMMIT; + +DROP VIEW v1; + +--echo # 8: LOCK TABLE +SET SESSION TRANSACTION READ ONLY; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +LOCK TABLE t1 WRITE; + +LOCK TABLE t1 READ; +UNLOCK TABLES; + +# Not supported for temporary tables. + +SET SESSION TRANSACTION READ WRITE; +DROP TABLE temp_t2, t1; + +--echo # +--echo # Test 4: SET TRANSACTION, CHAINing transactions + +CREATE TABLE t1(a INT); + +SET SESSION TRANSACTION READ ONLY; +START TRANSACTION; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +DELETE FROM t1; +COMMIT; +START TRANSACTION READ WRITE; +DELETE FROM t1; +COMMIT; + +SET SESSION TRANSACTION READ WRITE; +SET TRANSACTION READ ONLY; +START TRANSACTION; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +DELETE FROM t1; +COMMIT; +START TRANSACTION READ WRITE; +DELETE FROM t1; +COMMIT; + +START TRANSACTION READ ONLY; +SELECT * FROM t1; +COMMIT AND CHAIN; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +DELETE FROM t1; +COMMIT; + +START TRANSACTION READ ONLY; +SELECT * FROM t1; +ROLLBACK AND CHAIN; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +DELETE FROM t1; +COMMIT; + +DROP TABLE t1; + +--echo # +--echo # Test 5: Test that reserved keyword ONLY is still allowed as +--echo # identifier - both directly and in SPs. + +SET @only= 1; + +CREATE TABLE t1 (only INT); +INSERT INTO t1 (only) values (1); +SELECT only FROM t1 WHERE only = 1; +DROP TABLE t1; + +DELIMITER |; +CREATE PROCEDURE p1() +BEGIN + DECLARE only INT DEFAULT 1; +END| +DELIMITER ;| + +CALL p1(); + +DROP PROCEDURE p1; + +--echo # +--echo # Test 6: Check that XA transactions obey default access mode. + +CREATE TABLE t1(a INT); + +SET TRANSACTION READ ONLY; +XA START 'test1'; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +INSERT INTO t1 VALUES (1); +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +UPDATE t1 SET a=2; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +DELETE FROM t1; +XA END 'test1'; +XA PREPARE 'test1'; +XA COMMIT 'test1'; + +DROP TABLE t1; + +--echo # +--echo # Test 7: SET TRANSACTION inside stored routines + +CREATE PROCEDURE p1() SET SESSION TRANSACTION READ ONLY; +CALL p1(); +SELECT @@tx_read_only; +SET SESSION TRANSACTION READ WRITE; +DROP PROCEDURE p1; + +CREATE PROCEDURE p1() SET SESSION TRANSACTION READ ONLY, + ISOLATION LEVEL SERIALIZABLE; +CALL p1(); +SELECT @@tx_read_only; +SET SESSION TRANSACTION READ WRITE, ISOLATION LEVEL REPEATABLE READ; +DROP PROCEDURE p1; + +delimiter |; +CREATE FUNCTION f1() RETURNS INT +BEGIN + SET SESSION TRANSACTION READ ONLY; + RETURN 1; +END| +delimiter ;| + +SELECT f1(); +SELECT @@tx_read_only; +SET SESSION TRANSACTION READ WRITE; +DROP FUNCTION f1; + +delimiter |; +CREATE FUNCTION f1() RETURNS INT +BEGIN + SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ ONLY; + RETURN 1; +END| +delimiter ;| + +SELECT f1(); +SELECT @@tx_read_only; +SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE; +DROP FUNCTION f1; + +--echo # +--echo # Test 8: SET TRANSACTION and auto-commit + +SELECT @@autocommit; +CREATE TABLE t1(a INT) engine=InnoDB; + +SET TRANSACTION READ ONLY; +SELECT * FROM t1; +--echo # This statement should work, since last statement committed. +INSERT INTO t1 VALUES (1); + +DROP TABLE t1; diff --git a/mysql-test/t/read_only.test b/mysql-test/t/read_only.test index 52349747883..8ea0f2db9b7 100644 --- a/mysql-test/t/read_only.test +++ b/mysql-test/t/read_only.test @@ -299,6 +299,65 @@ flush privileges; drop database mysqltest_db1; set global read_only= @start_read_only; + +--echo # +--echo # WL#5968 Implement START TRANSACTION READ (WRITE|ONLY); +--echo # + +--echo # +--echo # Test interaction with read_only system variable. + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (1), (2); + +CREATE USER user1; +connect (con1, localhost, user1); +connection default; + +SET GLOBAL read_only= 1; + +--echo # All allowed with super privilege +START TRANSACTION; +COMMIT; + +START TRANSACTION READ ONLY; +COMMIT; + +START TRANSACTION READ WRITE; +COMMIT; + +--echo # We allow implicit RW transaction without super privilege +--echo # for compatibility reasons +connection con1; +START TRANSACTION; +--echo # Check that table updates are still disallowed. +--error ER_OPTION_PREVENTS_STATEMENT +INSERT INTO t1 VALUES (3); +--error ER_OPTION_PREVENTS_STATEMENT +UPDATE t1 SET a= 1; +--error ER_OPTION_PREVENTS_STATEMENT +DELETE FROM t1; +COMMIT; + +START TRANSACTION READ ONLY; +COMMIT; + +--echo # Explicit RW trans is not allowed without super privilege +--error ER_OPTION_PREVENTS_STATEMENT +START TRANSACTION READ WRITE; +COMMIT; +disconnect con1; +--source include/wait_until_disconnected.inc +connection default; +DROP USER user1; + +SET GLOBAL read_only= 0; +DROP TABLE t1; + # Wait till all disconnects are completed --source include/wait_until_count_sessions.inc diff --git a/mysql-test/t/trans_read_only-master.opt b/mysql-test/t/trans_read_only-master.opt new file mode 100644 index 00000000000..cf84816ec90 --- /dev/null +++ b/mysql-test/t/trans_read_only-master.opt @@ -0,0 +1 @@ +--transaction-read-only=true diff --git a/mysql-test/t/trans_read_only.test b/mysql-test/t/trans_read_only.test new file mode 100644 index 00000000000..f50fb7db376 --- /dev/null +++ b/mysql-test/t/trans_read_only.test @@ -0,0 +1,50 @@ +--source include/not_embedded.inc + +--echo # +--echo # WL#5968: Implement START TRANSACTION READ (WRITE|ONLY); +--echo # + +--echo # +--echo # Test9: The --transaction-read-only startup option. + +--echo # Check that the option was set by the .opt file. +SELECT @@tx_read_only; + +--echo # Also for new connections. Switching to con1 +connect (con1, localhost, root); +SELECT @@tx_read_only; +SET SESSION TRANSACTION READ WRITE; +SELECT @@tx_read_only; +disconnect con1; +--source include/wait_until_disconnected.inc + +--echo # Connection default +connection default; +SELECT @@tx_read_only; + + +--echo # +--echo # Test 10: SET TRANSACTION / START TRANSACTION + implicit commit. + +SET SESSION TRANSACTION READ WRITE; +--disable_ps_protocol +SET TRANSACTION READ ONLY; +--echo # Since DDL does implicit commit before starting, SET TRANSACTION +--echo # will have no effect because the "next" transaction will already +--echo # be over before the DDL statement starts. +CREATE TABLE t1 (a INT); + +START TRANSACTION READ ONLY; +--echo # The same happens with START TRANSACTION +DROP TABLE t1; +--enable_ps_protocol + +--echo # +--echo # Test 11: INSERT DELAYED + +CREATE TABLE t1(a INT); +START TRANSACTION READ ONLY; +--error ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION +INSERT DELAYED INTO t1 VALUES (1); +COMMIT; +DROP TABLE t1; diff --git a/sql/lex.h b/sql/lex.h index 9bd1a9b93aa..6587f5b8a9c 100644 --- a/sql/lex.h +++ b/sql/lex.h @@ -402,6 +402,7 @@ static SYMBOL symbols[] = { { "ONE", SYM(ONE_SYM)}, { "ONE_SHOT", SYM(ONE_SHOT_SYM)}, { "ONLINE", SYM(ONLINE_SYM)}, + { "ONLY", SYM(ONLY_SYM)}, { "OPEN", SYM(OPEN_SYM)}, { "OPTIMIZE", SYM(OPTIMIZE)}, { "OPTIONS", SYM(OPTIONS_SYM)}, diff --git a/sql/sql_base.cc b/sql/sql_base.cc index fadcd64b98e..07de4b0d761 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -4722,7 +4722,7 @@ lock_table_names(THD *thd, if (thd->tx_read_only) { my_error(ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION, MYF(0)); - return true; + DBUG_RETURN(true); } if (! (flags & MYSQL_OPEN_SKIP_SCOPED_MDL_LOCK) && diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 48ae2f066db..887bace6c42 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -4005,6 +4005,7 @@ end_with_restore_list: { /* Reset the isolation level if no chaining transaction. */ thd->tx_isolation= (enum_tx_isolation) thd->variables.tx_isolation; + thd->tx_read_only= thd->variables.tx_read_only; } /* Disconnect the current client connection. */ if (tx_release) diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index e2263e21e8f..7b7f766bbd1 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -730,6 +730,116 @@ static bool add_create_index (LEX *lex, Key::Keytype type, return FALSE; } + +/** + Create a separate LEX for each assignment if in SP. + + If we are in SP we want have own LEX for each assignment. + This is mostly because it is hard for several sp_instr_set + and sp_instr_set_trigger instructions share one LEX. + (Well, it is theoretically possible but adds some extra + overhead on preparation for execution stage and IMO less + robust). + + QQ: May be we should simply prohibit group assignments in SP? + + @see sp_create_assignment_instr + + @param thd Thread context + @param no_lookahead True if the parser has no lookahead +*/ + +static void sp_create_assignment_lex(THD *thd, bool no_lookahead) +{ + LEX *lex= thd->lex; + + if (lex->sphead) + { + Lex_input_stream *lip= &thd->m_parser_state->m_lip; + LEX *old_lex= lex; + lex->sphead->reset_lex(thd); + lex= thd->lex; + + /* Set new LEX as if we at start of set rule. */ + lex->sql_command= SQLCOM_SET_OPTION; + mysql_init_select(lex); + lex->var_list.empty(); + lex->one_shot_set= 0; + lex->autocommit= 0; + /* get_ptr() is only correct with no lookahead. */ + DBUG_ASSERT(no_lookahead); + lex->sphead->m_tmp_query= lip->get_ptr(); + /* Inherit from outer lex. */ + lex->option_type= old_lex->option_type; + } +} + + +/** + Create a SP instruction for a SET assignment. + + @see sp_create_assignment_lex + + @param thd Thread context + @param no_lookahead True if the parser has no lookahead + + @return false if success, true otherwise. +*/ + +static bool sp_create_assignment_instr(THD *thd, bool no_lookahead) +{ + LEX *lex= thd->lex; + + if (lex->sphead) + { + sp_head *sp= lex->sphead; + + if (!lex->var_list.is_empty()) + { + /* + We have assignment to user or system variable or + option setting, so we should construct sp_instr_stmt + for it. + */ + LEX_STRING qbuff; + sp_instr_stmt *i; + Lex_input_stream *lip= &thd->m_parser_state->m_lip; + + if (!(i= new sp_instr_stmt(sp->instructions(), lex->spcont, + lex))) + return true; + + /* + Extract the query statement from the tokenizer. The + end is either lip->ptr, if there was no lookahead, + lip->tok_end otherwise. + */ + if (no_lookahead) + qbuff.length= lip->get_ptr() - sp->m_tmp_query; + else + qbuff.length= lip->get_tok_end() - sp->m_tmp_query; + + if (!(qbuff.str= (char*) alloc_root(thd->mem_root, + qbuff.length + 5))) + return true; + + strmake(strmake(qbuff.str, "SET ", 4), sp->m_tmp_query, + qbuff.length); + qbuff.length+= 4; + i->m_query= qbuff; + if (sp->add_instr(i)) + return true; + } + enum_var_type inner_option_type= lex->option_type; + if (lex->sphead->restore_lex(thd)) + return true; + /* Copy option_type to outer lex in case it has changed. */ + thd->lex->option_type= inner_option_type; + } + return false; +} + + %} %union { int num; @@ -788,10 +898,10 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %pure_parser /* We have threads */ /* - Currently there are 174 shift/reduce conflicts. + Currently there are 171 shift/reduce conflicts. We should not introduce new conflicts any more. */ -%expect 174 +%expect 171 /* Comments for TOKENS. @@ -1172,6 +1282,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %token ON /* SQL-2003-R */ %token ONE_SHOT_SYM %token ONE_SYM +%token ONLY_SYM /* SQL-2003-R */ %token ONLINE_SYM %token OPEN_SYM /* SQL-2003-R */ %token OPTIMIZE @@ -1475,14 +1586,21 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); table_option opt_if_not_exists opt_no_write_to_binlog opt_temporary all_or_any opt_distinct opt_ignore_leaves fulltext_options spatial_type union_option - start_transaction_opts field_def - union_opt select_derived_init option_type2 + field_def + union_opt select_derived_init transaction_access_mode_types opt_natural_language_mode opt_query_expansion opt_ev_status opt_ev_on_completion ev_on_completion opt_ev_comment ev_alter_on_schedule_completion opt_ev_rename_to opt_ev_sql_stmt optional_flush_tables_arguments opt_dyncol_type dyncol_type opt_time_precision kill_type kill_option int_num +/* + Bit field of MYSQL_START_TRANS_OPT_* flags. +*/ +%type opt_start_transaction_option_list +%type start_transaction_option_list +%type start_transaction_option + %type opt_chain opt_release @@ -1610,7 +1728,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); ref_list opt_match_clause opt_on_update_delete use opt_delete_options opt_delete_option varchar nchar nvarchar opt_outer table_list table_name table_alias_ref_list table_alias_ref - opt_option opt_place + opt_place opt_attribute opt_attribute_list attribute column_list column_list_id opt_column_list grant_privileges grant_ident grant_list grant_option object_privilege object_privilege_list user_list rename_list @@ -7100,20 +7218,56 @@ slave: ; start: - START_SYM TRANSACTION_SYM start_transaction_opts + START_SYM TRANSACTION_SYM opt_start_transaction_option_list { LEX *lex= Lex; lex->sql_command= SQLCOM_BEGIN; + /* READ ONLY and READ WRITE are mutually exclusive. */ + if (($3 & MYSQL_START_TRANS_OPT_READ_WRITE) && + ($3 & MYSQL_START_TRANS_OPT_READ_ONLY)) + { + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } lex->start_transaction_opt= $3; } ; -start_transaction_opts: - /*empty*/ { $$ = 0; } - | WITH CONSISTENT_SYM SNAPSHOT_SYM +opt_start_transaction_option_list: + /* empty */ + { + $$= 0; + } + | start_transaction_option_list + { + $$= $1; + } + ; + +start_transaction_option_list: + start_transaction_option + { + $$= $1; + } + | start_transaction_option_list ',' start_transaction_option + { + $$= $1 | $3; + } + ; + +start_transaction_option: + WITH CONSISTENT_SYM SNAPSHOT_SYM { $$= MYSQL_START_TRANS_OPT_WITH_CONS_SNAPSHOT; } + | READ_SYM ONLY_SYM + { + $$= MYSQL_START_TRANS_OPT_READ_ONLY; + } + | READ_SYM WRITE_SYM + { + $$= MYSQL_START_TRANS_OPT_READ_WRITE; + } ; slave_thread_opts: @@ -13148,6 +13302,7 @@ keyword_sp: | ONE_SHOT_SYM {} | ONE_SYM {} | ONLINE_SYM {} + | ONLY_SYM {} | PACK_KEYS_SYM {} | PAGE_SYM {} | PARTIAL {} @@ -13271,8 +13426,15 @@ keyword_sp: /* Option functions */ +/* + SQLCOM_SET_OPTION statement. + + Note that to avoid shift/reduce conflicts, we have separate rules for the + first option listed in the statement. +*/ + set: - SET opt_option + SET { LEX *lex=Lex; lex->sql_command= SQLCOM_SET_OPTION; @@ -13281,115 +13443,96 @@ set: lex->var_list.empty(); lex->one_shot_set= 0; lex->autocommit= 0; + sp_create_assignment_lex(YYTHD, yychar == YYEMPTY); } - option_value_list + start_option_value_list {} ; -opt_option: - /* empty */ {} - | OPTION {} + +// Start of option value list +start_option_value_list: + option_value_no_option_type + { + if (sp_create_assignment_instr(YYTHD, yychar == YYEMPTY)) + MYSQL_YYABORT; + } + option_value_list_continued + | TRANSACTION_SYM + { + Lex->option_type= OPT_DEFAULT; + } + transaction_characteristics + { + if (sp_create_assignment_instr(YYTHD, yychar == YYEMPTY)) + MYSQL_YYABORT; + } + | option_type + { + Lex->option_type= $1; + } + start_option_value_list_following_option_type ; + +// Start of option value list, option_type was given +start_option_value_list_following_option_type: + option_value_following_option_type + { + if (sp_create_assignment_instr(YYTHD, yychar == YYEMPTY)) + MYSQL_YYABORT; + } + option_value_list_continued + | TRANSACTION_SYM transaction_characteristics + { + if (sp_create_assignment_instr(YYTHD, yychar == YYEMPTY)) + MYSQL_YYABORT; + } + ; + +// Remainder of the option value list after first option value. +option_value_list_continued: + /* empty */ + | ',' option_value_list + ; + +// Repeating list of option values after first option value. option_value_list: - option_type_value - | option_value_list ',' option_type_value + { + sp_create_assignment_lex(YYTHD, yychar == YYEMPTY); + } + option_value + { + if (sp_create_assignment_instr(YYTHD, yychar == YYEMPTY)) + MYSQL_YYABORT; + } + | option_value_list ',' + { + sp_create_assignment_lex(YYTHD, yychar == YYEMPTY); + } + option_value + { + if (sp_create_assignment_instr(YYTHD, yychar == YYEMPTY)) + MYSQL_YYABORT; + } ; -option_type_value: +// Wrapper around option values following the first option value in the stmt. +option_value: + option_type { - THD *thd= YYTHD; - LEX *lex= thd->lex; - Lex_input_stream *lip= YYLIP; - - if (lex->sphead) - { - /* - If we are in SP we want have own LEX for each assignment. - This is mostly because it is hard for several sp_instr_set - and sp_instr_set_trigger instructions share one LEX. - (Well, it is theoretically possible but adds some extra - overhead on preparation for execution stage and IMO less - robust). - - QQ: May be we should simply prohibit group assignments in SP? - */ - lex->sphead->reset_lex(thd); - lex= thd->lex; - - /* Set new LEX as if we at start of set rule. */ - lex->sql_command= SQLCOM_SET_OPTION; - mysql_init_select(lex); - lex->option_type=OPT_SESSION; - lex->var_list.empty(); - lex->one_shot_set= 0; - lex->autocommit= 0; - lex->sphead->m_tmp_query= lip->get_tok_start(); - } - } - ext_option_value - { - THD *thd= YYTHD; - LEX *lex= thd->lex; - Lex_input_stream *lip= YYLIP; - - if (lex->sphead) - { - sp_head *sp= lex->sphead; - - if (!lex->var_list.is_empty()) - { - /* - We have assignment to user or system variable or - option setting, so we should construct sp_instr_stmt - for it. - */ - LEX_STRING qbuff; - sp_instr_stmt *i; - - if (!(i= new sp_instr_stmt(sp->instructions(), lex->spcont, - lex))) - MYSQL_YYABORT; - - /* - Extract the query statement from the tokenizer. The - end is either lip->ptr, if there was no lookahead, - lip->tok_end otherwise. - */ - if (yychar == YYEMPTY) - qbuff.length= lip->get_ptr() - sp->m_tmp_query; - else - qbuff.length= lip->get_tok_end() - sp->m_tmp_query; - - if (!(qbuff.str= (char*) alloc_root(thd->mem_root, - qbuff.length + 5))) - MYSQL_YYABORT; - - strmake(strmake(qbuff.str, "SET ", 4), sp->m_tmp_query, - qbuff.length); - qbuff.length+= 4; - i->m_query= qbuff; - if (sp->add_instr(i)) - MYSQL_YYABORT; - } - if (lex->sphead->restore_lex(thd)) - MYSQL_YYABORT; - } + Lex->option_type= $1; } + option_value_following_option_type + | option_value_no_option_type ; option_type: - option_type2 {} - | GLOBAL_SYM { $$=OPT_GLOBAL; } + GLOBAL_SYM { $$=OPT_GLOBAL; } | LOCAL_SYM { $$=OPT_SESSION; } | SESSION_SYM { $$=OPT_SESSION; } ; -option_type2: - /* empty */ { $$= OPT_DEFAULT; } - | ONE_SHOT_SYM { Lex->one_shot_set= 1; $$= OPT_SESSION; } - ; - opt_var_type: /* empty */ { $$=OPT_SESSION; } | GLOBAL_SYM { $$=OPT_GLOBAL; } @@ -13404,74 +13547,62 @@ opt_var_ident_type: | SESSION_SYM '.' { $$=OPT_SESSION; } ; -ext_option_value: - sys_option_value - | option_type2 option_value - ; - -sys_option_value: - option_type internal_variable_name equal set_expr_or_default +// Option values with preceeding option_type. +option_value_following_option_type: + internal_variable_name equal set_expr_or_default { THD *thd= YYTHD; LEX *lex= Lex; - LEX_STRING *name= &$2.base_name; - if ($2.var == trg_new_row_fake_var) + if ($1.var && $1.var != trg_new_row_fake_var) { - /* We are in trigger and assigning value to field of new row */ - if ($1) - { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } - if (set_trigger_new_row(YYTHD, name, $4)) + /* It is a system variable. */ + if (set_system_variable(thd, &$1, lex->option_type, $3)) MYSQL_YYABORT; } - else if ($2.var) + else { - if ($1) - lex->option_type= $1; + /* + Not in trigger assigning value to new row, + and option_type preceeding local variable is illegal. + */ + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } + } + ; +// Option values without preceeding option_type. +option_value_no_option_type: + internal_variable_name equal set_expr_or_default + { + THD *thd= YYTHD; + LEX *lex= Lex; + LEX_STRING *name= &$1.base_name; + + if ($1.var == trg_new_row_fake_var) + { + /* We are in trigger and assigning value to field of new row */ + if (set_trigger_new_row(YYTHD, name, $3)) + MYSQL_YYABORT; + } + else if ($1.var) + { /* It is a system variable. */ - if (set_system_variable(thd, &$2, lex->option_type, $4)) + if (set_system_variable(thd, &$1, lex->option_type, $3)) MYSQL_YYABORT; } else { sp_pcontext *spc= lex->spcont; - sp_variable_t *spv= spc->find_variable(name); - - if ($1) - { - my_parse_error(ER(ER_SYNTAX_ERROR)); - MYSQL_YYABORT; - } + sp_variable *spv= spc->find_variable(name, false); /* It is a local variable. */ - if (set_local_variable(thd, spv, $4)) + if (set_local_variable(thd, spv, $3)) MYSQL_YYABORT; } } - | option_type TRANSACTION_SYM ISOLATION LEVEL_SYM isolation_types - { - THD *thd= YYTHD; - LEX *lex=Lex; - lex->option_type= $1; - Item *item= new (thd->mem_root) Item_int((int32) $5); - if (item == NULL) - MYSQL_YYABORT; - set_var *var= new set_var(lex->option_type, - find_sys_var(thd, "tx_isolation"), - &null_lex_str, - item); - if (var == NULL) - MYSQL_YYABORT; - lex->var_list.push_back(var); - } - ; - -option_value: - '@' ident_or_text equal expr + | '@' ident_or_text equal expr { Item_func_set_user_var *item; item= new (YYTHD->mem_root) Item_func_set_user_var($2, $4); @@ -13517,7 +13648,7 @@ option_value: names.str= (char *)"names"; names.length= 5; - if (spc && spc->find_variable(&names)) + if (spc && spc->find_variable(&names, false)) my_error(ER_SP_BAD_VAR_SHADOW, MYF(0), names.str); else my_parse_error(ER(ER_SYNTAX_ERROR)); @@ -13553,7 +13684,7 @@ option_value: pw.str= (char *)"password"; pw.length= 8; - if (spc && spc->find_variable(&pw)) + if (spc && spc->find_variable(&pw, false)) { my_error(ER_SP_BAD_VAR_SHADOW, MYF(0), pw.str); MYSQL_YYABORT; @@ -13562,6 +13693,7 @@ option_value: MYSQL_YYABORT; user->host=null_lex_str; user->user.str=thd->security_ctx->user; + user->user.length= strlen(thd->security_ctx->user); set_var_password *var= new set_var_password(user, $3); if (var == NULL) MYSQL_YYABORT; @@ -13666,6 +13798,54 @@ internal_variable_name: } ; +transaction_characteristics: + transaction_access_mode + | isolation_level + | transaction_access_mode ',' isolation_level + | isolation_level ',' transaction_access_mode + ; + +transaction_access_mode: + transaction_access_mode_types + { + THD *thd= YYTHD; + LEX *lex=Lex; + Item *item= new (thd->mem_root) Item_int((int32) $1); + if (item == NULL) + MYSQL_YYABORT; + set_var *var= new set_var(lex->option_type, + find_sys_var(thd, "tx_read_only"), + &null_lex_str, + item); + if (var == NULL) + MYSQL_YYABORT; + lex->var_list.push_back(var); + } + ; + +isolation_level: + ISOLATION LEVEL_SYM isolation_types + { + THD *thd= YYTHD; + LEX *lex=Lex; + Item *item= new (thd->mem_root) Item_int((int32) $3); + if (item == NULL) + MYSQL_YYABORT; + set_var *var= new set_var(lex->option_type, + find_sys_var(thd, "tx_isolation"), + &null_lex_str, + item); + if (var == NULL) + MYSQL_YYABORT; + lex->var_list.push_back(var); + } + ; + +transaction_access_mode_types: + READ_SYM ONLY_SYM { $$= true; } + | READ_SYM WRITE_SYM { $$= false; } + ; + isolation_types: READ_SYM UNCOMMITTED_SYM { $$= ISO_READ_UNCOMMITTED; } | READ_SYM COMMITTED_SYM { $$= ISO_READ_COMMITTED; } diff --git a/storage/perfschema/gen_pfs_lex_token b/storage/perfschema/gen_pfs_lex_token index 504a29a75f24f5f67c126074e9e47eecf47a9ddf..d86469d846c20544e2b876f603fec21f2f8b2132 100755 GIT binary patch literal 132216 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 %Y!@bL>VO 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 Ym=BDOY|HhIV@7e+gteJ!sOypZ3%f0+82|tP literal 160124 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 diff --git a/storage/perfschema/pfs_lex_token.h b/storage/perfschema/pfs_lex_token.h index 43e8f647f9a..c6981a7df6c 100644 --- a/storage/perfschema/pfs_lex_token.h +++ b/storage/perfschema/pfs_lex_token.h @@ -636,273 +636,274 @@ lex_token_string lex_token_array[]= /* 617 */ { "ON", 2}, /* 618 */ { "ONE_SHOT", 8}, /* 619 */ { "ONE", 3}, -/* 620 */ { "ONLINE", 6}, -/* 621 */ { "OPEN", 4}, -/* 622 */ { "OPTIMIZE", 8}, -/* 623 */ { "OPTIONS", 7}, -/* 624 */ { "OPTION", 6}, -/* 625 */ { "OPTIONALLY", 10}, -/* 626 */ { "|", 1}, -/* 627 */ { "ORDER", 5}, -/* 628 */ { "||", 2}, -/* 629 */ { "OR", 2}, -/* 630 */ { "OUTER", 5}, -/* 631 */ { "OUTFILE", 7}, -/* 632 */ { "OUT", 3}, -/* 633 */ { "OWNER", 5}, -/* 634 */ { "PACK_KEYS", 9}, -/* 635 */ { "PAGE", 4}, -/* 636 */ { "PAGE_CHECKSUM", 13}, -/* 637 */ { "?", 1}, -/* 638 */ { "PARSER", 6}, -/* 639 */ { "PARSE_VCOL_EXPR", 15}, -/* 640 */ { "PARTIAL", 7}, -/* 641 */ { "PARTITIONING", 12}, -/* 642 */ { "PARTITIONS", 10}, -/* 643 */ { "PARTITION", 9}, -/* 644 */ { "PASSWORD", 8}, -/* 645 */ { "PERSISTENT", 10}, -/* 646 */ { "PHASE", 5}, -/* 647 */ { "PLUGINS", 7}, -/* 648 */ { "PLUGIN", 6}, -/* 649 */ { "POINT", 5}, -/* 650 */ { "POLYGON", 7}, -/* 651 */ { "PORT", 4}, -/* 652 */ { "POSITION", 8}, -/* 653 */ { "PRECISION", 9}, -/* 654 */ { "PREPARE", 7}, -/* 655 */ { "PRESERVE", 8}, -/* 656 */ { "PREV", 4}, -/* 657 */ { "PRIMARY", 7}, -/* 658 */ { "PRIVILEGES", 10}, -/* 659 */ { "PROCEDURE", 9}, -/* 660 */ { "PROCESS", 7}, -/* 661 */ { "PROCESSLIST", 11}, -/* 662 */ { "PROFILE", 7}, -/* 663 */ { "PROFILES", 8}, -/* 664 */ { "PROXY", 5}, -/* 665 */ { "PURGE", 5}, -/* 666 */ { "SQL_TSI_QUARTER", 15}, -/* 667 */ { "QUERY", 5}, -/* 668 */ { "QUICK", 5}, -/* 669 */ { "RANGE", 5}, -/* 670 */ { "READS", 5}, -/* 671 */ { "READ_ONLY", 9}, -/* 672 */ { "READ", 4}, -/* 673 */ { "READ_WRITE", 10}, -/* 674 */ { "REAL", 4}, -/* 675 */ { "REBUILD", 7}, -/* 676 */ { "RECOVER", 7}, -/* 677 */ { "REDOFILE", 8}, -/* 678 */ { "REDO_BUFFER_SIZE", 16}, -/* 679 */ { "REDUNDANT", 9}, -/* 680 */ { "REFERENCES", 10}, -/* 681 */ { "RLIKE", 5}, -/* 682 */ { "RELAY", 5}, -/* 683 */ { "RELAYLOG", 8}, -/* 684 */ { "RELAY_LOG_FILE", 14}, -/* 685 */ { "RELAY_LOG_POS", 13}, -/* 686 */ { "RELAY_THREAD", 12}, -/* 687 */ { "RELEASE", 7}, -/* 688 */ { "RELOAD", 6}, -/* 689 */ { "REMOVE", 6}, -/* 690 */ { "RENAME", 6}, -/* 691 */ { "REORGANIZE", 10}, -/* 692 */ { "REPAIR", 6}, -/* 693 */ { "REPEATABLE", 10}, -/* 694 */ { "REPEAT", 6}, -/* 695 */ { "REPLACE", 7}, -/* 696 */ { "REPLICATION", 11}, -/* 697 */ { "REQUIRE", 7}, -/* 698 */ { "RESET", 5}, -/* 699 */ { "RESIGNAL", 8}, -/* 700 */ { "USER_RESOURCES", 14}, -/* 701 */ { "RESTORE", 7}, -/* 702 */ { "RESTRICT", 8}, -/* 703 */ { "RESUME", 6}, -/* 704 */ { "RETURNS", 7}, -/* 705 */ { "RETURN", 6}, -/* 706 */ { "REVOKE", 6}, -/* 707 */ { "RIGHT", 5}, -/* 708 */ { "ROLLBACK", 8}, -/* 709 */ { "ROLLUP", 6}, -/* 710 */ { "ROUTINE", 7}, -/* 711 */ { "ROWS", 4}, -/* 712 */ { "ROW_FORMAT", 10}, -/* 713 */ { "ROW", 3}, -/* 714 */ { "RTREE", 5}, -/* 715 */ { "SAVEPOINT", 9}, -/* 716 */ { "SCHEDULE", 8}, -/* 717 */ { "SCHEMA_NAME", 11}, -/* 718 */ { "SECOND_MICROSECOND", 18}, -/* 719 */ { "SQL_TSI_SECOND", 14}, -/* 720 */ { "SECURITY", 8}, -/* 721 */ { "SELECT", 6}, -/* 722 */ { "SENSITIVE", 9}, -/* 723 */ { "SEPARATOR", 9}, -/* 724 */ { "SERIALIZABLE", 12}, -/* 725 */ { "SERIAL", 6}, -/* 726 */ { "SESSION", 7}, -/* 727 */ { "SERVER", 6}, -/* 728 */ { "SERVER_OPTIONS", 14}, -/* 729 */ { "SET", 3}, -/* 730 */ { ":=", 2}, -/* 731 */ { "SHARE", 5}, -/* 732 */ { "<<", 2}, -/* 733 */ { ">>", 2}, -/* 734 */ { "SHOW", 4}, -/* 735 */ { "SHUTDOWN", 8}, -/* 736 */ { "SIGNAL", 6}, -/* 737 */ { "SIGNED", 6}, -/* 738 */ { "SIMPLE", 6}, -/* 739 */ { "SLAVE", 5}, -/* 740 */ { "SLOW", 4}, -/* 741 */ { "SMALLINT", 8}, -/* 742 */ { "SNAPSHOT", 8}, -/* 743 */ { "SOCKET", 6}, -/* 744 */ { "SOFT", 4}, -/* 745 */ { "SONAME", 6}, -/* 746 */ { "SOUNDS", 6}, -/* 747 */ { "SOURCE", 6}, -/* 748 */ { "SPATIAL", 7}, -/* 749 */ { "SPECIFIC", 8}, -/* 750 */ { "SQLEXCEPTION", 12}, -/* 751 */ { "SQLSTATE", 8}, -/* 752 */ { "SQLWARNING", 10}, -/* 753 */ { "SQL_BIG_RESULT", 14}, -/* 754 */ { "SQL_BUFFER_RESULT", 17}, -/* 755 */ { "SQL_CACHE", 9}, -/* 756 */ { "SQL_CALC_FOUND_ROWS", 19}, -/* 757 */ { "SQL_NO_CACHE", 12}, -/* 758 */ { "SQL_SMALL_RESULT", 16}, -/* 759 */ { "SQL", 3}, -/* 760 */ { "SQL_THREAD", 10}, -/* 761 */ { "SSL", 3}, -/* 762 */ { "STARTING", 8}, -/* 763 */ { "STARTS", 6}, -/* 764 */ { "START", 5}, -/* 765 */ { "STATUS", 6}, -/* 766 */ { "STDDEV_SAMP", 11}, -/* 767 */ { "STDDEV_POP", 10}, -/* 768 */ { "STOP", 4}, -/* 769 */ { "STORAGE", 7}, -/* 770 */ { "STRAIGHT_JOIN", 13}, -/* 771 */ { "STRING", 6}, -/* 772 */ { "SUBCLASS_ORIGIN", 15}, -/* 773 */ { "SUBDATE", 7}, -/* 774 */ { "SUBJECT", 7}, -/* 775 */ { "SUBPARTITIONS", 13}, -/* 776 */ { "SUBPARTITION", 12}, -/* 777 */ { "SUBSTRING", 9}, -/* 778 */ { "SUM", 3}, -/* 779 */ { "SUPER", 5}, -/* 780 */ { "SUSPEND", 7}, -/* 781 */ { "SWAPS", 5}, -/* 782 */ { "SWITCHES", 8}, -/* 783 */ { "SYSDATE", 7}, -/* 784 */ { "TABLES", 6}, -/* 785 */ { "TABLESPACE", 10}, -/* 786 */ { "TABLE_REF_PRIORITY", 18}, -/* 787 */ { "TABLE_STATISTICS", 16}, -/* 788 */ { "TABLE", 5}, -/* 789 */ { "TABLE_CHECKSUM", 14}, -/* 790 */ { "TABLE_NAME", 10}, -/* 791 */ { "TEMPORARY", 9}, -/* 792 */ { "TEMPTABLE", 9}, -/* 793 */ { "TERMINATED", 10}, -/* 794 */ { "(text)", 6}, -/* 795 */ { "TEXT", 4}, -/* 796 */ { "THAN", 4}, -/* 797 */ { "THEN", 4}, -/* 798 */ { "TIMESTAMP", 9}, -/* 799 */ { "TIMESTAMPADD", 12}, -/* 800 */ { "TIMESTAMPDIFF", 13}, -/* 801 */ { "TIME", 4}, -/* 802 */ { "TINYBLOB", 8}, -/* 803 */ { "TINYINT", 7}, -/* 804 */ { "TINYTEXT", 8}, -/* 805 */ { "TO", 2}, -/* 806 */ { "TRAILING", 8}, -/* 807 */ { "TRANSACTION", 11}, -/* 808 */ { "TRANSACTIONAL", 13}, -/* 809 */ { "TRIGGERS", 8}, -/* 810 */ { "TRIGGER", 7}, -/* 811 */ { "TRIM", 4}, -/* 812 */ { "TRUE", 4}, -/* 813 */ { "TRUNCATE", 8}, -/* 814 */ { "TYPES", 5}, -/* 815 */ { "TYPE", 4}, -/* 816 */ { "UDF_RETURNS", 11}, -/* 817 */ { "(ulonglong)", 11}, -/* 818 */ { "UNCOMMITTED", 11}, -/* 819 */ { "UNDEFINED", 9}, -/* 820 */ { "(_charset)", 10}, -/* 821 */ { "UNDOFILE", 8}, -/* 822 */ { "UNDO_BUFFER_SIZE", 16}, -/* 823 */ { "UNDO", 4}, -/* 824 */ { "UNICODE", 7}, -/* 825 */ { "UNINSTALL", 9}, -/* 826 */ { "UNION", 5}, -/* 827 */ { "UNIQUE", 6}, -/* 828 */ { "UNKNOWN", 7}, -/* 829 */ { "UNLOCK", 6}, -/* 830 */ { "UNSIGNED", 8}, -/* 831 */ { "UNTIL", 5}, -/* 832 */ { "UPDATE", 6}, -/* 833 */ { "UPGRADE", 7}, -/* 834 */ { "USAGE", 5}, -/* 835 */ { "SYSTEM_USER", 11}, -/* 836 */ { "USER_STATISTICS", 15}, -/* 837 */ { "USE_FRM", 7}, -/* 838 */ { "USE", 3}, -/* 839 */ { "USING", 5}, -/* 840 */ { "UTC_DATE", 8}, -/* 841 */ { "UTC_TIMESTAMP", 13}, -/* 842 */ { "UTC_TIME", 8}, -/* 843 */ { "VALUES", 6}, -/* 844 */ { "VALUE", 5}, -/* 845 */ { "VARBINARY", 9}, -/* 846 */ { "VARCHARACTER", 12}, -/* 847 */ { "VARIABLES", 9}, -/* 848 */ { "VAR_POP", 7}, -/* 849 */ { "VARYING", 7}, -/* 850 */ { "VAR_SAMP", 8}, -/* 851 */ { "VIA", 3}, -/* 852 */ { "VIEW", 4}, -/* 853 */ { "VIRTUAL", 7}, -/* 854 */ { "WAIT", 4}, -/* 855 */ { "WARNINGS", 8}, -/* 856 */ { "WEEK", 4}, -/* 857 */ { "WHEN", 4}, -/* 858 */ { "WHERE", 5}, -/* 859 */ { "WHILE", 5}, -/* 860 */ { "WITH", 4}, -/* 861 */ { "WITH CUBE", 9}, -/* 862 */ { "WITH ROLLUP", 11}, -/* 863 */ { "WORK", 4}, -/* 864 */ { "WRAPPER", 7}, -/* 865 */ { "WRITE", 5}, -/* 866 */ { "X509", 4}, -/* 867 */ { "XA", 2}, -/* 868 */ { "XML", 3}, -/* 869 */ { "XOR", 3}, -/* 870 */ { "YEAR_MONTH", 10}, -/* 871 */ { "YEAR", 4}, -/* 872 */ { "ZEROFILL", 8}, -/* 873 */ { "?", 1}, -/* 874 */ { "?, ...", 6}, -/* 875 */ { "(?)", 3}, -/* 876 */ { "(?) /* , ... */", 15}, -/* 877 */ { "(...)", 5}, -/* 878 */ { "(...) /* , ... */", 17}, -/* 879 */ { "UNUSED", 6}, +/* 620 */ { "ONLY", 4}, +/* 621 */ { "ONLINE", 6}, +/* 622 */ { "OPEN", 4}, +/* 623 */ { "OPTIMIZE", 8}, +/* 624 */ { "OPTIONS", 7}, +/* 625 */ { "OPTION", 6}, +/* 626 */ { "OPTIONALLY", 10}, +/* 627 */ { "|", 1}, +/* 628 */ { "ORDER", 5}, +/* 629 */ { "||", 2}, +/* 630 */ { "OR", 2}, +/* 631 */ { "OUTER", 5}, +/* 632 */ { "OUTFILE", 7}, +/* 633 */ { "OUT", 3}, +/* 634 */ { "OWNER", 5}, +/* 635 */ { "PACK_KEYS", 9}, +/* 636 */ { "PAGE", 4}, +/* 637 */ { "PAGE_CHECKSUM", 13}, +/* 638 */ { "?", 1}, +/* 639 */ { "PARSER", 6}, +/* 640 */ { "PARSE_VCOL_EXPR", 15}, +/* 641 */ { "PARTIAL", 7}, +/* 642 */ { "PARTITIONING", 12}, +/* 643 */ { "PARTITIONS", 10}, +/* 644 */ { "PARTITION", 9}, +/* 645 */ { "PASSWORD", 8}, +/* 646 */ { "PERSISTENT", 10}, +/* 647 */ { "PHASE", 5}, +/* 648 */ { "PLUGINS", 7}, +/* 649 */ { "PLUGIN", 6}, +/* 650 */ { "POINT", 5}, +/* 651 */ { "POLYGON", 7}, +/* 652 */ { "PORT", 4}, +/* 653 */ { "POSITION", 8}, +/* 654 */ { "PRECISION", 9}, +/* 655 */ { "PREPARE", 7}, +/* 656 */ { "PRESERVE", 8}, +/* 657 */ { "PREV", 4}, +/* 658 */ { "PRIMARY", 7}, +/* 659 */ { "PRIVILEGES", 10}, +/* 660 */ { "PROCEDURE", 9}, +/* 661 */ { "PROCESS", 7}, +/* 662 */ { "PROCESSLIST", 11}, +/* 663 */ { "PROFILE", 7}, +/* 664 */ { "PROFILES", 8}, +/* 665 */ { "PROXY", 5}, +/* 666 */ { "PURGE", 5}, +/* 667 */ { "SQL_TSI_QUARTER", 15}, +/* 668 */ { "QUERY", 5}, +/* 669 */ { "QUICK", 5}, +/* 670 */ { "RANGE", 5}, +/* 671 */ { "READS", 5}, +/* 672 */ { "READ_ONLY", 9}, +/* 673 */ { "READ", 4}, +/* 674 */ { "READ_WRITE", 10}, +/* 675 */ { "REAL", 4}, +/* 676 */ { "REBUILD", 7}, +/* 677 */ { "RECOVER", 7}, +/* 678 */ { "REDOFILE", 8}, +/* 679 */ { "REDO_BUFFER_SIZE", 16}, +/* 680 */ { "REDUNDANT", 9}, +/* 681 */ { "REFERENCES", 10}, +/* 682 */ { "RLIKE", 5}, +/* 683 */ { "RELAY", 5}, +/* 684 */ { "RELAYLOG", 8}, +/* 685 */ { "RELAY_LOG_FILE", 14}, +/* 686 */ { "RELAY_LOG_POS", 13}, +/* 687 */ { "RELAY_THREAD", 12}, +/* 688 */ { "RELEASE", 7}, +/* 689 */ { "RELOAD", 6}, +/* 690 */ { "REMOVE", 6}, +/* 691 */ { "RENAME", 6}, +/* 692 */ { "REORGANIZE", 10}, +/* 693 */ { "REPAIR", 6}, +/* 694 */ { "REPEATABLE", 10}, +/* 695 */ { "REPEAT", 6}, +/* 696 */ { "REPLACE", 7}, +/* 697 */ { "REPLICATION", 11}, +/* 698 */ { "REQUIRE", 7}, +/* 699 */ { "RESET", 5}, +/* 700 */ { "RESIGNAL", 8}, +/* 701 */ { "USER_RESOURCES", 14}, +/* 702 */ { "RESTORE", 7}, +/* 703 */ { "RESTRICT", 8}, +/* 704 */ { "RESUME", 6}, +/* 705 */ { "RETURNS", 7}, +/* 706 */ { "RETURN", 6}, +/* 707 */ { "REVOKE", 6}, +/* 708 */ { "RIGHT", 5}, +/* 709 */ { "ROLLBACK", 8}, +/* 710 */ { "ROLLUP", 6}, +/* 711 */ { "ROUTINE", 7}, +/* 712 */ { "ROWS", 4}, +/* 713 */ { "ROW_FORMAT", 10}, +/* 714 */ { "ROW", 3}, +/* 715 */ { "RTREE", 5}, +/* 716 */ { "SAVEPOINT", 9}, +/* 717 */ { "SCHEDULE", 8}, +/* 718 */ { "SCHEMA_NAME", 11}, +/* 719 */ { "SECOND_MICROSECOND", 18}, +/* 720 */ { "SQL_TSI_SECOND", 14}, +/* 721 */ { "SECURITY", 8}, +/* 722 */ { "SELECT", 6}, +/* 723 */ { "SENSITIVE", 9}, +/* 724 */ { "SEPARATOR", 9}, +/* 725 */ { "SERIALIZABLE", 12}, +/* 726 */ { "SERIAL", 6}, +/* 727 */ { "SESSION", 7}, +/* 728 */ { "SERVER", 6}, +/* 729 */ { "SERVER_OPTIONS", 14}, +/* 730 */ { "SET", 3}, +/* 731 */ { ":=", 2}, +/* 732 */ { "SHARE", 5}, +/* 733 */ { "<<", 2}, +/* 734 */ { ">>", 2}, +/* 735 */ { "SHOW", 4}, +/* 736 */ { "SHUTDOWN", 8}, +/* 737 */ { "SIGNAL", 6}, +/* 738 */ { "SIGNED", 6}, +/* 739 */ { "SIMPLE", 6}, +/* 740 */ { "SLAVE", 5}, +/* 741 */ { "SLOW", 4}, +/* 742 */ { "SMALLINT", 8}, +/* 743 */ { "SNAPSHOT", 8}, +/* 744 */ { "SOCKET", 6}, +/* 745 */ { "SOFT", 4}, +/* 746 */ { "SONAME", 6}, +/* 747 */ { "SOUNDS", 6}, +/* 748 */ { "SOURCE", 6}, +/* 749 */ { "SPATIAL", 7}, +/* 750 */ { "SPECIFIC", 8}, +/* 751 */ { "SQLEXCEPTION", 12}, +/* 752 */ { "SQLSTATE", 8}, +/* 753 */ { "SQLWARNING", 10}, +/* 754 */ { "SQL_BIG_RESULT", 14}, +/* 755 */ { "SQL_BUFFER_RESULT", 17}, +/* 756 */ { "SQL_CACHE", 9}, +/* 757 */ { "SQL_CALC_FOUND_ROWS", 19}, +/* 758 */ { "SQL_NO_CACHE", 12}, +/* 759 */ { "SQL_SMALL_RESULT", 16}, +/* 760 */ { "SQL", 3}, +/* 761 */ { "SQL_THREAD", 10}, +/* 762 */ { "SSL", 3}, +/* 763 */ { "STARTING", 8}, +/* 764 */ { "STARTS", 6}, +/* 765 */ { "START", 5}, +/* 766 */ { "STATUS", 6}, +/* 767 */ { "STDDEV_SAMP", 11}, +/* 768 */ { "STDDEV_POP", 10}, +/* 769 */ { "STOP", 4}, +/* 770 */ { "STORAGE", 7}, +/* 771 */ { "STRAIGHT_JOIN", 13}, +/* 772 */ { "STRING", 6}, +/* 773 */ { "SUBCLASS_ORIGIN", 15}, +/* 774 */ { "SUBDATE", 7}, +/* 775 */ { "SUBJECT", 7}, +/* 776 */ { "SUBPARTITIONS", 13}, +/* 777 */ { "SUBPARTITION", 12}, +/* 778 */ { "SUBSTRING", 9}, +/* 779 */ { "SUM", 3}, +/* 780 */ { "SUPER", 5}, +/* 781 */ { "SUSPEND", 7}, +/* 782 */ { "SWAPS", 5}, +/* 783 */ { "SWITCHES", 8}, +/* 784 */ { "SYSDATE", 7}, +/* 785 */ { "TABLES", 6}, +/* 786 */ { "TABLESPACE", 10}, +/* 787 */ { "TABLE_REF_PRIORITY", 18}, +/* 788 */ { "TABLE_STATISTICS", 16}, +/* 789 */ { "TABLE", 5}, +/* 790 */ { "TABLE_CHECKSUM", 14}, +/* 791 */ { "TABLE_NAME", 10}, +/* 792 */ { "TEMPORARY", 9}, +/* 793 */ { "TEMPTABLE", 9}, +/* 794 */ { "TERMINATED", 10}, +/* 795 */ { "(text)", 6}, +/* 796 */ { "TEXT", 4}, +/* 797 */ { "THAN", 4}, +/* 798 */ { "THEN", 4}, +/* 799 */ { "TIMESTAMP", 9}, +/* 800 */ { "TIMESTAMPADD", 12}, +/* 801 */ { "TIMESTAMPDIFF", 13}, +/* 802 */ { "TIME", 4}, +/* 803 */ { "TINYBLOB", 8}, +/* 804 */ { "TINYINT", 7}, +/* 805 */ { "TINYTEXT", 8}, +/* 806 */ { "TO", 2}, +/* 807 */ { "TRAILING", 8}, +/* 808 */ { "TRANSACTION", 11}, +/* 809 */ { "TRANSACTIONAL", 13}, +/* 810 */ { "TRIGGERS", 8}, +/* 811 */ { "TRIGGER", 7}, +/* 812 */ { "TRIM", 4}, +/* 813 */ { "TRUE", 4}, +/* 814 */ { "TRUNCATE", 8}, +/* 815 */ { "TYPES", 5}, +/* 816 */ { "TYPE", 4}, +/* 817 */ { "UDF_RETURNS", 11}, +/* 818 */ { "(ulonglong)", 11}, +/* 819 */ { "UNCOMMITTED", 11}, +/* 820 */ { "UNDEFINED", 9}, +/* 821 */ { "(_charset)", 10}, +/* 822 */ { "UNDOFILE", 8}, +/* 823 */ { "UNDO_BUFFER_SIZE", 16}, +/* 824 */ { "UNDO", 4}, +/* 825 */ { "UNICODE", 7}, +/* 826 */ { "UNINSTALL", 9}, +/* 827 */ { "UNION", 5}, +/* 828 */ { "UNIQUE", 6}, +/* 829 */ { "UNKNOWN", 7}, +/* 830 */ { "UNLOCK", 6}, +/* 831 */ { "UNSIGNED", 8}, +/* 832 */ { "UNTIL", 5}, +/* 833 */ { "UPDATE", 6}, +/* 834 */ { "UPGRADE", 7}, +/* 835 */ { "USAGE", 5}, +/* 836 */ { "SYSTEM_USER", 11}, +/* 837 */ { "USER_STATISTICS", 15}, +/* 838 */ { "USE_FRM", 7}, +/* 839 */ { "USE", 3}, +/* 840 */ { "USING", 5}, +/* 841 */ { "UTC_DATE", 8}, +/* 842 */ { "UTC_TIMESTAMP", 13}, +/* 843 */ { "UTC_TIME", 8}, +/* 844 */ { "VALUES", 6}, +/* 845 */ { "VALUE", 5}, +/* 846 */ { "VARBINARY", 9}, +/* 847 */ { "VARCHARACTER", 12}, +/* 848 */ { "VARIABLES", 9}, +/* 849 */ { "VAR_POP", 7}, +/* 850 */ { "VARYING", 7}, +/* 851 */ { "VAR_SAMP", 8}, +/* 852 */ { "VIA", 3}, +/* 853 */ { "VIEW", 4}, +/* 854 */ { "VIRTUAL", 7}, +/* 855 */ { "WAIT", 4}, +/* 856 */ { "WARNINGS", 8}, +/* 857 */ { "WEEK", 4}, +/* 858 */ { "WHEN", 4}, +/* 859 */ { "WHERE", 5}, +/* 860 */ { "WHILE", 5}, +/* 861 */ { "WITH", 4}, +/* 862 */ { "WITH CUBE", 9}, +/* 863 */ { "WITH ROLLUP", 11}, +/* 864 */ { "WORK", 4}, +/* 865 */ { "WRAPPER", 7}, +/* 866 */ { "WRITE", 5}, +/* 867 */ { "X509", 4}, +/* 868 */ { "XA", 2}, +/* 869 */ { "XML", 3}, +/* 870 */ { "XOR", 3}, +/* 871 */ { "YEAR_MONTH", 10}, +/* 872 */ { "YEAR", 4}, +/* 873 */ { "ZEROFILL", 8}, +/* 874 */ { "?", 1}, +/* 875 */ { "?, ...", 6}, +/* 876 */ { "(?)", 3}, +/* 877 */ { "(?) /* , ... */", 15}, +/* 878 */ { "(...)", 5}, +/* 879 */ { "(...) /* , ... */", 17}, +/* 880 */ { "UNUSED", 6}, /* DUMMY */ { "", 0} }; /* PFS specific tokens. */ -#define TOK_PFS_GENERIC_VALUE 873 -#define TOK_PFS_GENERIC_VALUE_LIST 874 -#define TOK_PFS_ROW_SINGLE_VALUE 875 -#define TOK_PFS_ROW_SINGLE_VALUE_LIST 876 -#define TOK_PFS_ROW_MULTIPLE_VALUE 877 -#define TOK_PFS_ROW_MULTIPLE_VALUE_LIST 878 -#define TOK_PFS_UNUSED 879 +#define TOK_PFS_GENERIC_VALUE 874 +#define TOK_PFS_GENERIC_VALUE_LIST 875 +#define TOK_PFS_ROW_SINGLE_VALUE 876 +#define TOK_PFS_ROW_SINGLE_VALUE_LIST 877 +#define TOK_PFS_ROW_MULTIPLE_VALUE 878 +#define TOK_PFS_ROW_MULTIPLE_VALUE_LIST 879 +#define TOK_PFS_UNUSED 880