summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Context.php279
-rw-r--r--src/Contexts/Context_MySQL500.php163
-rw-r--r--src/Contexts/Context_MySQL510.php177
-rw-r--r--src/Contexts/Context_MySQL550.php181
-rw-r--r--src/Contexts/Context_MySQL560.php190
-rw-r--r--src/Contexts/Context_MySQL570.php199
-rw-r--r--src/Fragments/FieldDefFragment.php2
-rw-r--r--src/Fragments/FieldFragment.php2
-rw-r--r--src/Fragments/FromKeyword.php2
-rw-r--r--src/Fragments/IntoKeyword.php2
-rw-r--r--src/Fragments/LimitKeyword.php3
-rw-r--r--src/Fragments/OptionsFragment.php7
-rw-r--r--src/Fragments/OrderKeyword.php2
-rw-r--r--src/Fragments/RenameKeyword.php2
-rw-r--r--src/Fragments/SelectKeyword.php2
-rw-r--r--src/Fragments/SetKeyword.php2
-rw-r--r--src/Fragments/ValuesKeyword.php2
-rw-r--r--src/Fragments/WhereKeyword.php2
-rw-r--r--src/Lexer.php4
-rw-r--r--src/Token.php8
20 files changed, 1143 insertions, 88 deletions
diff --git a/src/Context.php b/src/Context.php
index 4c73af2..1a06baf 100644
--- a/src/Context.php
+++ b/src/Context.php
@@ -26,46 +26,70 @@ abstract class Context
*/
const OPERATOR_MAX_LENGTH = 4;
+ /**
+ * The name of the default content.
+ *
+ * @var string
+ */
+ public static $defaultContext = '\\SqlParser\\Contexts\\Context_MySQL570';
+
+ /**
+ * The name of the loaded context.
+ *
+ * @var string
+ */
+ public static $loadedContext = '\\SqlParser\\Contexts\\Context_MySQL570';
// -------------------------------------------------------------------------
// Keywords.
/**
- * List of official keywords.
+ * List of keywords.
*
* Because, PHP's associative arrays are basically hash tables, it is more
* efficient to store keywords as keys instead of values.
*
+ * There are multiple types of keyword, depending on the value associated:
+ * 1 - reserved keywords
+ * 2 - keyword
+ * 3 - composite keyword (unofficial); used to make the job of the lexer
+ * much easier by grouping keywords that may appear together
+ *
+ * Keywords below are sorted by type, length and keyword.
+ *
* @var array
*/
public static $KEYWORDS = array(
- 'AS' => 1, 'BY' => 1, 'IF' => 1, 'IN' => 1, 'IS' => 1, 'ON' => 1,
- 'OR' => 1, 'TO' => 1,
- 'ADD' => 1, 'ALL' => 1, 'AND' => 1, 'ASC' => 1, 'DEC' => 1, 'DIV' => 1,
- 'FOR' => 1, 'GET' => 1, 'INT' => 1, 'KEY' => 1, 'MOD' => 1, 'NOT' => 1,
- 'OUT' => 1, 'SET' => 1, 'SQL' => 1, 'SSL' => 1, 'USE' => 1, 'XOR' => 1,
- 'BLOB' => 1, 'BOTH' => 1, 'CALL' => 1, 'CASE' => 1, 'CHAR' => 1,
- 'DESC' => 1, 'DROP' => 1, 'DUAL' => 1, 'EACH' => 1, 'ELSE' => 1,
- 'EXIT' => 1, 'FROM' => 1, 'GOTO' => 1, 'INT1' => 1, 'INT2' => 1,
- 'INT3' => 1, 'INT4' => 1, 'INT8' => 1, 'INTO' => 1, 'JOIN' => 1,
- 'KEYS' => 1, 'KILL' => 1, 'LEFT' => 1, 'LIKE' => 1, 'LOAD' => 1,
- 'LOCK' => 1, 'LONG' => 1, 'LOOP' => 1, 'NULL' => 1, 'READ' => 1,
- 'REAL' => 1, 'SHOW' => 1, 'THEN' => 1, 'TRUE' => 1, 'UNDO' => 1,
- 'WHEN' => 1, 'WITH' => 1,
- 'ALTER' => 1, 'CHECK' => 1, 'CROSS' => 1, 'FALSE' => 1, 'FETCH' => 1,
- 'FLOAT' => 1, 'FORCE' => 1, 'GRANT' => 1, 'GROUP' => 1, 'INDEX' => 1,
- 'INNER' => 1, 'INOUT' => 1, 'LABEL' => 1, 'LEAVE' => 1, 'LIMIT' => 1,
- 'LINES' => 1, 'MATCH' => 1, 'ORDER' => 1, 'OUTER' => 1, 'PURGE' => 1,
- 'RANGE' => 1, 'READS' => 1, 'RIGHT' => 1, 'RLIKE' => 1, 'TABLE' => 1,
- 'UNION' => 1, 'USAGE' => 1, 'USING' => 1, 'WHERE' => 1, 'WHILE' => 1,
- 'WRITE' => 1,
+ 'AS' => 1, 'BY' => 1, 'IF' => 1, 'IN' => 1, 'IS' => 1,
+ 'ON' => 1, 'OR' => 1, 'TO' => 1,
+ 'ADD' => 1, 'ALL' => 1, 'AND' => 1, 'ASC' => 1, 'DEC' => 1,
+ 'DIV' => 1, 'FOR' => 1, 'GET' => 1, 'INT' => 1, 'KEY' => 1,
+ 'MOD' => 1, 'NOT' => 1, 'OUT' => 1, 'SET' => 1, 'SQL' => 1,
+ 'SSL' => 1, 'USE' => 1, 'XOR' => 1,
+ 'BLOB' => 1, 'BOTH' => 1, 'CALL' => 1, 'CASE' => 1,
+ 'CHAR' => 1, 'DESC' => 1, 'DROP' => 1, 'DUAL' => 1,
+ 'EACH' => 1, 'ELSE' => 1, 'EXIT' => 1, 'FROM' => 1,
+ 'INT1' => 1, 'INT2' => 1, 'INT3' => 1, 'INT4' => 1,
+ 'INT8' => 1, 'INTO' => 1, 'JOIN' => 1, 'KEYS' => 1,
+ 'KILL' => 1, 'LEFT' => 1, 'LIKE' => 1, 'LOAD' => 1,
+ 'LOCK' => 1, 'LONG' => 1, 'LOOP' => 1, 'NULL' => 1,
+ 'READ' => 1, 'REAL' => 1, 'SHOW' => 1, 'THEN' => 1,
+ 'TRUE' => 1, 'UNDO' => 1, 'WHEN' => 1, 'WITH' => 1,
+ 'ALTER' => 1, 'CHECK' => 1, 'CROSS' => 1, 'FALSE' => 1,
+ 'FETCH' => 1, 'FLOAT' => 1, 'FORCE' => 1, 'GRANT' => 1,
+ 'GROUP' => 1, 'INDEX' => 1, 'INNER' => 1, 'INOUT' => 1,
+ 'LEAVE' => 1, 'LIMIT' => 1, 'LINES' => 1, 'MATCH' => 1,
+ 'ORDER' => 1, 'OUTER' => 1, 'PURGE' => 1, 'RANGE' => 1,
+ 'READS' => 1, 'RIGHT' => 1, 'RLIKE' => 1, 'TABLE' => 1,
+ 'UNION' => 1, 'USAGE' => 1, 'USING' => 1, 'WHERE' => 1,
+ 'WHILE' => 1, 'WRITE' => 1,
'BEFORE' => 1, 'BIGINT' => 1, 'BINARY' => 1, 'CHANGE' => 1,
'COLUMN' => 1, 'CREATE' => 1, 'CURSOR' => 1, 'DELETE' => 1,
'DOUBLE' => 1, 'ELSEIF' => 1, 'EXISTS' => 1, 'FLOAT4' => 1,
'FLOAT8' => 1, 'HAVING' => 1, 'IGNORE' => 1, 'INFILE' => 1,
'INSERT' => 1, 'LINEAR' => 1, 'OPTION' => 1, 'REGEXP' => 1,
'RENAME' => 1, 'REPEAT' => 1, 'RETURN' => 1, 'REVOKE' => 1,
- 'SCHEMA' => 1, 'SELECT' => 1, 'SIGNAL' => 1, 'SONAME' => 1,
+ 'SCHEMA' => 1, 'SELECT' => 1, 'SIGNAL' => 1, 'STORED' => 1,
'UNIQUE' => 1, 'UNLOCK' => 1, 'UPDATE' => 1, 'VALUES' => 1,
'ANALYZE' => 1, 'BETWEEN' => 1, 'CASCADE' => 1, 'COLLATE' => 1,
'CONVERT' => 1, 'DECIMAL' => 1, 'DECLARE' => 1, 'DEFAULT' => 1,
@@ -73,23 +97,27 @@ abstract class Context
'INTEGER' => 1, 'ITERATE' => 1, 'LEADING' => 1, 'NATURAL' => 1,
'NUMERIC' => 1, 'OUTFILE' => 1, 'PRIMARY' => 1, 'RELEASE' => 1,
'REPLACE' => 1, 'REQUIRE' => 1, 'SCHEMAS' => 1, 'SPATIAL' => 1,
- 'TINYINT' => 1, 'TRIGGER' => 1, 'UPGRADE' => 1, 'VARCHAR' => 1,
- 'VARYING' => 1,
- 'CONTINUE' => 1, 'DATABASE' => 1, 'DAY_HOUR' => 1, 'DESCRIBE' => 1,
- 'DISTINCT' => 1, 'ENCLOSED' => 1, 'FULLTEXT' => 1, 'INTERVAL' => 1,
- 'LONGBLOB' => 1, 'LONGTEXT' => 1, 'MAXVALUE' => 1, 'MODIFIES' => 1,
- 'OPTIMIZE' => 1, 'RESIGNAL' => 1, 'RESTRICT' => 1, 'SMALLINT' => 1,
- 'SPECIFIC' => 1, 'SQLSTATE' => 1, 'STARTING' => 1, 'TINYBLOB' => 1,
- 'TINYTEXT' => 1, 'TRAILING' => 1, 'UNSIGNED' => 1, 'UTC_DATE' => 1,
+ 'TINYINT' => 1, 'TRIGGER' => 1, 'VARCHAR' => 1, 'VARYING' => 1,
+ 'VIRTUAL' => 1,
+ 'CONTINUE' => 1, 'DATABASE' => 1, 'DAY_HOUR' => 1,
+ 'DESCRIBE' => 1, 'DISTINCT' => 1, 'ENCLOSED' => 1,
+ 'FULLTEXT' => 1, 'INTERVAL' => 1, 'LONGBLOB' => 1,
+ 'LONGTEXT' => 1, 'MAXVALUE' => 1, 'MODIFIES' => 1,
+ 'OPTIMIZE' => 1, 'RESIGNAL' => 1, 'RESTRICT' => 1,
+ 'SMALLINT' => 1, 'SPECIFIC' => 1, 'SQLSTATE' => 1,
+ 'STARTING' => 1, 'TINYBLOB' => 1, 'TINYTEXT' => 1,
+ 'TRAILING' => 1, 'UNSIGNED' => 1, 'UTC_DATE' => 1,
'UTC_TIME' => 1, 'ZEROFILL' => 1,
- 'CHARACTER' => 1, 'CONDITION' => 1, 'DATABASES' => 1, 'LOCALTIME' => 1,
- 'MEDIUMINT' => 1, 'MIDDLEINT' => 1, 'PARTITION' => 1, 'PRECISION' => 1,
- 'PROCEDURE' => 1, 'SENSITIVE' => 1, 'SEPARATOR' => 1, 'VARBINARY' => 1,
- 'ACCESSIBLE' => 1, 'ASENSITIVE' => 1, 'CONNECTION' => 1,
- 'CONSTRAINT' => 1, 'DAY_MINUTE' => 1, 'DAY_SECOND' => 1,
- 'MEDIUMBLOB' => 1, 'MEDIUMTEXT' => 1, 'OPTIONALLY' => 1,
- 'READ_WRITE' => 1, 'REFERENCES' => 1, 'SQLWARNING' => 1,
- 'TERMINATED' => 1, 'YEAR_MONTH' => 1,
+ 'CHARACTER' => 1, 'CONDITION' => 1, 'DATABASES' => 1,
+ 'GENERATED' => 1, 'LOCALTIME' => 1, 'MEDIUMINT' => 1,
+ 'MIDDLEINT' => 1, 'PARTITION' => 1, 'PRECISION' => 1,
+ 'PROCEDURE' => 1, 'SENSITIVE' => 1, 'SEPARATOR' => 1,
+ 'VARBINARY' => 1,
+ 'ACCESSIBLE' => 1, 'ASENSITIVE' => 1, 'CONSTRAINT' => 1,
+ 'DAY_MINUTE' => 1, 'DAY_SECOND' => 1, 'MEDIUMBLOB' => 1,
+ 'MEDIUMTEXT' => 1, 'OPTIONALLY' => 1, 'READ_WRITE' => 1,
+ 'REFERENCES' => 1, 'SQLWARNING' => 1, 'TERMINATED' => 1,
+ 'YEAR_MONTH' => 1,
'DISTINCTROW' => 1, 'HOUR_MINUTE' => 1, 'HOUR_SECOND' => 1,
'INSENSITIVE' => 1, 'MASTER_BIND' => 1,
'CURRENT_DATE' => 1, 'CURRENT_TIME' => 1, 'CURRENT_USER' => 1,
@@ -105,33 +133,118 @@ abstract class Context
'SQL_CALC_FOUND_ROWS' => 1,
'MASTER_SSL_VERIFY_SERVER_CERT' => 1,
- /*
- * Secondary group of keywords.
- *
- * Keywords below are either words that are used as keywords, but not
- * defined as proper keywords or are group of keywords which are parsed
- * easier when found grouped.
- */
-
- 'END' => 2,
- 'INDEX' => 2, 'VALUE' => 2,
- 'ENGINE' => 2,
- 'CHARSET' => 2, 'COMMENT' => 2, 'RETURNS' => 2, 'STORAGE' => 2,
- 'CHECKSUM' => 2, 'MAX_ROWS' => 2, 'MIN_ROWS' => 2, 'NOT NULL' => 2,
- 'PASSWORD' => 2,
- 'INDEX KEY' => 2, 'PACK_KEYS' => 2,
- 'ROW_FORMAT' => 2, 'TABLESPACE' => 2,
- 'UNIQUE KEY' => 2,
- 'FOREIGN KEY' => 2, 'PRIMARY KEY' => 2, 'PRIMARY KEY' => 2,
- 'SPATIAL KEY' => 2,
- 'FULLTEXT KEY' => 2, 'UNIQUE INDEX' => 2,
- 'CHARACTER SET' => 2, 'IF NOT EXISTS' => 2, 'INSERT_METHOD' => 2,
- 'SPATIAL INDEX' => 2,
- 'AUTO_INCREMENT' => 2, 'AVG_ROW_LENGTH' => 2, 'DATA DIRECTORY' => 2,
- 'FULLTEXT INDEX' => 2, 'KEY_BLOCK_SIZE' => 2,
- 'DEFAULT COLLATE' => 2,
- 'DELAY_KEY_WRITE' => 2, 'INDEX DIRECTORY' => 2,
- 'DEFAULT CHARACTER SET' => 2,
+ 'AT' => 2, 'DO' => 2, 'IO' => 2, 'NO' => 2, 'XA' => 2,
+ 'ANY' => 2, 'AVG' => 2, 'BIT' => 2, 'CPU' => 2, 'DAY' => 2, 'END' => 2,
+ 'IPC' => 2, 'NDB' => 2, 'NEW' => 2, 'ONE' => 2, 'ROW' => 2, 'XID' => 2,
+ 'XML' => 2,
+ 'BOOL' => 2, 'BYTE' => 2, 'CODE' => 2, 'CUBE' => 2, 'DATA' => 2, 'DATE' => 2,
+ 'DISK' => 2, 'ENDS' => 2, 'ENUM' => 2, 'FAST' => 2, 'FILE' => 2, 'FULL' => 2,
+ 'HASH' => 2, 'HELP' => 2, 'HOST' => 2, 'HOUR' => 2, 'LAST' => 2, 'LESS' => 2,
+ 'LIST' => 2, 'LOGS' => 2, 'MODE' => 2, 'NAME' => 2, 'NEXT' => 2, 'NONE' => 2,
+ 'ONLY' => 2, 'OPEN' => 2, 'PAGE' => 2, 'PORT' => 2, 'PREV' => 2, 'ROWS' => 2,
+ 'SLOW' => 2, 'SOME' => 2, 'STOP' => 2, 'TEXT' => 2, 'THAN' => 2, 'TIME' => 2,
+ 'TYPE' => 2, 'USER' => 2, 'VIEW' => 2, 'WAIT' => 2, 'WEEK' => 2, 'WORK' => 2,
+ 'X509' => 2, 'YEAR' => 2,
+ 'AFTER' => 2, 'ASCII' => 2, 'BEGIN' => 2, 'BLOCK' => 2, 'BTREE' => 2,
+ 'CACHE' => 2, 'CHAIN' => 2, 'CLOSE' => 2, 'ERROR' => 2, 'EVENT' => 2,
+ 'EVERY' => 2, 'FIRST' => 2, 'FIXED' => 2, 'FLUSH' => 2, 'FOUND' => 2,
+ 'HOSTS' => 2, 'LEVEL' => 2, 'LOCAL' => 2, 'LOCKS' => 2, 'MERGE' => 2,
+ 'MONTH' => 2, 'MUTEX' => 2, 'NAMES' => 2, 'NCHAR' => 2, 'NEVER' => 2,
+ 'OWNER' => 2, 'PHASE' => 2, 'POINT' => 2, 'PROXY' => 2, 'QUERY' => 2,
+ 'QUICK' => 2, 'RELAY' => 2, 'RESET' => 2, 'RTREE' => 2, 'SHARE' => 2,
+ 'SLAVE' => 2, 'START' => 2, 'SUPER' => 2, 'SWAPS' => 2, 'TYPES' => 2,
+ 'UNTIL' => 2, 'VALUE' => 2,
+ 'ACTION' => 2, 'ALWAYS' => 2, 'BACKUP' => 2, 'BINLOG' => 2, 'CIPHER' => 2,
+ 'CLIENT' => 2, 'COMMIT' => 2, 'ENABLE' => 2, 'ENGINE' => 2, 'ERRORS' => 2,
+ 'ESCAPE' => 2, 'EVENTS' => 2, 'EXPIRE' => 2, 'EXPORT' => 2, 'FAULTS' => 2,
+ 'FIELDS' => 2, 'FILTER' => 2, 'FORMAT' => 2, 'GLOBAL' => 2, 'GRANTS' => 2,
+ 'IMPORT' => 2, 'ISSUER' => 2, 'LEAVES' => 2, 'MASTER' => 2, 'MEDIUM' => 2,
+ 'MEMORY' => 2, 'MINUTE' => 2, 'MODIFY' => 2, 'NUMBER' => 2, 'OFFSET' => 2,
+ 'PARSER' => 2, 'PLUGIN' => 2, 'RELOAD' => 2, 'REMOVE' => 2, 'REPAIR' => 2,
+ 'RESUME' => 2, 'ROLLUP' => 2, 'SECOND' => 2, 'SERIAL' => 2, 'SERVER' => 2,
+ 'SIGNED' => 2, 'SIMPLE' => 2, 'SOCKET' => 2, 'SONAME' => 2, 'SOUNDS' => 2,
+ 'SOURCE' => 2, 'STARTS' => 2, 'STATUS' => 2, 'STRING' => 2, 'TABLES' => 2,
+ 'ACCOUNT' => 2, 'AGAINST' => 2, 'ANALYSE' => 2, 'BOOLEAN' => 2, 'CHANGED' => 2,
+ 'CHANNEL' => 2, 'CHARSET' => 2, 'COLUMNS' => 2, 'COMMENT' => 2, 'COMPACT' => 2,
+ 'CONTEXT' => 2, 'CURRENT' => 2, 'DEFINER' => 2, 'DISABLE' => 2, 'DISCARD' => 2,
+ 'DYNAMIC' => 2, 'ENGINES' => 2, 'EXECUTE' => 2, 'FOLLOWS' => 2, 'GENERAL' => 2,
+ 'HANDLER' => 2, 'INDEXES' => 2, 'INSTALL' => 2, 'INVOKER' => 2, 'LOGFILE' => 2,
+ 'MIGRATE' => 2, 'NO_WAIT' => 2, 'OPTIONS' => 2, 'PARTIAL' => 2, 'PLUGINS' => 2,
+ 'POLYGON' => 2, 'PREPARE' => 2, 'PROFILE' => 2, 'QUARTER' => 2, 'REBUILD' => 2,
+ 'RECOVER' => 2, 'RESTORE' => 2, 'RETURNS' => 2, 'REVERSE' => 2, 'ROUTINE' => 2,
+ 'SESSION' => 2, 'STACKED' => 2, 'STORAGE' => 2, 'SUBJECT' => 2, 'SUSPEND' => 2,
+ 'UNICODE' => 2, 'UNKNOWN' => 2, 'UPGRADE' => 2, 'USE_FRM' => 2, 'WITHOUT' => 2,
+ 'WRAPPER' => 2,
+ 'CASCADED' => 2, 'CHECKSUM' => 2, 'COALESCE' => 2, 'CONTAINS' => 2,
+ 'DATAFILE' => 2, 'DATETIME' => 2, 'DUMPFILE' => 2, 'EXCHANGE' => 2,
+ 'EXTENDED' => 2, 'FUNCTION' => 2, 'GEOMETRY' => 2, 'LANGUAGE' => 2,
+ 'MAX_ROWS' => 2, 'MAX_SIZE' => 2, 'MIN_ROWS' => 2, 'NATIONAL' => 2,
+ 'NVARCHAR' => 2, 'PASSWORD' => 2, 'PRECEDES' => 2, 'PRESERVE' => 2,
+ 'PROFILES' => 2, 'REDOFILE' => 2, 'RELAYLOG' => 2, 'ROLLBACK' => 2,
+ 'SCHEDULE' => 2, 'SECURITY' => 2, 'SHUTDOWN' => 2, 'SNAPSHOT' => 2,
+ 'SWITCHES' => 2, 'TRIGGERS' => 2, 'TRUNCATE' => 2, 'UNDOFILE' => 2,
+ 'WARNINGS' => 2,
+ 'AGGREGATE' => 2, 'ALGORITHM' => 2, 'COLLATION' => 2, 'COMMITTED' => 2,
+ 'DIRECTORY' => 2, 'DUPLICATE' => 2, 'EXPANSION' => 2, 'IO_THREAD' => 2,
+ 'ISOLATION' => 2, 'NODEGROUP' => 2, 'PACK_KEYS' => 2, 'READ_ONLY' => 2,
+ 'REDUNDANT' => 2, 'ROW_COUNT' => 2, 'SAVEPOINT' => 2, 'SQL_CACHE' => 2,
+ 'TEMPORARY' => 2, 'TEMPTABLE' => 2, 'TIMESTAMP' => 2, 'UNDEFINED' => 2,
+ 'UNINSTALL' => 2, 'VARIABLES' => 2,
+ 'COMPLETION' => 2, 'COMPRESSED' => 2, 'CONCURRENT' => 2, 'CONNECTION' => 2,
+ 'CONSISTENT' => 2, 'DEALLOCATE' => 2, 'GET_FORMAT' => 2, 'IDENTIFIED' => 2,
+ 'LINESTRING' => 2, 'MASTER_SSL' => 2, 'MULTIPOINT' => 2, 'NDBCLUSTER' => 2,
+ 'PARTITIONS' => 2, 'PLUGIN_DIR' => 2, 'PRIVILEGES' => 2, 'REORGANIZE' => 2,
+ 'REPEATABLE' => 2, 'ROW_FORMAT' => 2, 'SQL_THREAD' => 2, 'TABLESPACE' => 2,
+ 'TABLE_NAME' => 2, 'VALIDATION' => 2,
+ 'COLUMN_NAME' => 2, 'COMPRESSION' => 2, 'CURSOR_NAME' => 2, 'DIAGNOSTICS' => 2,
+ 'EXTENT_SIZE' => 2, 'MASTER_HOST' => 2, 'MASTER_PORT' => 2, 'MASTER_USER' => 2,
+ 'MICROSECOND' => 2, 'MYSQL_ERRNO' => 2, 'NONBLOCKING' => 2, 'PROCESSLIST' => 2,
+ 'REPLICATION' => 2, 'SCHEMA_NAME' => 2, 'SQL_TSI_DAY' => 2, 'TRANSACTION' => 2,
+ 'UNCOMMITTED' => 2,
+ 'CATALOG_NAME' => 2, 'CLASS_ORIGIN' => 2, 'DEFAULT_AUTH' => 2,
+ 'DES_KEY_FILE' => 2, 'INITIAL_SIZE' => 2, 'MASTER_DELAY' => 2,
+ 'MESSAGE_TEXT' => 2, 'MULTIPOLYGON' => 2, 'OLD_PASSWORD' => 2,
+ 'PARTITIONING' => 2, 'RELAY_THREAD' => 2, 'SERIALIZABLE' => 2,
+ 'SQL_NO_CACHE' => 2, 'SQL_TSI_HOUR' => 2, 'SQL_TSI_WEEK' => 2,
+ 'SQL_TSI_YEAR' => 2, 'SUBPARTITION' => 2, 'TIMESTAMPADD' => 2,
+ 'COLUMN_FORMAT' => 2, 'INSERT_METHOD' => 2, 'MASTER_SSL_CA' => 2,
+ 'RELAY_LOG_POS' => 2, 'SQL_TSI_MONTH' => 2, 'SUBPARTITIONS' => 2,
+ 'TIMESTAMPDIFF' => 2, 'WEIGHT_STRING' => 2,
+ 'AUTO_INCREMENT' => 2, 'AVG_ROW_LENGTH' => 2, 'KEY_BLOCK_SIZE' => 2,
+ 'MASTER_LOG_POS' => 2, 'MASTER_SSL_CRL' => 2, 'MASTER_SSL_KEY' => 2,
+ 'RELAY_LOG_FILE' => 2, 'SQL_TSI_MINUTE' => 2, 'SQL_TSI_SECOND' => 2,
+ 'TABLE_CHECKSUM' => 2, 'USER_RESOURCES' => 2,
+ 'AUTOEXTEND_SIZE' => 2, 'CONSTRAINT_NAME' => 2, 'DELAY_KEY_WRITE' => 2,
+ 'FILE_BLOCK_SIZE' => 2, 'MASTER_LOG_FILE' => 2, 'MASTER_PASSWORD' => 2,
+ 'MASTER_SSL_CERT' => 2, 'MULTILINESTRING' => 2, 'PARSE_GCOL_EXPR' => 2,
+ 'REPLICATE_DO_DB' => 2, 'SQL_AFTER_GTIDS' => 2, 'SQL_TSI_QUARTER' => 2,
+ 'SUBCLASS_ORIGIN' => 2,
+ 'MASTER_SERVER_ID' => 2, 'REDO_BUFFER_SIZE' => 2, 'SQL_BEFORE_GTIDS' => 2,
+ 'STATS_PERSISTENT' => 2, 'UNDO_BUFFER_SIZE' => 2,
+ 'CONSTRAINT_SCHEMA' => 2, 'GROUP_REPLICATION' => 2, 'IGNORE_SERVER_IDS' => 2,
+ 'MASTER_SSL_CAPATH' => 2, 'MASTER_SSL_CIPHER' => 2, 'RETURNED_SQLSTATE' => 2,
+ 'SQL_BUFFER_RESULT' => 2, 'STATS_AUTO_RECALC' => 2,
+ 'CONSTRAINT_CATALOG' => 2, 'GEOMETRYCOLLECTION' => 2, 'MASTER_RETRY_COUNT' => 2,
+ 'MASTER_SSL_CRLPATH' => 2, 'MAX_STATEMENT_TIME' => 2, 'REPLICATE_DO_TABLE' => 2,
+ 'SQL_AFTER_MTS_GAPS' => 2, 'STATS_SAMPLE_PAGES' => 2,
+ 'REPLICATE_IGNORE_DB' => 2,
+ 'MASTER_AUTO_POSITION' => 2, 'MASTER_CONNECT_RETRY' => 2,
+ 'MAX_QUERIES_PER_HOUR' => 2, 'MAX_UPDATES_PER_HOUR' => 2,
+ 'MAX_USER_CONNECTIONS' => 2, 'REPLICATE_REWRITE_DB' => 2,
+ 'REPLICATE_IGNORE_TABLE' => 2,
+ 'MASTER_HEARTBEAT_PERIOD' => 2, 'REPLICATE_WILD_DO_TABLE' => 2,
+ 'MAX_CONNECTIONS_PER_HOUR' => 2,
+ 'REPLICATE_WILD_IGNORE_TABLE' => 2,
+
+ 'NOT NULL' => 4,
+ 'INDEX KEY' => 4,
+ 'UNIQUE KEY' => 4,
+ 'FOREIGN KEY' => 4, 'PRIMARY KEY' => 4, 'PRIMARY KEY' => 4, 'SPATIAL KEY' => 4,
+ 'FULLTEXT KEY' => 4, 'UNIQUE INDEX' => 4,
+ 'CHARACTER SET' => 4, 'IF NOT EXISTS' => 4, 'SPATIAL INDEX' => 4,
+ 'DATA DIRECTORY' => 4, 'FULLTEXT INDEX' => 4,
+ 'DEFAULT COLLATE' => 4, 'INDEX DIRECTORY' => 4,
+ 'DEFAULT CHARACTER SET' => 4,
);
// -------------------------------------------------------------------------
@@ -309,19 +422,24 @@ abstract class Context
* Checks if the given string is a keyword.
*
* @param string $str
- * @param bool $strict
+ * @param bool $isReserved
*
* @return bool
*/
- public static function isKeyword($str, $strict = false)
+ public static function isKeyword($str, $isReserved = false)
{
$str = strtoupper($str);
if (isset(static::$KEYWORDS[$str])) {
- return $strict ? static::$KEYWORDS[$str] === 1 : true;
+ if ($isReserved) {
+ if (!(static::$KEYWORDS[$str] & Token::FLAG_KEYWORD_RESERVED)) {
+ return null;
+ }
+ }
+ return static::$KEYWORDS[$str];
}
- return false;
+ return null;
}
// -------------------------------------------------------------------------
@@ -474,4 +592,27 @@ abstract class Context
{
return !ctype_alnum($ch) && $ch !== '_';
}
+
+ /**
+ * Loads the specified context.
+ *
+ * Contexts may be used by accessing the context directly.
+ *
+ * @param string $context
+ */
+ public static function load($context = '') {
+ if (empty($context)) {
+ $context = self::$defaultContext;
+ }
+ if ($context[0] !== '\\') {
+ // Short context name (must be formatted into class name).
+ $context = '\\SqlParser\\Contexts\\Context_' . $context;
+ }
+ if (!class_exists($context)) {
+ throw new \Exception('Specified context ("' . $context . '") doesn\'t exist.');
+ }
+ static::$loadedContext = $context;
+ static::$KEYWORDS = $context::$KEYWORDS;
+ }
+
}
diff --git a/src/Contexts/Context_MySQL500.php b/src/Contexts/Context_MySQL500.php
new file mode 100644
index 0000000..3a54e84
--- /dev/null
+++ b/src/Contexts/Context_MySQL500.php
@@ -0,0 +1,163 @@
+<?php
+
+namespace SqlParser\Contexts;
+
+use SqlParser\Context;
+
+class Context_MySQL500 extends Context
+{
+
+ public static $KEYWORDS = array(
+
+ 'AS' => 1, 'BY' => 1, 'IF' => 1, 'IN' => 1, 'IS' => 1,
+ 'ON' => 1, 'OR' => 1, 'TO' => 1,
+ 'ADD' => 1, 'ALL' => 1, 'AND' => 1, 'ASC' => 1, 'DEC' => 1,
+ 'DIV' => 1, 'FOR' => 1, 'INT' => 1, 'KEY' => 1, 'MOD' => 1,
+ 'NOT' => 1, 'OUT' => 1, 'SET' => 1, 'SQL' => 1, 'SSL' => 1,
+ 'USE' => 1, 'XOR' => 1,
+ 'BLOB' => 1, 'BOTH' => 1, 'CALL' => 1, 'CASE' => 1,
+ 'CHAR' => 1, 'DESC' => 1, 'DROP' => 1, 'DUAL' => 1,
+ 'EACH' => 1, 'ELSE' => 1, 'EXIT' => 1, 'FROM' => 1,
+ 'INT1' => 1, 'INT2' => 1, 'INT3' => 1, 'INT4' => 1,
+ 'INT8' => 1, 'INTO' => 1, 'JOIN' => 1, 'KEYS' => 1,
+ 'KILL' => 1, 'LEFT' => 1, 'LIKE' => 1, 'LOAD' => 1,
+ 'LOCK' => 1, 'LONG' => 1, 'LOOP' => 1, 'NULL' => 1,
+ 'READ' => 1, 'REAL' => 1, 'SHOW' => 1, 'THEN' => 1,
+ 'TRUE' => 1, 'UNDO' => 1, 'WHEN' => 1, 'WITH' => 1,
+ 'ALTER' => 1, 'CHECK' => 1, 'CROSS' => 1, 'FALSE' => 1,
+ 'FETCH' => 1, 'FLOAT' => 1, 'FORCE' => 1, 'GRANT' => 1,
+ 'GROUP' => 1, 'INDEX' => 1, 'INNER' => 1, 'INOUT' => 1,
+ 'LEAVE' => 1, 'LIMIT' => 1, 'LINES' => 1, 'MATCH' => 1,
+ 'ORDER' => 1, 'OUTER' => 1, 'PURGE' => 1, 'READS' => 1,
+ 'RIGHT' => 1, 'RLIKE' => 1, 'TABLE' => 1, 'UNION' => 1,
+ 'USAGE' => 1, 'USING' => 1, 'WHERE' => 1, 'WHILE' => 1,
+ 'WRITE' => 1,
+ 'BEFORE' => 1, 'BIGINT' => 1, 'BINARY' => 1, 'CHANGE' => 1,
+ 'COLUMN' => 1, 'CREATE' => 1, 'CURSOR' => 1, 'DELETE' => 1,
+ 'DOUBLE' => 1, 'ELSEIF' => 1, 'EXISTS' => 1, 'FLOAT4' => 1,
+ 'FLOAT8' => 1, 'HAVING' => 1, 'IGNORE' => 1, 'INFILE' => 1,
+ 'INSERT' => 1, 'OPTION' => 1, 'REGEXP' => 1, 'RENAME' => 1,
+ 'REPEAT' => 1, 'RETURN' => 1, 'REVOKE' => 1, 'SCHEMA' => 1,
+ 'SELECT' => 1, 'SONAME' => 1, 'UNIQUE' => 1, 'UNLOCK' => 1,
+ 'UPDATE' => 1, 'VALUES' => 1,
+ 'ANALYZE' => 1, 'BETWEEN' => 1, 'CASCADE' => 1, 'COLLATE' => 1,
+ 'CONVERT' => 1, 'DECIMAL' => 1, 'DECLARE' => 1, 'DEFAULT' => 1,
+ 'DELAYED' => 1, 'ESCAPED' => 1, 'EXPLAIN' => 1, 'FOREIGN' => 1,
+ 'INTEGER' => 1, 'ITERATE' => 1, 'LEADING' => 1, 'NATURAL' => 1,
+ 'NUMERIC' => 1, 'OUTFILE' => 1, 'PRIMARY' => 1, 'RELEASE' => 1,
+ 'REPLACE' => 1, 'REQUIRE' => 1, 'SCHEMAS' => 1, 'SPATIAL' => 1,
+ 'TINYINT' => 1, 'TRIGGER' => 1, 'VARCHAR' => 1, 'VARYING' => 1,
+ 'CONTINUE' => 1, 'DATABASE' => 1, 'DAY_HOUR' => 1,
+ 'DESCRIBE' => 1, 'DISTINCT' => 1, 'ENCLOSED' => 1,
+ 'FULLTEXT' => 1, 'INTERVAL' => 1, 'LONGBLOB' => 1,
+ 'LONGTEXT' => 1, 'MODIFIES' => 1, 'OPTIMIZE' => 1,
+ 'RESTRICT' => 1, 'SMALLINT' => 1, 'SPECIFIC' => 1,
+ 'SQLSTATE' => 1, 'STARTING' => 1, 'TINYBLOB' => 1,
+ 'TINYTEXT' => 1, 'TRAILING' => 1, 'UNSIGNED' => 1,
+ 'UTC_DATE' => 1, 'UTC_TIME' => 1, 'ZEROFILL' => 1,
+ 'CHARACTER' => 1, 'CONDITION' => 1, 'DATABASES' => 1,
+ 'LOCALTIME' => 1, 'MEDIUMINT' => 1, 'MIDDLEINT' => 1,
+ 'PRECISION' => 1, 'PROCEDURE' => 1, 'SENSITIVE' => 1,
+ 'SEPARATOR' => 1, 'VARBINARY' => 1,
+ 'ASENSITIVE' => 1, 'CONSTRAINT' => 1, 'DAY_MINUTE' => 1,
+ 'DAY_SECOND' => 1, 'MEDIUMBLOB' => 1, 'MEDIUMTEXT' => 1,
+ 'OPTIONALLY' => 1, 'REFERENCES' => 1, 'SQLWARNING' => 1,
+ 'TERMINATED' => 1, 'YEAR_MONTH' => 1,
+ 'DISTINCTROW' => 1, 'HOUR_MINUTE' => 1, 'HOUR_SECOND' => 1,
+ 'INSENSITIVE' => 1,
+ 'CURRENT_DATE' => 1, 'CURRENT_TIME' => 1, 'CURRENT_USER' => 1,
+ 'LOW_PRIORITY' => 1, 'SQLEXCEPTION' => 1, 'VARCHARACTER' => 1,
+ 'DETERMINISTIC' => 1, 'HIGH_PRIORITY' => 1, 'MINUTE_SECOND' => 1,
+ 'STRAIGHT_JOIN' => 1, 'UTC_TIMESTAMP' => 1,
+ 'LOCALTIMESTAMP' => 1, 'SQL_BIG_RESULT' => 1,
+ 'DAY_MICROSECOND' => 1,
+ 'HOUR_MICROSECOND' => 1, 'SQL_SMALL_RESULT' => 1,
+ 'CURRENT_TIMESTAMP' => 1,
+ 'MINUTE_MICROSECOND' => 1, 'NO_WRITE_TO_BINLOG' => 1,
+ 'SECOND_MICROSECOND' => 1,
+ 'SQL_CALC_FOUND_ROWS' => 1,
+
+ 'DO' => 2, 'IO' => 2, 'NO' => 2, 'XA' => 2,
+ 'ANY' => 2, 'AVG' => 2, 'BDB' => 2, 'BIT' => 2, 'CPU' => 2, 'DAY' => 2,
+ 'END' => 2, 'IPC' => 2, 'NDB' => 2, 'NEW' => 2, 'ONE' => 2, 'ROW' => 2,
+ 'BOOL' => 2, 'BYTE' => 2, 'CODE' => 2, 'CUBE' => 2, 'DATA' => 2, 'DATE' => 2,
+ 'ENUM' => 2, 'FAST' => 2, 'FILE' => 2, 'FULL' => 2, 'HASH' => 2, 'HELP' => 2,
+ 'HOUR' => 2, 'LAST' => 2, 'LOGS' => 2, 'MODE' => 2, 'NAME' => 2, 'NEXT' => 2,
+ 'NONE' => 2, 'OPEN' => 2, 'PAGE' => 2, 'PREV' => 2, 'ROWS' => 2, 'SOME' => 2,
+ 'STOP' => 2, 'TEXT' => 2, 'TIME' => 2, 'TYPE' => 2, 'USER' => 2, 'VIEW' => 2,
+ 'WEEK' => 2, 'WORK' => 2, 'X509' => 2, 'YEAR' => 2,
+ 'AFTER' => 2, 'ASCII' => 2, 'BEGIN' => 2, 'BLOCK' => 2, 'BTREE' => 2,
+ 'CACHE' => 2, 'CHAIN' => 2, 'CLOSE' => 2, 'FIRST' => 2, 'FIXED' => 2,
+ 'FLUSH' => 2, 'FOUND' => 2, 'HOSTS' => 2, 'LEVEL' => 2, 'LOCAL' => 2,
+ 'LOCKS' => 2, 'MERGE' => 2, 'MONTH' => 2, 'MUTEX' => 2, 'NAMES' => 2,
+ 'NCHAR' => 2, 'PHASE' => 2, 'POINT' => 2, 'QUERY' => 2, 'QUICK' => 2,
+ 'RAID0' => 2, 'RESET' => 2, 'RTREE' => 2, 'SHARE' => 2, 'SLAVE' => 2,
+ 'START' => 2, 'SUPER' => 2, 'SWAPS' => 2, 'TYPES' => 2, 'UNTIL' => 2,
+ 'VALUE' => 2,
+ 'ACTION' => 2, 'BACKUP' => 2, 'BINLOG' => 2, 'CIPHER' => 2, 'CLIENT' => 2,
+ 'COMMIT' => 2, 'ENABLE' => 2, 'ENGINE' => 2, 'ERRORS' => 2, 'ESCAPE' => 2,
+ 'EVENTS' => 2, 'FAULTS' => 2, 'FIELDS' => 2, 'GLOBAL' => 2, 'GRANTS' => 2,
+ 'IMPORT' => 2, 'INNODB' => 2, 'ISSUER' => 2, 'LEAVES' => 2, 'MASTER' => 2,
+ 'MEDIUM' => 2, 'MEMORY' => 2, 'MINUTE' => 2, 'MODIFY' => 2, 'OFFSET' => 2,
+ 'RELOAD' => 2, 'REPAIR' => 2, 'RESUME' => 2, 'ROLLUP' => 2, 'SECOND' => 2,
+ 'SERIAL' => 2, 'SIGNED' => 2, 'SIMPLE' => 2, 'SOUNDS' => 2, 'SOURCE' => 2,
+ 'STATUS' => 2, 'STRING' => 2, 'TABLES' => 2,
+ 'AGAINST' => 2, 'BOOLEAN' => 2, 'CHANGED' => 2, 'CHARSET' => 2, 'COLUMNS' => 2,
+ 'COMMENT' => 2, 'COMPACT' => 2, 'CONTEXT' => 2, 'DEFINER' => 2, 'DISABLE' => 2,
+ 'DISCARD' => 2, 'DYNAMIC' => 2, 'ENGINES' => 2, 'EXECUTE' => 2, 'HANDLER' => 2,
+ 'INDEXES' => 2, 'INVOKER' => 2, 'MIGRATE' => 2, 'PARTIAL' => 2, 'POLYGON' => 2,
+ 'PREPARE' => 2, 'PROFILE' => 2, 'QUARTER' => 2, 'RECOVER' => 2, 'RESTORE' => 2,
+ 'RETURNS' => 2, 'ROUTINE' => 2, 'SESSION' => 2, 'STORAGE' => 2, 'STRIPED' => 2,
+ 'SUBJECT' => 2, 'SUSPEND' => 2, 'UNICODE' => 2, 'UNKNOWN' => 2, 'UPGRADE' => 2,
+ 'USE_FRM' => 2,
+ 'CASCADED' => 2, 'CHECKSUM' => 2, 'CONTAINS' => 2, 'DATETIME' => 2,
+ 'DUMPFILE' => 2, 'EXTENDED' => 2, 'FUNCTION' => 2, 'GEOMETRY' => 2,
+ 'INNOBASE' => 2, 'LANGUAGE' => 2, 'MAX_ROWS' => 2, 'MIN_ROWS' => 2,
+ 'NATIONAL' => 2, 'NVARCHAR' => 2, 'ONE_SHOT' => 2, 'PASSWORD' => 2,
+ 'PROFILES' => 2, 'ROLLBACK' => 2, 'SECURITY' => 2, 'SHUTDOWN' => 2,
+ 'SNAPSHOT' => 2, 'SWITCHES' => 2, 'TRIGGERS' => 2, 'TRUNCATE' => 2,
+ 'WARNINGS' => 2,
+ 'AGGREGATE' => 2, 'ALGORITHM' => 2, 'COLLATION' => 2, 'COMMITTED' => 2,
+ 'DIRECTORY' => 2, 'DUPLICATE' => 2, 'EXPANSION' => 2, 'IO_THREAD' => 2,
+ 'ISOLATION' => 2, 'PACK_KEYS' => 2, 'RAID_TYPE' => 2, 'REDUNDANT' => 2,
+ 'SAVEPOINT' => 2, 'SQL_CACHE' => 2, 'TEMPORARY' => 2, 'TEMPTABLE' => 2,
+ 'TIMESTAMP' => 2, 'UNDEFINED' => 2, 'VARIABLES' => 2,
+ 'BERKELEYDB' => 2, 'COMPRESSED' => 2, 'CONCURRENT' => 2, 'CONNECTION' => 2,
+ 'CONSISTENT' => 2, 'DEALLOCATE' => 2, 'GET_FORMAT' => 2, 'IDENTIFIED' => 2,
+ 'LINESTRING' => 2, 'MASTER_SSL' => 2, 'MULTIPOINT' => 2, 'NDBCLUSTER' => 2,
+ 'PRIVILEGES' => 2, 'REPEATABLE' => 2, 'ROW_FORMAT' => 2, 'SQL_THREAD' => 2,
+ 'TABLESPACE' => 2,
+ 'FRAC_SECOND' => 2, 'MASTER_HOST' => 2, 'MASTER_PORT' => 2, 'MASTER_USER' => 2,
+ 'MICROSECOND' => 2, 'PROCESSLIST' => 2, 'RAID_CHUNKS' => 2, 'REPLICATION' => 2,
+ 'SQL_TSI_DAY' => 2, 'TRANSACTION' => 2, 'UNCOMMITTED' => 2,
+ 'DES_KEY_FILE' => 2, 'MULTIPOLYGON' => 2, 'OLD_PASSWORD' => 2,
+ 'RELAY_THREAD' => 2, 'SERIALIZABLE' => 2, 'SQL_NO_CACHE' => 2,
+ 'SQL_TSI_HOUR' => 2, 'SQL_TSI_WEEK' => 2, 'SQL_TSI_YEAR' => 2,
+ 'TIMESTAMPADD' => 2,
+ 'INSERT_METHOD' => 2, 'MASTER_SSL_CA' => 2, 'RELAY_LOG_POS' => 2,
+ 'SQL_TSI_MONTH' => 2, 'TIMESTAMPDIFF' => 2,
+ 'AUTO_INCREMENT' => 2, 'AVG_ROW_LENGTH' => 2, 'MASTER_LOG_POS' => 2,
+ 'MASTER_SSL_KEY' => 2, 'RAID_CHUNKSIZE' => 2, 'RELAY_LOG_FILE' => 2,
+ 'SQL_TSI_MINUTE' => 2, 'SQL_TSI_SECOND' => 2, 'USER_RESOURCES' => 2,
+ 'DELAY_KEY_WRITE' => 2, 'MASTER_LOG_FILE' => 2, 'MASTER_PASSWORD' => 2,
+ 'MASTER_SSL_CERT' => 2, 'MULTILINESTRING' => 2, 'SQL_TSI_QUARTER' => 2,
+ 'MASTER_SERVER_ID' => 2,
+ 'MASTER_SSL_CAPATH' => 2, 'MASTER_SSL_CIPHER' => 2, 'SQL_BUFFER_RESULT' => 2,
+ 'GEOMETRYCOLLECTION' => 2,
+ 'SQL_TSI_FRAC_SECOND' => 2,
+ 'MASTER_CONNECT_RETRY' => 2, 'MAX_QUERIES_PER_HOUR' => 2,
+ 'MAX_UPDATES_PER_HOUR' => 2, 'MAX_USER_CONNECTIONS' => 2,
+ 'MAX_CONNECTIONS_PER_HOUR' => 2,
+
+ 'NOT NULL' => 4,
+ 'INDEX KEY' => 4,
+ 'UNIQUE KEY' => 4,
+ 'FOREIGN KEY' => 4, 'PRIMARY KEY' => 4, 'PRIMARY KEY' => 4, 'SPATIAL KEY' => 4,
+ 'FULLTEXT KEY' => 4, 'UNIQUE INDEX' => 4,
+ 'CHARACTER SET' => 4, 'IF NOT EXISTS' => 4, 'SPATIAL INDEX' => 4,
+ 'DATA DIRECTORY' => 4, 'FULLTEXT INDEX' => 4,
+ 'DEFAULT COLLATE' => 4, 'INDEX DIRECTORY' => 4,
+ 'DEFAULT CHARACTER SET' => 4,
+
+ );
+}
diff --git a/src/Contexts/Context_MySQL510.php b/src/Contexts/Context_MySQL510.php
new file mode 100644
index 0000000..e5713ec
--- /dev/null
+++ b/src/Contexts/Context_MySQL510.php
@@ -0,0 +1,177 @@
+<?php
+
+namespace SqlParser\Contexts;
+
+use SqlParser\Context;
+
+class Context_MySQL510 extends Context
+{
+
+ public static $KEYWORDS = array(
+
+ 'AS' => 1, 'BY' => 1, 'IF' => 1, 'IN' => 1, 'IS' => 1,
+ 'ON' => 1, 'OR' => 1, 'TO' => 1,
+ 'ADD' => 1, 'ALL' => 1, 'AND' => 1, 'ASC' => 1, 'DEC' => 1,
+ 'DIV' => 1, 'FOR' => 1, 'INT' => 1, 'KEY' => 1, 'MOD' => 1,
+ 'NOT' => 1, 'OUT' => 1, 'SET' => 1, 'SQL' => 1, 'SSL' => 1,
+ 'USE' => 1, 'XOR' => 1,
+ 'BLOB' => 1, 'BOTH' => 1, 'CALL' => 1, 'CASE' => 1,
+ 'CHAR' => 1, 'DESC' => 1, 'DROP' => 1, 'DUAL' => 1,
+ 'EACH' => 1, 'ELSE' => 1, 'EXIT' => 1, 'FROM' => 1,
+ 'INT1' => 1, 'INT2' => 1, 'INT3' => 1, 'INT4' => 1,
+ 'INT8' => 1, 'INTO' => 1, 'JOIN' => 1, 'KEYS' => 1,
+ 'KILL' => 1, 'LEFT' => 1, 'LIKE' => 1, 'LOAD' => 1,
+ 'LOCK' => 1, 'LONG' => 1, 'LOOP' => 1, 'NULL' => 1,
+ 'READ' => 1, 'REAL' => 1, 'SHOW' => 1, 'THEN' => 1,
+ 'TRUE' => 1, 'UNDO' => 1, 'WHEN' => 1, 'WITH' => 1,
+ 'ALTER' => 1, 'CHECK' => 1, 'CROSS' => 1, 'FALSE' => 1,
+ 'FETCH' => 1, 'FLOAT' => 1, 'FORCE' => 1, 'GRANT' => 1,
+ 'GROUP' => 1, 'INDEX' => 1, 'INNER' => 1, 'INOUT' => 1,
+ 'LEAVE' => 1, 'LIMIT' => 1, 'LINES' => 1, 'MATCH' => 1,
+ 'ORDER' => 1, 'OUTER' => 1, 'PURGE' => 1, 'RANGE' => 1,
+ 'READS' => 1, 'RIGHT' => 1, 'RLIKE' => 1, 'TABLE' => 1,
+ 'UNION' => 1, 'USAGE' => 1, 'USING' => 1, 'WHERE' => 1,
+ 'WHILE' => 1, 'WRITE' => 1,
+ 'BEFORE' => 1, 'BIGINT' => 1, 'BINARY' => 1, 'CHANGE' => 1,
+ 'COLUMN' => 1, 'CREATE' => 1, 'CURSOR' => 1, 'DELETE' => 1,
+ 'DOUBLE' => 1, 'ELSEIF' => 1, 'EXISTS' => 1, 'FLOAT4' => 1,
+ 'FLOAT8' => 1, 'HAVING' => 1, 'IGNORE' => 1, 'INFILE' => 1,
+ 'INSERT' => 1, 'LINEAR' => 1, 'OPTION' => 1, 'REGEXP' => 1,
+ 'RENAME' => 1, 'REPEAT' => 1, 'RETURN' => 1, 'REVOKE' => 1,
+ 'SCHEMA' => 1, 'SELECT' => 1, 'UNIQUE' => 1, 'UNLOCK' => 1,
+ 'UPDATE' => 1, 'VALUES' => 1,
+ 'ANALYZE' => 1, 'BETWEEN' => 1, 'CASCADE' => 1, 'COLLATE' => 1,
+ 'CONVERT' => 1, 'DECIMAL' => 1, 'DECLARE' => 1, 'DEFAULT' => 1,
+ 'DELAYED' => 1, 'ESCAPED' => 1, 'EXPLAIN' => 1, 'FOREIGN' => 1,
+ 'INTEGER' => 1, 'ITERATE' => 1, 'LEADING' => 1, 'NATURAL' => 1,
+ 'NUMERIC' => 1, 'OUTFILE' => 1, 'PRIMARY' => 1, 'RELEASE' => 1,
+ 'REPLACE' => 1, 'REQUIRE' => 1, 'SCHEMAS' => 1, 'SPATIAL' => 1,
+ 'TINYINT' => 1, 'TRIGGER' => 1, 'VARCHAR' => 1, 'VARYING' => 1,
+ 'CONTINUE' => 1, 'DATABASE' => 1, 'DAY_HOUR' => 1,
+ 'DESCRIBE' => 1, 'DISTINCT' => 1, 'ENCLOSED' => 1,
+ 'FULLTEXT' => 1, 'INTERVAL' => 1, 'LONGBLOB' => 1,
+ 'LONGTEXT' => 1, 'MODIFIES' => 1, 'OPTIMIZE' => 1,
+ 'RESTRICT' => 1, 'SMALLINT' => 1, 'SPECIFIC' => 1,
+ 'SQLSTATE' => 1, 'STARTING' => 1, 'TINYBLOB' => 1,
+ 'TINYTEXT' => 1, 'TRAILING' => 1, 'UNSIGNED' => 1,
+ 'UTC_DATE' => 1, 'UTC_TIME' => 1, 'ZEROFILL' => 1,
+ 'CHARACTER' => 1, 'CONDITION' => 1, 'DATABASES' => 1,
+ 'LOCALTIME' => 1, 'MEDIUMINT' => 1, 'MIDDLEINT' => 1,
+ 'PRECISION' => 1, 'PROCEDURE' => 1, 'SENSITIVE' => 1,
+ 'SEPARATOR' => 1, 'VARBINARY' => 1,
+ 'ACCESSIBLE' => 1, 'ASENSITIVE' => 1, 'CONSTRAINT' => 1,
+ 'DAY_MINUTE' => 1, 'DAY_SECOND' => 1, 'MEDIUMBLOB' => 1,
+ 'MEDIUMTEXT' => 1, 'OPTIONALLY' => 1, 'READ_WRITE' => 1,
+ 'REFERENCES' => 1, 'SQLWARNING' => 1, 'TERMINATED' => 1,
+ 'YEAR_MONTH' => 1,
+ 'DISTINCTROW' => 1, 'HOUR_MINUTE' => 1, 'HOUR_SECOND' => 1,
+ 'INSENSITIVE' => 1,
+ 'CURRENT_DATE' => 1, 'CURRENT_TIME' => 1, 'CURRENT_USER' => 1,
+ 'LOW_PRIORITY' => 1, 'SQLEXCEPTION' => 1, 'VARCHARACTER' => 1,
+ 'DETERMINISTIC' => 1, 'HIGH_PRIORITY' => 1, 'MINUTE_SECOND' => 1,
+ 'STRAIGHT_JOIN' => 1, 'UTC_TIMESTAMP' => 1,
+ 'LOCALTIMESTAMP' => 1, 'SQL_BIG_RESULT' => 1,
+ 'DAY_MICROSECOND' => 1,
+ 'HOUR_MICROSECOND' => 1, 'SQL_SMALL_RESULT' => 1,
+ 'CURRENT_TIMESTAMP' => 1,
+ 'MINUTE_MICROSECOND' => 1, 'NO_WRITE_TO_BINLOG' => 1,
+ 'SECOND_MICROSECOND' => 1,
+ 'SQL_CALC_FOUND_ROWS' => 1,
+ 'MASTER_SSL_VERIFY_SERVER_CERT' => 1,
+
+ 'AT' => 2, 'DO' => 2, 'IO' => 2, 'NO' => 2, 'XA' => 2,
+ 'ANY' => 2, 'AVG' => 2, 'BDB' => 2, 'BIT' => 2, 'CPU' => 2, 'DAY' => 2,
+ 'END' => 2, 'IPC' => 2, 'NDB' => 2, 'NEW' => 2, 'ONE' => 2, 'ROW' => 2,
+ 'BOOL' => 2, 'BYTE' => 2, 'CODE' => 2, 'CUBE' => 2, 'DATA' => 2, 'DATE' => 2,
+ 'DISK' => 2, 'ENDS' => 2, 'ENUM' => 2, 'FAST' => 2, 'FILE' => 2, 'FULL' => 2,
+ 'GOTO' => 2, 'HASH' => 2, 'HELP' => 2, 'HOST' => 2, 'HOUR' => 2, 'LAST' => 2,
+ 'LESS' => 2, 'LIST' => 2, 'LOGS' => 2, 'MODE' => 2, 'NAME' => 2, 'NEXT' => 2,
+ 'NONE' => 2, 'OPEN' => 2, 'PAGE' => 2, 'PORT' => 2, 'PREV' => 2, 'ROWS' => 2,
+ 'SOME' => 2, 'STOP' => 2, 'TEXT' => 2, 'THAN' => 2, 'TIME' => 2, 'TYPE' => 2,
+ 'USER' => 2, 'VIEW' => 2, 'WAIT' => 2, 'WEEK' => 2, 'WORK' => 2, 'X509' => 2,
+ 'YEAR' => 2,
+ 'AFTER' => 2, 'ASCII' => 2, 'BEGIN' => 2, 'BLOCK' => 2, 'BTREE' => 2,
+ 'CACHE' => 2, 'CHAIN' => 2, 'CLOSE' => 2, 'EVENT' => 2, 'EVERY' => 2,
+ 'FIRST' => 2, 'FIXED' => 2, 'FLUSH' => 2, 'FOUND' => 2, 'HOSTS' => 2,
+ 'LABEL' => 2, 'LEVEL' => 2, 'LOCAL' => 2, 'LOCKS' => 2, 'MERGE' => 2,
+ 'MONTH' => 2, 'MUTEX' => 2, 'NAMES' => 2, 'NCHAR' => 2, 'OWNER' => 2,
+ 'PHASE' => 2, 'POINT' => 2, 'QUERY' => 2, 'QUICK' => 2, 'RAID0' => 2,
+ 'RESET' => 2, 'RTREE' => 2, 'SHARE' => 2, 'SLAVE' => 2, 'START' => 2,
+ 'SUPER' => 2, 'SWAPS' => 2, 'TYPES' => 2, 'UNTIL' => 2, 'VALUE' => 2,
+ 'ACTION' => 2, 'BACKUP' => 2, 'BINLOG' => 2, 'CIPHER' => 2, 'CLIENT' => 2,
+ 'COMMIT' => 2, 'ENABLE' => 2, 'ENGINE' => 2, 'ERRORS' => 2, 'ESCAPE' => 2,
+ 'EVENTS' => 2, 'FAULTS' => 2, 'FIELDS' => 2, 'GLOBAL' => 2, 'GRANTS' => 2,
+ 'IMPORT' => 2, 'INNODB' => 2, 'ISSUER' => 2, 'LEAVES' => 2, 'MASTER' => 2,
+ 'MEDIUM' => 2, 'MEMORY' => 2, 'MINUTE' => 2, 'MODIFY' => 2, 'OFFSET' => 2,
+ 'PARSER' => 2, 'PLUGIN' => 2, 'RELOAD' => 2, 'REMOVE' => 2, 'REPAIR' => 2,
+ 'RESUME' => 2, 'ROLLUP' => 2, 'SECOND' => 2, 'SERIAL' => 2, 'SERVER' => 2,
+ 'SIGNED' => 2, 'SIMPLE' => 2, 'SOCKET' => 2, 'SONAME' => 2, 'SOUNDS' => 2,
+ 'SOURCE' => 2, 'STARTS' => 2, 'STATUS' => 2, 'STRING' => 2, 'TABLES' => 2,
+ 'AGAINST' => 2, 'AUTHORS' => 2, 'BOOLEAN' => 2, 'CHANGED' => 2, 'CHARSET' => 2,
+ 'COLUMNS' => 2, 'COMMENT' => 2, 'COMPACT' => 2, 'CONTEXT' => 2, 'DEFINER' => 2,
+ 'DISABLE' => 2, 'DISCARD' => 2, 'DYNAMIC' => 2, 'ENGINES' => 2, 'EXECUTE' => 2,
+ 'HANDLER' => 2, 'INDEXES' => 2, 'INSTALL' => 2, 'INVOKER' => 2, 'LOGFILE' => 2,
+ 'MIGRATE' => 2, 'NO_WAIT' => 2, 'OPTIONS' => 2, 'PARTIAL' => 2, 'PLUGINS' => 2,
+ 'POLYGON' => 2, 'PREPARE' => 2, 'PROFILE' => 2, 'QUARTER' => 2, 'REBUILD' => 2,
+ 'RECOVER' => 2, 'RESTORE' => 2, 'RETURNS' => 2, 'ROUTINE' => 2, 'SESSION' => 2,
+ 'STORAGE' => 2, 'STRIPED' => 2, 'SUBJECT' => 2, 'SUSPEND' => 2, 'UNICODE' => 2,
+ 'UNKNOWN' => 2, 'UPGRADE' => 2, 'USE_FRM' => 2, 'WRAPPER' => 2,
+ 'CASCADED' => 2, 'CHECKSUM' => 2, 'COALESCE' => 2, 'CONTAINS' => 2,
+ 'DATAFILE' => 2, 'DATETIME' => 2, 'DUMPFILE' => 2, 'EXTENDED' => 2,
+ 'FUNCTION' => 2, 'GEOMETRY' => 2, 'INNOBASE' => 2, 'LANGUAGE' => 2,
+ 'MAXVALUE' => 2, 'MAX_ROWS' => 2, 'MAX_SIZE' => 2, 'MIN_ROWS' => 2,
+ 'NATIONAL' => 2, 'NVARCHAR' => 2, 'ONE_SHOT' => 2, 'PASSWORD' => 2,
+ 'PRESERVE' => 2, 'PROFILES' => 2, 'REDOFILE' => 2, 'ROLLBACK' => 2,
+ 'SCHEDULE' => 2, 'SECURITY' => 2, 'SHUTDOWN' => 2, 'SNAPSHOT' => 2,
+ 'SWITCHES' => 2, 'TRIGGERS' => 2, 'TRUNCATE' => 2, 'UNDOFILE' => 2,
+ 'WARNINGS' => 2,
+ 'AGGREGATE' => 2, 'ALGORITHM' => 2, 'COLLATION' => 2, 'COMMITTED' => 2,
+ 'DIRECTORY' => 2, 'DUPLICATE' => 2, 'EXPANSION' => 2, 'IO_THREAD' => 2,
+ 'ISOLATION' => 2, 'NODEGROUP' => 2, 'PACK_KEYS' => 2, 'PARTITION' => 2,
+ 'RAID_TYPE' => 2, 'READ_ONLY' => 2, 'REDUNDANT' => 2, 'SAVEPOINT' => 2,
+ 'SCHEDULER' => 2, 'SQL_CACHE' => 2, 'TEMPORARY' => 2, 'TEMPTABLE' => 2,
+ 'TIMESTAMP' => 2, 'UNDEFINED' => 2, 'UNINSTALL' => 2, 'VARIABLES' => 2,
+ 'BERKELEYDB' => 2, 'COMPLETION' => 2, 'COMPRESSED' => 2, 'CONCURRENT' => 2,
+ 'CONNECTION' => 2, 'CONSISTENT' => 2, 'DEALLOCATE' => 2, 'GET_FORMAT' => 2,
+ 'IDENTIFIED' => 2, 'LINESTRING' => 2, 'MASTER_SSL' => 2, 'MULTIPOINT' => 2,
+ 'NDBCLUSTER' => 2, 'PARTITIONS' => 2, 'PRIVILEGES' => 2, 'REORGANISE' => 2,
+ 'REORGANIZE' => 2, 'REPEATABLE' => 2, 'ROW_FORMAT' => 2, 'SQL_THREAD' => 2,
+ 'TABLESPACE' => 2,
+ 'EXTENT_SIZE' => 2, 'FRAC_SECOND' => 2, 'MASTER_HOST' => 2, 'MASTER_PORT' => 2,
+ 'MASTER_USER' => 2, 'MICROSECOND' => 2, 'PROCESSLIST' => 2, 'RAID_CHUNKS' => 2,
+ 'REPLICATION' => 2, 'SQL_TSI_DAY' => 2, 'TRANSACTION' => 2, 'UNCOMMITTED' => 2,
+ 'CONTRIBUTORS' => 2, 'DES_KEY_FILE' => 2, 'INITIAL_SIZE' => 2,
+ 'MULTIPOLYGON' => 2, 'OLD_PASSWORD' => 2, 'PARTITIONING' => 2,
+ 'RELAY_THREAD' => 2, 'SERIALIZABLE' => 2, 'SQL_NO_CACHE' => 2,
+ 'SQL_TSI_HOUR' => 2, 'SQL_TSI_WEEK' => 2, 'SQL_TSI_YEAR' => 2,
+ 'SUBPARTITION' => 2, 'TIMESTAMPADD' => 2,
+ 'INSERT_METHOD' => 2, 'MASTER_SSL_CA' => 2, 'PAGE_CHECKSUM' => 2,
+ 'RELAY_LOG_POS' => 2, 'SQL_TSI_MONTH' => 2, 'SUBPARTITIONS' => 2,
+ 'TIMESTAMPDIFF' => 2, 'TRANSACTIONAL' => 2,
+ 'AUTO_INCREMENT' => 2, 'AVG_ROW_LENGTH' => 2, 'KEY_BLOCK_SIZE' => 2,
+ 'MASTER_LOG_POS' => 2, 'MASTER_SSL_KEY' => 2, 'RAID_CHUNKSIZE' => 2,
+ 'RELAY_LOG_FILE' => 2, 'SQL_TSI_MINUTE' => 2, 'SQL_TSI_SECOND' => 2,
+ 'TABLE_CHECKSUM' => 2, 'USER_RESOURCES' => 2,
+ 'AUTOEXTEND_SIZE' => 2, 'DELAY_KEY_WRITE' => 2, 'MASTER_LOG_FILE' => 2,
+ 'MASTER_PASSWORD' => 2, 'MASTER_SSL_CERT' => 2, 'MULTILINESTRING' => 2,
+ 'SQL_TSI_QUARTER' => 2,
+ 'MASTER_SERVER_ID' => 2, 'REDO_BUFFER_SIZE' => 2, 'UNDO_BUFFER_SIZE' => 2,
+ 'MASTER_SSL_CAPATH' => 2, 'MASTER_SSL_CIPHER' => 2, 'SQL_BUFFER_RESULT' => 2,
+ 'GEOMETRYCOLLECTION' => 2,
+ 'SQL_TSI_FRAC_SECOND' => 2,
+ 'MASTER_CONNECT_RETRY' => 2, 'MAX_QUERIES_PER_HOUR' => 2,
+ 'MAX_UPDATES_PER_HOUR' => 2, 'MAX_USER_CONNECTIONS' => 2,
+ 'MAX_CONNECTIONS_PER_HOUR' => 2,
+
+ 'NOT NULL' => 4,
+ 'INDEX KEY' => 4,
+ 'UNIQUE KEY' => 4,
+ 'FOREIGN KEY' => 4, 'PRIMARY KEY' => 4, 'PRIMARY KEY' => 4, 'SPATIAL KEY' => 4,
+ 'FULLTEXT KEY' => 4, 'UNIQUE INDEX' => 4,
+ 'CHARACTER SET' => 4, 'IF NOT EXISTS' => 4, 'SPATIAL INDEX' => 4,
+ 'DATA DIRECTORY' => 4, 'FULLTEXT INDEX' => 4,
+ 'DEFAULT COLLATE' => 4, 'INDEX DIRECTORY' => 4,
+ 'DEFAULT CHARACTER SET' => 4,
+
+ );
+}
diff --git a/src/Contexts/Context_MySQL550.php b/src/Contexts/Context_MySQL550.php
new file mode 100644
index 0000000..6d1b8d1
--- /dev/null
+++ b/src/Contexts/Context_MySQL550.php
@@ -0,0 +1,181 @@
+<?php
+
+namespace SqlParser\Contexts;
+
+use SqlParser\Context;
+
+class Context_MySQL550 extends Context
+{
+
+ public static $KEYWORDS = array(
+
+ 'AS' => 1, 'BY' => 1, 'IF' => 1, 'IN' => 1, 'IS' => 1,
+ 'ON' => 1, 'OR' => 1, 'TO' => 1,
+ 'ADD' => 1, 'ALL' => 1, 'AND' => 1, 'ASC' => 1, 'DEC' => 1,
+ 'DIV' => 1, 'FOR' => 1, 'INT' => 1, 'KEY' => 1, 'MOD' => 1,
+ 'NOT' => 1, 'OUT' => 1, 'SET' => 1, 'SQL' => 1, 'SSL' => 1,
+ 'USE' => 1, 'XOR' => 1,
+ 'BLOB' => 1, 'BOTH' => 1, 'CALL' => 1, 'CASE' => 1,
+ 'CHAR' => 1, 'DESC' => 1, 'DROP' => 1, 'DUAL' => 1,
+ 'EACH' => 1, 'ELSE' => 1, 'EXIT' => 1, 'FROM' => 1,
+ 'INT1' => 1, 'INT2' => 1, 'INT3' => 1, 'INT4' => 1,
+ 'INT8' => 1, 'INTO' => 1, 'JOIN' => 1, 'KEYS' => 1,
+ 'KILL' => 1, 'LEFT' => 1, 'LIKE' => 1, 'LOAD' => 1,
+ 'LOCK' => 1, 'LONG' => 1, 'LOOP' => 1, 'NULL' => 1,
+ 'READ' => 1, 'REAL' => 1, 'SHOW' => 1, 'THEN' => 1,
+ 'TRUE' => 1, 'UNDO' => 1, 'WHEN' => 1, 'WITH' => 1,
+ 'ALTER' => 1, 'CHECK' => 1, 'CROSS' => 1, 'FALSE' => 1,
+ 'FETCH' => 1, 'FLOAT' => 1, 'FORCE' => 1, 'GRANT' => 1,
+ 'GROUP' => 1, 'INDEX' => 1, 'INNER' => 1, 'INOUT' => 1,
+ 'LEAVE' => 1, 'LIMIT' => 1, 'LINES' => 1, 'MATCH' => 1,
+ 'ORDER' => 1, 'OUTER' => 1, 'PURGE' => 1, 'RANGE' => 1,
+ 'READS' => 1, 'RIGHT' => 1, 'RLIKE' => 1, 'TABLE' => 1,
+ 'UNION' => 1, 'USAGE' => 1, 'USING' => 1, 'WHERE' => 1,
+ 'WHILE' => 1, 'WRITE' => 1,
+ 'BEFORE' => 1, 'BIGINT' => 1, 'BINARY' => 1, 'CHANGE' => 1,
+ 'COLUMN' => 1, 'CREATE' => 1, 'CURSOR' => 1, 'DELETE' => 1,
+ 'DOUBLE' => 1, 'ELSEIF' => 1, 'EXISTS' => 1, 'FLOAT4' => 1,
+ 'FLOAT8' => 1, 'HAVING' => 1, 'IGNORE' => 1, 'INFILE' => 1,
+ 'INSERT' => 1, 'LINEAR' => 1, 'OPTION' => 1, 'REGEXP' => 1,
+ 'RENAME' => 1, 'REPEAT' => 1, 'RETURN' => 1, 'REVOKE' => 1,
+ 'SCHEMA' => 1, 'SELECT' => 1, 'SIGNAL' => 1, 'UNIQUE' => 1,
+ 'UNLOCK' => 1, 'UPDATE' => 1, 'VALUES' => 1,
+ 'ANALYZE' => 1, 'BETWEEN' => 1, 'CASCADE' => 1, 'COLLATE' => 1,
+ 'CONVERT' => 1, 'DECIMAL' => 1, 'DECLARE' => 1, 'DEFAULT' => 1,
+ 'DELAYED' => 1, 'ESCAPED' => 1, 'EXPLAIN' => 1, 'FOREIGN' => 1,
+ 'INTEGER' => 1, 'ITERATE' => 1, 'LEADING' => 1, 'NATURAL' => 1,
+ 'NUMERIC' => 1, 'OUTFILE' => 1, 'PRIMARY' => 1, 'RELEASE' => 1,
+ 'REPLACE' => 1, 'REQUIRE' => 1, 'SCHEMAS' => 1, 'SPATIAL' => 1,
+ 'TINYINT' => 1, 'TRIGGER' => 1, 'VARCHAR' => 1, 'VARYING' => 1,
+ 'CONTINUE' => 1, 'DATABASE' => 1, 'DAY_HOUR' => 1,
+ 'DESCRIBE' => 1, 'DISTINCT' => 1, 'ENCLOSED' => 1,
+ 'FULLTEXT' => 1, 'INTERVAL' => 1, 'LONGBLOB' => 1,
+ 'LONGTEXT' => 1, 'MAXVALUE' => 1, 'MODIFIES' => 1,
+ 'OPTIMIZE' => 1, 'RESIGNAL' => 1, 'RESTRICT' => 1,
+ 'SMALLINT' => 1, 'SPECIFIC' => 1, 'SQLSTATE' => 1,
+ 'STARTING' => 1, 'TINYBLOB' => 1, 'TINYTEXT' => 1,
+ 'TRAILING' => 1, 'UNSIGNED' => 1, 'UTC_DATE' => 1,
+ 'UTC_TIME' => 1, 'ZEROFILL' => 1,
+ 'CHARACTER' => 1, 'CONDITION' => 1, 'DATABASES' => 1,
+ 'LOCALTIME' => 1, 'MEDIUMINT' => 1, 'MIDDLEINT' => 1,
+ 'PRECISION' => 1, 'PROCEDURE' => 1, 'SENSITIVE' => 1,
+ 'SEPARATOR' => 1, 'VARBINARY' => 1,
+ 'ACCESSIBLE' => 1, 'ASENSITIVE' => 1, 'CONSTRAINT' => 1,
+ 'DAY_MINUTE' => 1, 'DAY_SECOND' => 1, 'MEDIUMBLOB' => 1,
+ 'MEDIUMTEXT' => 1, 'OPTIONALLY' => 1, 'READ_WRITE' => 1,
+ 'REFERENCES' => 1, 'SQLWARNING' => 1, 'TERMINATED' => 1,
+ 'YEAR_MONTH' => 1,
+ 'DISTINCTROW' => 1, 'HOUR_MINUTE' => 1, 'HOUR_SECOND' => 1,
+ 'INSENSITIVE' => 1,
+ 'CURRENT_DATE' => 1, 'CURRENT_TIME' => 1, 'CURRENT_USER' => 1,
+ 'LOW_PRIORITY' => 1, 'SQLEXCEPTION' => 1, 'VARCHARACTER' => 1,
+ 'DETERMINISTIC' => 1, 'HIGH_PRIORITY' => 1, 'MINUTE_SECOND' => 1,
+ 'STRAIGHT_JOIN' => 1, 'UTC_TIMESTAMP' => 1,
+ 'LOCALTIMESTAMP' => 1, 'SQL_BIG_RESULT' => 1,
+ 'DAY_MICROSECOND' => 1,
+ 'HOUR_MICROSECOND' => 1, 'SQL_SMALL_RESULT' => 1,
+ 'CURRENT_TIMESTAMP' => 1,
+ 'MINUTE_MICROSECOND' => 1, 'NO_WRITE_TO_BINLOG' => 1,
+ 'SECOND_MICROSECOND' => 1,
+ 'SQL_CALC_FOUND_ROWS' => 1,
+ 'MASTER_SSL_VERIFY_SERVER_CERT' => 1,
+
+ 'AT' => 2, 'DO' => 2, 'IO' => 2, 'NO' => 2, 'XA' => 2,
+ 'ANY' => 2, 'AVG' => 2, 'BIT' => 2, 'CPU' => 2, 'DAY' => 2, 'END' => 2,
+ 'IPC' => 2, 'NDB' => 2, 'NEW' => 2, 'ONE' => 2, 'ROW' => 2, 'XML' => 2,
+ 'BOOL' => 2, 'BYTE' => 2, 'CODE' => 2, 'CUBE' => 2, 'DATA' => 2, 'DATE' => 2,
+ 'DISK' => 2, 'ENDS' => 2, 'ENUM' => 2, 'FAST' => 2, 'FILE' => 2, 'FULL' => 2,
+ 'HASH' => 2, 'HELP' => 2, 'HOST' => 2, 'HOUR' => 2, 'LAST' => 2, 'LESS' => 2,
+ 'LIST' => 2, 'LOGS' => 2, 'MODE' => 2, 'NAME' => 2, 'NEXT' => 2, 'NONE' => 2,
+ 'OPEN' => 2, 'PAGE' => 2, 'PORT' => 2, 'PREV' => 2, 'ROWS' => 2, 'SLOW' => 2,
+ 'SOME' => 2, 'STOP' => 2, 'TEXT' => 2, 'THAN' => 2, 'TIME' => 2, 'TYPE' => 2,
+ 'USER' => 2, 'VIEW' => 2, 'WAIT' => 2, 'WEEK' => 2, 'WORK' => 2, 'X509' => 2,
+ 'YEAR' => 2,
+ 'AFTER' => 2, 'ASCII' => 2, 'BEGIN' => 2, 'BLOCK' => 2, 'BTREE' => 2,
+ 'CACHE' => 2, 'CHAIN' => 2, 'CLOSE' => 2, 'ERROR' => 2, 'EVENT' => 2,
+ 'EVERY' => 2, 'FIRST' => 2, 'FIXED' => 2, 'FLUSH' => 2, 'FOUND' => 2,
+ 'HOSTS' => 2, 'LEVEL' => 2, 'LOCAL' => 2, 'LOCKS' => 2, 'MERGE' => 2,
+ 'MONTH' => 2, 'MUTEX' => 2, 'NAMES' => 2, 'NCHAR' => 2, 'OWNER' => 2,
+ 'PHASE' => 2, 'POINT' => 2, 'PROXY' => 2, 'QUERY' => 2, 'QUICK' => 2,
+ 'RELAY' => 2, 'RESET' => 2, 'RTREE' => 2, 'SHARE' => 2, 'SLAVE' => 2,
+ 'START' => 2, 'SUPER' => 2, 'SWAPS' => 2, 'TYPES' => 2, 'UNTIL' => 2,
+ 'VALUE' => 2,
+ 'ACTION' => 2, 'BACKUP' => 2, 'BINLOG' => 2, 'CIPHER' => 2, 'CLIENT' => 2,
+ 'COMMIT' => 2, 'ENABLE' => 2, 'ENGINE' => 2, 'ERRORS' => 2, 'ESCAPE' => 2,
+ 'EVENTS' => 2, 'FAULTS' => 2, 'FIELDS' => 2, 'GLOBAL' => 2, 'GRANTS' => 2,
+ 'IMPORT' => 2, 'INNODB' => 2, 'ISSUER' => 2, 'LEAVES' => 2, 'MASTER' => 2,
+ 'MEDIUM' => 2, 'MEMORY' => 2, 'MINUTE' => 2, 'MODIFY' => 2, 'OFFSET' => 2,
+ 'PARSER' => 2, 'PLUGIN' => 2, 'RELOAD' => 2, 'REMOVE' => 2, 'REPAIR' => 2,
+ 'RESUME' => 2, 'ROLLUP' => 2, 'SECOND' => 2, 'SERIAL' => 2, 'SERVER' => 2,
+ 'SIGNED' => 2, 'SIMPLE' => 2, 'SOCKET' => 2, 'SONAME' => 2, 'SOUNDS' => 2,
+ 'SOURCE' => 2, 'STARTS' => 2, 'STATUS' => 2, 'STRING' => 2, 'TABLES' => 2,
+ 'AGAINST' => 2, 'AUTHORS' => 2, 'BOOLEAN' => 2, 'CHANGED' => 2, 'CHARSET' => 2,
+ 'COLUMNS' => 2, 'COMMENT' => 2, 'COMPACT' => 2, 'CONTEXT' => 2, 'DEFINER' => 2,
+ 'DISABLE' => 2, 'DISCARD' => 2, 'DYNAMIC' => 2, 'ENGINES' => 2, 'EXECUTE' => 2,
+ 'GENERAL' => 2, 'HANDLER' => 2, 'INDEXES' => 2, 'INSTALL' => 2, 'INVOKER' => 2,
+ 'LOGFILE' => 2, 'MIGRATE' => 2, 'NO_WAIT' => 2, 'OPTIONS' => 2, 'PARTIAL' => 2,
+ 'PLUGINS' => 2, 'POLYGON' => 2, 'PREPARE' => 2, 'PROFILE' => 2, 'QUARTER' => 2,
+ 'REBUILD' => 2, 'RECOVER' => 2, 'RESTORE' => 2, 'RETURNS' => 2, 'ROUTINE' => 2,
+ 'SESSION' => 2, 'STORAGE' => 2, 'SUBJECT' => 2, 'SUSPEND' => 2, 'UNICODE' => 2,
+ 'UNKNOWN' => 2, 'UPGRADE' => 2, 'USE_FRM' => 2, 'WRAPPER' => 2,
+ 'CASCADED' => 2, 'CHECKSUM' => 2, 'COALESCE' => 2, 'CONTAINS' => 2,
+ 'DATAFILE' => 2, 'DATETIME' => 2, 'DUMPFILE' => 2, 'EXTENDED' => 2,
+ 'FUNCTION' => 2, 'GEOMETRY' => 2, 'INNOBASE' => 2, 'LANGUAGE' => 2,
+ 'MAX_ROWS' => 2, 'MAX_SIZE' => 2, 'MIN_ROWS' => 2, 'NATIONAL' => 2,
+ 'NVARCHAR' => 2, 'ONE_SHOT' => 2, 'PASSWORD' => 2, 'PRESERVE' => 2,
+ 'PROFILES' => 2, 'REDOFILE' => 2, 'RELAYLOG' => 2, 'ROLLBACK' => 2,
+ 'SCHEDULE' => 2, 'SECURITY' => 2, 'SHUTDOWN' => 2, 'SNAPSHOT' => 2,
+ 'SWITCHES' => 2, 'TRIGGERS' => 2, 'TRUNCATE' => 2, 'UNDOFILE' => 2,
+ 'WARNINGS' => 2,
+ 'AGGREGATE' => 2, 'ALGORITHM' => 2, 'COLLATION' => 2, 'COMMITTED' => 2,
+ 'DIRECTORY' => 2, 'DUPLICATE' => 2, 'EXPANSION' => 2, 'IO_THREAD' => 2,
+ 'ISOLATION' => 2, 'NODEGROUP' => 2, 'PACK_KEYS' => 2, 'PARTITION' => 2,
+ 'READ_ONLY' => 2, 'REDUNDANT' => 2, 'SAVEPOINT' => 2, 'SQL_CACHE' => 2,
+ 'TEMPORARY' => 2, 'TEMPTABLE' => 2, 'TIMESTAMP' => 2, 'UNDEFINED' => 2,
+ 'UNINSTALL' => 2, 'VARIABLES' => 2,
+ 'COMPLETION' => 2, 'COMPRESSED' => 2, 'CONCURRENT' => 2, 'CONNECTION' => 2,
+ 'CONSISTENT' => 2, 'DEALLOCATE' => 2, 'GET_FORMAT' => 2, 'IDENTIFIED' => 2,
+ 'LINESTRING' => 2, 'MASTER_SSL' => 2, 'MULTIPOINT' => 2, 'NDBCLUSTER' => 2,
+ 'PARTITIONS' => 2, 'PRIVILEGES' => 2, 'REORGANIZE' => 2, 'REPEATABLE' => 2,
+ 'ROW_FORMAT' => 2, 'SQL_THREAD' => 2, 'TABLESPACE' => 2, 'TABLE_NAME' => 2,
+ 'COLUMN_NAME' => 2, 'CURSOR_NAME' => 2, 'EXTENT_SIZE' => 2, 'FRAC_SECOND' => 2,
+ 'MASTER_HOST' => 2, 'MASTER_PORT' => 2, 'MASTER_USER' => 2, 'MICROSECOND' => 2,
+ 'MYSQL_ERRNO' => 2, 'PROCESSLIST' => 2, 'REPLICATION' => 2, 'SCHEMA_NAME' => 2,
+ 'SQL_TSI_DAY' => 2, 'TRANSACTION' => 2, 'UNCOMMITTED' => 2,
+ 'CATALOG_NAME' => 2, 'CLASS_ORIGIN' => 2, 'CONTRIBUTORS' => 2,
+ 'DES_KEY_FILE' => 2, 'INITIAL_SIZE' => 2, 'MESSAGE_TEXT' => 2,
+ 'MULTIPOLYGON' => 2, 'OLD_PASSWORD' => 2, 'PARTITIONING' => 2,
+ 'RELAY_THREAD' => 2, 'SERIALIZABLE' => 2, 'SQL_NO_CACHE' => 2,
+ 'SQL_TSI_HOUR' => 2, 'SQL_TSI_WEEK' => 2, 'SQL_TSI_YEAR' => 2,
+ 'SUBPARTITION' => 2, 'TIMESTAMPADD' => 2,
+ 'INSERT_METHOD' => 2, 'MASTER_SSL_CA' => 2, 'RELAY_LOG_POS' => 2,
+ 'SQL_TSI_MONTH' => 2, 'SUBPARTITIONS' => 2, 'TIMESTAMPDIFF' => 2,
+ 'AUTO_INCREMENT' => 2, 'AVG_ROW_LENGTH' => 2, 'KEY_BLOCK_SIZE' => 2,
+ 'MASTER_LOG_POS' => 2, 'MASTER_SSL_KEY' => 2, 'RELAY_LOG_FILE' => 2,
+ 'SQL_TSI_MINUTE' => 2, 'SQL_TSI_SECOND' => 2, 'TABLE_CHECKSUM' => 2,
+ 'USER_RESOURCES' => 2,
+ 'AUTOEXTEND_SIZE' => 2, 'CONSTRAINT_NAME' => 2, 'DELAY_KEY_WRITE' => 2,
+ 'MASTER_LOG_FILE' => 2, 'MASTER_PASSWORD' => 2, 'MASTER_SSL_CERT' => 2,
+ 'MULTILINESTRING' => 2, 'SQL_TSI_QUARTER' => 2, 'SUBCLASS_ORIGIN' => 2,
+ 'MASTER_SERVER_ID' => 2, 'REDO_BUFFER_SIZE' => 2, 'UNDO_BUFFER_SIZE' => 2,
+ 'CONSTRAINT_SCHEMA' => 2, 'IGNORE_SERVER_IDS' => 2, 'MASTER_SSL_CAPATH' => 2,
+ 'MASTER_SSL_CIPHER' => 2, 'SQL_BUFFER_RESULT' => 2,
+ 'CONSTRAINT_CATALOG' => 2, 'GEOMETRYCOLLECTION' => 2,
+ 'SQL_TSI_FRAC_SECOND' => 2,
+ 'MASTER_CONNECT_RETRY' => 2, 'MAX_QUERIES_PER_HOUR' => 2,
+ 'MAX_UPDATES_PER_HOUR' => 2, 'MAX_USER_CONNECTIONS' => 2,
+ 'MASTER_HEARTBEAT_PERIOD' => 2,
+ 'MAX_CONNECTIONS_PER_HOUR' => 2,
+
+ 'NOT NULL' => 4,
+ 'INDEX KEY' => 4,
+ 'UNIQUE KEY' => 4,
+ 'FOREIGN KEY' => 4, 'PRIMARY KEY' => 4, 'PRIMARY KEY' => 4, 'SPATIAL KEY' => 4,
+ 'FULLTEXT KEY' => 4, 'UNIQUE INDEX' => 4,
+ 'CHARACTER SET' => 4, 'IF NOT EXISTS' => 4, 'SPATIAL INDEX' => 4,
+ 'DATA DIRECTORY' => 4, 'FULLTEXT INDEX' => 4,
+ 'DEFAULT COLLATE' => 4, 'INDEX DIRECTORY' => 4,
+ 'DEFAULT CHARACTER SET' => 4,
+
+ );
+}
diff --git a/src/Contexts/Context_MySQL560.php b/src/Contexts/Context_MySQL560.php
new file mode 100644
index 0000000..18fff66
--- /dev/null
+++ b/src/Contexts/Context_MySQL560.php
@@ -0,0 +1,190 @@
+<?php
+
+namespace SqlParser\Contexts;
+
+use SqlParser\Context;
+
+class Context_MySQL560 extends Context
+{
+
+ public static $KEYWORDS = array(
+
+ 'AS' => 1, 'BY' => 1, 'IF' => 1, 'IN' => 1, 'IS' => 1,
+ 'ON' => 1, 'OR' => 1, 'TO' => 1,
+ 'ADD' => 1, 'ALL' => 1, 'AND' => 1, 'ASC' => 1, 'DEC' => 1,
+ 'DIV' => 1, 'FOR' => 1, 'GET' => 1, 'INT' => 1, 'KEY' => 1,
+ 'MOD' => 1, 'NOT' => 1, 'OUT' => 1, 'SET' => 1, 'SQL' => 1,
+ 'SSL' => 1, 'USE' => 1, 'XOR' => 1,
+ 'BLOB' => 1, 'BOTH' => 1, 'CALL' => 1, 'CASE' => 1,
+ 'CHAR' => 1, 'DESC' => 1, 'DROP' => 1, 'DUAL' => 1,
+ 'EACH' => 1, 'ELSE' => 1, 'EXIT' => 1, 'FROM' => 1,
+ 'INT1' => 1, 'INT2' => 1, 'INT3' => 1, 'INT4' => 1,
+ 'INT8' => 1, 'INTO' => 1, 'JOIN' => 1, 'KEYS' => 1,
+ 'KILL' => 1, 'LEFT' => 1, 'LIKE' => 1, 'LOAD' => 1,
+ 'LOCK' => 1, 'LONG' => 1, 'LOOP' => 1, 'NULL' => 1,
+ 'READ' => 1, 'REAL' => 1, 'SHOW' => 1, 'THEN' => 1,
+ 'TRUE' => 1, 'UNDO' => 1, 'WHEN' => 1, 'WITH' => 1,
+ 'ALTER' => 1, 'CHECK' => 1, 'CROSS' => 1, 'FALSE' => 1,
+ 'FETCH' => 1, 'FLOAT' => 1, 'FORCE' => 1, 'GRANT' => 1,
+ 'GROUP' => 1, 'INDEX' => 1, 'INNER' => 1, 'INOUT' => 1,
+ 'LEAVE' => 1, 'LIMIT' => 1, 'LINES' => 1, 'MATCH' => 1,
+ 'ORDER' => 1, 'OUTER' => 1, 'PURGE' => 1, 'RANGE' => 1,
+ 'READS' => 1, 'RIGHT' => 1, 'RLIKE' => 1, 'TABLE' => 1,
+ 'UNION' => 1, 'USAGE' => 1, 'USING' => 1, 'WHERE' => 1,
+ 'WHILE' => 1, 'WRITE' => 1,
+ 'BEFORE' => 1, 'BIGINT' => 1, 'BINARY' => 1, 'CHANGE' => 1,
+ 'COLUMN' => 1, 'CREATE' => 1, 'CURSOR' => 1, 'DELETE' => 1,
+ 'DOUBLE' => 1, 'ELSEIF' => 1, 'EXISTS' => 1, 'FLOAT4' => 1,
+ 'FLOAT8' => 1, 'HAVING' => 1, 'IGNORE' => 1, 'INFILE' => 1,
+ 'INSERT' => 1, 'LINEAR' => 1, 'OPTION' => 1, 'REGEXP' => 1,
+ 'RENAME' => 1, 'REPEAT' => 1, 'RETURN' => 1, 'REVOKE' => 1,
+ 'SCHEMA' => 1, 'SELECT' => 1, 'SIGNAL' => 1, 'UNIQUE' => 1,
+ 'UNLOCK' => 1, 'UPDATE' => 1, 'VALUES' => 1,
+ 'ANALYZE' => 1, 'BETWEEN' => 1, 'CASCADE' => 1, 'COLLATE' => 1,
+ 'CONVERT' => 1, 'DECIMAL' => 1, 'DECLARE' => 1, 'DEFAULT' => 1,
+ 'DELAYED' => 1, 'ESCAPED' => 1, 'EXPLAIN' => 1, 'FOREIGN' => 1,
+ 'INTEGER' => 1, 'ITERATE' => 1, 'LEADING' => 1, 'NATURAL' => 1,
+ 'NUMERIC' => 1, 'OUTFILE' => 1, 'PRIMARY' => 1, 'RELEASE' => 1,
+ 'REPLACE' => 1, 'REQUIRE' => 1, 'SCHEMAS' => 1, 'SPATIAL' => 1,
+ 'TINYINT' => 1, 'TRIGGER' => 1, 'VARCHAR' => 1, 'VARYING' => 1,
+ 'CONTINUE' => 1, 'DATABASE' => 1, 'DAY_HOUR' => 1,
+ 'DESCRIBE' => 1, 'DISTINCT' => 1, 'ENCLOSED' => 1,
+ 'FULLTEXT' => 1, 'INTERVAL' => 1, 'LONGBLOB' => 1,
+ 'LONGTEXT' => 1, 'MAXVALUE' => 1, 'MODIFIES' => 1,
+ 'OPTIMIZE' => 1, 'RESIGNAL' => 1, 'RESTRICT' => 1,
+ 'SMALLINT' => 1, 'SPECIFIC' => 1, 'SQLSTATE' => 1,
+ 'STARTING' => 1, 'TINYBLOB' => 1, 'TINYTEXT' => 1,
+ 'TRAILING' => 1, 'UNSIGNED' => 1, 'UTC_DATE' => 1,
+ 'UTC_TIME' => 1, 'ZEROFILL' => 1,
+ 'CHARACTER' => 1, 'CONDITION' => 1, 'DATABASES' => 1,
+ 'LOCALTIME' => 1, 'MEDIUMINT' => 1, 'MIDDLEINT' => 1,
+ 'PARTITION' => 1, 'PRECISION' => 1, 'PROCEDURE' => 1,
+ 'SENSITIVE' => 1, 'SEPARATOR' => 1, 'VARBINARY' => 1,
+ 'ACCESSIBLE' => 1, 'ASENSITIVE' => 1, 'CONSTRAINT' => 1,
+ 'DAY_MINUTE' => 1, 'DAY_SECOND' => 1, 'MEDIUMBLOB' => 1,
+ 'MEDIUMTEXT' => 1, 'OPTIONALLY' => 1, 'READ_WRITE' => 1,
+ 'REFERENCES' => 1, 'SQLWARNING' => 1, 'TERMINATED' => 1,
+ 'YEAR_MONTH' => 1,
+ 'DISTINCTROW' => 1, 'HOUR_MINUTE' => 1, 'HOUR_SECOND' => 1,
+ 'INSENSITIVE' => 1, 'MASTER_BIND' => 1,
+ 'CURRENT_DATE' => 1, 'CURRENT_TIME' => 1, 'CURRENT_USER' => 1,
+ 'LOW_PRIORITY' => 1, 'SQLEXCEPTION' => 1, 'VARCHARACTER' => 1,
+ 'DETERMINISTIC' => 1, 'HIGH_PRIORITY' => 1, 'MINUTE_SECOND' => 1,
+ 'STRAIGHT_JOIN' => 1, 'UTC_TIMESTAMP' => 1,
+ 'IO_AFTER_GTIDS' => 1, 'LOCALTIMESTAMP' => 1, 'SQL_BIG_RESULT' => 1,
+ 'DAY_MICROSECOND' => 1, 'IO_BEFORE_GTIDS' => 1,
+ 'HOUR_MICROSECOND' => 1, 'SQL_SMALL_RESULT' => 1,
+ 'CURRENT_TIMESTAMP' => 1,
+ 'MINUTE_MICROSECOND' => 1, 'NO_WRITE_TO_BINLOG' => 1,
+ 'SECOND_MICROSECOND' => 1,
+ 'SQL_CALC_FOUND_ROWS' => 1,
+ 'MASTER_SSL_VERIFY_SERVER_CERT' => 1,
+
+ 'AT' => 2, 'DO' => 2, 'IO' => 2, 'NO' => 2, 'XA' => 2,
+ 'ANY' => 2, 'AVG' => 2, 'BIT' => 2, 'CPU' => 2, 'DAY' => 2, 'END' => 2,
+ 'IPC' => 2, 'NDB' => 2, 'NEW' => 2, 'ONE' => 2, 'ROW' => 2, 'XML' => 2,
+ 'BOOL' => 2, 'BYTE' => 2, 'CODE' => 2, 'CUBE' => 2, 'DATA' => 2, 'DATE' => 2,
+ 'DISK' => 2, 'ENDS' => 2, 'ENUM' => 2, 'FAST' => 2, 'FILE' => 2, 'FULL' => 2,
+ 'HASH' => 2, 'HELP' => 2, 'HOST' => 2, 'HOUR' => 2, 'LAST' => 2, 'LESS' => 2,
+ 'LIST' => 2, 'LOGS' => 2, 'MODE' => 2, 'NAME' => 2, 'NEXT' => 2, 'NONE' => 2,
+ 'ONLY' => 2, 'OPEN' => 2, 'PAGE' => 2, 'PORT' => 2, 'PREV' => 2, 'ROWS' => 2,
+ 'SLOW' => 2, 'SOME' => 2, 'STOP' => 2, 'TEXT' => 2, 'THAN' => 2, 'TIME' => 2,
+ 'TYPE' => 2, 'USER' => 2, 'VIEW' => 2, 'WAIT' => 2, 'WEEK' => 2, 'WORK' => 2,
+ 'X509' => 2, 'YEAR' => 2,
+ 'AFTER' => 2, 'ASCII' => 2, 'BEGIN' => 2, 'BLOCK' => 2, 'BTREE' => 2,
+ 'CACHE' => 2, 'CHAIN' => 2, 'CLOSE' => 2, 'ERROR' => 2, 'EVENT' => 2,
+ 'EVERY' => 2, 'FIRST' => 2, 'FIXED' => 2, 'FLUSH' => 2, 'FOUND' => 2,
+ 'HOSTS' => 2, 'LEVEL' => 2, 'LOCAL' => 2, 'LOCKS' => 2, 'MERGE' => 2,
+ 'MONTH' => 2, 'MUTEX' => 2, 'NAMES' => 2, 'NCHAR' => 2, 'OWNER' => 2,
+ 'PHASE' => 2, 'POINT' => 2, 'PROXY' => 2, 'QUERY' => 2, 'QUICK' => 2,
+ 'RELAY' => 2, 'RESET' => 2, 'RTREE' => 2, 'SHARE' => 2, 'SLAVE' => 2,
+ 'START' => 2, 'SUPER' => 2, 'SWAPS' => 2, 'TYPES' => 2, 'UNTIL' => 2,
+ 'VALUE' => 2,
+ 'ACTION' => 2, 'BACKUP' => 2, 'BINLOG' => 2, 'CIPHER' => 2, 'CLIENT' => 2,
+ 'COMMIT' => 2, 'ENABLE' => 2, 'ENGINE' => 2, 'ERRORS' => 2, 'ESCAPE' => 2,
+ 'EVENTS' => 2, 'EXPIRE' => 2, 'EXPORT' => 2, 'FAULTS' => 2, 'FIELDS' => 2,
+ 'FORMAT' => 2, 'GLOBAL' => 2, 'GRANTS' => 2, 'IMPORT' => 2, 'ISSUER' => 2,
+ 'LEAVES' => 2, 'MASTER' => 2, 'MEDIUM' => 2, 'MEMORY' => 2, 'MINUTE' => 2,
+ 'MODIFY' => 2, 'NUMBER' => 2, 'OFFSET' => 2, 'PARSER' => 2, 'PLUGIN' => 2,
+ 'RELOAD' => 2, 'REMOVE' => 2, 'REPAIR' => 2, 'RESUME' => 2, 'ROLLUP' => 2,
+ 'SECOND' => 2, 'SERIAL' => 2, 'SERVER' => 2, 'SIGNED' => 2, 'SIMPLE' => 2,
+ 'SOCKET' => 2, 'SONAME' => 2, 'SOUNDS' => 2, 'SOURCE' => 2, 'STARTS' => 2,
+ 'STATUS' => 2, 'STRING' => 2, 'TABLES' => 2,
+ 'AGAINST' => 2, 'ANALYSE' => 2, 'AUTHORS' => 2, 'BOOLEAN' => 2, 'CHANGED' => 2,
+ 'CHARSET' => 2, 'COLUMNS' => 2, 'COMMENT' => 2, 'COMPACT' => 2, 'CONTEXT' => 2,
+ 'CURRENT' => 2, 'DEFINER' => 2, 'DISABLE' => 2, 'DISCARD' => 2, 'DYNAMIC' => 2,
+ 'ENGINES' => 2, 'EXECUTE' => 2, 'GENERAL' => 2, 'HANDLER' => 2, 'INDEXES' => 2,
+ 'INSTALL' => 2, 'INVOKER' => 2, 'LOGFILE' => 2, 'MIGRATE' => 2, 'NO_WAIT' => 2,
+ 'OPTIONS' => 2, 'PARTIAL' => 2, 'PLUGINS' => 2, 'POLYGON' => 2, 'PREPARE' => 2,
+ 'PROFILE' => 2, 'QUARTER' => 2, 'REBUILD' => 2, 'RECOVER' => 2, 'RESTORE' => 2,
+ 'RETURNS' => 2, 'REVERSE' => 2, 'ROUTINE' => 2, 'SESSION' => 2, 'STORAGE' => 2,
+ 'SUBJECT' => 2, 'SUSPEND' => 2, 'UNICODE' => 2, 'UNKNOWN' => 2, 'UPGRADE' => 2,
+ 'USE_FRM' => 2, 'WRAPPER' => 2,
+ 'CASCADED' => 2, 'CHECKSUM' => 2, 'COALESCE' => 2, 'CONTAINS' => 2,
+ 'DATAFILE' => 2, 'DATETIME' => 2, 'DUMPFILE' => 2, 'EXCHANGE' => 2,
+ 'EXTENDED' => 2, 'FUNCTION' => 2, 'GEOMETRY' => 2, 'LANGUAGE' => 2,
+ 'MAX_ROWS' => 2, 'MAX_SIZE' => 2, 'MIN_ROWS' => 2, 'NATIONAL' => 2,
+ 'NVARCHAR' => 2, 'ONE_SHOT' => 2, 'PASSWORD' => 2, 'PRESERVE' => 2,
+ 'PROFILES' => 2, 'REDOFILE' => 2, 'RELAYLOG' => 2, 'ROLLBACK' => 2,
+ 'SCHEDULE' => 2, 'SECURITY' => 2, 'SHUTDOWN' => 2, 'SNAPSHOT' => 2,
+ 'SWITCHES' => 2, 'TRIGGERS' => 2, 'TRUNCATE' => 2, 'UNDOFILE' => 2,
+ 'WARNINGS' => 2,
+ 'AGGREGATE' => 2, 'ALGORITHM' => 2, 'COLLATION' => 2, 'COMMITTED' => 2,
+ 'DIRECTORY' => 2, 'DUPLICATE' => 2, 'EXPANSION' => 2, 'IO_THREAD' => 2,
+ 'ISOLATION' => 2, 'NODEGROUP' => 2, 'PACK_KEYS' => 2, 'READ_ONLY' => 2,
+ 'REDUNDANT' => 2, 'ROW_COUNT' => 2, 'SAVEPOINT' => 2, 'SQL_CACHE' => 2,
+ 'TEMPORARY' => 2, 'TEMPTABLE' => 2, 'TIMESTAMP' => 2, 'UNDEFINED' => 2,
+ 'UNINSTALL' => 2, 'VARIABLES' => 2,
+ 'COMPLETION' => 2, 'COMPRESSED' => 2, 'CONCURRENT' => 2, 'CONNECTION' => 2,
+ 'CONSISTENT' => 2, 'DEALLOCATE' => 2, 'GET_FORMAT' => 2, 'IDENTIFIED' => 2,
+ 'LINESTRING' => 2, 'MASTER_SSL' => 2, 'MULTIPOINT' => 2, 'NDBCLUSTER' => 2,
+ 'PARTITIONS' => 2, 'PLUGIN_DIR' => 2, 'PRIVILEGES' => 2, 'REORGANIZE' => 2,
+ 'REPEATABLE' => 2, 'ROW_FORMAT' => 2, 'SQL_THREAD' => 2, 'TABLESPACE' => 2,
+ 'TABLE_NAME' => 2,
+ 'COLUMN_NAME' => 2, 'CURSOR_NAME' => 2, 'DIAGNOSTICS' => 2, 'EXTENT_SIZE' => 2,
+ 'MASTER_HOST' => 2, 'MASTER_PORT' => 2, 'MASTER_USER' => 2, 'MICROSECOND' => 2,
+ 'MYSQL_ERRNO' => 2, 'PROCESSLIST' => 2, 'REPLICATION' => 2, 'SCHEMA_NAME' => 2,
+ 'SQL_TSI_DAY' => 2, 'TRANSACTION' => 2, 'UNCOMMITTED' => 2,
+ 'CATALOG_NAME' => 2, 'CLASS_ORIGIN' => 2, 'CONTRIBUTORS' => 2,
+ 'DEFAULT_AUTH' => 2, 'DES_KEY_FILE' => 2, 'INITIAL_SIZE' => 2,
+ 'MASTER_DELAY' => 2, 'MESSAGE_TEXT' => 2, 'MULTIPOLYGON' => 2,
+ 'OLD_PASSWORD' => 2, 'PARTITIONING' => 2, 'RELAY_THREAD' => 2,
+ 'SERIALIZABLE' => 2, 'SQL_NO_CACHE' => 2, 'SQL_TSI_HOUR' => 2,
+ 'SQL_TSI_WEEK' => 2, 'SQL_TSI_YEAR' => 2, 'SUBPARTITION' => 2,
+ 'TIMESTAMPADD' => 2,
+ 'COLUMN_FORMAT' => 2, 'INSERT_METHOD' => 2, 'MASTER_SSL_CA' => 2,
+ 'RELAY_LOG_POS' => 2, 'SQL_TSI_MONTH' => 2, 'SUBPARTITIONS' => 2,
+ 'TIMESTAMPDIFF' => 2, 'WEIGHT_STRING' => 2,
+ 'AUTO_INCREMENT' => 2, 'AVG_ROW_LENGTH' => 2, 'KEY_BLOCK_SIZE' => 2,
+ 'MASTER_LOG_POS' => 2, 'MASTER_SSL_CRL' => 2, 'MASTER_SSL_KEY' => 2,
+ 'RELAY_LOG_FILE' => 2, 'SQL_TSI_MINUTE' => 2, 'SQL_TSI_SECOND' => 2,
+ 'TABLE_CHECKSUM' => 2, 'USER_RESOURCES' => 2,
+ 'AUTOEXTEND_SIZE' => 2, 'CONSTRAINT_NAME' => 2, 'DELAY_KEY_WRITE' => 2,
+ 'MASTER_LOG_FILE' => 2, 'MASTER_PASSWORD' => 2, 'MASTER_SSL_CERT' => 2,
+ 'MULTILINESTRING' => 2, 'SQL_AFTER_GTIDS' => 2, 'SQL_TSI_QUARTER' => 2,
+ 'SUBCLASS_ORIGIN' => 2,
+ 'MASTER_SERVER_ID' => 2, 'REDO_BUFFER_SIZE' => 2, 'SQL_BEFORE_GTIDS' => 2,
+ 'STATS_PERSISTENT' => 2, 'UNDO_BUFFER_SIZE' => 2,
+ 'CONSTRAINT_SCHEMA' => 2, 'IGNORE_SERVER_IDS' => 2, 'MASTER_SSL_CAPATH' => 2,
+ 'MASTER_SSL_CIPHER' => 2, 'RETURNED_SQLSTATE' => 2, 'SQL_BUFFER_RESULT' => 2,
+ 'STATS_AUTO_RECALC' => 2,
+ 'CONSTRAINT_CATALOG' => 2, 'GEOMETRYCOLLECTION' => 2, 'MASTER_RETRY_COUNT' => 2,
+ 'MASTER_SSL_CRLPATH' => 2, 'SQL_AFTER_MTS_GAPS' => 2, 'STATS_SAMPLE_PAGES' => 2,
+ 'MASTER_AUTO_POSITION' => 2, 'MASTER_CONNECT_RETRY' => 2,
+ 'MAX_QUERIES_PER_HOUR' => 2, 'MAX_UPDATES_PER_HOUR' => 2,
+ 'MAX_USER_CONNECTIONS' => 2,
+ 'MASTER_HEARTBEAT_PERIOD' => 2,
+ 'MAX_CONNECTIONS_PER_HOUR' => 2,
+
+ 'NOT NULL' => 4,
+ 'INDEX KEY' => 4,
+ 'UNIQUE KEY' => 4,
+ 'FOREIGN KEY' => 4, 'PRIMARY KEY' => 4, 'PRIMARY KEY' => 4, 'SPATIAL KEY' => 4,
+ 'FULLTEXT KEY' => 4, 'UNIQUE INDEX' => 4,
+ 'CHARACTER SET' => 4, 'IF NOT EXISTS' => 4, 'SPATIAL INDEX' => 4,
+ 'DATA DIRECTORY' => 4, 'FULLTEXT INDEX' => 4,
+ 'DEFAULT COLLATE' => 4, 'INDEX DIRECTORY' => 4,
+ 'DEFAULT CHARACTER SET' => 4,
+
+ );
+}
diff --git a/src/Contexts/Context_MySQL570.php b/src/Contexts/Context_MySQL570.php
new file mode 100644
index 0000000..7c97c8b
--- /dev/null
+++ b/src/Contexts/Context_MySQL570.php
@@ -0,0 +1,199 @@
+<?php
+
+namespace SqlParser\Contexts;
+
+use SqlParser\Context;
+
+class Context_MySQL570 extends Context
+{
+
+ public static $KEYWORDS = array(
+
+ 'AS' => 1, 'BY' => 1, 'IF' => 1, 'IN' => 1, 'IS' => 1,
+ 'ON' => 1, 'OR' => 1, 'TO' => 1,
+ 'ADD' => 1, 'ALL' => 1, 'AND' => 1, 'ASC' => 1, 'DEC' => 1,
+ 'DIV' => 1, 'FOR' => 1, 'GET' => 1, 'INT' => 1, 'KEY' => 1,
+ 'MOD' => 1, 'NOT' => 1, 'OUT' => 1, 'SET' => 1, 'SQL' => 1,
+ 'SSL' => 1, 'USE' => 1, 'XOR' => 1,
+ 'BLOB' => 1, 'BOTH' => 1, 'CALL' => 1, 'CASE' => 1,
+ 'CHAR' => 1, 'DESC' => 1, 'DROP' => 1, 'DUAL' => 1,
+ 'EACH' => 1, 'ELSE' => 1, 'EXIT' => 1, 'FROM' => 1,
+ 'INT1' => 1, 'INT2' => 1, 'INT3' => 1, 'INT4' => 1,
+ 'INT8' => 1, 'INTO' => 1, 'JOIN' => 1, 'KEYS' => 1,
+ 'KILL' => 1, 'LEFT' => 1, 'LIKE' => 1, 'LOAD' => 1,
+ 'LOCK' => 1, 'LONG' => 1, 'LOOP' => 1, 'NULL' => 1,
+ 'READ' => 1, 'REAL' => 1, 'SHOW' => 1, 'THEN' => 1,
+ 'TRUE' => 1, 'UNDO' => 1, 'WHEN' => 1, 'WITH' => 1,
+ 'ALTER' => 1, 'CHECK' => 1, 'CROSS' => 1, 'FALSE' => 1,
+ 'FETCH' => 1, 'FLOAT' => 1, 'FORCE' => 1, 'GRANT' => 1,
+ 'GROUP' => 1, 'INDEX' => 1, 'INNER' => 1, 'INOUT' => 1,
+ 'LEAVE' => 1, 'LIMIT' => 1, 'LINES' => 1, 'MATCH' => 1,
+ 'ORDER' => 1, 'OUTER' => 1, 'PURGE' => 1, 'RANGE' => 1,
+ 'READS' => 1, 'RIGHT' => 1, 'RLIKE' => 1, 'TABLE' => 1,
+ 'UNION' => 1, 'USAGE' => 1, 'USING' => 1, 'WHERE' => 1,
+ 'WHILE' => 1, 'WRITE' => 1,
+ 'BEFORE' => 1, 'BIGINT' => 1, 'BINARY' => 1, 'CHANGE' => 1,
+ 'COLUMN' => 1, 'CREATE' => 1, 'CURSOR' => 1, 'DELETE' => 1,
+ 'DOUBLE' => 1, 'ELSEIF' => 1, 'EXISTS' => 1, 'FLOAT4' => 1,
+ 'FLOAT8' => 1, 'HAVING' => 1, 'IGNORE' => 1, 'INFILE' => 1,
+ 'INSERT' => 1, 'LINEAR' => 1, 'OPTION' => 1, 'REGEXP' => 1,
+ 'RENAME' => 1, 'REPEAT' => 1, 'RETURN' => 1, 'REVOKE' => 1,
+ 'SCHEMA' => 1, 'SELECT' => 1, 'SIGNAL' => 1, 'STORED' => 1,
+ 'UNIQUE' => 1, 'UNLOCK' => 1, 'UPDATE' => 1, 'VALUES' => 1,
+ 'ANALYZE' => 1, 'BETWEEN' => 1, 'CASCADE' => 1, 'COLLATE' => 1,
+ 'CONVERT' => 1, 'DECIMAL' => 1, 'DECLARE' => 1, 'DEFAULT' => 1,
+ 'DELAYED' => 1, 'ESCAPED' => 1, 'EXPLAIN' => 1, 'FOREIGN' => 1,
+ 'INTEGER' => 1, 'ITERATE' => 1, 'LEADING' => 1, 'NATURAL' => 1,
+ 'NUMERIC' => 1, 'OUTFILE' => 1, 'PRIMARY' => 1, 'RELEASE' => 1,
+ 'REPLACE' => 1, 'REQUIRE' => 1, 'SCHEMAS' => 1, 'SPATIAL' => 1,
+ 'TINYINT' => 1, 'TRIGGER' => 1, 'VARCHAR' => 1, 'VARYING' => 1,
+ 'VIRTUAL' => 1,
+ 'CONTINUE' => 1, 'DATABASE' => 1, 'DAY_HOUR' => 1,
+ 'DESCRIBE' => 1, 'DISTINCT' => 1, 'ENCLOSED' => 1,
+ 'FULLTEXT' => 1, 'INTERVAL' => 1, 'LONGBLOB' => 1,
+ 'LONGTEXT' => 1, 'MAXVALUE' => 1, 'MODIFIES' => 1,
+ 'OPTIMIZE' => 1, 'RESIGNAL' => 1, 'RESTRICT' => 1,
+ 'SMALLINT' => 1, 'SPECIFIC' => 1, 'SQLSTATE' => 1,
+ 'STARTING' => 1, 'TINYBLOB' => 1, 'TINYTEXT' => 1,
+ 'TRAILING' => 1, 'UNSIGNED' => 1, 'UTC_DATE' => 1,
+ 'UTC_TIME' => 1, 'ZEROFILL' => 1,
+ 'CHARACTER' => 1, 'CONDITION' => 1, 'DATABASES' => 1,
+ 'GENERATED' => 1, 'LOCALTIME' => 1, 'MEDIUMINT' => 1,
+ 'MIDDLEINT' => 1, 'PARTITION' => 1, 'PRECISION' => 1,
+ 'PROCEDURE' => 1, 'SENSITIVE' => 1, 'SEPARATOR' => 1,
+ 'VARBINARY' => 1,
+ 'ACCESSIBLE' => 1, 'ASENSITIVE' => 1, 'CONSTRAINT' => 1,
+ 'DAY_MINUTE' => 1, 'DAY_SECOND' => 1, 'MEDIUMBLOB' => 1,
+ 'MEDIUMTEXT' => 1, 'OPTIONALLY' => 1, 'READ_WRITE' => 1,
+ 'REFERENCES' => 1, 'SQLWARNING' => 1, 'TERMINATED' => 1,
+ 'YEAR_MONTH' => 1,
+ 'DISTINCTROW' => 1, 'HOUR_MINUTE' => 1, 'HOUR_SECOND' => 1,
+ 'INSENSITIVE' => 1, 'MASTER_BIND' => 1,
+ 'CURRENT_DATE' => 1, 'CURRENT_TIME' => 1, 'CURRENT_USER' => 1,
+ 'LOW_PRIORITY' => 1, 'SQLEXCEPTION' => 1, 'VARCHARACTER' => 1,
+ 'DETERMINISTIC' => 1, 'HIGH_PRIORITY' => 1, 'MINUTE_SECOND' => 1,
+ 'STRAIGHT_JOIN' => 1, 'UTC_TIMESTAMP' => 1,
+ 'IO_AFTER_GTIDS' => 1, 'LOCALTIMESTAMP' => 1, 'SQL_BIG_RESULT' => 1,
+ 'DAY_MICROSECOND' => 1, 'IO_BEFORE_GTIDS' => 1, 'OPTIMIZER_COSTS' => 1,
+ 'HOUR_MICROSECOND' => 1, 'SQL_SMALL_RESULT' => 1,
+ 'CURRENT_TIMESTAMP' => 1,
+ 'MINUTE_MICROSECOND' => 1, 'NO_WRITE_TO_BINLOG' => 1,
+ 'SECOND_MICROSECOND' => 1,
+ 'SQL_CALC_FOUND_ROWS' => 1,
+ 'MASTER_SSL_VERIFY_SERVER_CERT' => 1,
+
+ 'AT' => 2, 'DO' => 2, 'IO' => 2, 'NO' => 2, 'XA' => 2,
+ 'ANY' => 2, 'AVG' => 2, 'BIT' => 2, 'CPU' => 2, 'DAY' => 2, 'END' => 2,
+ 'IPC' => 2, 'NDB' => 2, 'NEW' => 2, 'ONE' => 2, 'ROW' => 2, 'XID' => 2,
+ 'XML' => 2,
+ 'BOOL' => 2, 'BYTE' => 2, 'CODE' => 2, 'CUBE' => 2, 'DATA' => 2, 'DATE' => 2,
+ 'DISK' => 2, 'ENDS' => 2, 'ENUM' => 2, 'FAST' => 2, 'FILE' => 2, 'FULL' => 2,
+ 'HASH' => 2, 'HELP' => 2, 'HOST' => 2, 'HOUR' => 2, 'LAST' => 2, 'LESS' => 2,
+ 'LIST' => 2, 'LOGS' => 2, 'MODE' => 2, 'NAME' => 2, 'NEXT' => 2, 'NONE' => 2,
+ 'ONLY' => 2, 'OPEN' => 2, 'PAGE' => 2, 'PORT' => 2, 'PREV' => 2, 'ROWS' => 2,
+ 'SLOW' => 2, 'SOME' => 2, 'STOP' => 2, 'TEXT' => 2, 'THAN' => 2, 'TIME' => 2,
+ 'TYPE' => 2, 'USER' => 2, 'VIEW' => 2, 'WAIT' => 2, 'WEEK' => 2, 'WORK' => 2,
+ 'X509' => 2, 'YEAR' => 2,
+ 'AFTER' => 2, 'ASCII' => 2, 'BEGIN' => 2, 'BLOCK' => 2, 'BTREE' => 2,
+ 'CACHE' => 2, 'CHAIN' => 2, 'CLOSE' => 2, 'ERROR' => 2, 'EVENT' => 2,
+ 'EVERY' => 2, 'FIRST' => 2, 'FIXED' => 2, 'FLUSH' => 2, 'FOUND' => 2,
+ 'HOSTS' => 2, 'LEVEL' => 2, 'LOCAL' => 2, 'LOCKS' => 2, 'MERGE' => 2,
+ 'MONTH' => 2, 'MUTEX' => 2, 'NAMES' => 2, 'NCHAR' => 2, 'NEVER' => 2,
+ 'OWNER' => 2, 'PHASE' => 2, 'POINT' => 2, 'PROXY' => 2, 'QUERY' => 2,
+ 'QUICK' => 2, 'RELAY' => 2, 'RESET' => 2, 'RTREE' => 2, 'SHARE' => 2,
+ 'SLAVE' => 2, 'START' => 2, 'SUPER' => 2, 'SWAPS' => 2, 'TYPES' => 2,
+ 'UNTIL' => 2, 'VALUE' => 2,
+ 'ACTION' => 2, 'ALWAYS' => 2, 'BACKUP' => 2, 'BINLOG' => 2, 'CIPHER' => 2,
+ 'CLIENT' => 2, 'COMMIT' => 2, 'ENABLE' => 2, 'ENGINE' => 2, 'ERRORS' => 2,
+ 'ESCAPE' => 2, 'EVENTS' => 2, 'EXPIRE' => 2, 'EXPORT' => 2, 'FAULTS' => 2,
+ 'FIELDS' => 2, 'FILTER' => 2, 'FORMAT' => 2, 'GLOBAL' => 2, 'GRANTS' => 2,
+ 'IMPORT' => 2, 'ISSUER' => 2, 'LEAVES' => 2, 'MASTER' => 2, 'MEDIUM' => 2,
+ 'MEMORY' => 2, 'MINUTE' => 2, 'MODIFY' => 2, 'NUMBER' => 2, 'OFFSET' => 2,
+ 'PARSER' => 2, 'PLUGIN' => 2, 'RELOAD' => 2, 'REMOVE' => 2, 'REPAIR' => 2,
+ 'RESUME' => 2, 'ROLLUP' => 2, 'SECOND' => 2, 'SERIAL' => 2, 'SERVER' => 2,
+ 'SIGNED' => 2, 'SIMPLE' => 2, 'SOCKET' => 2, 'SONAME' => 2, 'SOUNDS' => 2,
+ 'SOURCE' => 2, 'STARTS' => 2, 'STATUS' => 2, 'STRING' => 2, 'TABLES' => 2,
+ 'ACCOUNT' => 2, 'AGAINST' => 2, 'ANALYSE' => 2, 'BOOLEAN' => 2, 'CHANGED' => 2,
+ 'CHANNEL' => 2, 'CHARSET' => 2, 'COLUMNS' => 2, 'COMMENT' => 2, 'COMPACT' => 2,
+ 'CONTEXT' => 2, 'CURRENT' => 2, 'DEFINER' => 2, 'DISABLE' => 2, 'DISCARD' => 2,
+ 'DYNAMIC' => 2, 'ENGINES' => 2, 'EXECUTE' => 2, 'FOLLOWS' => 2, 'GENERAL' => 2,
+ 'HANDLER' => 2, 'INDEXES' => 2, 'INSTALL' => 2, 'INVOKER' => 2, 'LOGFILE' => 2,
+ 'MIGRATE' => 2, 'NO_WAIT' => 2, 'OPTIONS' => 2, 'PARTIAL' => 2, 'PLUGINS' => 2,
+ 'POLYGON' => 2, 'PREPARE' => 2, 'PROFILE' => 2, 'QUARTER' => 2, 'REBUILD' => 2,
+ 'RECOVER' => 2, 'RESTORE' => 2, 'RETURNS' => 2, 'REVERSE' => 2, 'ROUTINE' => 2,
+ 'SESSION' => 2, 'STACKED' => 2, 'STORAGE' => 2, 'SUBJECT' => 2, 'SUSPEND' => 2,
+ 'UNICODE' => 2, 'UNKNOWN' => 2, 'UPGRADE' => 2, 'USE_FRM' => 2, 'WITHOUT' => 2,
+ 'WRAPPER' => 2,
+ 'CASCADED' => 2, 'CHECKSUM' => 2, 'COALESCE' => 2, 'CONTAINS' => 2,
+ 'DATAFILE' => 2, 'DATETIME' => 2, 'DUMPFILE' => 2, 'EXCHANGE' => 2,
+ 'EXTENDED' => 2, 'FUNCTION' => 2, 'GEOMETRY' => 2, 'LANGUAGE' => 2,
+ 'MAX_ROWS' => 2, 'MAX_SIZE' => 2, 'MIN_ROWS' => 2, 'NATIONAL' => 2,
+ 'NVARCHAR' => 2, 'PASSWORD' => 2, 'PRECEDES' => 2, 'PRESERVE' => 2,
+ 'PROFILES' => 2, 'REDOFILE' => 2, 'RELAYLOG' => 2, 'ROLLBACK' => 2,
+ 'SCHEDULE' => 2, 'SECURITY' => 2, 'SHUTDOWN' => 2, 'SNAPSHOT' => 2,
+ 'SWITCHES' => 2, 'TRIGGERS' => 2, 'TRUNCATE' => 2, 'UNDOFILE' => 2,
+ 'WARNINGS' => 2,
+ 'AGGREGATE' => 2, 'ALGORITHM' => 2, 'COLLATION' => 2, 'COMMITTED' => 2,
+ 'DIRECTORY' => 2, 'DUPLICATE' => 2, 'EXPANSION' => 2, 'IO_THREAD' => 2,
+ 'ISOLATION' => 2, 'NODEGROUP' => 2, 'PACK_KEYS' => 2, 'READ_ONLY' => 2,
+ 'REDUNDANT' => 2, 'ROW_COUNT' => 2, 'SAVEPOINT' => 2, 'SQL_CACHE' => 2,
+ 'TEMPORARY' => 2, 'TEMPTABLE' => 2, 'TIMESTAMP' => 2, 'UNDEFINED' => 2,
+ 'UNINSTALL' => 2, 'VARIABLES' => 2,
+ 'COMPLETION' => 2, 'COMPRESSED' => 2, 'CONCURRENT' => 2, 'CONNECTION' => 2,
+ 'CONSISTENT' => 2, 'DEALLOCATE' => 2, 'GET_FORMAT' => 2, 'IDENTIFIED' => 2,
+ 'LINESTRING' => 2, 'MASTER_SSL' => 2, 'MULTIPOINT' => 2, 'NDBCLUSTER' => 2,
+ 'PARTITIONS' => 2, 'PLUGIN_DIR' => 2, 'PRIVILEGES' => 2, 'REORGANIZE' => 2,
+ 'REPEATABLE' => 2, 'ROW_FORMAT' => 2, 'SQL_THREAD' => 2, 'TABLESPACE' => 2,
+ 'TABLE_NAME' => 2, 'VALIDATION' => 2,
+ 'COLUMN_NAME' => 2, 'COMPRESSION' => 2, 'CURSOR_NAME' => 2, 'DIAGNOSTICS' => 2,
+ 'EXTENT_SIZE' => 2, 'MASTER_HOST' => 2, 'MASTER_PORT' => 2, 'MASTER_USER' => 2,
+ 'MICROSECOND' => 2, 'MYSQL_ERRNO' => 2, 'NONBLOCKING' => 2, 'PROCESSLIST' => 2,
+ 'REPLICATION' => 2, 'SCHEMA_NAME' => 2, 'SQL_TSI_DAY' => 2, 'TRANSACTION' => 2,
+ 'UNCOMMITTED' => 2,
+ 'CATALOG_NAME' => 2, 'CLASS_ORIGIN' => 2, 'DEFAULT_AUTH' => 2,
+ 'DES_KEY_FILE' => 2, 'INITIAL_SIZE' => 2, 'MASTER_DELAY' => 2,
+ 'MESSAGE_TEXT' => 2, 'MULTIPOLYGON' => 2, 'OLD_PASSWORD' => 2,
+ 'PARTITIONING' => 2, 'RELAY_THREAD' => 2, 'SERIALIZABLE' => 2,
+ 'SQL_NO_CACHE' => 2, 'SQL_TSI_HOUR' => 2, 'SQL_TSI_WEEK' => 2,
+ 'SQL_TSI_YEAR' => 2, 'SUBPARTITION' => 2, 'TIMESTAMPADD' => 2,
+ 'COLUMN_FORMAT' => 2, 'INSERT_METHOD' => 2, 'MASTER_SSL_CA' => 2,
+ 'RELAY_LOG_POS' => 2, 'SQL_TSI_MONTH' => 2, 'SUBPARTITIONS' => 2,
+ 'TIMESTAMPDIFF' => 2, 'WEIGHT_STRING' => 2,
+ 'AUTO_INCREMENT' => 2, 'AVG_ROW_LENGTH' => 2, 'KEY_BLOCK_SIZE' => 2,
+ 'MASTER_LOG_POS' => 2, 'MASTER_SSL_CRL' => 2, 'MASTER_SSL_KEY' => 2,
+ 'RELAY_LOG_FILE' => 2, 'SQL_TSI_MINUTE' => 2, 'SQL_TSI_SECOND' => 2,
+ 'TABLE_CHECKSUM' => 2, 'USER_RESOURCES' => 2,
+ 'AUTOEXTEND_SIZE' => 2, 'CONSTRAINT_NAME' => 2, 'DELAY_KEY_WRITE' => 2,
+ 'FILE_BLOCK_SIZE' => 2, 'MASTER_LOG_FILE' => 2, 'MASTER_PASSWORD' => 2,
+ 'MASTER_SSL_CERT' => 2, 'MULTILINESTRING' => 2, 'PARSE_GCOL_EXPR' => 2,
+ 'REPLICATE_DO_DB' => 2, 'SQL_AFTER_GTIDS' => 2, 'SQL_TSI_QUARTER' => 2,
+ 'SUBCLASS_ORIGIN' => 2,
+ 'MASTER_SERVER_ID' => 2, 'REDO_BUFFER_SIZE' => 2, 'SQL_BEFORE_GTIDS' => 2,
+ 'STATS_PERSISTENT' => 2, 'UNDO_BUFFER_SIZE' => 2,
+ 'CONSTRAINT_SCHEMA' => 2, 'GROUP_REPLICATION' => 2, 'IGNORE_SERVER_IDS' => 2,
+ 'MASTER_SSL_CAPATH' => 2, 'MASTER_SSL_CIPHER' => 2, 'RETURNED_SQLSTATE' => 2,
+ 'SQL_BUFFER_RESULT' => 2, 'STATS_AUTO_RECALC' => 2,
+ 'CONSTRAINT_CATALOG' => 2, 'GEOMETRYCOLLECTION' => 2, 'MASTER_RETRY_COUNT' => 2,
+ 'MASTER_SSL_CRLPATH' => 2, 'MAX_STATEMENT_TIME' => 2, 'REPLICATE_DO_TABLE' => 2,
+ 'SQL_AFTER_MTS_GAPS' => 2, 'STATS_SAMPLE_PAGES' => 2,
+ 'REPLICATE_IGNORE_DB' => 2,
+ 'MASTER_AUTO_POSITION' => 2, 'MASTER_CONNECT_RETRY' => 2,
+ 'MAX_QUERIES_PER_HOUR' => 2, 'MAX_UPDATES_PER_HOUR' => 2,
+ 'MAX_USER_CONNECTIONS' => 2, 'REPLICATE_REWRITE_DB' => 2,
+ 'REPLICATE_IGNORE_TABLE' => 2,
+ 'MASTER_HEARTBEAT_PERIOD' => 2, 'REPLICATE_WILD_DO_TABLE' => 2,
+ 'MAX_CONNECTIONS_PER_HOUR' => 2,
+ 'REPLICATE_WILD_IGNORE_TABLE' => 2,
+
+ 'NOT NULL' => 4,
+ 'INDEX KEY' => 4,
+ 'UNIQUE KEY' => 4,
+ 'FOREIGN KEY' => 4, 'PRIMARY KEY' => 4, 'PRIMARY KEY' => 4, 'SPATIAL KEY' => 4,
+ 'FULLTEXT KEY' => 4, 'UNIQUE INDEX' => 4,
+ 'CHARACTER SET' => 4, 'IF NOT EXISTS' => 4, 'SPATIAL INDEX' => 4,
+ 'DATA DIRECTORY' => 4, 'FULLTEXT INDEX' => 4,
+ 'DEFAULT COLLATE' => 4, 'INDEX DIRECTORY' => 4,
+ 'DEFAULT CHARACTER SET' => 4,
+
+ );
+}
diff --git a/src/Fragments/FieldDefFragment.php b/src/Fragments/FieldDefFragment.php
index 6cbe58e..224fefa 100644
--- a/src/Fragments/FieldDefFragment.php
+++ b/src/Fragments/FieldDefFragment.php
@@ -124,7 +124,7 @@ class FieldDefFragment extends Fragment
}
continue;
} elseif ($state === 1) {
- if ($token->type === Token::TYPE_KEYWORD) {
+ if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) {
if ($token->value === 'CONSTRAINT') {
$state = 4;
} elseif (isset(Context::$KEY_TYPES[$token->value])) {
diff --git a/src/Fragments/FieldFragment.php b/src/Fragments/FieldFragment.php
index 0402b3f..ccee9d4 100644
--- a/src/Fragments/FieldFragment.php
+++ b/src/Fragments/FieldFragment.php
@@ -93,7 +93,7 @@ class FieldFragment extends Fragment
continue;
}
- if ($token->type === Token::TYPE_KEYWORD) {
+ if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) {
// Keywords may be found only between brackets.
if ($brackets === 0) {
if ($token->value === 'AS') {
diff --git a/src/Fragments/FromKeyword.php b/src/Fragments/FromKeyword.php
index dd1f263..fd8c797 100644
--- a/src/Fragments/FromKeyword.php
+++ b/src/Fragments/FromKeyword.php
@@ -42,7 +42,7 @@ class FromKeyword extends Fragment
}
// No keyword is expected.
- if ($token->type === Token::TYPE_KEYWORD) {
+ if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) {
break;
}
diff --git a/src/Fragments/IntoKeyword.php b/src/Fragments/IntoKeyword.php
index 888a55e..1476f44 100644
--- a/src/Fragments/IntoKeyword.php
+++ b/src/Fragments/IntoKeyword.php
@@ -69,7 +69,7 @@ class IntoKeyword extends Fragment
}
// No keyword is expected.
- if ($token->type === Token::TYPE_KEYWORD) {
+ if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) {
break;
}
diff --git a/src/Fragments/LimitKeyword.php b/src/Fragments/LimitKeyword.php
index 4b59137..717f554 100644
--- a/src/Fragments/LimitKeyword.php
+++ b/src/Fragments/LimitKeyword.php
@@ -55,8 +55,7 @@ class LimitKeyword extends Fragment
continue;
}
- // NOTE: `OFFSET` is not a keyword.
- if (($token->type === Token::TYPE_NONE) && ($token->value === 'OFFSET')) {
+ if ($token->value === 'OFFSET') {
if ($offset) {
$parser->error('An offset was expected.');
}
diff --git a/src/Fragments/OptionsFragment.php b/src/Fragments/OptionsFragment.php
index 1a39c6c..7b497fb 100644
--- a/src/Fragments/OptionsFragment.php
+++ b/src/Fragments/OptionsFragment.php
@@ -55,8 +55,8 @@ class OptionsFragment extends Fragment
continue;
}
- if (isset($options[$token->value])) {
- $lastOption = $options[$token->value];
+ if (isset($options[strtoupper($token->value)])) {
+ $lastOption = $options[strtoupper($token->value)];
$lastOptionId = is_array($lastOption) ? $lastOption[0] : $lastOption;
// Checking for option conflicts.
@@ -78,10 +78,9 @@ class OptionsFragment extends Fragment
// The only keywords that are expected are those which are
// options.
- if ($token->type === Token::TYPE_KEYWORD) {
+ if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) {
break;
}
-
}
if (is_array($lastOption)) {
diff --git a/src/Fragments/OrderKeyword.php b/src/Fragments/OrderKeyword.php
index 1bc6b8f..234d10d 100644
--- a/src/Fragments/OrderKeyword.php
+++ b/src/Fragments/OrderKeyword.php
@@ -55,7 +55,7 @@ class OrderKeyword extends Fragment
continue;
}
- if ($token->type === Token::TYPE_KEYWORD) {
+ if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) {
// Type of ordering. By default, it is `ASC`.
if (($token->value === 'ASC') || ($token->value === 'DESC')) {
$expr->type = $token->value;
diff --git a/src/Fragments/RenameKeyword.php b/src/Fragments/RenameKeyword.php
index dd8b2f9..2aa7df4 100644
--- a/src/Fragments/RenameKeyword.php
+++ b/src/Fragments/RenameKeyword.php
@@ -73,7 +73,7 @@ class RenameKeyword extends Fragment
continue;
}
- if ($token->type === Token::TYPE_KEYWORD) {
+ if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) {
if (($state === 1) && ($token->value === 'TO')) {
$state = 2;
continue;
diff --git a/src/Fragments/SelectKeyword.php b/src/Fragments/SelectKeyword.php
index 9b28812..32284df 100644
--- a/src/Fragments/SelectKeyword.php
+++ b/src/Fragments/SelectKeyword.php
@@ -41,7 +41,7 @@ class SelectKeyword extends Fragment
continue;
}
- if ($token->type === Token::TYPE_KEYWORD) {
+ if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) {
// No keyword is expected.
break;
}
diff --git a/src/Fragments/SetKeyword.php b/src/Fragments/SetKeyword.php
index 170b076..65cd234 100644
--- a/src/Fragments/SetKeyword.php
+++ b/src/Fragments/SetKeyword.php
@@ -70,7 +70,7 @@ class SetKeyword extends Fragment
}
// No keyword is expected.
- if ($token->type === Token::TYPE_KEYWORD) {
+ if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) {
break;
}
diff --git a/src/Fragments/ValuesKeyword.php b/src/Fragments/ValuesKeyword.php
index 8fce245..7897569 100644
--- a/src/Fragments/ValuesKeyword.php
+++ b/src/Fragments/ValuesKeyword.php
@@ -68,7 +68,7 @@ class ValuesKeyword extends Fragment
}
// No keyword is expected.
- if ($token->type === Token::TYPE_KEYWORD) {
+ if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) {
break;
}
diff --git a/src/Fragments/WhereKeyword.php b/src/Fragments/WhereKeyword.php
index 9c30513..f9466b3 100644
--- a/src/Fragments/WhereKeyword.php
+++ b/src/Fragments/WhereKeyword.php
@@ -80,7 +80,7 @@ class WhereKeyword extends Fragment
}
// No keyword is expected.
- if ($token->type === Token::TYPE_KEYWORD) {
+ if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) {
break;
}
diff --git a/src/Lexer.php b/src/Lexer.php
index aa1fcd0..e7cb64a 100644
--- a/src/Lexer.php
+++ b/src/Lexer.php
@@ -268,8 +268,8 @@ class Lexer
for ($j = 1; $j < Context::KEYWORD_MAX_LENGTH && $this->last < $this->len; ++$j, ++$this->last) {
$token .= $this->str[$this->last];
if (($this->last + 1 === $this->len) || (Context::isSeparator($this->str[$this->last + 1]))) {
- if (Context::isKeyword($token)) {
- $ret = new Token($token, Token::TYPE_KEYWORD);
+ if (($flags = Context::isKeyword($token))) {
+ $ret = new Token($token, Token::TYPE_KEYWORD, $flags);
$iEnd = $this->last;
// We don't break so we find longest keyword.
// For example, `OR` and `ORDER` have a common prefix `OR`.
diff --git a/src/Token.php b/src/Token.php
index 9b75c02..7563d77 100644
--- a/src/Token.php
+++ b/src/Token.php
@@ -109,6 +109,9 @@ class Token
const TYPE_DELIMITER = 9;
// Flags that describe the tokens in more detail.
+ const FLAG_KEYWORD_RESERVED = 1;
+ const FLAG_KEYWORD_UNRESERVED = 2;
+ const FLAG_KEYWORD_COMPOSED = 4;
// Numbers related flags.
const FLAG_NUMBER_HEX = 1;
@@ -200,7 +203,10 @@ class Token
{
switch ($this->type) {
case Token::TYPE_KEYWORD:
- return strtoupper($this->token);
+ if ($this->flags & Token::FLAG_KEYWORD_RESERVED) {
+ return strtoupper($this->token);
+ }
+ return $this->token;
case Token::TYPE_WHITESPACE:
return ' ';
case Token::TYPE_BOOL: