From 5362d2fc8468795e6718c6e58dff20077c898670 Mon Sep 17 00:00:00 2001 From: m0003r Date: Tue, 7 Apr 2020 18:07:57 +0300 Subject: [PATCH] EXISTS also is a function, not only keyword --- src/Contexts/ContextMariaDb100000.php | 15 ++++++++------- src/Contexts/ContextMariaDb100100.php | 15 ++++++++------- src/Contexts/ContextMariaDb100200.php | 15 ++++++++------- src/Contexts/ContextMariaDb100300.php | 15 ++++++++------- src/Contexts/ContextMySql50000.php | 15 ++++++++------- src/Contexts/ContextMySql50100.php | 15 ++++++++------- src/Contexts/ContextMySql50500.php | 15 ++++++++------- src/Contexts/ContextMySql50600.php | 15 ++++++++------- src/Contexts/ContextMySql50700.php | 15 ++++++++------- src/Contexts/ContextMySql80000.php | 15 ++++++++------- tests/Parser/SelectStatementTest.php | 5 +++-- tests/data/parser/parseSelectExists.in | 1 + tests/data/parser/parseSelectExists.out | 4 ++++ tools/ContextGenerator.php | 3 ++- tools/contexts/_common.txt | 1 + 15 files changed, 91 insertions(+), 73 deletions(-) create mode 100644 tests/data/parser/parseSelectExists.in create mode 100644 tests/data/parser/parseSelectExists.out diff --git a/src/Contexts/ContextMariaDb100000.php b/src/Contexts/ContextMariaDb100000.php index 7e0b04dee..995d29fd3 100644 --- a/src/Contexts/ContextMariaDb100000.php +++ b/src/Contexts/ContextMariaDb100000.php @@ -3,7 +3,8 @@ /** * Context for MariaDB 10.0. * - * This file was auto-generated. + * This file was auto-generated from tools/contexts/*.txt. + * Use tools/run_generators.sh for update. * * @see https://mariadb.com/kb/en/the-mariadb-library/reserved-words/ */ @@ -126,10 +127,10 @@ class ContextMariaDb100000 extends Context 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, 'WRITE' => 3, 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, - 'DELETE' => 3, 'ELSEIF' => 3, 'EXISTS' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, - 'HAVING' => 3, 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, - 'REGEXP' => 3, 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, - 'SIGNAL' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, + 'DELETE' => 3, 'ELSEIF' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, 'HAVING' => 3, + 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, 'REGEXP' => 3, + 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, 'SIGNAL' => 3, + 'UNLOCK' => 3, 'UPDATE' => 3, 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, @@ -278,7 +279,7 @@ class ContextMariaDb100000 extends Context 'MOD' => 35, 'LEFT' => 35, 'MATCH' => 35, 'RIGHT' => 35, - 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, + 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, 'LOCALTIME' => 35, @@ -299,6 +300,6 @@ class ContextMariaDb100000 extends Context 'CHAR' => 43, 'BINARY' => 43, - 'INTERVAL' => 43 + 'INTERVAL' => 43, ); } diff --git a/src/Contexts/ContextMariaDb100100.php b/src/Contexts/ContextMariaDb100100.php index e83994500..efd7b7416 100644 --- a/src/Contexts/ContextMariaDb100100.php +++ b/src/Contexts/ContextMariaDb100100.php @@ -3,7 +3,8 @@ /** * Context for MariaDB 10.1. * - * This file was auto-generated. + * This file was auto-generated from tools/contexts/*.txt. + * Use tools/run_generators.sh for update. * * @see https://mariadb.com/kb/en/the-mariadb-library/reserved-words/ */ @@ -135,10 +136,10 @@ class ContextMariaDb100100 extends Context 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, 'WRITE' => 3, 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, - 'DELETE' => 3, 'ELSEIF' => 3, 'EXISTS' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, - 'HAVING' => 3, 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, - 'REGEXP' => 3, 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, - 'SIGNAL' => 3, 'STORED' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, + 'DELETE' => 3, 'ELSEIF' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, 'HAVING' => 3, + 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, 'REGEXP' => 3, + 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, 'SIGNAL' => 3, + 'STORED' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, @@ -325,7 +326,7 @@ class ContextMariaDb100100 extends Context 'MOD' => 35, 'LEFT' => 35, 'MATCH' => 35, 'RIGHT' => 35, - 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, + 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, 'LOCALTIME' => 35, @@ -346,6 +347,6 @@ class ContextMariaDb100100 extends Context 'CHAR' => 43, 'BINARY' => 43, - 'INTERVAL' => 43 + 'INTERVAL' => 43, ); } diff --git a/src/Contexts/ContextMariaDb100200.php b/src/Contexts/ContextMariaDb100200.php index f1d6be8e4..a3cc639b8 100644 --- a/src/Contexts/ContextMariaDb100200.php +++ b/src/Contexts/ContextMariaDb100200.php @@ -3,7 +3,8 @@ /** * Context for MariaDB 10.2. * - * This file was auto-generated. + * This file was auto-generated from tools/contexts/*.txt. + * Use tools/run_generators.sh for update. * * @see https://mariadb.com/kb/en/the-mariadb-library/reserved-words/ */ @@ -135,10 +136,10 @@ class ContextMariaDb100200 extends Context 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, 'WRITE' => 3, 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, - 'DELETE' => 3, 'ELSEIF' => 3, 'EXISTS' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, - 'HAVING' => 3, 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, - 'REGEXP' => 3, 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, - 'SIGNAL' => 3, 'STORED' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, + 'DELETE' => 3, 'ELSEIF' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, 'HAVING' => 3, + 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, 'REGEXP' => 3, + 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, 'SIGNAL' => 3, + 'STORED' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, @@ -325,7 +326,7 @@ class ContextMariaDb100200 extends Context 'MOD' => 35, 'LEFT' => 35, 'MATCH' => 35, 'RIGHT' => 35, - 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, + 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, 'LOCALTIME' => 35, @@ -346,6 +347,6 @@ class ContextMariaDb100200 extends Context 'CHAR' => 43, 'BINARY' => 43, - 'INTERVAL' => 43 + 'INTERVAL' => 43, ); } diff --git a/src/Contexts/ContextMariaDb100300.php b/src/Contexts/ContextMariaDb100300.php index f8530888e..74dfb7f54 100644 --- a/src/Contexts/ContextMariaDb100300.php +++ b/src/Contexts/ContextMariaDb100300.php @@ -3,7 +3,8 @@ /** * Context for MariaDB 10.3. * - * This file was auto-generated. + * This file was auto-generated from tools/contexts/*.txt. + * Use tools/run_generators.sh for update. * * @see https://mariadb.com/kb/en/the-mariadb-library/reserved-words/ */ @@ -135,10 +136,10 @@ class ContextMariaDb100300 extends Context 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, 'WRITE' => 3, 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, - 'DELETE' => 3, 'ELSEIF' => 3, 'EXCEPT' => 3, 'EXISTS' => 3, 'FLOAT4' => 3, - 'FLOAT8' => 3, 'HAVING' => 3, 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, - 'OPTION' => 3, 'REGEXP' => 3, 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, - 'SELECT' => 3, 'SIGNAL' => 3, 'STORED' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, + 'DELETE' => 3, 'ELSEIF' => 3, 'EXCEPT' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, + 'HAVING' => 3, 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, + 'REGEXP' => 3, 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, + 'SIGNAL' => 3, 'STORED' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, @@ -325,7 +326,7 @@ class ContextMariaDb100300 extends Context 'MOD' => 35, 'LEFT' => 35, 'MATCH' => 35, 'RIGHT' => 35, - 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, + 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, 'LOCALTIME' => 35, @@ -346,6 +347,6 @@ class ContextMariaDb100300 extends Context 'CHAR' => 43, 'BINARY' => 43, - 'INTERVAL' => 43 + 'INTERVAL' => 43, ); } diff --git a/src/Contexts/ContextMySql50000.php b/src/Contexts/ContextMySql50000.php index 636ba9a2d..8a95856cc 100644 --- a/src/Contexts/ContextMySql50000.php +++ b/src/Contexts/ContextMySql50000.php @@ -3,7 +3,8 @@ /** * Context for MySQL 5.0. * - * This file was auto-generated. + * This file was auto-generated from tools/contexts/*.txt. + * Use tools/run_generators.sh for update. * * @see https://dev.mysql.com/doc/refman/5.0/en/keywords.html */ @@ -111,10 +112,10 @@ class ContextMySql50000 extends Context 'PURGE' => 3, 'READS' => 3, 'RLIKE' => 3, 'TABLE' => 3, 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, 'WRITE' => 3, 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, - 'DELETE' => 3, 'ELSEIF' => 3, 'EXISTS' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, - 'HAVING' => 3, 'IGNORE' => 3, 'INFILE' => 3, 'OPTION' => 3, 'REGEXP' => 3, - 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, 'SONAME' => 3, - 'UNLOCK' => 3, 'UPDATE' => 3, + 'DELETE' => 3, 'ELSEIF' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, 'HAVING' => 3, + 'IGNORE' => 3, 'INFILE' => 3, 'OPTION' => 3, 'REGEXP' => 3, 'RENAME' => 3, + 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, 'SONAME' => 3, 'UNLOCK' => 3, + 'UPDATE' => 3, 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, @@ -252,7 +253,7 @@ class ContextMySql50000 extends Context 'MOD' => 35, 'LEFT' => 35, 'MATCH' => 35, 'RIGHT' => 35, - 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, + 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, 'LOCALTIME' => 35, @@ -273,6 +274,6 @@ class ContextMySql50000 extends Context 'CHAR' => 43, 'BINARY' => 43, - 'INTERVAL' => 43 + 'INTERVAL' => 43, ); } diff --git a/src/Contexts/ContextMySql50100.php b/src/Contexts/ContextMySql50100.php index 4d1dec574..e61030677 100644 --- a/src/Contexts/ContextMySql50100.php +++ b/src/Contexts/ContextMySql50100.php @@ -3,7 +3,8 @@ /** * Context for MySQL 5.1. * - * This file was auto-generated. + * This file was auto-generated from tools/contexts/*.txt. + * Use tools/run_generators.sh for update. * * @see https://dev.mysql.com/doc/refman/5.1/en/keywords.html */ @@ -122,10 +123,10 @@ class ContextMySql50100 extends Context 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, 'WRITE' => 3, 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, - 'DELETE' => 3, 'ELSEIF' => 3, 'EXISTS' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, - 'HAVING' => 3, 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, - 'REGEXP' => 3, 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, - 'UNLOCK' => 3, 'UPDATE' => 3, + 'DELETE' => 3, 'ELSEIF' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, 'HAVING' => 3, + 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, 'REGEXP' => 3, + 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, 'UNLOCK' => 3, + 'UPDATE' => 3, 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, @@ -272,7 +273,7 @@ class ContextMySql50100 extends Context 'MOD' => 35, 'LEFT' => 35, 'MATCH' => 35, 'RIGHT' => 35, - 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, + 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, 'LOCALTIME' => 35, @@ -293,6 +294,6 @@ class ContextMySql50100 extends Context 'CHAR' => 43, 'BINARY' => 43, - 'INTERVAL' => 43 + 'INTERVAL' => 43, ); } diff --git a/src/Contexts/ContextMySql50500.php b/src/Contexts/ContextMySql50500.php index cde1c20fd..08b46245a 100644 --- a/src/Contexts/ContextMySql50500.php +++ b/src/Contexts/ContextMySql50500.php @@ -3,7 +3,8 @@ /** * Context for MySQL 5.5. * - * This file was auto-generated. + * This file was auto-generated from tools/contexts/*.txt. + * Use tools/run_generators.sh for update. * * @see https://dev.mysql.com/doc/refman/5.5/en/keywords.html */ @@ -126,10 +127,10 @@ class ContextMySql50500 extends Context 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, 'WRITE' => 3, 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, - 'DELETE' => 3, 'ELSEIF' => 3, 'EXISTS' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, - 'HAVING' => 3, 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, - 'REGEXP' => 3, 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, - 'SIGNAL' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, + 'DELETE' => 3, 'ELSEIF' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, 'HAVING' => 3, + 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, 'REGEXP' => 3, + 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, 'SIGNAL' => 3, + 'UNLOCK' => 3, 'UPDATE' => 3, 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, @@ -278,7 +279,7 @@ class ContextMySql50500 extends Context 'MOD' => 35, 'LEFT' => 35, 'MATCH' => 35, 'RIGHT' => 35, - 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, + 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, 'LOCALTIME' => 35, @@ -299,6 +300,6 @@ class ContextMySql50500 extends Context 'CHAR' => 43, 'BINARY' => 43, - 'INTERVAL' => 43 + 'INTERVAL' => 43, ); } diff --git a/src/Contexts/ContextMySql50600.php b/src/Contexts/ContextMySql50600.php index 7a1aa1234..bf1372ca5 100644 --- a/src/Contexts/ContextMySql50600.php +++ b/src/Contexts/ContextMySql50600.php @@ -3,7 +3,8 @@ /** * Context for MySQL 5.6. * - * This file was auto-generated. + * This file was auto-generated from tools/contexts/*.txt. + * Use tools/run_generators.sh for update. * * @see https://dev.mysql.com/doc/refman/5.6/en/keywords.html */ @@ -130,10 +131,10 @@ class ContextMySql50600 extends Context 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, 'WRITE' => 3, 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, - 'DELETE' => 3, 'ELSEIF' => 3, 'EXISTS' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, - 'HAVING' => 3, 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, - 'REGEXP' => 3, 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, - 'SIGNAL' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, + 'DELETE' => 3, 'ELSEIF' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, 'HAVING' => 3, + 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, 'REGEXP' => 3, + 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, 'SIGNAL' => 3, + 'UNLOCK' => 3, 'UPDATE' => 3, 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, @@ -303,7 +304,7 @@ class ContextMySql50600 extends Context 'MOD' => 35, 'LEFT' => 35, 'MATCH' => 35, 'RIGHT' => 35, - 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, + 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, 'LOCALTIME' => 35, @@ -324,6 +325,6 @@ class ContextMySql50600 extends Context 'CHAR' => 43, 'BINARY' => 43, - 'INTERVAL' => 43 + 'INTERVAL' => 43, ); } diff --git a/src/Contexts/ContextMySql50700.php b/src/Contexts/ContextMySql50700.php index e02689dbc..4ee4f8688 100644 --- a/src/Contexts/ContextMySql50700.php +++ b/src/Contexts/ContextMySql50700.php @@ -3,7 +3,8 @@ /** * Context for MySQL 5.7. * - * This file was auto-generated. + * This file was auto-generated from tools/contexts/*.txt. + * Use tools/run_generators.sh for update. * * @see https://dev.mysql.com/doc/refman/5.7/en/keywords.html */ @@ -135,10 +136,10 @@ class ContextMySql50700 extends Context 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, 'WRITE' => 3, 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, - 'DELETE' => 3, 'ELSEIF' => 3, 'EXISTS' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, - 'HAVING' => 3, 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, - 'REGEXP' => 3, 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, - 'SIGNAL' => 3, 'STORED' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, + 'DELETE' => 3, 'ELSEIF' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, 'HAVING' => 3, + 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, 'REGEXP' => 3, + 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, 'SIGNAL' => 3, + 'STORED' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, @@ -325,7 +326,7 @@ class ContextMySql50700 extends Context 'MOD' => 35, 'LEFT' => 35, 'MATCH' => 35, 'RIGHT' => 35, - 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, + 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, 'LOCALTIME' => 35, @@ -346,6 +347,6 @@ class ContextMySql50700 extends Context 'CHAR' => 43, 'BINARY' => 43, - 'INTERVAL' => 43 + 'INTERVAL' => 43, ); } diff --git a/src/Contexts/ContextMySql80000.php b/src/Contexts/ContextMySql80000.php index d7465211b..e06b27625 100644 --- a/src/Contexts/ContextMySql80000.php +++ b/src/Contexts/ContextMySql80000.php @@ -3,7 +3,8 @@ /** * Context for MySQL 8.0. * - * This file was auto-generated. + * This file was auto-generated from tools/contexts/*.txt. + * Use tools/run_generators.sh for update. * * @see https://dev.mysql.com/doc/refman/8.0/en/keywords.html */ @@ -136,10 +137,10 @@ class ContextMySql80000 extends Context 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, 'WRITE' => 3, 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, - 'DELETE' => 3, 'ELSEIF' => 3, 'EXISTS' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, - 'HAVING' => 3, 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, - 'REGEXP' => 3, 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, - 'SIGNAL' => 3, 'STORED' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, + 'DELETE' => 3, 'ELSEIF' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, 'HAVING' => 3, + 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, 'REGEXP' => 3, + 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, 'SIGNAL' => 3, + 'STORED' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, @@ -326,7 +327,7 @@ class ContextMySql80000 extends Context 'MOD' => 35, 'LEFT' => 35, 'MATCH' => 35, 'RIGHT' => 35, - 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, + 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, 'LOCALTIME' => 35, @@ -347,6 +348,6 @@ class ContextMySql80000 extends Context 'CHAR' => 43, 'BINARY' => 43, - 'INTERVAL' => 43 + 'INTERVAL' => 43, ); } diff --git a/tests/Parser/SelectStatementTest.php b/tests/Parser/SelectStatementTest.php index f4e1e906a..4f0f7acd4 100644 --- a/tests/Parser/SelectStatementTest.php +++ b/tests/Parser/SelectStatementTest.php @@ -16,9 +16,9 @@ public function testSelectOptions() } /** - * @dataProvider selectProvider - * * @param mixed $test + * + * @dataProvider selectProvider */ public function testSelect($test) { @@ -61,6 +61,7 @@ public function selectProvider() array('parser/parseSelectCaseAliasErr2'), array('parser/parseSelectCaseAliasErr3'), array('parser/parseSelectCaseAliasErr4'), + array('parser/parseSelectExists'), array('parser/parseSelectIntoOptions1'), array('parser/parseSelectIntoOptions2'), array('parser/parseSelectIntoOptions3'), diff --git a/tests/data/parser/parseSelectExists.in b/tests/data/parser/parseSelectExists.in new file mode 100644 index 000000000..98d89d790 --- /dev/null +++ b/tests/data/parser/parseSelectExists.in @@ -0,0 +1 @@ +SELECT EXISTS(SELECT 1) diff --git a/tests/data/parser/parseSelectExists.out b/tests/data/parser/parseSelectExists.out new file mode 100644 index 000000000..17304652a --- /dev/null +++ b/tests/data/parser/parseSelectExists.out @@ -0,0 +1,4 @@ +a:4:{s:5:"query";s:24:"SELECT EXISTS(SELECT 1) +";s:5:"lexer";O:26:"PhpMyAdmin\SqlParser\Lexer":8:{s:3:"str";s:24:"SELECT EXISTS(SELECT 1) +";s:3:"len";i:24;s:4:"last";i:24;s:4:"list";O:31:"PhpMyAdmin\SqlParser\TokensList":3:{s:6:"tokens";a:10:{i:0;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"SELECT";s:5:"value";s:6:"SELECT";s:7:"keyword";s:6:"SELECT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:0;}i:1;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:6;}i:2;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"EXISTS";s:5:"value";s:6:"EXISTS";s:7:"keyword";s:6:"EXISTS";s:4:"type";i:1;s:5:"flags";i:35;s:8:"position";i:7;}i:3;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:"(";s:5:"value";s:1:"(";s:7:"keyword";N;s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:13;}i:4;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"SELECT";s:5:"value";s:6:"SELECT";s:7:"keyword";s:6:"SELECT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:14;}i:5;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:20;}i:6;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:"1";s:5:"value";i:1;s:7:"keyword";N;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:21;}i:7;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:")";s:5:"value";s:1:")";s:7:"keyword";N;s:4:"type";i:2;s:5:"flags";i:16;s:8:"position";i:22;}i:8;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" +";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:23;}i:9;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";N;s:5:"value";N;s:7:"keyword";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:10;s:3:"idx";i:10;}s:9:"delimiter";s:1:";";s:12:"delimiterLen";i:1;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"parser";O:27:"PhpMyAdmin\SqlParser\Parser":5:{s:4:"list";r:7;s:10:"statements";a:1:{i:0;O:47:"PhpMyAdmin\SqlParser\Statements\SelectStatement":17:{s:4:"expr";a:1:{i:0;O:42:"PhpMyAdmin\SqlParser\Components\Expression":7:{s:8:"database";N;s:5:"table";N;s:6:"column";N;s:4:"expr";s:16:"EXISTS(SELECT 1)";s:5:"alias";N;s:8:"function";s:6:"EXISTS";s:8:"subquery";s:6:"SELECT";}}s:4:"from";a:0:{}s:11:"index_hints";N;s:9:"partition";N;s:5:"where";N;s:5:"group";N;s:6:"having";N;s:5:"order";N;s:5:"limit";N;s:9:"procedure";N;s:4:"into";N;s:4:"join";N;s:5:"union";a:0:{}s:11:"end_options";N;s:7:"options";O:44:"PhpMyAdmin\SqlParser\Components\OptionsArray":1:{s:7:"options";a:0:{}}s:5:"first";i:0;s:4:"last";i:8;}}s:8:"brackets";i:0;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:0:{}}} \ No newline at end of file diff --git a/tools/ContextGenerator.php b/tools/ContextGenerator.php index b31c7e125..0d1fbddd8 100644 --- a/tools/ContextGenerator.php +++ b/tools/ContextGenerator.php @@ -60,7 +60,8 @@ class ContextGenerator '/**' . "\n" . ' * Context for %1$s.' . "\n" . ' *' . "\n" . - ' * This file was auto-generated.' . "\n" . + ' * This file was auto-generated from tools/contexts/*.txt.' . "\n" . + ' * Use tools/run_generators.sh for update.' . "\n" . ' *' . "\n" . ' * @see %3$s' . "\n" . ' */' . "\n" . diff --git a/tools/contexts/_common.txt b/tools/contexts/_common.txt index bc8968bdd..85e755536 100644 --- a/tools/contexts/_common.txt +++ b/tools/contexts/_common.txt @@ -24,6 +24,7 @@ DOUBLE (D) ENCLOSED BY ENUM (D) ESCAPED BY +EXISTS (F) FLOAT (D) FOR EACH ROW FOR UPDATE