diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Context.php | 279 | ||||
-rw-r--r-- | src/Contexts/Context_MySQL500.php | 163 | ||||
-rw-r--r-- | src/Contexts/Context_MySQL510.php | 177 | ||||
-rw-r--r-- | src/Contexts/Context_MySQL550.php | 181 | ||||
-rw-r--r-- | src/Contexts/Context_MySQL560.php | 190 | ||||
-rw-r--r-- | src/Contexts/Context_MySQL570.php | 199 | ||||
-rw-r--r-- | src/Fragments/FieldDefFragment.php | 2 | ||||
-rw-r--r-- | src/Fragments/FieldFragment.php | 2 | ||||
-rw-r--r-- | src/Fragments/FromKeyword.php | 2 | ||||
-rw-r--r-- | src/Fragments/IntoKeyword.php | 2 | ||||
-rw-r--r-- | src/Fragments/LimitKeyword.php | 3 | ||||
-rw-r--r-- | src/Fragments/OptionsFragment.php | 7 | ||||
-rw-r--r-- | src/Fragments/OrderKeyword.php | 2 | ||||
-rw-r--r-- | src/Fragments/RenameKeyword.php | 2 | ||||
-rw-r--r-- | src/Fragments/SelectKeyword.php | 2 | ||||
-rw-r--r-- | src/Fragments/SetKeyword.php | 2 | ||||
-rw-r--r-- | src/Fragments/ValuesKeyword.php | 2 | ||||
-rw-r--r-- | src/Fragments/WhereKeyword.php | 2 | ||||
-rw-r--r-- | src/Lexer.php | 4 | ||||
-rw-r--r-- | src/Token.php | 8 |
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: |