//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     ANTLR Version: 3.3.1.7705
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

// $ANTLR 3.3.1.7705 MySQL51Parser.g3 2011-08-31 14:35:06

// The variable 'variable' is assigned but its value is never used.
#pragma warning disable 219
// Unreachable code detected.
#pragma warning disable 162


using System.Collections.Generic;
using Antlr.Runtime;

using Antlr.Runtime.Debug;
using IOException = System.IO.IOException;

using Antlr.Runtime.Tree;
using RewriteRuleITokenStream = Antlr.Runtime.Tree.RewriteRuleTokenStream;

namespace MySqlParser
{
[System.CodeDom.Compiler.GeneratedCode("ANTLR", "3.3.1.7705")]
[System.CLSCompliant(false)]
public partial class MySQL51Parser : Antlr.Runtime.Debug.DebugParser
{
	internal static readonly string[] tokenNames = new string[] {
		"<invalid>", "<EOR>", "<DOWN>", "<UP>", "ACCESSIBLE", "ACTION", "ADD", "ADDDATE", "AFTER", "AGAINST", "AGGREGATE", "ALGORITHM", "ALL", "ALTER", "ANALYZE", "AND", "ANY", "AS", "ASC", "ASCII", "ASENSITIVE", "ASSIGN", "AT", "AUTHORS", "AUTOEXTEND_SIZE", "AUTO_INCREMENT", "AVG", "AVG_ROW_LENGTH", "BACKUP", "BEFORE", "BEGIN", "BETWEEN", "BIGINT", "BINARY", "BINARY_VALUE", "BINLOG", "BIT", "BITWISE_AND", "BITWISE_INVERSION", "BITWISE_OR", "BITWISE_XOR", "BIT_AND", "BIT_OR", "BIT_XOR", "BLOB", "BLOCK", "BOOL", "BOOLEAN", "BOTH", "BTREE", "BY", "BYTE", "CACHE", "CALL", "CASCADE", "CASCADED", "CASE", "CAST", "CHAIN", "CHANGE", "CHANGED", "CHAR", "CHARACTER", "CHARSET", "CHECK", "CHECKSUM", "CIPHER", "CLIENT", "CLOSE", "COALESCE", "CODE", "COLLATE", "COLLATION", "COLUMN", "COLUMNS", "COMMA", "COMMENT", "COMMENT_RULE", "COMMIT", "COMMITTED", "COMPACT", "COMPLETION", "COMPRESSED", "CONCURRENT", "CONDITION", "CONNECTION", "CONSISTENT", "CONSTRAINT", "CONTAINS", "CONTEXT", "CONTINUE", "CONTRIBUTORS", "CONVERT", "COUNT", "CPU", "CREATE", "CROSS", "CUBE", "CURDATE", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURRENT_USER", "CURSOR", "CURTIME", "C_COMMENT", "DASHDASH_COMMENT", "DATA", "DATABASE", "DATABASES", "DATAFILE", "DATE", "DATETIME", "DATE_ADD", "DATE_ADD_INTERVAL", "DATE_SUB", "DATE_SUB_INTERVAL", "DAY", "DAY_HOUR", "DAY_MICROSECOND", "DAY_MINUTE", "DAY_SECOND", "DEALLOCATE", "DEC", "DECIMAL", "DECLARE", "DEFAULT", "DEFINER", "DELAYED", "DELAY_KEY_WRITE", "DELETE", "DESC", "DESCRIBE", "DES_KEY_FILE", "DETERMINISTIC", "DIGIT", "DIRECTORY", "DISABLE", "DISCARD", "DISK", "DISTINCT", "DISTINCTROW", "DIV", "DIVISION", "DO", "DOT", "DOUBLE", "DROP", "DUAL", "DUMPFILE", "DUPLICATE", "DYNAMIC", "EACH", "ELSE", "ELSEIF", "ENABLE", "ENCLOSED", "END", "ENDS", "ENGINE", "ENGINES", "ENUM", "EQUALS", "ERRORS", "ESCAPE", "ESCAPED", "ESCAPE_SEQUENCE", "EVENT", "EVENTS", "EVERY", "EXECUTE", "EXISTS", "EXIT", "EXPANSION", "EXPLAIN", "EXTENDED", "EXTENT_SIZE", "EXTRACT", "FALSE", "FAST", "FAULTS", "FETCH", "FIELDS", "FILE", "FIRST", "FIXED", "FLOAT", "FLOAT4", "FLOAT8", "FLUSH", "FOR", "FORCE", "FOREIGN", "FOUND", "FRAC_SECOND", "FROM", "FULL", "FULLTEXT", "FUNCTION", "GEOMETRY", "GEOMETRYCOLLECTION", "GET_FORMAT", "GLOBAL", "GLOBAL_VARIABLE", "GOTO", "GRANT", "GRANTS", "GREATER_THAN", "GREATER_THAN_EQUAL", "GROUP", "GROUP_CONCAT", "HANDLER", "HASH", "HAVING", "HELP", "HEXA_VALUE", "HIGH_PRIORITY", "HOST", "HOSTS", "HOUR", "HOUR_MICROSECOND", "HOUR_MINUTE", "HOUR_SECOND", "ID", "IDENTIFIED", "IF", "IGNORE", "IMPORT", "IN", "INDEX", "INDEXES", "INFILE", "INITIAL_SIZE", "INNER", "INNOBASE", "INNODB", "INOUT", "INSENSITIVE", "INSERT", "INSERT_METHOD", "INSTALL", "INT", "INT1", "INT2", "INT3", "INT4", "INT8", "INTEGER", "INTERVAL", "INTO", "INVOKER", "IO", "IPC", "IS", "ISOLATION", "ISSUER", "ITERATE", "JOIN", "KEY", "KEYS", "KEY_BLOCK_SIZE", "KILL", "LABEL", "LANGUAGE", "LAST", "LCURLY", "LEADING", "LEAVE", "LEAVES", "LEFT", "LEFT_SHIFT", "LESS", "LESS_THAN", "LESS_THAN_EQUAL", "LEVEL", "LIKE", "LIMIT", "LINEAR", "LINES", "LINESTRING", "LIST", "LOAD", "LOCAL", "LOCALTIME", "LOCALTIMESTAMP", "LOCK", "LOCKS", "LOGFILE", "LOGICAL_AND", "LOGICAL_OR", "LOGS", "LONG", "LONGBLOB", "LONGTEXT", "LOOP", "LOW_PRIORITY", "LPAREN", "MASTER", "MASTER_CONNECT_RETRY", "MASTER_HOST", "MASTER_LOG_FILE", "MASTER_LOG_POS", "MASTER_PASSWORD", "MASTER_PORT", "MASTER_SERVER_ID", "MASTER_SSL", "MASTER_SSL_CA", "MASTER_SSL_CAPATH", "MASTER_SSL_CERT", "MASTER_SSL_CIPHER", "MASTER_SSL_KEY", "MASTER_SSL_VERIFY_SERVER_CERT", "MASTER_USER", "MATCH", "MAX", "MAX_CONNECTIONS_PER_HOUR", "MAX_QUERIES_PER_HOUR", "MAX_ROWS", "MAX_SIZE", "MAX_UPDATES_PER_HOUR", "MAX_USER_CONNECTIONS", "MAX_VALUE", "MEDIUM", "MEDIUMBLOB", "MEDIUMINT", "MEDIUMTEXT", "MEMORY", "MERGE", "MICROSECOND", "MID", "MIDDLEINT", "MIGRATE", "MIN", "MINUS", "MINUTE", "MINUTE_MICROSECOND", "MINUTE_SECOND", "MIN_ROWS", "MOD", "MODE", "MODIFIES", "MODIFY", "MODULO", "MONTH", "MULT", "MULTILINESTRING", "MULTIPOINT", "MULTIPOLYGON", "MUTEX", "NAME", "NAMES", "NATIONAL", "NATURAL", "NCHAR", "NDBCLUSTER", "NEW", "NEXT", "NO", "NODEGROUP", "NONE", "NOT", "NOT_EQUAL", "NOT_OP", "NOW", "NO_WAIT", "NO_WRITE_TO_BINLOG", "NULL", "NULL_SAFE_NOT_EQUAL", "NUMBER", "NUMERIC", "NVARCHAR", "OFFSET", "OLD_PASSWORD", "ON", "ONE", "ONE_SHOT", "OPEN", "OPTIMIZE", "OPTION", "OPTIONALLY", "OPTIONS", "OR", "ORDER", "OUT", "OUTER", "OUTFILE", "OWNER", "PACK_KEYS", "PAGE", "PARSER", "PARTIAL", "PARTITION", "PARTITIONING", "PARTITIONS", "PASSWORD", "PHASE", "PLUGIN", "PLUGINS", "PLUS", "POINT", "POLYGON", "PORT", "POSITION", "POUND_COMMENT", "PRECISION", "PREPARE", "PRESERVE", "PREV", "PRIMARY", "PRIVILEGES", "PROCEDURE", "PROCESS", "PROCESSLIST", "PROFILE", "PROFILES", "PURGE", "QUARTER", "QUERY", "QUICK", "RANGE", "RCURLY", "READ", "READS", "READ_ONLY", "READ_WRITE", "REAL", "REAL_ID", "REBUILD", "RECOVER", "REDOFILE", "REDO_BUFFER_SIZE", "REDUNDANT", "REFERENCES", "REGEXP", "RELAY_LOG_FILE", "RELAY_LOG_POS", "RELAY_THREAD", "RELEASE", "RELOAD", "REMOVE", "RENAME", "REORGANIZE", "REPAIR", "REPEAT", "REPEATABLE", "REPLACE", "REPLICATION", "REQUIRE", "RESET", "RESOURCES", "RESTORE", "RESTRICT", "RESUME", "RETURN", "RETURNS", "REVOKE", "RIGHT", "RIGHT_SHIFT", "RLIKE", "ROLLBACK", "ROLLUP", "ROUTINE", "ROW", "ROWS", "ROW_FORMAT", "RPAREN", "RTREE", "SAVEPOINT", "SCHEDULE", "SCHEDULER", "SCHEMA", "SCHEMAS", "SECOND", "SECOND_MICROSECOND", "SECURITY", "SELECT", "SEMI", "SENSITIVE", "SEPARATOR", "SERIAL", "SERIALIZABLE", "SERVER", "SESSION", "SESSION_USER", "SESSION_VARIABLE", "SET", "SHARE", "SHOW", "SHUTDOWN", "SIGNED", "SIMPLE", "SLAVE", "SMALLINT", "SNAPSHOT", "SOCKET", "SOME", "SONAME", "SOUNDS", "SOURCE", "SPATIAL", "SPECIFIC", "SQL", "SQLEXCEPTION", "SQLSTATE", "SQLWARNING", "SQL_BIG_RESULT", "SQL_BUFFER_RESULT", "SQL_CACHE", "SQL_CALC_FOUND_ROWS", "SQL_NO_CACHE", "SQL_SMALL_RESULT", "SQL_THREAD", "SSL", "START", "STARTING", "STARTS", "STATUS", "STD", "STDDEV", "STDDEV_POP", "STDDEV_SAMP", "STOP", "STORAGE", "STRAIGHT_JOIN", "STRING", "STRING_KEYWORD", "SUBDATE", "SUBJECT", "SUBPARTITION", "SUBPARTITIONS", "SUBSTR", "SUBSTRING", "SUM", "SUPER", "SUSPEND", "SWAPS", "SWITCHES", "SYSDATE", "SYSTEM_USER", "TABLE", "TABLES", "TABLESPACE", "TEMPORARY", "TEMPTABLE", "TERMINATED", "TEXT", "THAN", "THEN", "TIME", "TIMESTAMP", "TIMESTAMP_ADD", "TIMESTAMP_DIFF", "TINYBLOB", "TINYINT", "TINYTEXT", "TO", "TRAILING", "TRANSACTION", "TRANSACTIONAL", "TRIGGER", "TRIGGERS", "TRIM", "TRUE", "TRUNCATE", "TYPE", "TYPES", "UDF_RETURNS", "UNCOMMITTED", "UNDEFINED", "UNDO", "UNDOFILE", "UNDO_BUFFER_SIZE", "UNICODE", "UNINSTALL", "UNION", "UNIQUE", "UNKNOWN", "UNLOCK", "UNSIGNED", "UNTIL", "UPDATE", "UPGRADE", "USAGE", "USE", "USER", "USER_HOST", "USER_HOST_or_ID_or_STRING", "USE_FRM", "USING", "UTC_DATE", "UTC_TIME", "UTC_TIMESTAMP", "VALUE", "VALUES", "VALUE_PLACEHOLDER", "VARBINARY", "VARCHAR", "VARCHARACTER", "VARIABLES", "VARIANCE", "VARYING", "VAR_POP", "VAR_SAMP", "VIEW", "WAIT", "WARNINGS", "WEEK", "WHEN", "WHERE", "WHILE", "WITH", "WORK", "WRAPPER", "WRITE", "WS", "X509", "XA", "XOR", "YEAR", "YEAR_MONTH", "ZEROFILL", "ALIAS", "COMMA_JOIN", "CONCAT", "COUNT_STAR", "CREATE_TABLE", "DEFINITION", "DEFINITIONS", "DIRECTION", "FIELD", "FUNC", "INDEX_HINTS", "INDEX_SYM", "INSERT_VALUES", "NOT_NULL", "ROLLBACK_POINT", "SELECT_EXPR", "SUBSELECT", "UNARY_MINUS", "UNARY_PLUS"
	};
	public const int EOF=-1;
	public const int ACCESSIBLE=4;
	public const int ACTION=5;
	public const int ADD=6;
	public const int ADDDATE=7;
	public const int AFTER=8;
	public const int AGAINST=9;
	public const int AGGREGATE=10;
	public const int ALGORITHM=11;
	public const int ALL=12;
	public const int ALTER=13;
	public const int ANALYZE=14;
	public const int AND=15;
	public const int ANY=16;
	public const int AS=17;
	public const int ASC=18;
	public const int ASCII=19;
	public const int ASENSITIVE=20;
	public const int ASSIGN=21;
	public const int AT=22;
	public const int AUTHORS=23;
	public const int AUTOEXTEND_SIZE=24;
	public const int AUTO_INCREMENT=25;
	public const int AVG=26;
	public const int AVG_ROW_LENGTH=27;
	public const int BACKUP=28;
	public const int BEFORE=29;
	public const int BEGIN=30;
	public const int BETWEEN=31;
	public const int BIGINT=32;
	public const int BINARY=33;
	public const int BINARY_VALUE=34;
	public const int BINLOG=35;
	public const int BIT=36;
	public const int BITWISE_AND=37;
	public const int BITWISE_INVERSION=38;
	public const int BITWISE_OR=39;
	public const int BITWISE_XOR=40;
	public const int BIT_AND=41;
	public const int BIT_OR=42;
	public const int BIT_XOR=43;
	public const int BLOB=44;
	public const int BLOCK=45;
	public const int BOOL=46;
	public const int BOOLEAN=47;
	public const int BOTH=48;
	public const int BTREE=49;
	public const int BY=50;
	public const int BYTE=51;
	public const int CACHE=52;
	public const int CALL=53;
	public const int CASCADE=54;
	public const int CASCADED=55;
	public const int CASE=56;
	public const int CAST=57;
	public const int CHAIN=58;
	public const int CHANGE=59;
	public const int CHANGED=60;
	public const int CHAR=61;
	public const int CHARACTER=62;
	public const int CHARSET=63;
	public const int CHECK=64;
	public const int CHECKSUM=65;
	public const int CIPHER=66;
	public const int CLIENT=67;
	public const int CLOSE=68;
	public const int COALESCE=69;
	public const int CODE=70;
	public const int COLLATE=71;
	public const int COLLATION=72;
	public const int COLUMN=73;
	public const int COLUMNS=74;
	public const int COMMA=75;
	public const int COMMENT=76;
	public const int COMMENT_RULE=77;
	public const int COMMIT=78;
	public const int COMMITTED=79;
	public const int COMPACT=80;
	public const int COMPLETION=81;
	public const int COMPRESSED=82;
	public const int CONCURRENT=83;
	public const int CONDITION=84;
	public const int CONNECTION=85;
	public const int CONSISTENT=86;
	public const int CONSTRAINT=87;
	public const int CONTAINS=88;
	public const int CONTEXT=89;
	public const int CONTINUE=90;
	public const int CONTRIBUTORS=91;
	public const int CONVERT=92;
	public const int COUNT=93;
	public const int CPU=94;
	public const int CREATE=95;
	public const int CROSS=96;
	public const int CUBE=97;
	public const int CURDATE=98;
	public const int CURRENT_DATE=99;
	public const int CURRENT_TIME=100;
	public const int CURRENT_TIMESTAMP=101;
	public const int CURRENT_USER=102;
	public const int CURSOR=103;
	public const int CURTIME=104;
	public const int C_COMMENT=105;
	public const int DASHDASH_COMMENT=106;
	public const int DATA=107;
	public const int DATABASE=108;
	public const int DATABASES=109;
	public const int DATAFILE=110;
	public const int DATE=111;
	public const int DATETIME=112;
	public const int DATE_ADD=113;
	public const int DATE_ADD_INTERVAL=114;
	public const int DATE_SUB=115;
	public const int DATE_SUB_INTERVAL=116;
	public const int DAY=117;
	public const int DAY_HOUR=118;
	public const int DAY_MICROSECOND=119;
	public const int DAY_MINUTE=120;
	public const int DAY_SECOND=121;
	public const int DEALLOCATE=122;
	public const int DEC=123;
	public const int DECIMAL=124;
	public const int DECLARE=125;
	public const int DEFAULT=126;
	public const int DEFINER=127;
	public const int DELAYED=128;
	public const int DELAY_KEY_WRITE=129;
	public const int DELETE=130;
	public const int DESC=131;
	public const int DESCRIBE=132;
	public const int DES_KEY_FILE=133;
	public const int DETERMINISTIC=134;
	public const int DIGIT=135;
	public const int DIRECTORY=136;
	public const int DISABLE=137;
	public const int DISCARD=138;
	public const int DISK=139;
	public const int DISTINCT=140;
	public const int DISTINCTROW=141;
	public const int DIV=142;
	public const int DIVISION=143;
	public const int DO=144;
	public const int DOT=145;
	public const int DOUBLE=146;
	public const int DROP=147;
	public const int DUAL=148;
	public const int DUMPFILE=149;
	public const int DUPLICATE=150;
	public const int DYNAMIC=151;
	public const int EACH=152;
	public const int ELSE=153;
	public const int ELSEIF=154;
	public const int ENABLE=155;
	public const int ENCLOSED=156;
	public const int END=157;
	public const int ENDS=158;
	public const int ENGINE=159;
	public const int ENGINES=160;
	public const int ENUM=161;
	public const int EQUALS=162;
	public const int ERRORS=163;
	public const int ESCAPE=164;
	public const int ESCAPED=165;
	public const int ESCAPE_SEQUENCE=166;
	public const int EVENT=167;
	public const int EVENTS=168;
	public const int EVERY=169;
	public const int EXECUTE=170;
	public const int EXISTS=171;
	public const int EXIT=172;
	public const int EXPANSION=173;
	public const int EXPLAIN=174;
	public const int EXTENDED=175;
	public const int EXTENT_SIZE=176;
	public const int EXTRACT=177;
	public const int FALSE=178;
	public const int FAST=179;
	public const int FAULTS=180;
	public const int FETCH=181;
	public const int FIELDS=182;
	public const int FILE=183;
	public const int FIRST=184;
	public const int FIXED=185;
	public const int FLOAT=186;
	public const int FLOAT4=187;
	public const int FLOAT8=188;
	public const int FLUSH=189;
	public const int FOR=190;
	public const int FORCE=191;
	public const int FOREIGN=192;
	public const int FOUND=193;
	public const int FRAC_SECOND=194;
	public const int FROM=195;
	public const int FULL=196;
	public const int FULLTEXT=197;
	public const int FUNCTION=198;
	public const int GEOMETRY=199;
	public const int GEOMETRYCOLLECTION=200;
	public const int GET_FORMAT=201;
	public const int GLOBAL=202;
	public const int GLOBAL_VARIABLE=203;
	public const int GOTO=204;
	public const int GRANT=205;
	public const int GRANTS=206;
	public const int GREATER_THAN=207;
	public const int GREATER_THAN_EQUAL=208;
	public const int GROUP=209;
	public const int GROUP_CONCAT=210;
	public const int HANDLER=211;
	public const int HASH=212;
	public const int HAVING=213;
	public const int HELP=214;
	public const int HEXA_VALUE=215;
	public const int HIGH_PRIORITY=216;
	public const int HOST=217;
	public const int HOSTS=218;
	public const int HOUR=219;
	public const int HOUR_MICROSECOND=220;
	public const int HOUR_MINUTE=221;
	public const int HOUR_SECOND=222;
	public const int ID=223;
	public const int IDENTIFIED=224;
	public const int IF=225;
	public const int IGNORE=226;
	public const int IMPORT=227;
	public const int IN=228;
	public const int INDEX=229;
	public const int INDEXES=230;
	public const int INFILE=231;
	public const int INITIAL_SIZE=232;
	public const int INNER=233;
	public const int INNOBASE=234;
	public const int INNODB=235;
	public const int INOUT=236;
	public const int INSENSITIVE=237;
	public const int INSERT=238;
	public const int INSERT_METHOD=239;
	public const int INSTALL=240;
	public const int INT=241;
	public const int INT1=242;
	public const int INT2=243;
	public const int INT3=244;
	public const int INT4=245;
	public const int INT8=246;
	public const int INTEGER=247;
	public const int INTERVAL=248;
	public const int INTO=249;
	public const int INVOKER=250;
	public const int IO=251;
	public const int IPC=252;
	public const int IS=253;
	public const int ISOLATION=254;
	public const int ISSUER=255;
	public const int ITERATE=256;
	public const int JOIN=257;
	public const int KEY=258;
	public const int KEYS=259;
	public const int KEY_BLOCK_SIZE=260;
	public const int KILL=261;
	public const int LABEL=262;
	public const int LANGUAGE=263;
	public const int LAST=264;
	public const int LCURLY=265;
	public const int LEADING=266;
	public const int LEAVE=267;
	public const int LEAVES=268;
	public const int LEFT=269;
	public const int LEFT_SHIFT=270;
	public const int LESS=271;
	public const int LESS_THAN=272;
	public const int LESS_THAN_EQUAL=273;
	public const int LEVEL=274;
	public const int LIKE=275;
	public const int LIMIT=276;
	public const int LINEAR=277;
	public const int LINES=278;
	public const int LINESTRING=279;
	public const int LIST=280;
	public const int LOAD=281;
	public const int LOCAL=282;
	public const int LOCALTIME=283;
	public const int LOCALTIMESTAMP=284;
	public const int LOCK=285;
	public const int LOCKS=286;
	public const int LOGFILE=287;
	public const int LOGICAL_AND=288;
	public const int LOGICAL_OR=289;
	public const int LOGS=290;
	public const int LONG=291;
	public const int LONGBLOB=292;
	public const int LONGTEXT=293;
	public const int LOOP=294;
	public const int LOW_PRIORITY=295;
	public const int LPAREN=296;
	public const int MASTER=297;
	public const int MASTER_CONNECT_RETRY=298;
	public const int MASTER_HOST=299;
	public const int MASTER_LOG_FILE=300;
	public const int MASTER_LOG_POS=301;
	public const int MASTER_PASSWORD=302;
	public const int MASTER_PORT=303;
	public const int MASTER_SERVER_ID=304;
	public const int MASTER_SSL=305;
	public const int MASTER_SSL_CA=306;
	public const int MASTER_SSL_CAPATH=307;
	public const int MASTER_SSL_CERT=308;
	public const int MASTER_SSL_CIPHER=309;
	public const int MASTER_SSL_KEY=310;
	public const int MASTER_SSL_VERIFY_SERVER_CERT=311;
	public const int MASTER_USER=312;
	public const int MATCH=313;
	public const int MAX=314;
	public const int MAX_CONNECTIONS_PER_HOUR=315;
	public const int MAX_QUERIES_PER_HOUR=316;
	public const int MAX_ROWS=317;
	public const int MAX_SIZE=318;
	public const int MAX_UPDATES_PER_HOUR=319;
	public const int MAX_USER_CONNECTIONS=320;
	public const int MAX_VALUE=321;
	public const int MEDIUM=322;
	public const int MEDIUMBLOB=323;
	public const int MEDIUMINT=324;
	public const int MEDIUMTEXT=325;
	public const int MEMORY=326;
	public const int MERGE=327;
	public const int MICROSECOND=328;
	public const int MID=329;
	public const int MIDDLEINT=330;
	public const int MIGRATE=331;
	public const int MIN=332;
	public const int MINUS=333;
	public const int MINUTE=334;
	public const int MINUTE_MICROSECOND=335;
	public const int MINUTE_SECOND=336;
	public const int MIN_ROWS=337;
	public const int MOD=338;
	public const int MODE=339;
	public const int MODIFIES=340;
	public const int MODIFY=341;
	public const int MODULO=342;
	public const int MONTH=343;
	public const int MULT=344;
	public const int MULTILINESTRING=345;
	public const int MULTIPOINT=346;
	public const int MULTIPOLYGON=347;
	public const int MUTEX=348;
	public const int NAME=349;
	public const int NAMES=350;
	public const int NATIONAL=351;
	public const int NATURAL=352;
	public const int NCHAR=353;
	public const int NDBCLUSTER=354;
	public const int NEW=355;
	public const int NEXT=356;
	public const int NO=357;
	public const int NODEGROUP=358;
	public const int NONE=359;
	public const int NOT=360;
	public const int NOT_EQUAL=361;
	public const int NOT_OP=362;
	public const int NOW=363;
	public const int NO_WAIT=364;
	public const int NO_WRITE_TO_BINLOG=365;
	public const int NULL=366;
	public const int NULL_SAFE_NOT_EQUAL=367;
	public const int NUMBER=368;
	public const int NUMERIC=369;
	public const int NVARCHAR=370;
	public const int OFFSET=371;
	public const int OLD_PASSWORD=372;
	public const int ON=373;
	public const int ONE=374;
	public const int ONE_SHOT=375;
	public const int OPEN=376;
	public const int OPTIMIZE=377;
	public const int OPTION=378;
	public const int OPTIONALLY=379;
	public const int OPTIONS=380;
	public const int OR=381;
	public const int ORDER=382;
	public const int OUT=383;
	public const int OUTER=384;
	public const int OUTFILE=385;
	public const int OWNER=386;
	public const int PACK_KEYS=387;
	public const int PAGE=388;
	public const int PARSER=389;
	public const int PARTIAL=390;
	public const int PARTITION=391;
	public const int PARTITIONING=392;
	public const int PARTITIONS=393;
	public const int PASSWORD=394;
	public const int PHASE=395;
	public const int PLUGIN=396;
	public const int PLUGINS=397;
	public const int PLUS=398;
	public const int POINT=399;
	public const int POLYGON=400;
	public const int PORT=401;
	public const int POSITION=402;
	public const int POUND_COMMENT=403;
	public const int PRECISION=404;
	public const int PREPARE=405;
	public const int PRESERVE=406;
	public const int PREV=407;
	public const int PRIMARY=408;
	public const int PRIVILEGES=409;
	public const int PROCEDURE=410;
	public const int PROCESS=411;
	public const int PROCESSLIST=412;
	public const int PROFILE=413;
	public const int PROFILES=414;
	public const int PURGE=415;
	public const int QUARTER=416;
	public const int QUERY=417;
	public const int QUICK=418;
	public const int RANGE=419;
	public const int RCURLY=420;
	public const int READ=421;
	public const int READS=422;
	public const int READ_ONLY=423;
	public const int READ_WRITE=424;
	public const int REAL=425;
	public const int REAL_ID=426;
	public const int REBUILD=427;
	public const int RECOVER=428;
	public const int REDOFILE=429;
	public const int REDO_BUFFER_SIZE=430;
	public const int REDUNDANT=431;
	public const int REFERENCES=432;
	public const int REGEXP=433;
	public const int RELAY_LOG_FILE=434;
	public const int RELAY_LOG_POS=435;
	public const int RELAY_THREAD=436;
	public const int RELEASE=437;
	public const int RELOAD=438;
	public const int REMOVE=439;
	public const int RENAME=440;
	public const int REORGANIZE=441;
	public const int REPAIR=442;
	public const int REPEAT=443;
	public const int REPEATABLE=444;
	public const int REPLACE=445;
	public const int REPLICATION=446;
	public const int REQUIRE=447;
	public const int RESET=448;
	public const int RESOURCES=449;
	public const int RESTORE=450;
	public const int RESTRICT=451;
	public const int RESUME=452;
	public const int RETURN=453;
	public const int RETURNS=454;
	public const int REVOKE=455;
	public const int RIGHT=456;
	public const int RIGHT_SHIFT=457;
	public const int RLIKE=458;
	public const int ROLLBACK=459;
	public const int ROLLUP=460;
	public const int ROUTINE=461;
	public const int ROW=462;
	public const int ROWS=463;
	public const int ROW_FORMAT=464;
	public const int RPAREN=465;
	public const int RTREE=466;
	public const int SAVEPOINT=467;
	public const int SCHEDULE=468;
	public const int SCHEDULER=469;
	public const int SCHEMA=470;
	public const int SCHEMAS=471;
	public const int SECOND=472;
	public const int SECOND_MICROSECOND=473;
	public const int SECURITY=474;
	public const int SELECT=475;
	public const int SEMI=476;
	public const int SENSITIVE=477;
	public const int SEPARATOR=478;
	public const int SERIAL=479;
	public const int SERIALIZABLE=480;
	public const int SERVER=481;
	public const int SESSION=482;
	public const int SESSION_USER=483;
	public const int SESSION_VARIABLE=484;
	public const int SET=485;
	public const int SHARE=486;
	public const int SHOW=487;
	public const int SHUTDOWN=488;
	public const int SIGNED=489;
	public const int SIMPLE=490;
	public const int SLAVE=491;
	public const int SMALLINT=492;
	public const int SNAPSHOT=493;
	public const int SOCKET=494;
	public const int SOME=495;
	public const int SONAME=496;
	public const int SOUNDS=497;
	public const int SOURCE=498;
	public const int SPATIAL=499;
	public const int SPECIFIC=500;
	public const int SQL=501;
	public const int SQLEXCEPTION=502;
	public const int SQLSTATE=503;
	public const int SQLWARNING=504;
	public const int SQL_BIG_RESULT=505;
	public const int SQL_BUFFER_RESULT=506;
	public const int SQL_CACHE=507;
	public const int SQL_CALC_FOUND_ROWS=508;
	public const int SQL_NO_CACHE=509;
	public const int SQL_SMALL_RESULT=510;
	public const int SQL_THREAD=511;
	public const int SSL=512;
	public const int START=513;
	public const int STARTING=514;
	public const int STARTS=515;
	public const int STATUS=516;
	public const int STD=517;
	public const int STDDEV=518;
	public const int STDDEV_POP=519;
	public const int STDDEV_SAMP=520;
	public const int STOP=521;
	public const int STORAGE=522;
	public const int STRAIGHT_JOIN=523;
	public const int STRING=524;
	public const int STRING_KEYWORD=525;
	public const int SUBDATE=526;
	public const int SUBJECT=527;
	public const int SUBPARTITION=528;
	public const int SUBPARTITIONS=529;
	public const int SUBSTR=530;
	public const int SUBSTRING=531;
	public const int SUM=532;
	public const int SUPER=533;
	public const int SUSPEND=534;
	public const int SWAPS=535;
	public const int SWITCHES=536;
	public const int SYSDATE=537;
	public const int SYSTEM_USER=538;
	public const int TABLE=539;
	public const int TABLES=540;
	public const int TABLESPACE=541;
	public const int TEMPORARY=542;
	public const int TEMPTABLE=543;
	public const int TERMINATED=544;
	public const int TEXT=545;
	public const int THAN=546;
	public const int THEN=547;
	public const int TIME=548;
	public const int TIMESTAMP=549;
	public const int TIMESTAMP_ADD=550;
	public const int TIMESTAMP_DIFF=551;
	public const int TINYBLOB=552;
	public const int TINYINT=553;
	public const int TINYTEXT=554;
	public const int TO=555;
	public const int TRAILING=556;
	public const int TRANSACTION=557;
	public const int TRANSACTIONAL=558;
	public const int TRIGGER=559;
	public const int TRIGGERS=560;
	public const int TRIM=561;
	public const int TRUE=562;
	public const int TRUNCATE=563;
	public const int TYPE=564;
	public const int TYPES=565;
	public const int UDF_RETURNS=566;
	public const int UNCOMMITTED=567;
	public const int UNDEFINED=568;
	public const int UNDO=569;
	public const int UNDOFILE=570;
	public const int UNDO_BUFFER_SIZE=571;
	public const int UNICODE=572;
	public const int UNINSTALL=573;
	public const int UNION=574;
	public const int UNIQUE=575;
	public const int UNKNOWN=576;
	public const int UNLOCK=577;
	public const int UNSIGNED=578;
	public const int UNTIL=579;
	public const int UPDATE=580;
	public const int UPGRADE=581;
	public const int USAGE=582;
	public const int USE=583;
	public const int USER=584;
	public const int USER_HOST=585;
	public const int USER_HOST_or_ID_or_STRING=586;
	public const int USE_FRM=587;
	public const int USING=588;
	public const int UTC_DATE=589;
	public const int UTC_TIME=590;
	public const int UTC_TIMESTAMP=591;
	public const int VALUE=592;
	public const int VALUES=593;
	public const int VALUE_PLACEHOLDER=594;
	public const int VARBINARY=595;
	public const int VARCHAR=596;
	public const int VARCHARACTER=597;
	public const int VARIABLES=598;
	public const int VARIANCE=599;
	public const int VARYING=600;
	public const int VAR_POP=601;
	public const int VAR_SAMP=602;
	public const int VIEW=603;
	public const int WAIT=604;
	public const int WARNINGS=605;
	public const int WEEK=606;
	public const int WHEN=607;
	public const int WHERE=608;
	public const int WHILE=609;
	public const int WITH=610;
	public const int WORK=611;
	public const int WRAPPER=612;
	public const int WRITE=613;
	public const int WS=614;
	public const int X509=615;
	public const int XA=616;
	public const int XOR=617;
	public const int YEAR=618;
	public const int YEAR_MONTH=619;
	public const int ZEROFILL=620;
	public const int ALIAS=621;
	public const int COMMA_JOIN=622;
	public const int CONCAT=623;
	public const int COUNT_STAR=624;
	public const int CREATE_TABLE=625;
	public const int DEFINITION=626;
	public const int DEFINITIONS=627;
	public const int DIRECTION=628;
	public const int FIELD=629;
	public const int FUNC=630;
	public const int INDEX_HINTS=631;
	public const int INDEX_SYM=632;
	public const int INSERT_VALUES=633;
	public const int NOT_NULL=634;
	public const int ROLLBACK_POINT=635;
	public const int SELECT_EXPR=636;
	public const int SUBSELECT=637;
	public const int UNARY_MINUS=638;
	public const int UNARY_PLUS=639;

	// delegates
	// delegators

	public static readonly string[] ruleNames =
		new string[]
		{
			"invalidRule", "additiveExpr", "assignAndExpr", "assignNotExpr", "assignOrExpr", 
		"assignXORExpr", "binaryCollateExpr", "bitwiseAndExpr", "bitwiseOrExpr", 
		"bitwiseXORExpr", "cast_data_type", "charset", "collate", "column_assignment", 
		"column_definition", "column_name_list", "create_definition", "create_table", 
		"data_type", "delete", "do_stmt", "equalityExpr", "equalityOperator", 
		"explain_stmt", "expr", "exprList", "field_name", "functionCall", "functionCall_conflicts", 
		"functionCall_reserved", "group_by", "ident", "ident_sp_label", "index_hint", 
		"index_hint_list", "index_hint_rest", "infile_options_helper", "insert", 
		"insert_columns", "insert_default_or_expression", "intervalExpr", "isOperator", 
		"join_condition_both", "join_condition_on", "like_or_where", "limit", 
		"literal", "lockTables", "lock_table_ref", "multOperator", "multiplicativeExpr", 
		"number_or_placeholder", "on_dup_key", "optScopeModifier", "order_by", 
		"order_group_by_elements", "parenExpr", "parenExprList", "parenOptExprList", 
		"primary", "reference_definition", "savepoint", "select", "select_expr", 
		"select_inner", "select_options", "select_paren", "set_columns", "shiftExpr", 
		"show_profile_types", "show_stmt", "simple_table_ref_alias", "simple_table_ref_no_alias", 
		"statement", "statement_list", "string_or_placeholder", "subselect", "subselect_in_expr_rhs", 
		"synpred1_MySQL51Parser", "synpred2_MySQL51Parser", "synpred3_MySQL51Parser", 
		"synpred4_MySQL51Parser", "synpred5_MySQL51Parser", "synpred6_MySQL51Parser", 
		"synpred7_MySQL51Parser", "synpred8_MySQL51Parser", "table_alias", "table_factor", 
		"table_ref", "table_references", "text_string", "timeUnit", "timestampUnit", 
		"transaction", "unaryExpr", "unaryNotExpr", "update", "variable", "where_condition"
		};

		int ruleLevel = 0;
		public virtual int RuleLevel { get { return ruleLevel; } }
		public virtual void IncRuleLevel() { ruleLevel++; }
		public virtual void DecRuleLevel() { ruleLevel--; }
		public MySQL51Parser( ITokenStream input )
			: this( input, DebugEventSocketProxy.DefaultDebuggerPort, new RecognizerSharedState() )
		{
		}
		public MySQL51Parser( ITokenStream input, int port, RecognizerSharedState state )
			: base( input, state )
		{
			ITreeAdaptor treeAdaptor = default(ITreeAdaptor);
			//CreateTreeAdaptor(ref treeAdaptor);

			TreeAdaptor = treeAdaptor ?? new CommonTreeAdaptor();

			DebugEventSocketProxy proxy = new DebugEventSocketProxy( this, port, adaptor );
			//DebugEventSocketProxy proxy = (DebugEventSocketProxy)(((DebugTokenStream)input).DebugListener);
			((DebugTokenStream)input).DebugListener = proxy;
			DebugListener = proxy;
			//ITokenStream = new DebugTokenStream( input, proxy );
			try
			{
				proxy.Handshake();
			}
			catch ( IOException ioe )
			{
				ReportError( ioe );
			}
			ITreeAdaptor adap = new CommonTreeAdaptor();
			TreeAdaptor = adap;
			proxy.TreeAdaptor = adap;
		}
	public MySQL51Parser( ITokenStream input, IDebugEventListener dbg )
		: base( input, dbg )
	{
		ITreeAdaptor treeAdaptor = default(ITreeAdaptor);
		//CreateTreeAdaptor(ref treeAdaptor);

		TreeAdaptor = treeAdaptor ?? new CommonTreeAdaptor();


		ITreeAdaptor adap = new CommonTreeAdaptor();
		TreeAdaptor = adap;

	}
	protected virtual bool EvalPredicate( bool result, string predicate )
	{
		dbg.SemanticPredicate( result, predicate );
		return result;
	}

	// Implement this function in your helper file to use a custom tree adaptor
	partial void InitializeTreeAdaptor();
	protected DebugTreeAdaptor adaptor;

	public ITreeAdaptor TreeAdaptor
	{
		get
		{
			return adaptor;
		}
		set
		{
			this.adaptor = new DebugTreeAdaptor(dbg,value);

		}
	}


	public override string[] TokenNames { get { return MySQL51Parser.tokenNames; } }
	public override string GrammarFileName { get { return "MySQL51Parser.g3"; } }


	partial void OnCreated();
	partial void EnterRule(string ruleName, int ruleIndex);
	partial void LeaveRule(string ruleName, int ruleIndex);

	#region Rules
	public sealed partial class statement_list_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public statement_list_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_statement_list();
	partial void LeaveRule_statement_list();

	// $ANTLR start "statement_list"
	// MySQL51Parser.g3:39:8: public statement_list :stmts+= statement ( SEMI stmts+= statement )* ( SEMI )* -> ( $stmts)+ ;
	[GrammarRule("statement_list")]
	public MySQL51Parser.statement_list_return statement_list()
	{
		EnterRule_statement_list();
		EnterRule("statement_list", 1);
		TraceIn("statement_list", 1);
		MySQL51Parser.statement_list_return retval = new MySQL51Parser.statement_list_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken SEMI1 = default(IToken);
		IToken SEMI2 = default(IToken);
		List<object> list_stmts = null;
		MySQL51Parser.statement_return stmts = default(MySQL51Parser.statement_return);
		object SEMI1_tree = default(object);
		object SEMI2_tree = default(object);
		RewriteRuleITokenStream stream_SEMI=new RewriteRuleITokenStream(adaptor,"token SEMI");
		RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");
		try { DebugEnterRule(GrammarFileName, "statement_list");
		DebugLocation(39, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:40:2: (stmts+= statement ( SEMI stmts+= statement )* ( SEMI )* -> ( $stmts)+ )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:40:4: stmts+= statement ( SEMI stmts+= statement )* ( SEMI )*
			{
			DebugLocation(40, 9);
			PushFollow(Follow._statement_in_statement_list121);
			stmts=statement();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_statement.Add(stmts.Tree);
			if (list_stmts==null) list_stmts=new List<object>();
			list_stmts.Add(stmts.Tree);

			DebugLocation(40, 21);
			// MySQL51Parser.g3:40:21: ( SEMI stmts+= statement )*
			try { DebugEnterSubRule(1);
			while (true)
			{
				int alt1=2;
				try { DebugEnterDecision(1, false);
				int LA1_0 = input.LA(1);

				if ((LA1_0==SEMI))
				{
					int LA1_1 = input.LA(2);

					if ((LA1_1==BEGIN||(LA1_1>=COMMENT_RULE && LA1_1<=COMMIT)||LA1_1==CREATE||LA1_1==DELETE||LA1_1==DO||LA1_1==EXPLAIN||LA1_1==INSERT||LA1_1==LOCK||LA1_1==LPAREN||LA1_1==RELEASE||LA1_1==ROLLBACK||LA1_1==SAVEPOINT||LA1_1==SELECT||LA1_1==SET||LA1_1==SHOW||LA1_1==START||LA1_1==UNLOCK||LA1_1==UPDATE))
					{
						alt1 = 1;
					}


				}


				} finally { DebugExitDecision(1); }
				switch ( alt1 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:40:22: SEMI stmts+= statement
					{
					DebugLocation(40, 22);
					SEMI1=(IToken)Match(input,SEMI,Follow._SEMI_in_statement_list124); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SEMI.Add(SEMI1);

					DebugLocation(40, 32);
					PushFollow(Follow._statement_in_statement_list128);
					stmts=statement();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_statement.Add(stmts.Tree);
					if (list_stmts==null) list_stmts=new List<object>();
					list_stmts.Add(stmts.Tree);


					}
					break;

				default:
					goto loop1;
				}
			}

			loop1:
				;

			} finally { DebugExitSubRule(1); }

			DebugLocation(40, 46);
			// MySQL51Parser.g3:40:46: ( SEMI )*
			try { DebugEnterSubRule(2);
			while (true)
			{
				int alt2=2;
				try { DebugEnterDecision(2, false);
				int LA2_0 = input.LA(1);

				if ((LA2_0==SEMI))
				{
					alt2 = 1;
				}


				} finally { DebugExitDecision(2); }
				switch ( alt2 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:40:46: SEMI
					{
					DebugLocation(40, 46);
					SEMI2=(IToken)Match(input,SEMI,Follow._SEMI_in_statement_list132); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SEMI.Add(SEMI2);


					}
					break;

				default:
					goto loop2;
				}
			}

			loop2:
				;

			} finally { DebugExitSubRule(2); }



			{
			// AST REWRITE
			// elements: stmts
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: stmts
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);
			RewriteRuleSubtreeStream stream_stmts=new RewriteRuleSubtreeStream(adaptor,"token stmts",list_stmts);
			root_0 = (object)adaptor.Nil();
			// 41:3: -> ( $stmts)+
			{
				DebugLocation(41, 7);
				if (!(stream_stmts.HasNext))
				{
					throw new RewriteEarlyExitException();
				}
				while ( stream_stmts.HasNext )
				{
					DebugLocation(41, 7);
					adaptor.AddChild(root_0, stream_stmts.NextTree());

				}
				stream_stmts.Reset();

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("statement_list", 1);
			LeaveRule("statement_list", 1);
			LeaveRule_statement_list();
		}
		DebugLocation(42, 1);
		} finally { DebugExitRule(GrammarFileName, "statement_list"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "statement_list"

	private sealed partial class statement_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public statement_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_statement();
	partial void LeaveRule_statement();

	// $ANTLR start "statement"
	// MySQL51Parser.g3:44:1: statement : ( select | do_stmt | show_stmt | explain_stmt | insert | update | delete | transaction | create_table | COMMENT_RULE ) ;
	[GrammarRule("statement")]
	private MySQL51Parser.statement_return statement()
	{
		EnterRule_statement();
		EnterRule("statement", 2);
		TraceIn("statement", 2);
		MySQL51Parser.statement_return retval = new MySQL51Parser.statement_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken COMMENT_RULE12 = default(IToken);
		MySQL51Parser.select_return select3 = default(MySQL51Parser.select_return);
		MySQL51Parser.do_stmt_return do_stmt4 = default(MySQL51Parser.do_stmt_return);
		MySQL51Parser.show_stmt_return show_stmt5 = default(MySQL51Parser.show_stmt_return);
		MySQL51Parser.explain_stmt_return explain_stmt6 = default(MySQL51Parser.explain_stmt_return);
		MySQL51Parser.insert_return insert7 = default(MySQL51Parser.insert_return);
		MySQL51Parser.update_return update8 = default(MySQL51Parser.update_return);
		MySQL51Parser.delete_return delete9 = default(MySQL51Parser.delete_return);
		MySQL51Parser.transaction_return transaction10 = default(MySQL51Parser.transaction_return);
		MySQL51Parser.create_table_return create_table11 = default(MySQL51Parser.create_table_return);

		object COMMENT_RULE12_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "statement");
		DebugLocation(44, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:45:2: ( ( select | do_stmt | show_stmt | explain_stmt | insert | update | delete | transaction | create_table | COMMENT_RULE ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:45:4: ( select | do_stmt | show_stmt | explain_stmt | insert | update | delete | transaction | create_table | COMMENT_RULE )
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(45, 4);
			// MySQL51Parser.g3:45:4: ( select | do_stmt | show_stmt | explain_stmt | insert | update | delete | transaction | create_table | COMMENT_RULE )
			int alt3=10;
			try { DebugEnterSubRule(3);
			try { DebugEnterDecision(3, false);
			switch (input.LA(1))
			{
			case LPAREN:
			case SELECT:
				{
				alt3 = 1;
				}
				break;
			case DO:
				{
				alt3 = 2;
				}
				break;
			case SHOW:
				{
				alt3 = 3;
				}
				break;
			case EXPLAIN:
				{
				alt3 = 4;
				}
				break;
			case INSERT:
				{
				alt3 = 5;
				}
				break;
			case UPDATE:
				{
				alt3 = 6;
				}
				break;
			case DELETE:
				{
				alt3 = 7;
				}
				break;
			case BEGIN:
			case COMMIT:
			case LOCK:
			case RELEASE:
			case ROLLBACK:
			case SAVEPOINT:
			case SET:
			case START:
			case UNLOCK:
				{
				alt3 = 8;
				}
				break;
			case CREATE:
				{
				alt3 = 9;
				}
				break;
			case COMMENT_RULE:
				{
				alt3 = 10;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 3, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(3); }
			switch (alt3)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:45:6: select
				{
				DebugLocation(45, 6);
				PushFollow(Follow._select_in_statement154);
				select3=select();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, select3.Tree);

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:46:5: do_stmt
				{
				DebugLocation(46, 5);
				PushFollow(Follow._do_stmt_in_statement160);
				do_stmt4=do_stmt();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, do_stmt4.Tree);

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:47:5: show_stmt
				{
				DebugLocation(47, 5);
				PushFollow(Follow._show_stmt_in_statement166);
				show_stmt5=show_stmt();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, show_stmt5.Tree);

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:48:5: explain_stmt
				{
				DebugLocation(48, 5);
				PushFollow(Follow._explain_stmt_in_statement172);
				explain_stmt6=explain_stmt();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, explain_stmt6.Tree);

				}
				break;
			case 5:
				DebugEnterAlt(5);
				// MySQL51Parser.g3:49:5: insert
				{
				DebugLocation(49, 5);
				PushFollow(Follow._insert_in_statement178);
				insert7=insert();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, insert7.Tree);

				}
				break;
			case 6:
				DebugEnterAlt(6);
				// MySQL51Parser.g3:50:5: update
				{
				DebugLocation(50, 5);
				PushFollow(Follow._update_in_statement184);
				update8=update();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, update8.Tree);

				}
				break;
			case 7:
				DebugEnterAlt(7);
				// MySQL51Parser.g3:51:5: delete
				{
				DebugLocation(51, 5);
				PushFollow(Follow._delete_in_statement190);
				delete9=delete();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, delete9.Tree);

				}
				break;
			case 8:
				DebugEnterAlt(8);
				// MySQL51Parser.g3:52:5: transaction
				{
				DebugLocation(52, 5);
				PushFollow(Follow._transaction_in_statement196);
				transaction10=transaction();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, transaction10.Tree);

				}
				break;
			case 9:
				DebugEnterAlt(9);
				// MySQL51Parser.g3:53:5: create_table
				{
				DebugLocation(53, 5);
				PushFollow(Follow._create_table_in_statement202);
				create_table11=create_table();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, create_table11.Tree);

				}
				break;
			case 10:
				DebugEnterAlt(10);
				// MySQL51Parser.g3:54:5: COMMENT_RULE
				{
				DebugLocation(54, 5);
				COMMENT_RULE12=(IToken)Match(input,COMMENT_RULE,Follow._COMMENT_RULE_in_statement208); if (state.failed) return retval;
				if (state.backtracking == 0) {
				COMMENT_RULE12_tree = (object)adaptor.Create(COMMENT_RULE12);
				adaptor.AddChild(root_0, COMMENT_RULE12_tree);
				}

				}
				break;

			}
			} finally { DebugExitSubRule(3); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("statement", 2);
			LeaveRule("statement", 2);
			LeaveRule_statement();
		}
		DebugLocation(56, 1);
		} finally { DebugExitRule(GrammarFileName, "statement"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "statement"

	private sealed partial class do_stmt_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public do_stmt_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_do_stmt();
	partial void LeaveRule_do_stmt();

	// $ANTLR start "do_stmt"
	// MySQL51Parser.g3:60:1: do_stmt : DO exprList -> ^( DO exprList ) ;
	[GrammarRule("do_stmt")]
	private MySQL51Parser.do_stmt_return do_stmt()
	{
		EnterRule_do_stmt();
		EnterRule("do_stmt", 3);
		TraceIn("do_stmt", 3);
		MySQL51Parser.do_stmt_return retval = new MySQL51Parser.do_stmt_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken DO13 = default(IToken);
		MySQL51Parser.exprList_return exprList14 = default(MySQL51Parser.exprList_return);

		object DO13_tree = default(object);
		RewriteRuleITokenStream stream_DO=new RewriteRuleITokenStream(adaptor,"token DO");
		RewriteRuleSubtreeStream stream_exprList=new RewriteRuleSubtreeStream(adaptor,"rule exprList");
		try { DebugEnterRule(GrammarFileName, "do_stmt");
		DebugLocation(60, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:60:9: ( DO exprList -> ^( DO exprList ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:60:11: DO exprList
			{
			DebugLocation(60, 11);
			DO13=(IToken)Match(input,DO,Follow._DO_in_do_stmt224); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_DO.Add(DO13);

			DebugLocation(60, 14);
			PushFollow(Follow._exprList_in_do_stmt226);
			exprList14=exprList();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_exprList.Add(exprList14.Tree);


			{
			// AST REWRITE
			// elements: DO, exprList
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 60:24: -> ^( DO exprList )
			{
				DebugLocation(60, 27);
				// MySQL51Parser.g3:60:27: ^( DO exprList )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(60, 29);
				root_1 = (object)adaptor.BecomeRoot(stream_DO.NextNode(), root_1);

				DebugLocation(60, 32);
				adaptor.AddChild(root_1, stream_exprList.NextTree());

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("do_stmt", 3);
			LeaveRule("do_stmt", 3);
			LeaveRule_do_stmt();
		}
		DebugLocation(61, 1);
		} finally { DebugExitRule(GrammarFileName, "do_stmt"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "do_stmt"

	private sealed partial class show_stmt_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public show_stmt_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_show_stmt();
	partial void LeaveRule_show_stmt();

	// $ANTLR start "show_stmt"
	// MySQL51Parser.g3:63:1: show_stmt : ( SHOW -> ^( SHOW ) ) ( AUTHORS -> ^( $show_stmt ^( AUTHORS ) ) | BINLOG EVENTS ( IN logName= STRING )? ( FROM NUMBER )? ( limit )? -> ^( $show_stmt ^( BINLOG ( $logName)? ( NUMBER )? ( limit )? ) ) | CHARACTER SET ( like_or_where )? -> ^( $show_stmt ^( CHARACTER ( like_or_where )? ) ) | COLLATION ( like_or_where )? -> ^( $show_stmt ^( COLLATION ( like_or_where )? ) ) | ( FULL )? COLUMNS ( FROM | IN ) simple_table_ref_no_alias ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( COLUMNS ( FULL )? simple_table_ref_no_alias ( ident )? ( like_or_where )? ) ) | CONTRIBUTORS -> ^( $show_stmt ^( CONTRIBUTORS ) ) | CREATE DATABASE ident -> ^( $show_stmt ^( CREATE DATABASE ident ) ) | CREATE EVENT ident -> ^( $show_stmt ^( CREATE EVENT ident ) ) | CREATE FUNCTION ident -> ^( $show_stmt ^( CREATE FUNCTION ident ) ) | CREATE PROCEDURE ident -> ^( $show_stmt ^( CREATE PROCEDURE ident ) ) | CREATE TABLE simple_table_ref_no_alias -> ^( $show_stmt ^( CREATE TABLE simple_table_ref_no_alias ) ) | CREATE TRIGGER ident -> ^( $show_stmt ^( CREATE TRIGGER ident ) ) | CREATE VIEW ident -> ^( $show_stmt ^( CREATE VIEW ident ) ) | DATABASES ( like_or_where )? -> ^( $show_stmt ^( DATABASES ( like_or_where )? ) ) | ENGINE ( INNODB | ident ) (what= STATUS |what= MUTEX ) -> ^( $show_stmt ^( ENGINE ( INNODB )? ( ident )? $what) ) | ( STORAGE )? ENGINES -> ^( $show_stmt ^( ENGINES ) ) | ERRORS ( limit )? -> ^( $show_stmt ^( ERRORS ( limit )? ) ) | ( FULL )? EVENTS -> ^( $show_stmt ^( EVENTS ( FULL )? ) ) | FUNCTION CODE ident -> ^( $show_stmt ^( CODE FUNCTION ident ) ) | FUNCTION STATUS ( like_or_where )? -> ^( $show_stmt ^( STATUS FUNCTION ( like_or_where )? ) ) | GRANTS FOR (whom= USER_HOST |whom= CURRENT_USER |whom= CURRENT_USER LPAREN RPAREN ) -> ^( $show_stmt ^( GRANTS $whom) ) | INDEX_SYM FROM simple_table_ref_no_alias ( ( FROM | IN ) ident )? -> ^( $show_stmt ^( INDEX_SYM simple_table_ref_no_alias ( ident )? ) ) | INNODB STATUS -> ^( $show_stmt ^( ENGINE INNODB STATUS ) ) | OPEN TABLES ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( OPEN ( ident )? ( like_or_where )? ) ) | PLUGINS -> ^( $show_stmt ^( PLUGINS ) ) | PROCEDURE CODE ident -> ^( $show_stmt ^( CODE PROCEDURE ident ) ) | PROCEDURE STATUS ( like_or_where )? -> ^( $show_stmt ^( STATUS PROCEDURE ident ) ) | PRIVILEGES -> ^( $show_stmt ^( PRIVILEGES ) ) | ( FULL )? PROCESSLIST -> ^( $show_stmt ^( PROCESSLIST ( FULL )? ) ) | PROFILE show_profile_types ( FOR QUERY NUMBER )? ( limit )? -> ^( $show_stmt ^( PROFILE show_profile_types ( NUMBER )? ( limit )? ) ) | PROFILES -> ^( $show_stmt ^( PROFILES ) ) | SCHEDULER STATUS -> ^( $show_stmt ^( STATUS SCHEDULER ) ) | optScopeModifier STATUS ( like_or_where )? -> ^( $show_stmt ^( STATUS ( optScopeModifier )? ( like_or_where )? ) ) | TABLE STATUS ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( STATUS TABLE ( ident )? ( like_or_where )? ) ) | TABLES ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( TABLES ( ident )? ( like_or_where )? ) ) | TRIGGERS ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( TRIGGERS ( ident )? ( like_or_where )? ) ) | optScopeModifier VARIABLES ( like_or_where )? -> ^( $show_stmt ^( VARIABLES ( optScopeModifier )? ( like_or_where )? ) ) | WARNINGS ( limit )? -> ^( $show_stmt ^( WARNINGS ( limit )? ) ) ) ;
	[GrammarRule("show_stmt")]
	private MySQL51Parser.show_stmt_return show_stmt()
	{
		EnterRule_show_stmt();
		EnterRule("show_stmt", 4);
		TraceIn("show_stmt", 4);
		MySQL51Parser.show_stmt_return retval = new MySQL51Parser.show_stmt_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken logName = default(IToken);
		IToken what = default(IToken);
		IToken whom = default(IToken);
		IToken SHOW15 = default(IToken);
		IToken AUTHORS16 = default(IToken);
		IToken BINLOG17 = default(IToken);
		IToken EVENTS18 = default(IToken);
		IToken IN19 = default(IToken);
		IToken FROM20 = default(IToken);
		IToken NUMBER21 = default(IToken);
		IToken CHARACTER23 = default(IToken);
		IToken SET24 = default(IToken);
		IToken COLLATION26 = default(IToken);
		IToken FULL28 = default(IToken);
		IToken COLUMNS29 = default(IToken);
		IToken FROM30 = default(IToken);
		IToken IN31 = default(IToken);
		IToken FROM33 = default(IToken);
		IToken IN34 = default(IToken);
		IToken CONTRIBUTORS37 = default(IToken);
		IToken CREATE38 = default(IToken);
		IToken DATABASE39 = default(IToken);
		IToken CREATE41 = default(IToken);
		IToken EVENT42 = default(IToken);
		IToken CREATE44 = default(IToken);
		IToken FUNCTION45 = default(IToken);
		IToken CREATE47 = default(IToken);
		IToken PROCEDURE48 = default(IToken);
		IToken CREATE50 = default(IToken);
		IToken TABLE51 = default(IToken);
		IToken CREATE53 = default(IToken);
		IToken TRIGGER54 = default(IToken);
		IToken CREATE56 = default(IToken);
		IToken VIEW57 = default(IToken);
		IToken DATABASES59 = default(IToken);
		IToken ENGINE61 = default(IToken);
		IToken INNODB62 = default(IToken);
		IToken STORAGE64 = default(IToken);
		IToken ENGINES65 = default(IToken);
		IToken ERRORS66 = default(IToken);
		IToken FULL68 = default(IToken);
		IToken EVENTS69 = default(IToken);
		IToken FUNCTION70 = default(IToken);
		IToken CODE71 = default(IToken);
		IToken FUNCTION73 = default(IToken);
		IToken STATUS74 = default(IToken);
		IToken GRANTS76 = default(IToken);
		IToken FOR77 = default(IToken);
		IToken LPAREN78 = default(IToken);
		IToken RPAREN79 = default(IToken);
		IToken INDEX_SYM80 = default(IToken);
		IToken FROM81 = default(IToken);
		IToken FROM83 = default(IToken);
		IToken IN84 = default(IToken);
		IToken INNODB86 = default(IToken);
		IToken STATUS87 = default(IToken);
		IToken OPEN88 = default(IToken);
		IToken TABLES89 = default(IToken);
		IToken FROM90 = default(IToken);
		IToken IN91 = default(IToken);
		IToken PLUGINS94 = default(IToken);
		IToken PROCEDURE95 = default(IToken);
		IToken CODE96 = default(IToken);
		IToken PROCEDURE98 = default(IToken);
		IToken STATUS99 = default(IToken);
		IToken PRIVILEGES101 = default(IToken);
		IToken FULL102 = default(IToken);
		IToken PROCESSLIST103 = default(IToken);
		IToken PROFILE104 = default(IToken);
		IToken FOR106 = default(IToken);
		IToken QUERY107 = default(IToken);
		IToken NUMBER108 = default(IToken);
		IToken PROFILES110 = default(IToken);
		IToken SCHEDULER111 = default(IToken);
		IToken STATUS112 = default(IToken);
		IToken STATUS114 = default(IToken);
		IToken TABLE116 = default(IToken);
		IToken STATUS117 = default(IToken);
		IToken FROM118 = default(IToken);
		IToken IN119 = default(IToken);
		IToken TABLES122 = default(IToken);
		IToken FROM123 = default(IToken);
		IToken IN124 = default(IToken);
		IToken TRIGGERS127 = default(IToken);
		IToken FROM128 = default(IToken);
		IToken IN129 = default(IToken);
		IToken VARIABLES133 = default(IToken);
		IToken WARNINGS135 = default(IToken);
		MySQL51Parser.limit_return limit22 = default(MySQL51Parser.limit_return);
		MySQL51Parser.like_or_where_return like_or_where25 = default(MySQL51Parser.like_or_where_return);
		MySQL51Parser.like_or_where_return like_or_where27 = default(MySQL51Parser.like_or_where_return);
		MySQL51Parser.simple_table_ref_no_alias_return simple_table_ref_no_alias32 = default(MySQL51Parser.simple_table_ref_no_alias_return);
		MySQL51Parser.ident_return ident35 = default(MySQL51Parser.ident_return);
		MySQL51Parser.like_or_where_return like_or_where36 = default(MySQL51Parser.like_or_where_return);
		MySQL51Parser.ident_return ident40 = default(MySQL51Parser.ident_return);
		MySQL51Parser.ident_return ident43 = default(MySQL51Parser.ident_return);
		MySQL51Parser.ident_return ident46 = default(MySQL51Parser.ident_return);
		MySQL51Parser.ident_return ident49 = default(MySQL51Parser.ident_return);
		MySQL51Parser.simple_table_ref_no_alias_return simple_table_ref_no_alias52 = default(MySQL51Parser.simple_table_ref_no_alias_return);
		MySQL51Parser.ident_return ident55 = default(MySQL51Parser.ident_return);
		MySQL51Parser.ident_return ident58 = default(MySQL51Parser.ident_return);
		MySQL51Parser.like_or_where_return like_or_where60 = default(MySQL51Parser.like_or_where_return);
		MySQL51Parser.ident_return ident63 = default(MySQL51Parser.ident_return);
		MySQL51Parser.limit_return limit67 = default(MySQL51Parser.limit_return);
		MySQL51Parser.ident_return ident72 = default(MySQL51Parser.ident_return);
		MySQL51Parser.like_or_where_return like_or_where75 = default(MySQL51Parser.like_or_where_return);
		MySQL51Parser.simple_table_ref_no_alias_return simple_table_ref_no_alias82 = default(MySQL51Parser.simple_table_ref_no_alias_return);
		MySQL51Parser.ident_return ident85 = default(MySQL51Parser.ident_return);
		MySQL51Parser.ident_return ident92 = default(MySQL51Parser.ident_return);
		MySQL51Parser.like_or_where_return like_or_where93 = default(MySQL51Parser.like_or_where_return);
		MySQL51Parser.ident_return ident97 = default(MySQL51Parser.ident_return);
		MySQL51Parser.like_or_where_return like_or_where100 = default(MySQL51Parser.like_or_where_return);
		MySQL51Parser.show_profile_types_return show_profile_types105 = default(MySQL51Parser.show_profile_types_return);
		MySQL51Parser.limit_return limit109 = default(MySQL51Parser.limit_return);
		MySQL51Parser.optScopeModifier_return optScopeModifier113 = default(MySQL51Parser.optScopeModifier_return);
		MySQL51Parser.like_or_where_return like_or_where115 = default(MySQL51Parser.like_or_where_return);
		MySQL51Parser.ident_return ident120 = default(MySQL51Parser.ident_return);
		MySQL51Parser.like_or_where_return like_or_where121 = default(MySQL51Parser.like_or_where_return);
		MySQL51Parser.ident_return ident125 = default(MySQL51Parser.ident_return);
		MySQL51Parser.like_or_where_return like_or_where126 = default(MySQL51Parser.like_or_where_return);
		MySQL51Parser.ident_return ident130 = default(MySQL51Parser.ident_return);
		MySQL51Parser.like_or_where_return like_or_where131 = default(MySQL51Parser.like_or_where_return);
		MySQL51Parser.optScopeModifier_return optScopeModifier132 = default(MySQL51Parser.optScopeModifier_return);
		MySQL51Parser.like_or_where_return like_or_where134 = default(MySQL51Parser.like_or_where_return);
		MySQL51Parser.limit_return limit136 = default(MySQL51Parser.limit_return);

		object logName_tree = default(object);
		object what_tree = default(object);
		object whom_tree = default(object);
		object SHOW15_tree = default(object);
		object AUTHORS16_tree = default(object);
		object BINLOG17_tree = default(object);
		object EVENTS18_tree = default(object);
		object IN19_tree = default(object);
		object FROM20_tree = default(object);
		object NUMBER21_tree = default(object);
		object CHARACTER23_tree = default(object);
		object SET24_tree = default(object);
		object COLLATION26_tree = default(object);
		object FULL28_tree = default(object);
		object COLUMNS29_tree = default(object);
		object FROM30_tree = default(object);
		object IN31_tree = default(object);
		object FROM33_tree = default(object);
		object IN34_tree = default(object);
		object CONTRIBUTORS37_tree = default(object);
		object CREATE38_tree = default(object);
		object DATABASE39_tree = default(object);
		object CREATE41_tree = default(object);
		object EVENT42_tree = default(object);
		object CREATE44_tree = default(object);
		object FUNCTION45_tree = default(object);
		object CREATE47_tree = default(object);
		object PROCEDURE48_tree = default(object);
		object CREATE50_tree = default(object);
		object TABLE51_tree = default(object);
		object CREATE53_tree = default(object);
		object TRIGGER54_tree = default(object);
		object CREATE56_tree = default(object);
		object VIEW57_tree = default(object);
		object DATABASES59_tree = default(object);
		object ENGINE61_tree = default(object);
		object INNODB62_tree = default(object);
		object STORAGE64_tree = default(object);
		object ENGINES65_tree = default(object);
		object ERRORS66_tree = default(object);
		object FULL68_tree = default(object);
		object EVENTS69_tree = default(object);
		object FUNCTION70_tree = default(object);
		object CODE71_tree = default(object);
		object FUNCTION73_tree = default(object);
		object STATUS74_tree = default(object);
		object GRANTS76_tree = default(object);
		object FOR77_tree = default(object);
		object LPAREN78_tree = default(object);
		object RPAREN79_tree = default(object);
		object INDEX_SYM80_tree = default(object);
		object FROM81_tree = default(object);
		object FROM83_tree = default(object);
		object IN84_tree = default(object);
		object INNODB86_tree = default(object);
		object STATUS87_tree = default(object);
		object OPEN88_tree = default(object);
		object TABLES89_tree = default(object);
		object FROM90_tree = default(object);
		object IN91_tree = default(object);
		object PLUGINS94_tree = default(object);
		object PROCEDURE95_tree = default(object);
		object CODE96_tree = default(object);
		object PROCEDURE98_tree = default(object);
		object STATUS99_tree = default(object);
		object PRIVILEGES101_tree = default(object);
		object FULL102_tree = default(object);
		object PROCESSLIST103_tree = default(object);
		object PROFILE104_tree = default(object);
		object FOR106_tree = default(object);
		object QUERY107_tree = default(object);
		object NUMBER108_tree = default(object);
		object PROFILES110_tree = default(object);
		object SCHEDULER111_tree = default(object);
		object STATUS112_tree = default(object);
		object STATUS114_tree = default(object);
		object TABLE116_tree = default(object);
		object STATUS117_tree = default(object);
		object FROM118_tree = default(object);
		object IN119_tree = default(object);
		object TABLES122_tree = default(object);
		object FROM123_tree = default(object);
		object IN124_tree = default(object);
		object TRIGGERS127_tree = default(object);
		object FROM128_tree = default(object);
		object IN129_tree = default(object);
		object VARIABLES133_tree = default(object);
		object WARNINGS135_tree = default(object);
		RewriteRuleITokenStream stream_SHOW=new RewriteRuleITokenStream(adaptor,"token SHOW");
		RewriteRuleITokenStream stream_AUTHORS=new RewriteRuleITokenStream(adaptor,"token AUTHORS");
		RewriteRuleITokenStream stream_BINLOG=new RewriteRuleITokenStream(adaptor,"token BINLOG");
		RewriteRuleITokenStream stream_EVENTS=new RewriteRuleITokenStream(adaptor,"token EVENTS");
		RewriteRuleITokenStream stream_IN=new RewriteRuleITokenStream(adaptor,"token IN");
		RewriteRuleITokenStream stream_STRING=new RewriteRuleITokenStream(adaptor,"token STRING");
		RewriteRuleITokenStream stream_FROM=new RewriteRuleITokenStream(adaptor,"token FROM");
		RewriteRuleITokenStream stream_NUMBER=new RewriteRuleITokenStream(adaptor,"token NUMBER");
		RewriteRuleITokenStream stream_CHARACTER=new RewriteRuleITokenStream(adaptor,"token CHARACTER");
		RewriteRuleITokenStream stream_SET=new RewriteRuleITokenStream(adaptor,"token SET");
		RewriteRuleITokenStream stream_COLLATION=new RewriteRuleITokenStream(adaptor,"token COLLATION");
		RewriteRuleITokenStream stream_FULL=new RewriteRuleITokenStream(adaptor,"token FULL");
		RewriteRuleITokenStream stream_COLUMNS=new RewriteRuleITokenStream(adaptor,"token COLUMNS");
		RewriteRuleITokenStream stream_CONTRIBUTORS=new RewriteRuleITokenStream(adaptor,"token CONTRIBUTORS");
		RewriteRuleITokenStream stream_CREATE=new RewriteRuleITokenStream(adaptor,"token CREATE");
		RewriteRuleITokenStream stream_DATABASE=new RewriteRuleITokenStream(adaptor,"token DATABASE");
		RewriteRuleITokenStream stream_EVENT=new RewriteRuleITokenStream(adaptor,"token EVENT");
		RewriteRuleITokenStream stream_FUNCTION=new RewriteRuleITokenStream(adaptor,"token FUNCTION");
		RewriteRuleITokenStream stream_PROCEDURE=new RewriteRuleITokenStream(adaptor,"token PROCEDURE");
		RewriteRuleITokenStream stream_TABLE=new RewriteRuleITokenStream(adaptor,"token TABLE");
		RewriteRuleITokenStream stream_TRIGGER=new RewriteRuleITokenStream(adaptor,"token TRIGGER");
		RewriteRuleITokenStream stream_VIEW=new RewriteRuleITokenStream(adaptor,"token VIEW");
		RewriteRuleITokenStream stream_DATABASES=new RewriteRuleITokenStream(adaptor,"token DATABASES");
		RewriteRuleITokenStream stream_ENGINE=new RewriteRuleITokenStream(adaptor,"token ENGINE");
		RewriteRuleITokenStream stream_INNODB=new RewriteRuleITokenStream(adaptor,"token INNODB");
		RewriteRuleITokenStream stream_STATUS=new RewriteRuleITokenStream(adaptor,"token STATUS");
		RewriteRuleITokenStream stream_MUTEX=new RewriteRuleITokenStream(adaptor,"token MUTEX");
		RewriteRuleITokenStream stream_STORAGE=new RewriteRuleITokenStream(adaptor,"token STORAGE");
		RewriteRuleITokenStream stream_ENGINES=new RewriteRuleITokenStream(adaptor,"token ENGINES");
		RewriteRuleITokenStream stream_ERRORS=new RewriteRuleITokenStream(adaptor,"token ERRORS");
		RewriteRuleITokenStream stream_CODE=new RewriteRuleITokenStream(adaptor,"token CODE");
		RewriteRuleITokenStream stream_GRANTS=new RewriteRuleITokenStream(adaptor,"token GRANTS");
		RewriteRuleITokenStream stream_FOR=new RewriteRuleITokenStream(adaptor,"token FOR");
		RewriteRuleITokenStream stream_USER_HOST=new RewriteRuleITokenStream(adaptor,"token USER_HOST");
		RewriteRuleITokenStream stream_CURRENT_USER=new RewriteRuleITokenStream(adaptor,"token CURRENT_USER");
		RewriteRuleITokenStream stream_LPAREN=new RewriteRuleITokenStream(adaptor,"token LPAREN");
		RewriteRuleITokenStream stream_RPAREN=new RewriteRuleITokenStream(adaptor,"token RPAREN");
		RewriteRuleITokenStream stream_INDEX_SYM=new RewriteRuleITokenStream(adaptor,"token INDEX_SYM");
		RewriteRuleITokenStream stream_OPEN=new RewriteRuleITokenStream(adaptor,"token OPEN");
		RewriteRuleITokenStream stream_TABLES=new RewriteRuleITokenStream(adaptor,"token TABLES");
		RewriteRuleITokenStream stream_PLUGINS=new RewriteRuleITokenStream(adaptor,"token PLUGINS");
		RewriteRuleITokenStream stream_PRIVILEGES=new RewriteRuleITokenStream(adaptor,"token PRIVILEGES");
		RewriteRuleITokenStream stream_PROCESSLIST=new RewriteRuleITokenStream(adaptor,"token PROCESSLIST");
		RewriteRuleITokenStream stream_PROFILE=new RewriteRuleITokenStream(adaptor,"token PROFILE");
		RewriteRuleITokenStream stream_QUERY=new RewriteRuleITokenStream(adaptor,"token QUERY");
		RewriteRuleITokenStream stream_PROFILES=new RewriteRuleITokenStream(adaptor,"token PROFILES");
		RewriteRuleITokenStream stream_SCHEDULER=new RewriteRuleITokenStream(adaptor,"token SCHEDULER");
		RewriteRuleITokenStream stream_TRIGGERS=new RewriteRuleITokenStream(adaptor,"token TRIGGERS");
		RewriteRuleITokenStream stream_VARIABLES=new RewriteRuleITokenStream(adaptor,"token VARIABLES");
		RewriteRuleITokenStream stream_WARNINGS=new RewriteRuleITokenStream(adaptor,"token WARNINGS");
		RewriteRuleSubtreeStream stream_limit=new RewriteRuleSubtreeStream(adaptor,"rule limit");
		RewriteRuleSubtreeStream stream_like_or_where=new RewriteRuleSubtreeStream(adaptor,"rule like_or_where");
		RewriteRuleSubtreeStream stream_simple_table_ref_no_alias=new RewriteRuleSubtreeStream(adaptor,"rule simple_table_ref_no_alias");
		RewriteRuleSubtreeStream stream_ident=new RewriteRuleSubtreeStream(adaptor,"rule ident");
		RewriteRuleSubtreeStream stream_show_profile_types=new RewriteRuleSubtreeStream(adaptor,"rule show_profile_types");
		RewriteRuleSubtreeStream stream_optScopeModifier=new RewriteRuleSubtreeStream(adaptor,"rule optScopeModifier");
		try { DebugEnterRule(GrammarFileName, "show_stmt");
		DebugLocation(63, 2);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:64:3: ( ( SHOW -> ^( SHOW ) ) ( AUTHORS -> ^( $show_stmt ^( AUTHORS ) ) | BINLOG EVENTS ( IN logName= STRING )? ( FROM NUMBER )? ( limit )? -> ^( $show_stmt ^( BINLOG ( $logName)? ( NUMBER )? ( limit )? ) ) | CHARACTER SET ( like_or_where )? -> ^( $show_stmt ^( CHARACTER ( like_or_where )? ) ) | COLLATION ( like_or_where )? -> ^( $show_stmt ^( COLLATION ( like_or_where )? ) ) | ( FULL )? COLUMNS ( FROM | IN ) simple_table_ref_no_alias ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( COLUMNS ( FULL )? simple_table_ref_no_alias ( ident )? ( like_or_where )? ) ) | CONTRIBUTORS -> ^( $show_stmt ^( CONTRIBUTORS ) ) | CREATE DATABASE ident -> ^( $show_stmt ^( CREATE DATABASE ident ) ) | CREATE EVENT ident -> ^( $show_stmt ^( CREATE EVENT ident ) ) | CREATE FUNCTION ident -> ^( $show_stmt ^( CREATE FUNCTION ident ) ) | CREATE PROCEDURE ident -> ^( $show_stmt ^( CREATE PROCEDURE ident ) ) | CREATE TABLE simple_table_ref_no_alias -> ^( $show_stmt ^( CREATE TABLE simple_table_ref_no_alias ) ) | CREATE TRIGGER ident -> ^( $show_stmt ^( CREATE TRIGGER ident ) ) | CREATE VIEW ident -> ^( $show_stmt ^( CREATE VIEW ident ) ) | DATABASES ( like_or_where )? -> ^( $show_stmt ^( DATABASES ( like_or_where )? ) ) | ENGINE ( INNODB | ident ) (what= STATUS |what= MUTEX ) -> ^( $show_stmt ^( ENGINE ( INNODB )? ( ident )? $what) ) | ( STORAGE )? ENGINES -> ^( $show_stmt ^( ENGINES ) ) | ERRORS ( limit )? -> ^( $show_stmt ^( ERRORS ( limit )? ) ) | ( FULL )? EVENTS -> ^( $show_stmt ^( EVENTS ( FULL )? ) ) | FUNCTION CODE ident -> ^( $show_stmt ^( CODE FUNCTION ident ) ) | FUNCTION STATUS ( like_or_where )? -> ^( $show_stmt ^( STATUS FUNCTION ( like_or_where )? ) ) | GRANTS FOR (whom= USER_HOST |whom= CURRENT_USER |whom= CURRENT_USER LPAREN RPAREN ) -> ^( $show_stmt ^( GRANTS $whom) ) | INDEX_SYM FROM simple_table_ref_no_alias ( ( FROM | IN ) ident )? -> ^( $show_stmt ^( INDEX_SYM simple_table_ref_no_alias ( ident )? ) ) | INNODB STATUS -> ^( $show_stmt ^( ENGINE INNODB STATUS ) ) | OPEN TABLES ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( OPEN ( ident )? ( like_or_where )? ) ) | PLUGINS -> ^( $show_stmt ^( PLUGINS ) ) | PROCEDURE CODE ident -> ^( $show_stmt ^( CODE PROCEDURE ident ) ) | PROCEDURE STATUS ( like_or_where )? -> ^( $show_stmt ^( STATUS PROCEDURE ident ) ) | PRIVILEGES -> ^( $show_stmt ^( PRIVILEGES ) ) | ( FULL )? PROCESSLIST -> ^( $show_stmt ^( PROCESSLIST ( FULL )? ) ) | PROFILE show_profile_types ( FOR QUERY NUMBER )? ( limit )? -> ^( $show_stmt ^( PROFILE show_profile_types ( NUMBER )? ( limit )? ) ) | PROFILES -> ^( $show_stmt ^( PROFILES ) ) | SCHEDULER STATUS -> ^( $show_stmt ^( STATUS SCHEDULER ) ) | optScopeModifier STATUS ( like_or_where )? -> ^( $show_stmt ^( STATUS ( optScopeModifier )? ( like_or_where )? ) ) | TABLE STATUS ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( STATUS TABLE ( ident )? ( like_or_where )? ) ) | TABLES ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( TABLES ( ident )? ( like_or_where )? ) ) | TRIGGERS ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( TRIGGERS ( ident )? ( like_or_where )? ) ) | optScopeModifier VARIABLES ( like_or_where )? -> ^( $show_stmt ^( VARIABLES ( optScopeModifier )? ( like_or_where )? ) ) | WARNINGS ( limit )? -> ^( $show_stmt ^( WARNINGS ( limit )? ) ) ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:64:5: ( SHOW -> ^( SHOW ) ) ( AUTHORS -> ^( $show_stmt ^( AUTHORS ) ) | BINLOG EVENTS ( IN logName= STRING )? ( FROM NUMBER )? ( limit )? -> ^( $show_stmt ^( BINLOG ( $logName)? ( NUMBER )? ( limit )? ) ) | CHARACTER SET ( like_or_where )? -> ^( $show_stmt ^( CHARACTER ( like_or_where )? ) ) | COLLATION ( like_or_where )? -> ^( $show_stmt ^( COLLATION ( like_or_where )? ) ) | ( FULL )? COLUMNS ( FROM | IN ) simple_table_ref_no_alias ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( COLUMNS ( FULL )? simple_table_ref_no_alias ( ident )? ( like_or_where )? ) ) | CONTRIBUTORS -> ^( $show_stmt ^( CONTRIBUTORS ) ) | CREATE DATABASE ident -> ^( $show_stmt ^( CREATE DATABASE ident ) ) | CREATE EVENT ident -> ^( $show_stmt ^( CREATE EVENT ident ) ) | CREATE FUNCTION ident -> ^( $show_stmt ^( CREATE FUNCTION ident ) ) | CREATE PROCEDURE ident -> ^( $show_stmt ^( CREATE PROCEDURE ident ) ) | CREATE TABLE simple_table_ref_no_alias -> ^( $show_stmt ^( CREATE TABLE simple_table_ref_no_alias ) ) | CREATE TRIGGER ident -> ^( $show_stmt ^( CREATE TRIGGER ident ) ) | CREATE VIEW ident -> ^( $show_stmt ^( CREATE VIEW ident ) ) | DATABASES ( like_or_where )? -> ^( $show_stmt ^( DATABASES ( like_or_where )? ) ) | ENGINE ( INNODB | ident ) (what= STATUS |what= MUTEX ) -> ^( $show_stmt ^( ENGINE ( INNODB )? ( ident )? $what) ) | ( STORAGE )? ENGINES -> ^( $show_stmt ^( ENGINES ) ) | ERRORS ( limit )? -> ^( $show_stmt ^( ERRORS ( limit )? ) ) | ( FULL )? EVENTS -> ^( $show_stmt ^( EVENTS ( FULL )? ) ) | FUNCTION CODE ident -> ^( $show_stmt ^( CODE FUNCTION ident ) ) | FUNCTION STATUS ( like_or_where )? -> ^( $show_stmt ^( STATUS FUNCTION ( like_or_where )? ) ) | GRANTS FOR (whom= USER_HOST |whom= CURRENT_USER |whom= CURRENT_USER LPAREN RPAREN ) -> ^( $show_stmt ^( GRANTS $whom) ) | INDEX_SYM FROM simple_table_ref_no_alias ( ( FROM | IN ) ident )? -> ^( $show_stmt ^( INDEX_SYM simple_table_ref_no_alias ( ident )? ) ) | INNODB STATUS -> ^( $show_stmt ^( ENGINE INNODB STATUS ) ) | OPEN TABLES ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( OPEN ( ident )? ( like_or_where )? ) ) | PLUGINS -> ^( $show_stmt ^( PLUGINS ) ) | PROCEDURE CODE ident -> ^( $show_stmt ^( CODE PROCEDURE ident ) ) | PROCEDURE STATUS ( like_or_where )? -> ^( $show_stmt ^( STATUS PROCEDURE ident ) ) | PRIVILEGES -> ^( $show_stmt ^( PRIVILEGES ) ) | ( FULL )? PROCESSLIST -> ^( $show_stmt ^( PROCESSLIST ( FULL )? ) ) | PROFILE show_profile_types ( FOR QUERY NUMBER )? ( limit )? -> ^( $show_stmt ^( PROFILE show_profile_types ( NUMBER )? ( limit )? ) ) | PROFILES -> ^( $show_stmt ^( PROFILES ) ) | SCHEDULER STATUS -> ^( $show_stmt ^( STATUS SCHEDULER ) ) | optScopeModifier STATUS ( like_or_where )? -> ^( $show_stmt ^( STATUS ( optScopeModifier )? ( like_or_where )? ) ) | TABLE STATUS ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( STATUS TABLE ( ident )? ( like_or_where )? ) ) | TABLES ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( TABLES ( ident )? ( like_or_where )? ) ) | TRIGGERS ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( TRIGGERS ( ident )? ( like_or_where )? ) ) | optScopeModifier VARIABLES ( like_or_where )? -> ^( $show_stmt ^( VARIABLES ( optScopeModifier )? ( like_or_where )? ) ) | WARNINGS ( limit )? -> ^( $show_stmt ^( WARNINGS ( limit )? ) ) )
			{
			DebugLocation(64, 5);
			// MySQL51Parser.g3:64:5: ( SHOW -> ^( SHOW ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:64:6: SHOW
			{
			DebugLocation(64, 6);
			SHOW15=(IToken)Match(input,SHOW,Follow._SHOW_in_show_stmt248); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_SHOW.Add(SHOW15);



			{
			// AST REWRITE
			// elements: SHOW
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 64:11: -> ^( SHOW )
			{
				DebugLocation(64, 14);
				// MySQL51Parser.g3:64:14: ^( SHOW )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(64, 16);
				root_1 = (object)adaptor.BecomeRoot(stream_SHOW.NextNode(), root_1);

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			DebugLocation(65, 5);
			// MySQL51Parser.g3:65:5: ( AUTHORS -> ^( $show_stmt ^( AUTHORS ) ) | BINLOG EVENTS ( IN logName= STRING )? ( FROM NUMBER )? ( limit )? -> ^( $show_stmt ^( BINLOG ( $logName)? ( NUMBER )? ( limit )? ) ) | CHARACTER SET ( like_or_where )? -> ^( $show_stmt ^( CHARACTER ( like_or_where )? ) ) | COLLATION ( like_or_where )? -> ^( $show_stmt ^( COLLATION ( like_or_where )? ) ) | ( FULL )? COLUMNS ( FROM | IN ) simple_table_ref_no_alias ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( COLUMNS ( FULL )? simple_table_ref_no_alias ( ident )? ( like_or_where )? ) ) | CONTRIBUTORS -> ^( $show_stmt ^( CONTRIBUTORS ) ) | CREATE DATABASE ident -> ^( $show_stmt ^( CREATE DATABASE ident ) ) | CREATE EVENT ident -> ^( $show_stmt ^( CREATE EVENT ident ) ) | CREATE FUNCTION ident -> ^( $show_stmt ^( CREATE FUNCTION ident ) ) | CREATE PROCEDURE ident -> ^( $show_stmt ^( CREATE PROCEDURE ident ) ) | CREATE TABLE simple_table_ref_no_alias -> ^( $show_stmt ^( CREATE TABLE simple_table_ref_no_alias ) ) | CREATE TRIGGER ident -> ^( $show_stmt ^( CREATE TRIGGER ident ) ) | CREATE VIEW ident -> ^( $show_stmt ^( CREATE VIEW ident ) ) | DATABASES ( like_or_where )? -> ^( $show_stmt ^( DATABASES ( like_or_where )? ) ) | ENGINE ( INNODB | ident ) (what= STATUS |what= MUTEX ) -> ^( $show_stmt ^( ENGINE ( INNODB )? ( ident )? $what) ) | ( STORAGE )? ENGINES -> ^( $show_stmt ^( ENGINES ) ) | ERRORS ( limit )? -> ^( $show_stmt ^( ERRORS ( limit )? ) ) | ( FULL )? EVENTS -> ^( $show_stmt ^( EVENTS ( FULL )? ) ) | FUNCTION CODE ident -> ^( $show_stmt ^( CODE FUNCTION ident ) ) | FUNCTION STATUS ( like_or_where )? -> ^( $show_stmt ^( STATUS FUNCTION ( like_or_where )? ) ) | GRANTS FOR (whom= USER_HOST |whom= CURRENT_USER |whom= CURRENT_USER LPAREN RPAREN ) -> ^( $show_stmt ^( GRANTS $whom) ) | INDEX_SYM FROM simple_table_ref_no_alias ( ( FROM | IN ) ident )? -> ^( $show_stmt ^( INDEX_SYM simple_table_ref_no_alias ( ident )? ) ) | INNODB STATUS -> ^( $show_stmt ^( ENGINE INNODB STATUS ) ) | OPEN TABLES ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( OPEN ( ident )? ( like_or_where )? ) ) | PLUGINS -> ^( $show_stmt ^( PLUGINS ) ) | PROCEDURE CODE ident -> ^( $show_stmt ^( CODE PROCEDURE ident ) ) | PROCEDURE STATUS ( like_or_where )? -> ^( $show_stmt ^( STATUS PROCEDURE ident ) ) | PRIVILEGES -> ^( $show_stmt ^( PRIVILEGES ) ) | ( FULL )? PROCESSLIST -> ^( $show_stmt ^( PROCESSLIST ( FULL )? ) ) | PROFILE show_profile_types ( FOR QUERY NUMBER )? ( limit )? -> ^( $show_stmt ^( PROFILE show_profile_types ( NUMBER )? ( limit )? ) ) | PROFILES -> ^( $show_stmt ^( PROFILES ) ) | SCHEDULER STATUS -> ^( $show_stmt ^( STATUS SCHEDULER ) ) | optScopeModifier STATUS ( like_or_where )? -> ^( $show_stmt ^( STATUS ( optScopeModifier )? ( like_or_where )? ) ) | TABLE STATUS ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( STATUS TABLE ( ident )? ( like_or_where )? ) ) | TABLES ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( TABLES ( ident )? ( like_or_where )? ) ) | TRIGGERS ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( TRIGGERS ( ident )? ( like_or_where )? ) ) | optScopeModifier VARIABLES ( like_or_where )? -> ^( $show_stmt ^( VARIABLES ( optScopeModifier )? ( like_or_where )? ) ) | WARNINGS ( limit )? -> ^( $show_stmt ^( WARNINGS ( limit )? ) ) )
			int alt43=38;
			try { DebugEnterSubRule(43);
			try { DebugEnterDecision(43, false);
			try
			{
				alt43 = dfa43.Predict(input);
			}
			catch (NoViableAltException nvae)
			{
				DebugRecognitionException(nvae);
				throw;
			}
			} finally { DebugExitDecision(43); }
			switch (alt43)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:65:7: AUTHORS
				{
				DebugLocation(65, 7);
				AUTHORS16=(IToken)Match(input,AUTHORS,Follow._AUTHORS_in_show_stmt263); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_AUTHORS.Add(AUTHORS16);



				{
				// AST REWRITE
				// elements: show_stmt, AUTHORS
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 65:19: -> ^( $show_stmt ^( AUTHORS ) )
				{
					DebugLocation(65, 22);
					// MySQL51Parser.g3:65:22: ^( $show_stmt ^( AUTHORS ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(65, 25);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(65, 35);
					// MySQL51Parser.g3:65:35: ^( AUTHORS )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(65, 37);
					root_2 = (object)adaptor.BecomeRoot(stream_AUTHORS.NextNode(), root_2);

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:66:7: BINLOG EVENTS ( IN logName= STRING )? ( FROM NUMBER )? ( limit )?
				{
				DebugLocation(66, 7);
				BINLOG17=(IToken)Match(input,BINLOG,Follow._BINLOG_in_show_stmt286); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_BINLOG.Add(BINLOG17);

				DebugLocation(66, 14);
				EVENTS18=(IToken)Match(input,EVENTS,Follow._EVENTS_in_show_stmt288); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_EVENTS.Add(EVENTS18);

				DebugLocation(66, 21);
				// MySQL51Parser.g3:66:21: ( IN logName= STRING )?
				int alt4=2;
				try { DebugEnterSubRule(4);
				try { DebugEnterDecision(4, false);
				int LA4_0 = input.LA(1);

				if ((LA4_0==IN))
				{
					alt4 = 1;
				}
				} finally { DebugExitDecision(4); }
				switch (alt4)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:66:22: IN logName= STRING
					{
					DebugLocation(66, 22);
					IN19=(IToken)Match(input,IN,Follow._IN_in_show_stmt291); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_IN.Add(IN19);

					DebugLocation(66, 32);
					logName=(IToken)Match(input,STRING,Follow._STRING_in_show_stmt295); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_STRING.Add(logName);


					}
					break;

				}
				} finally { DebugExitSubRule(4); }

				DebugLocation(66, 42);
				// MySQL51Parser.g3:66:42: ( FROM NUMBER )?
				int alt5=2;
				try { DebugEnterSubRule(5);
				try { DebugEnterDecision(5, false);
				int LA5_0 = input.LA(1);

				if ((LA5_0==FROM))
				{
					alt5 = 1;
				}
				} finally { DebugExitDecision(5); }
				switch (alt5)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:66:43: FROM NUMBER
					{
					DebugLocation(66, 43);
					FROM20=(IToken)Match(input,FROM,Follow._FROM_in_show_stmt300); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_FROM.Add(FROM20);

					DebugLocation(66, 48);
					NUMBER21=(IToken)Match(input,NUMBER,Follow._NUMBER_in_show_stmt302); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_NUMBER.Add(NUMBER21);


					}
					break;

				}
				} finally { DebugExitSubRule(5); }

				DebugLocation(66, 57);
				// MySQL51Parser.g3:66:57: ( limit )?
				int alt6=2;
				try { DebugEnterSubRule(6);
				try { DebugEnterDecision(6, false);
				int LA6_0 = input.LA(1);

				if ((LA6_0==LIMIT))
				{
					alt6 = 1;
				}
				} finally { DebugExitDecision(6); }
				switch (alt6)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:66:57: limit
					{
					DebugLocation(66, 57);
					PushFollow(Follow._limit_in_show_stmt306);
					limit22=limit();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_limit.Add(limit22.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(6); }



				{
				// AST REWRITE
				// elements: show_stmt, BINLOG, logName, NUMBER, limit
				// token labels: logName
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleITokenStream stream_logName=new RewriteRuleITokenStream(adaptor,"token logName",logName);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 66:65: -> ^( $show_stmt ^( BINLOG ( $logName)? ( NUMBER )? ( limit )? ) )
				{
					DebugLocation(66, 68);
					// MySQL51Parser.g3:66:68: ^( $show_stmt ^( BINLOG ( $logName)? ( NUMBER )? ( limit )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(66, 71);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(66, 81);
					// MySQL51Parser.g3:66:81: ^( BINLOG ( $logName)? ( NUMBER )? ( limit )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(66, 83);
					root_2 = (object)adaptor.BecomeRoot(stream_BINLOG.NextNode(), root_2);

					DebugLocation(66, 91);
					// MySQL51Parser.g3:66:91: ( $logName)?
					if (stream_logName.HasNext)
					{
						DebugLocation(66, 91);
						adaptor.AddChild(root_2, stream_logName.NextNode());

					}
					stream_logName.Reset();
					DebugLocation(66, 100);
					// MySQL51Parser.g3:66:100: ( NUMBER )?
					if (stream_NUMBER.HasNext)
					{
						DebugLocation(66, 100);
						adaptor.AddChild(root_2, stream_NUMBER.NextNode());

					}
					stream_NUMBER.Reset();
					DebugLocation(66, 108);
					// MySQL51Parser.g3:66:108: ( limit )?
					if (stream_limit.HasNext)
					{
						DebugLocation(66, 108);
						adaptor.AddChild(root_2, stream_limit.NextTree());

					}
					stream_limit.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:67:7: CHARACTER SET ( like_or_where )?
				{
				DebugLocation(67, 7);
				CHARACTER23=(IToken)Match(input,CHARACTER,Follow._CHARACTER_in_show_stmt337); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CHARACTER.Add(CHARACTER23);

				DebugLocation(67, 17);
				SET24=(IToken)Match(input,SET,Follow._SET_in_show_stmt339); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_SET.Add(SET24);

				DebugLocation(67, 21);
				// MySQL51Parser.g3:67:21: ( like_or_where )?
				int alt7=2;
				try { DebugEnterSubRule(7);
				try { DebugEnterDecision(7, false);
				int LA7_0 = input.LA(1);

				if ((LA7_0==LIKE||LA7_0==WHERE))
				{
					alt7 = 1;
				}
				} finally { DebugExitDecision(7); }
				switch (alt7)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:67:21: like_or_where
					{
					DebugLocation(67, 21);
					PushFollow(Follow._like_or_where_in_show_stmt341);
					like_or_where25=like_or_where();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_like_or_where.Add(like_or_where25.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(7); }



				{
				// AST REWRITE
				// elements: show_stmt, CHARACTER, like_or_where
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 67:37: -> ^( $show_stmt ^( CHARACTER ( like_or_where )? ) )
				{
					DebugLocation(67, 40);
					// MySQL51Parser.g3:67:40: ^( $show_stmt ^( CHARACTER ( like_or_where )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(67, 43);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(67, 53);
					// MySQL51Parser.g3:67:53: ^( CHARACTER ( like_or_where )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(67, 55);
					root_2 = (object)adaptor.BecomeRoot(stream_CHARACTER.NextNode(), root_2);

					DebugLocation(67, 65);
					// MySQL51Parser.g3:67:65: ( like_or_where )?
					if (stream_like_or_where.HasNext)
					{
						DebugLocation(67, 65);
						adaptor.AddChild(root_2, stream_like_or_where.NextTree());

					}
					stream_like_or_where.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:68:7: COLLATION ( like_or_where )?
				{
				DebugLocation(68, 7);
				COLLATION26=(IToken)Match(input,COLLATION,Follow._COLLATION_in_show_stmt365); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COLLATION.Add(COLLATION26);

				DebugLocation(68, 17);
				// MySQL51Parser.g3:68:17: ( like_or_where )?
				int alt8=2;
				try { DebugEnterSubRule(8);
				try { DebugEnterDecision(8, false);
				int LA8_0 = input.LA(1);

				if ((LA8_0==LIKE||LA8_0==WHERE))
				{
					alt8 = 1;
				}
				} finally { DebugExitDecision(8); }
				switch (alt8)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:68:17: like_or_where
					{
					DebugLocation(68, 17);
					PushFollow(Follow._like_or_where_in_show_stmt367);
					like_or_where27=like_or_where();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_like_or_where.Add(like_or_where27.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(8); }



				{
				// AST REWRITE
				// elements: show_stmt, COLLATION, like_or_where
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 68:35: -> ^( $show_stmt ^( COLLATION ( like_or_where )? ) )
				{
					DebugLocation(68, 38);
					// MySQL51Parser.g3:68:38: ^( $show_stmt ^( COLLATION ( like_or_where )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(68, 41);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(68, 51);
					// MySQL51Parser.g3:68:51: ^( COLLATION ( like_or_where )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(68, 53);
					root_2 = (object)adaptor.BecomeRoot(stream_COLLATION.NextNode(), root_2);

					DebugLocation(68, 63);
					// MySQL51Parser.g3:68:63: ( like_or_where )?
					if (stream_like_or_where.HasNext)
					{
						DebugLocation(68, 63);
						adaptor.AddChild(root_2, stream_like_or_where.NextTree());

					}
					stream_like_or_where.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 5:
				DebugEnterAlt(5);
				// MySQL51Parser.g3:69:7: ( FULL )? COLUMNS ( FROM | IN ) simple_table_ref_no_alias ( ( FROM | IN ) ident )? ( like_or_where )?
				{
				DebugLocation(69, 7);
				// MySQL51Parser.g3:69:7: ( FULL )?
				int alt9=2;
				try { DebugEnterSubRule(9);
				try { DebugEnterDecision(9, false);
				int LA9_0 = input.LA(1);

				if ((LA9_0==FULL))
				{
					alt9 = 1;
				}
				} finally { DebugExitDecision(9); }
				switch (alt9)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:69:7: FULL
					{
					DebugLocation(69, 7);
					FULL28=(IToken)Match(input,FULL,Follow._FULL_in_show_stmt393); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_FULL.Add(FULL28);


					}
					break;

				}
				} finally { DebugExitSubRule(9); }

				DebugLocation(69, 13);
				COLUMNS29=(IToken)Match(input,COLUMNS,Follow._COLUMNS_in_show_stmt396); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COLUMNS.Add(COLUMNS29);

				DebugLocation(69, 21);
				// MySQL51Parser.g3:69:21: ( FROM | IN )
				int alt10=2;
				try { DebugEnterSubRule(10);
				try { DebugEnterDecision(10, false);
				int LA10_0 = input.LA(1);

				if ((LA10_0==FROM))
				{
					alt10 = 1;
				}
				else if ((LA10_0==IN))
				{
					alt10 = 2;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 10, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
				} finally { DebugExitDecision(10); }
				switch (alt10)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:69:22: FROM
					{
					DebugLocation(69, 22);
					FROM30=(IToken)Match(input,FROM,Follow._FROM_in_show_stmt399); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_FROM.Add(FROM30);


					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:69:27: IN
					{
					DebugLocation(69, 27);
					IN31=(IToken)Match(input,IN,Follow._IN_in_show_stmt401); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_IN.Add(IN31);


					}
					break;

				}
				} finally { DebugExitSubRule(10); }

				DebugLocation(69, 31);
				PushFollow(Follow._simple_table_ref_no_alias_in_show_stmt404);
				simple_table_ref_no_alias32=simple_table_ref_no_alias();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_simple_table_ref_no_alias.Add(simple_table_ref_no_alias32.Tree);
				DebugLocation(69, 57);
				// MySQL51Parser.g3:69:57: ( ( FROM | IN ) ident )?
				int alt12=2;
				try { DebugEnterSubRule(12);
				try { DebugEnterDecision(12, false);
				int LA12_0 = input.LA(1);

				if ((LA12_0==FROM||LA12_0==IN))
				{
					alt12 = 1;
				}
				} finally { DebugExitDecision(12); }
				switch (alt12)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:69:58: ( FROM | IN ) ident
					{
					DebugLocation(69, 58);
					// MySQL51Parser.g3:69:58: ( FROM | IN )
					int alt11=2;
					try { DebugEnterSubRule(11);
					try { DebugEnterDecision(11, false);
					int LA11_0 = input.LA(1);

					if ((LA11_0==FROM))
					{
						alt11 = 1;
					}
					else if ((LA11_0==IN))
					{
						alt11 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 11, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					} finally { DebugExitDecision(11); }
					switch (alt11)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:69:59: FROM
						{
						DebugLocation(69, 59);
						FROM33=(IToken)Match(input,FROM,Follow._FROM_in_show_stmt408); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_FROM.Add(FROM33);


						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:69:64: IN
						{
						DebugLocation(69, 64);
						IN34=(IToken)Match(input,IN,Follow._IN_in_show_stmt410); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_IN.Add(IN34);


						}
						break;

					}
					} finally { DebugExitSubRule(11); }

					DebugLocation(69, 68);
					PushFollow(Follow._ident_in_show_stmt413);
					ident35=ident();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_ident.Add(ident35.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(12); }

				DebugLocation(69, 76);
				// MySQL51Parser.g3:69:76: ( like_or_where )?
				int alt13=2;
				try { DebugEnterSubRule(13);
				try { DebugEnterDecision(13, false);
				int LA13_0 = input.LA(1);

				if ((LA13_0==LIKE||LA13_0==WHERE))
				{
					alt13 = 1;
				}
				} finally { DebugExitDecision(13); }
				switch (alt13)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:69:76: like_or_where
					{
					DebugLocation(69, 76);
					PushFollow(Follow._like_or_where_in_show_stmt417);
					like_or_where36=like_or_where();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_like_or_where.Add(like_or_where36.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(13); }



				{
				// AST REWRITE
				// elements: show_stmt, COLUMNS, FULL, simple_table_ref_no_alias, ident, like_or_where
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 69:91: -> ^( $show_stmt ^( COLUMNS ( FULL )? simple_table_ref_no_alias ( ident )? ( like_or_where )? ) )
				{
					DebugLocation(69, 94);
					// MySQL51Parser.g3:69:94: ^( $show_stmt ^( COLUMNS ( FULL )? simple_table_ref_no_alias ( ident )? ( like_or_where )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(69, 97);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(69, 107);
					// MySQL51Parser.g3:69:107: ^( COLUMNS ( FULL )? simple_table_ref_no_alias ( ident )? ( like_or_where )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(69, 109);
					root_2 = (object)adaptor.BecomeRoot(stream_COLUMNS.NextNode(), root_2);

					DebugLocation(69, 117);
					// MySQL51Parser.g3:69:117: ( FULL )?
					if (stream_FULL.HasNext)
					{
						DebugLocation(69, 117);
						adaptor.AddChild(root_2, stream_FULL.NextNode());

					}
					stream_FULL.Reset();
					DebugLocation(69, 123);
					adaptor.AddChild(root_2, stream_simple_table_ref_no_alias.NextTree());
					DebugLocation(69, 149);
					// MySQL51Parser.g3:69:149: ( ident )?
					if (stream_ident.HasNext)
					{
						DebugLocation(69, 149);
						adaptor.AddChild(root_2, stream_ident.NextTree());

					}
					stream_ident.Reset();
					DebugLocation(69, 156);
					// MySQL51Parser.g3:69:156: ( like_or_where )?
					if (stream_like_or_where.HasNext)
					{
						DebugLocation(69, 156);
						adaptor.AddChild(root_2, stream_like_or_where.NextTree());

					}
					stream_like_or_where.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 6:
				DebugEnterAlt(6);
				// MySQL51Parser.g3:70:7: CONTRIBUTORS
				{
				DebugLocation(70, 7);
				CONTRIBUTORS37=(IToken)Match(input,CONTRIBUTORS,Follow._CONTRIBUTORS_in_show_stmt448); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CONTRIBUTORS.Add(CONTRIBUTORS37);



				{
				// AST REWRITE
				// elements: show_stmt, CONTRIBUTORS
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 70:21: -> ^( $show_stmt ^( CONTRIBUTORS ) )
				{
					DebugLocation(70, 24);
					// MySQL51Parser.g3:70:24: ^( $show_stmt ^( CONTRIBUTORS ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(70, 27);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(70, 37);
					// MySQL51Parser.g3:70:37: ^( CONTRIBUTORS )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(70, 39);
					root_2 = (object)adaptor.BecomeRoot(stream_CONTRIBUTORS.NextNode(), root_2);

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 7:
				DebugEnterAlt(7);
				// MySQL51Parser.g3:71:7: CREATE DATABASE ident
				{
				DebugLocation(71, 7);
				CREATE38=(IToken)Match(input,CREATE,Follow._CREATE_in_show_stmt468); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CREATE.Add(CREATE38);

				DebugLocation(71, 14);
				DATABASE39=(IToken)Match(input,DATABASE,Follow._DATABASE_in_show_stmt470); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_DATABASE.Add(DATABASE39);

				DebugLocation(71, 23);
				PushFollow(Follow._ident_in_show_stmt472);
				ident40=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(ident40.Tree);


				{
				// AST REWRITE
				// elements: show_stmt, CREATE, DATABASE, ident
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 71:29: -> ^( $show_stmt ^( CREATE DATABASE ident ) )
				{
					DebugLocation(71, 32);
					// MySQL51Parser.g3:71:32: ^( $show_stmt ^( CREATE DATABASE ident ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(71, 35);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(71, 45);
					// MySQL51Parser.g3:71:45: ^( CREATE DATABASE ident )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(71, 47);
					root_2 = (object)adaptor.BecomeRoot(stream_CREATE.NextNode(), root_2);

					DebugLocation(71, 54);
					adaptor.AddChild(root_2, stream_DATABASE.NextNode());
					DebugLocation(71, 63);
					adaptor.AddChild(root_2, stream_ident.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 8:
				DebugEnterAlt(8);
				// MySQL51Parser.g3:72:7: CREATE EVENT ident
				{
				DebugLocation(72, 7);
				CREATE41=(IToken)Match(input,CREATE,Follow._CREATE_in_show_stmt495); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CREATE.Add(CREATE41);

				DebugLocation(72, 14);
				EVENT42=(IToken)Match(input,EVENT,Follow._EVENT_in_show_stmt497); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_EVENT.Add(EVENT42);

				DebugLocation(72, 20);
				PushFollow(Follow._ident_in_show_stmt499);
				ident43=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(ident43.Tree);


				{
				// AST REWRITE
				// elements: show_stmt, CREATE, EVENT, ident
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 72:29: -> ^( $show_stmt ^( CREATE EVENT ident ) )
				{
					DebugLocation(72, 32);
					// MySQL51Parser.g3:72:32: ^( $show_stmt ^( CREATE EVENT ident ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(72, 35);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(72, 45);
					// MySQL51Parser.g3:72:45: ^( CREATE EVENT ident )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(72, 47);
					root_2 = (object)adaptor.BecomeRoot(stream_CREATE.NextNode(), root_2);

					DebugLocation(72, 54);
					adaptor.AddChild(root_2, stream_EVENT.NextNode());
					DebugLocation(72, 60);
					adaptor.AddChild(root_2, stream_ident.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 9:
				DebugEnterAlt(9);
				// MySQL51Parser.g3:73:7: CREATE FUNCTION ident
				{
				DebugLocation(73, 7);
				CREATE44=(IToken)Match(input,CREATE,Follow._CREATE_in_show_stmt525); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CREATE.Add(CREATE44);

				DebugLocation(73, 14);
				FUNCTION45=(IToken)Match(input,FUNCTION,Follow._FUNCTION_in_show_stmt527); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_FUNCTION.Add(FUNCTION45);

				DebugLocation(73, 23);
				PushFollow(Follow._ident_in_show_stmt529);
				ident46=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(ident46.Tree);


				{
				// AST REWRITE
				// elements: show_stmt, CREATE, FUNCTION, ident
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 73:29: -> ^( $show_stmt ^( CREATE FUNCTION ident ) )
				{
					DebugLocation(73, 32);
					// MySQL51Parser.g3:73:32: ^( $show_stmt ^( CREATE FUNCTION ident ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(73, 35);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(73, 45);
					// MySQL51Parser.g3:73:45: ^( CREATE FUNCTION ident )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(73, 47);
					root_2 = (object)adaptor.BecomeRoot(stream_CREATE.NextNode(), root_2);

					DebugLocation(73, 54);
					adaptor.AddChild(root_2, stream_FUNCTION.NextNode());
					DebugLocation(73, 63);
					adaptor.AddChild(root_2, stream_ident.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 10:
				DebugEnterAlt(10);
				// MySQL51Parser.g3:74:7: CREATE PROCEDURE ident
				{
				DebugLocation(74, 7);
				CREATE47=(IToken)Match(input,CREATE,Follow._CREATE_in_show_stmt552); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CREATE.Add(CREATE47);

				DebugLocation(74, 14);
				PROCEDURE48=(IToken)Match(input,PROCEDURE,Follow._PROCEDURE_in_show_stmt554); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_PROCEDURE.Add(PROCEDURE48);

				DebugLocation(74, 24);
				PushFollow(Follow._ident_in_show_stmt556);
				ident49=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(ident49.Tree);


				{
				// AST REWRITE
				// elements: show_stmt, CREATE, PROCEDURE, ident
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 74:31: -> ^( $show_stmt ^( CREATE PROCEDURE ident ) )
				{
					DebugLocation(74, 34);
					// MySQL51Parser.g3:74:34: ^( $show_stmt ^( CREATE PROCEDURE ident ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(74, 37);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(74, 47);
					// MySQL51Parser.g3:74:47: ^( CREATE PROCEDURE ident )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(74, 49);
					root_2 = (object)adaptor.BecomeRoot(stream_CREATE.NextNode(), root_2);

					DebugLocation(74, 56);
					adaptor.AddChild(root_2, stream_PROCEDURE.NextNode());
					DebugLocation(74, 66);
					adaptor.AddChild(root_2, stream_ident.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 11:
				DebugEnterAlt(11);
				// MySQL51Parser.g3:75:7: CREATE TABLE simple_table_ref_no_alias
				{
				DebugLocation(75, 7);
				CREATE50=(IToken)Match(input,CREATE,Follow._CREATE_in_show_stmt580); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CREATE.Add(CREATE50);

				DebugLocation(75, 14);
				TABLE51=(IToken)Match(input,TABLE,Follow._TABLE_in_show_stmt582); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TABLE.Add(TABLE51);

				DebugLocation(75, 20);
				PushFollow(Follow._simple_table_ref_no_alias_in_show_stmt584);
				simple_table_ref_no_alias52=simple_table_ref_no_alias();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_simple_table_ref_no_alias.Add(simple_table_ref_no_alias52.Tree);


				{
				// AST REWRITE
				// elements: show_stmt, CREATE, TABLE, simple_table_ref_no_alias
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 75:47: -> ^( $show_stmt ^( CREATE TABLE simple_table_ref_no_alias ) )
				{
					DebugLocation(75, 50);
					// MySQL51Parser.g3:75:50: ^( $show_stmt ^( CREATE TABLE simple_table_ref_no_alias ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(75, 53);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(75, 63);
					// MySQL51Parser.g3:75:63: ^( CREATE TABLE simple_table_ref_no_alias )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(75, 65);
					root_2 = (object)adaptor.BecomeRoot(stream_CREATE.NextNode(), root_2);

					DebugLocation(75, 72);
					adaptor.AddChild(root_2, stream_TABLE.NextNode());
					DebugLocation(75, 78);
					adaptor.AddChild(root_2, stream_simple_table_ref_no_alias.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 12:
				DebugEnterAlt(12);
				// MySQL51Parser.g3:76:7: CREATE TRIGGER ident
				{
				DebugLocation(76, 7);
				CREATE53=(IToken)Match(input,CREATE,Follow._CREATE_in_show_stmt608); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CREATE.Add(CREATE53);

				DebugLocation(76, 14);
				TRIGGER54=(IToken)Match(input,TRIGGER,Follow._TRIGGER_in_show_stmt610); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TRIGGER.Add(TRIGGER54);

				DebugLocation(76, 22);
				PushFollow(Follow._ident_in_show_stmt612);
				ident55=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(ident55.Tree);


				{
				// AST REWRITE
				// elements: show_stmt, CREATE, TRIGGER, ident
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 76:29: -> ^( $show_stmt ^( CREATE TRIGGER ident ) )
				{
					DebugLocation(76, 32);
					// MySQL51Parser.g3:76:32: ^( $show_stmt ^( CREATE TRIGGER ident ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(76, 35);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(76, 45);
					// MySQL51Parser.g3:76:45: ^( CREATE TRIGGER ident )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(76, 47);
					root_2 = (object)adaptor.BecomeRoot(stream_CREATE.NextNode(), root_2);

					DebugLocation(76, 54);
					adaptor.AddChild(root_2, stream_TRIGGER.NextNode());
					DebugLocation(76, 62);
					adaptor.AddChild(root_2, stream_ident.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 13:
				DebugEnterAlt(13);
				// MySQL51Parser.g3:77:7: CREATE VIEW ident
				{
				DebugLocation(77, 7);
				CREATE56=(IToken)Match(input,CREATE,Follow._CREATE_in_show_stmt636); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CREATE.Add(CREATE56);

				DebugLocation(77, 14);
				VIEW57=(IToken)Match(input,VIEW,Follow._VIEW_in_show_stmt638); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_VIEW.Add(VIEW57);

				DebugLocation(77, 19);
				PushFollow(Follow._ident_in_show_stmt640);
				ident58=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(ident58.Tree);


				{
				// AST REWRITE
				// elements: show_stmt, CREATE, VIEW, ident
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 77:27: -> ^( $show_stmt ^( CREATE VIEW ident ) )
				{
					DebugLocation(77, 30);
					// MySQL51Parser.g3:77:30: ^( $show_stmt ^( CREATE VIEW ident ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(77, 33);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(77, 43);
					// MySQL51Parser.g3:77:43: ^( CREATE VIEW ident )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(77, 45);
					root_2 = (object)adaptor.BecomeRoot(stream_CREATE.NextNode(), root_2);

					DebugLocation(77, 52);
					adaptor.AddChild(root_2, stream_VIEW.NextNode());
					DebugLocation(77, 57);
					adaptor.AddChild(root_2, stream_ident.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 14:
				DebugEnterAlt(14);
				// MySQL51Parser.g3:78:7: DATABASES ( like_or_where )?
				{
				DebugLocation(78, 7);
				DATABASES59=(IToken)Match(input,DATABASES,Follow._DATABASES_in_show_stmt665); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_DATABASES.Add(DATABASES59);

				DebugLocation(78, 17);
				// MySQL51Parser.g3:78:17: ( like_or_where )?
				int alt14=2;
				try { DebugEnterSubRule(14);
				try { DebugEnterDecision(14, false);
				int LA14_0 = input.LA(1);

				if ((LA14_0==LIKE||LA14_0==WHERE))
				{
					alt14 = 1;
				}
				} finally { DebugExitDecision(14); }
				switch (alt14)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:78:17: like_or_where
					{
					DebugLocation(78, 17);
					PushFollow(Follow._like_or_where_in_show_stmt667);
					like_or_where60=like_or_where();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_like_or_where.Add(like_or_where60.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(14); }



				{
				// AST REWRITE
				// elements: show_stmt, DATABASES, like_or_where
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 78:33: -> ^( $show_stmt ^( DATABASES ( like_or_where )? ) )
				{
					DebugLocation(78, 36);
					// MySQL51Parser.g3:78:36: ^( $show_stmt ^( DATABASES ( like_or_where )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(78, 39);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(78, 49);
					// MySQL51Parser.g3:78:49: ^( DATABASES ( like_or_where )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(78, 51);
					root_2 = (object)adaptor.BecomeRoot(stream_DATABASES.NextNode(), root_2);

					DebugLocation(78, 61);
					// MySQL51Parser.g3:78:61: ( like_or_where )?
					if (stream_like_or_where.HasNext)
					{
						DebugLocation(78, 61);
						adaptor.AddChild(root_2, stream_like_or_where.NextTree());

					}
					stream_like_or_where.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 15:
				DebugEnterAlt(15);
				// MySQL51Parser.g3:79:7: ENGINE ( INNODB | ident ) (what= STATUS |what= MUTEX )
				{
				DebugLocation(79, 7);
				ENGINE61=(IToken)Match(input,ENGINE,Follow._ENGINE_in_show_stmt691); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_ENGINE.Add(ENGINE61);

				DebugLocation(79, 14);
				// MySQL51Parser.g3:79:14: ( INNODB | ident )
				int alt15=2;
				try { DebugEnterSubRule(15);
				try { DebugEnterDecision(15, false);
				int LA15_0 = input.LA(1);

				if ((LA15_0==INNODB))
				{
					alt15 = 1;
				}
				else if ((LA15_0==ACTION||(LA15_0>=ADDDATE && LA15_0<=ALGORITHM)||LA15_0==ANY||LA15_0==ASCII||(LA15_0>=AT && LA15_0<=BACKUP)||LA15_0==BEGIN||(LA15_0>=BINLOG && LA15_0<=BIT)||(LA15_0>=BLOCK && LA15_0<=BOOLEAN)||LA15_0==BTREE||(LA15_0>=BYTE && LA15_0<=CACHE)||LA15_0==CASCADED||LA15_0==CHAIN||LA15_0==CHANGED||LA15_0==CHARSET||(LA15_0>=CHECKSUM && LA15_0<=CODE)||LA15_0==COLLATION||LA15_0==COLUMNS||LA15_0==COMMENT||(LA15_0>=COMMIT && LA15_0<=CONCURRENT)||(LA15_0>=CONNECTION && LA15_0<=CONSISTENT)||(LA15_0>=CONTAINS && LA15_0<=CONTEXT)||LA15_0==CONTRIBUTORS||LA15_0==CPU||LA15_0==CUBE||LA15_0==DATA||(LA15_0>=DATAFILE && LA15_0<=DATETIME)||LA15_0==DAY||LA15_0==DEALLOCATE||LA15_0==DEFINER||LA15_0==DELAY_KEY_WRITE||LA15_0==DES_KEY_FILE||(LA15_0>=DIRECTORY && LA15_0<=DISK)||LA15_0==DO||(LA15_0>=DUMPFILE && LA15_0<=DYNAMIC)||LA15_0==ENABLE||(LA15_0>=END && LA15_0<=ENUM)||(LA15_0>=ERRORS && LA15_0<=ESCAPE)||(LA15_0>=EVENT && LA15_0<=EXECUTE)||LA15_0==EXPANSION||(LA15_0>=EXTENDED && LA15_0<=EXTENT_SIZE)||(LA15_0>=FAST && LA15_0<=FAULTS)||(LA15_0>=FIELDS && LA15_0<=FIXED)||LA15_0==FLUSH||(LA15_0>=FOUND && LA15_0<=FRAC_SECOND)||LA15_0==FULL||(LA15_0>=FUNCTION && LA15_0<=GLOBAL)||LA15_0==GRANTS||LA15_0==GROUP||(LA15_0>=HANDLER && LA15_0<=HASH)||LA15_0==HELP||(LA15_0>=HOST && LA15_0<=HOUR)||(LA15_0>=ID && LA15_0<=IDENTIFIED)||LA15_0==IMPORT||LA15_0==INDEXES||LA15_0==INITIAL_SIZE||LA15_0==INNOBASE||(LA15_0>=INSERT_METHOD && LA15_0<=INSTALL)||(LA15_0>=INVOKER && LA15_0<=IPC)||(LA15_0>=ISOLATION && LA15_0<=ISSUER)||LA15_0==KEY_BLOCK_SIZE||(LA15_0>=LABEL && LA15_0<=LAST)||LA15_0==LEAVES||LA15_0==LESS||LA15_0==LEVEL||(LA15_0>=LINESTRING && LA15_0<=LIST)||LA15_0==LOCAL||(LA15_0>=LOCKS && LA15_0<=LOGFILE)||LA15_0==LOGS||(LA15_0>=MASTER && LA15_0<=MASTER_SSL_KEY)||LA15_0==MASTER_USER||(LA15_0>=MAX_CONNECTIONS_PER_HOUR && LA15_0<=MEDIUM)||(LA15_0>=MEMORY && LA15_0<=MICROSECOND)||LA15_0==MIGRATE||LA15_0==MINUTE||LA15_0==MIN_ROWS||LA15_0==MODE||LA15_0==MODIFY||LA15_0==MONTH||(LA15_0>=MULTILINESTRING && LA15_0<=NATIONAL)||(LA15_0>=NCHAR && LA15_0<=NONE)||LA15_0==NO_WAIT||(LA15_0>=NVARCHAR && LA15_0<=OLD_PASSWORD)||(LA15_0>=ONE && LA15_0<=OPEN)||LA15_0==OPTIONS||(LA15_0>=OWNER && LA15_0<=PLUGINS)||(LA15_0>=POINT && LA15_0<=PORT)||(LA15_0>=PREPARE && LA15_0<=PREV)||LA15_0==PRIVILEGES||(LA15_0>=PROCESS && LA15_0<=PROFILES)||(LA15_0>=QUARTER && LA15_0<=QUICK)||(LA15_0>=REBUILD && LA15_0<=REDUNDANT)||(LA15_0>=RELAY_LOG_FILE && LA15_0<=RELAY_THREAD)||(LA15_0>=RELOAD && LA15_0<=REMOVE)||(LA15_0>=REORGANIZE && LA15_0<=REPAIR)||LA15_0==REPEATABLE||LA15_0==REPLICATION||(LA15_0>=RESET && LA15_0<=RESTORE)||LA15_0==RESUME||LA15_0==RETURNS||(LA15_0>=ROLLBACK && LA15_0<=ROW_FORMAT)||(LA15_0>=RTREE && LA15_0<=SCHEDULE)||LA15_0==SECOND||LA15_0==SECURITY||(LA15_0>=SERIAL && LA15_0<=SESSION)||LA15_0==SHARE||(LA15_0>=SHUTDOWN && LA15_0<=SLAVE)||(LA15_0>=SNAPSHOT && LA15_0<=SOCKET)||(LA15_0>=SONAME && LA15_0<=SOURCE)||(LA15_0>=SQL_BUFFER_RESULT && LA15_0<=SQL_CACHE)||LA15_0==SQL_NO_CACHE||LA15_0==SQL_THREAD||LA15_0==START||(LA15_0>=STARTS && LA15_0<=STATUS)||(LA15_0>=STOP && LA15_0<=STORAGE)||(LA15_0>=STRING_KEYWORD && LA15_0<=SUBPARTITIONS)||(LA15_0>=SUPER && LA15_0<=SWITCHES)||(LA15_0>=TABLES && LA15_0<=TEMPTABLE)||(LA15_0>=TEXT && LA15_0<=THAN)||(LA15_0>=TIME && LA15_0<=TIMESTAMP_DIFF)||(LA15_0>=TRANSACTION && LA15_0<=TRANSACTIONAL)||LA15_0==TRIGGERS||(LA15_0>=TRUNCATE && LA15_0<=UNDEFINED)||(LA15_0>=UNDOFILE && LA15_0<=UNINSTALL)||LA15_0==UNKNOWN||LA15_0==UNTIL||LA15_0==UPGRADE||LA15_0==USER||LA15_0==USE_FRM||LA15_0==VALUE||LA15_0==VARIABLES||(LA15_0>=VIEW && LA15_0<=WEEK)||(LA15_0>=WORK && LA15_0<=WRAPPER)||(LA15_0>=X509 && LA15_0<=XA)||LA15_0==YEAR))
				{
					alt15 = 2;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 15, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
				} finally { DebugExitDecision(15); }
				switch (alt15)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:79:15: INNODB
					{
					DebugLocation(79, 15);
					INNODB62=(IToken)Match(input,INNODB,Follow._INNODB_in_show_stmt694); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_INNODB.Add(INNODB62);


					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:79:24: ident
					{
					DebugLocation(79, 24);
					PushFollow(Follow._ident_in_show_stmt698);
					ident63=ident();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_ident.Add(ident63.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(15); }

				DebugLocation(79, 31);
				// MySQL51Parser.g3:79:31: (what= STATUS |what= MUTEX )
				int alt16=2;
				try { DebugEnterSubRule(16);
				try { DebugEnterDecision(16, false);
				int LA16_0 = input.LA(1);

				if ((LA16_0==STATUS))
				{
					alt16 = 1;
				}
				else if ((LA16_0==MUTEX))
				{
					alt16 = 2;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 16, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
				} finally { DebugExitDecision(16); }
				switch (alt16)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:79:32: what= STATUS
					{
					DebugLocation(79, 36);
					what=(IToken)Match(input,STATUS,Follow._STATUS_in_show_stmt704); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_STATUS.Add(what);


					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:79:46: what= MUTEX
					{
					DebugLocation(79, 50);
					what=(IToken)Match(input,MUTEX,Follow._MUTEX_in_show_stmt710); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_MUTEX.Add(what);


					}
					break;

				}
				} finally { DebugExitSubRule(16); }



				{
				// AST REWRITE
				// elements: show_stmt, ENGINE, INNODB, ident, what
				// token labels: what
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleITokenStream stream_what=new RewriteRuleITokenStream(adaptor,"token what",what);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 80:21: -> ^( $show_stmt ^( ENGINE ( INNODB )? ( ident )? $what) )
				{
					DebugLocation(80, 24);
					// MySQL51Parser.g3:80:24: ^( $show_stmt ^( ENGINE ( INNODB )? ( ident )? $what) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(80, 27);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(80, 37);
					// MySQL51Parser.g3:80:37: ^( ENGINE ( INNODB )? ( ident )? $what)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(80, 39);
					root_2 = (object)adaptor.BecomeRoot(stream_ENGINE.NextNode(), root_2);

					DebugLocation(80, 46);
					// MySQL51Parser.g3:80:46: ( INNODB )?
					if (stream_INNODB.HasNext)
					{
						DebugLocation(80, 46);
						adaptor.AddChild(root_2, stream_INNODB.NextNode());

					}
					stream_INNODB.Reset();
					DebugLocation(80, 54);
					// MySQL51Parser.g3:80:54: ( ident )?
					if (stream_ident.HasNext)
					{
						DebugLocation(80, 54);
						adaptor.AddChild(root_2, stream_ident.NextTree());

					}
					stream_ident.Reset();
					DebugLocation(80, 62);
					adaptor.AddChild(root_2, stream_what.NextNode());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 16:
				DebugEnterAlt(16);
				// MySQL51Parser.g3:81:7: ( STORAGE )? ENGINES
				{
				DebugLocation(81, 7);
				// MySQL51Parser.g3:81:7: ( STORAGE )?
				int alt17=2;
				try { DebugEnterSubRule(17);
				try { DebugEnterDecision(17, false);
				int LA17_0 = input.LA(1);

				if ((LA17_0==STORAGE))
				{
					alt17 = 1;
				}
				} finally { DebugExitDecision(17); }
				switch (alt17)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:81:7: STORAGE
					{
					DebugLocation(81, 7);
					STORAGE64=(IToken)Match(input,STORAGE,Follow._STORAGE_in_show_stmt760); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_STORAGE.Add(STORAGE64);


					}
					break;

				}
				} finally { DebugExitSubRule(17); }

				DebugLocation(81, 16);
				ENGINES65=(IToken)Match(input,ENGINES,Follow._ENGINES_in_show_stmt763); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_ENGINES.Add(ENGINES65);



				{
				// AST REWRITE
				// elements: show_stmt, ENGINES
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 81:27: -> ^( $show_stmt ^( ENGINES ) )
				{
					DebugLocation(81, 30);
					// MySQL51Parser.g3:81:30: ^( $show_stmt ^( ENGINES ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(81, 33);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(81, 43);
					// MySQL51Parser.g3:81:43: ^( ENGINES )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(81, 45);
					root_2 = (object)adaptor.BecomeRoot(stream_ENGINES.NextNode(), root_2);

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 17:
				DebugEnterAlt(17);
				// MySQL51Parser.g3:82:7: ERRORS ( limit )?
				{
				DebugLocation(82, 7);
				ERRORS66=(IToken)Match(input,ERRORS,Follow._ERRORS_in_show_stmt785); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_ERRORS.Add(ERRORS66);

				DebugLocation(82, 14);
				// MySQL51Parser.g3:82:14: ( limit )?
				int alt18=2;
				try { DebugEnterSubRule(18);
				try { DebugEnterDecision(18, false);
				int LA18_0 = input.LA(1);

				if ((LA18_0==LIMIT))
				{
					alt18 = 1;
				}
				} finally { DebugExitDecision(18); }
				switch (alt18)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:82:14: limit
					{
					DebugLocation(82, 14);
					PushFollow(Follow._limit_in_show_stmt787);
					limit67=limit();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_limit.Add(limit67.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(18); }



				{
				// AST REWRITE
				// elements: show_stmt, ERRORS, limit
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 82:25: -> ^( $show_stmt ^( ERRORS ( limit )? ) )
				{
					DebugLocation(82, 28);
					// MySQL51Parser.g3:82:28: ^( $show_stmt ^( ERRORS ( limit )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(82, 31);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(82, 41);
					// MySQL51Parser.g3:82:41: ^( ERRORS ( limit )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(82, 43);
					root_2 = (object)adaptor.BecomeRoot(stream_ERRORS.NextNode(), root_2);

					DebugLocation(82, 50);
					// MySQL51Parser.g3:82:50: ( limit )?
					if (stream_limit.HasNext)
					{
						DebugLocation(82, 50);
						adaptor.AddChild(root_2, stream_limit.NextTree());

					}
					stream_limit.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 18:
				DebugEnterAlt(18);
				// MySQL51Parser.g3:83:7: ( FULL )? EVENTS
				{
				DebugLocation(83, 7);
				// MySQL51Parser.g3:83:7: ( FULL )?
				int alt19=2;
				try { DebugEnterSubRule(19);
				try { DebugEnterDecision(19, false);
				int LA19_0 = input.LA(1);

				if ((LA19_0==FULL))
				{
					alt19 = 1;
				}
				} finally { DebugExitDecision(19); }
				switch (alt19)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:83:7: FULL
					{
					DebugLocation(83, 7);
					FULL68=(IToken)Match(input,FULL,Follow._FULL_in_show_stmt814); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_FULL.Add(FULL68);


					}
					break;

				}
				} finally { DebugExitSubRule(19); }

				DebugLocation(83, 13);
				EVENTS69=(IToken)Match(input,EVENTS,Follow._EVENTS_in_show_stmt817); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_EVENTS.Add(EVENTS69);



				{
				// AST REWRITE
				// elements: show_stmt, EVENTS, FULL
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 83:25: -> ^( $show_stmt ^( EVENTS ( FULL )? ) )
				{
					DebugLocation(83, 28);
					// MySQL51Parser.g3:83:28: ^( $show_stmt ^( EVENTS ( FULL )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(83, 31);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(83, 41);
					// MySQL51Parser.g3:83:41: ^( EVENTS ( FULL )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(83, 43);
					root_2 = (object)adaptor.BecomeRoot(stream_EVENTS.NextNode(), root_2);

					DebugLocation(83, 50);
					// MySQL51Parser.g3:83:50: ( FULL )?
					if (stream_FULL.HasNext)
					{
						DebugLocation(83, 50);
						adaptor.AddChild(root_2, stream_FULL.NextNode());

					}
					stream_FULL.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 19:
				DebugEnterAlt(19);
				// MySQL51Parser.g3:84:7: FUNCTION CODE ident
				{
				DebugLocation(84, 7);
				FUNCTION70=(IToken)Match(input,FUNCTION,Follow._FUNCTION_in_show_stmt844); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_FUNCTION.Add(FUNCTION70);

				DebugLocation(84, 16);
				CODE71=(IToken)Match(input,CODE,Follow._CODE_in_show_stmt846); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CODE.Add(CODE71);

				DebugLocation(84, 21);
				PushFollow(Follow._ident_in_show_stmt848);
				ident72=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(ident72.Tree);


				{
				// AST REWRITE
				// elements: show_stmt, CODE, FUNCTION, ident
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 84:29: -> ^( $show_stmt ^( CODE FUNCTION ident ) )
				{
					DebugLocation(84, 32);
					// MySQL51Parser.g3:84:32: ^( $show_stmt ^( CODE FUNCTION ident ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(84, 35);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(84, 45);
					// MySQL51Parser.g3:84:45: ^( CODE FUNCTION ident )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(84, 47);
					root_2 = (object)adaptor.BecomeRoot(stream_CODE.NextNode(), root_2);

					DebugLocation(84, 52);
					adaptor.AddChild(root_2, stream_FUNCTION.NextNode());
					DebugLocation(84, 61);
					adaptor.AddChild(root_2, stream_ident.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 20:
				DebugEnterAlt(20);
				// MySQL51Parser.g3:85:7: FUNCTION STATUS ( like_or_where )?
				{
				DebugLocation(85, 7);
				FUNCTION73=(IToken)Match(input,FUNCTION,Follow._FUNCTION_in_show_stmt873); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_FUNCTION.Add(FUNCTION73);

				DebugLocation(85, 16);
				STATUS74=(IToken)Match(input,STATUS,Follow._STATUS_in_show_stmt875); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_STATUS.Add(STATUS74);

				DebugLocation(85, 23);
				// MySQL51Parser.g3:85:23: ( like_or_where )?
				int alt20=2;
				try { DebugEnterSubRule(20);
				try { DebugEnterDecision(20, false);
				int LA20_0 = input.LA(1);

				if ((LA20_0==LIKE||LA20_0==WHERE))
				{
					alt20 = 1;
				}
				} finally { DebugExitDecision(20); }
				switch (alt20)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:85:23: like_or_where
					{
					DebugLocation(85, 23);
					PushFollow(Follow._like_or_where_in_show_stmt877);
					like_or_where75=like_or_where();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_like_or_where.Add(like_or_where75.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(20); }



				{
				// AST REWRITE
				// elements: show_stmt, STATUS, FUNCTION, like_or_where
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 85:39: -> ^( $show_stmt ^( STATUS FUNCTION ( like_or_where )? ) )
				{
					DebugLocation(85, 42);
					// MySQL51Parser.g3:85:42: ^( $show_stmt ^( STATUS FUNCTION ( like_or_where )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(85, 45);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(85, 55);
					// MySQL51Parser.g3:85:55: ^( STATUS FUNCTION ( like_or_where )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(85, 57);
					root_2 = (object)adaptor.BecomeRoot(stream_STATUS.NextNode(), root_2);

					DebugLocation(85, 64);
					adaptor.AddChild(root_2, stream_FUNCTION.NextNode());
					DebugLocation(85, 73);
					// MySQL51Parser.g3:85:73: ( like_or_where )?
					if (stream_like_or_where.HasNext)
					{
						DebugLocation(85, 73);
						adaptor.AddChild(root_2, stream_like_or_where.NextTree());

					}
					stream_like_or_where.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 21:
				DebugEnterAlt(21);
				// MySQL51Parser.g3:86:7: GRANTS FOR (whom= USER_HOST |whom= CURRENT_USER |whom= CURRENT_USER LPAREN RPAREN )
				{
				DebugLocation(86, 7);
				GRANTS76=(IToken)Match(input,GRANTS,Follow._GRANTS_in_show_stmt903); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_GRANTS.Add(GRANTS76);

				DebugLocation(86, 14);
				FOR77=(IToken)Match(input,FOR,Follow._FOR_in_show_stmt905); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_FOR.Add(FOR77);

				DebugLocation(87, 9);
				// MySQL51Parser.g3:87:9: (whom= USER_HOST |whom= CURRENT_USER |whom= CURRENT_USER LPAREN RPAREN )
				int alt21=3;
				try { DebugEnterSubRule(21);
				try { DebugEnterDecision(21, false);
				int LA21_0 = input.LA(1);

				if ((LA21_0==USER_HOST))
				{
					alt21 = 1;
				}
				else if ((LA21_0==CURRENT_USER))
				{
					int LA21_2 = input.LA(2);

					if ((LA21_2==LPAREN))
					{
						alt21 = 3;
					}
					else if ((LA21_2==EOF||LA21_2==SEMI))
					{
						alt21 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 21, 2, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 21, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
				} finally { DebugExitDecision(21); }
				switch (alt21)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:87:11: whom= USER_HOST
					{
					DebugLocation(87, 15);
					whom=(IToken)Match(input,USER_HOST,Follow._USER_HOST_in_show_stmt919); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_USER_HOST.Add(whom);


					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:88:11: whom= CURRENT_USER
					{
					DebugLocation(88, 15);
					whom=(IToken)Match(input,CURRENT_USER,Follow._CURRENT_USER_in_show_stmt933); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_CURRENT_USER.Add(whom);


					}
					break;
				case 3:
					DebugEnterAlt(3);
					// MySQL51Parser.g3:89:11: whom= CURRENT_USER LPAREN RPAREN
					{
					DebugLocation(89, 15);
					whom=(IToken)Match(input,CURRENT_USER,Follow._CURRENT_USER_in_show_stmt947); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_CURRENT_USER.Add(whom);

					DebugLocation(89, 29);
					LPAREN78=(IToken)Match(input,LPAREN,Follow._LPAREN_in_show_stmt949); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_LPAREN.Add(LPAREN78);

					DebugLocation(89, 36);
					RPAREN79=(IToken)Match(input,RPAREN,Follow._RPAREN_in_show_stmt951); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_RPAREN.Add(RPAREN79);


					}
					break;

				}
				} finally { DebugExitSubRule(21); }



				{
				// AST REWRITE
				// elements: show_stmt, GRANTS, whom
				// token labels: whom
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleITokenStream stream_whom=new RewriteRuleITokenStream(adaptor,"token whom",whom);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 90:19: -> ^( $show_stmt ^( GRANTS $whom) )
				{
					DebugLocation(90, 22);
					// MySQL51Parser.g3:90:22: ^( $show_stmt ^( GRANTS $whom) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(90, 25);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(90, 35);
					// MySQL51Parser.g3:90:35: ^( GRANTS $whom)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(90, 37);
					root_2 = (object)adaptor.BecomeRoot(stream_GRANTS.NextNode(), root_2);

					DebugLocation(90, 45);
					adaptor.AddChild(root_2, stream_whom.NextNode());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 22:
				DebugEnterAlt(22);
				// MySQL51Parser.g3:91:7: INDEX_SYM FROM simple_table_ref_no_alias ( ( FROM | IN ) ident )?
				{
				DebugLocation(91, 7);
				INDEX_SYM80=(IToken)Match(input,INDEX_SYM,Follow._INDEX_SYM_in_show_stmt991); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_INDEX_SYM.Add(INDEX_SYM80);

				DebugLocation(91, 17);
				FROM81=(IToken)Match(input,FROM,Follow._FROM_in_show_stmt993); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_FROM.Add(FROM81);

				DebugLocation(91, 22);
				PushFollow(Follow._simple_table_ref_no_alias_in_show_stmt995);
				simple_table_ref_no_alias82=simple_table_ref_no_alias();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_simple_table_ref_no_alias.Add(simple_table_ref_no_alias82.Tree);
				DebugLocation(91, 48);
				// MySQL51Parser.g3:91:48: ( ( FROM | IN ) ident )?
				int alt23=2;
				try { DebugEnterSubRule(23);
				try { DebugEnterDecision(23, false);
				int LA23_0 = input.LA(1);

				if ((LA23_0==FROM||LA23_0==IN))
				{
					alt23 = 1;
				}
				} finally { DebugExitDecision(23); }
				switch (alt23)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:91:49: ( FROM | IN ) ident
					{
					DebugLocation(91, 49);
					// MySQL51Parser.g3:91:49: ( FROM | IN )
					int alt22=2;
					try { DebugEnterSubRule(22);
					try { DebugEnterDecision(22, false);
					int LA22_0 = input.LA(1);

					if ((LA22_0==FROM))
					{
						alt22 = 1;
					}
					else if ((LA22_0==IN))
					{
						alt22 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 22, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					} finally { DebugExitDecision(22); }
					switch (alt22)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:91:50: FROM
						{
						DebugLocation(91, 50);
						FROM83=(IToken)Match(input,FROM,Follow._FROM_in_show_stmt999); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_FROM.Add(FROM83);


						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:91:55: IN
						{
						DebugLocation(91, 55);
						IN84=(IToken)Match(input,IN,Follow._IN_in_show_stmt1001); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_IN.Add(IN84);


						}
						break;

					}
					} finally { DebugExitSubRule(22); }

					DebugLocation(91, 59);
					PushFollow(Follow._ident_in_show_stmt1004);
					ident85=ident();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_ident.Add(ident85.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(23); }



				{
				// AST REWRITE
				// elements: show_stmt, INDEX_SYM, simple_table_ref_no_alias, ident
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 91:67: -> ^( $show_stmt ^( INDEX_SYM simple_table_ref_no_alias ( ident )? ) )
				{
					DebugLocation(91, 70);
					// MySQL51Parser.g3:91:70: ^( $show_stmt ^( INDEX_SYM simple_table_ref_no_alias ( ident )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(91, 73);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(91, 83);
					// MySQL51Parser.g3:91:83: ^( INDEX_SYM simple_table_ref_no_alias ( ident )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(91, 85);
					root_2 = (object)adaptor.BecomeRoot(stream_INDEX_SYM.NextNode(), root_2);

					DebugLocation(91, 95);
					adaptor.AddChild(root_2, stream_simple_table_ref_no_alias.NextTree());
					DebugLocation(91, 121);
					// MySQL51Parser.g3:91:121: ( ident )?
					if (stream_ident.HasNext)
					{
						DebugLocation(91, 121);
						adaptor.AddChild(root_2, stream_ident.NextTree());

					}
					stream_ident.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 23:
				DebugEnterAlt(23);
				// MySQL51Parser.g3:92:7: INNODB STATUS
				{
				DebugLocation(92, 7);
				INNODB86=(IToken)Match(input,INNODB,Follow._INNODB_in_show_stmt1030); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_INNODB.Add(INNODB86);

				DebugLocation(92, 14);
				STATUS87=(IToken)Match(input,STATUS,Follow._STATUS_in_show_stmt1032); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_STATUS.Add(STATUS87);



				{
				// AST REWRITE
				// elements: show_stmt, ENGINE, INNODB, STATUS
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 92:23: -> ^( $show_stmt ^( ENGINE INNODB STATUS ) )
				{
					DebugLocation(92, 26);
					// MySQL51Parser.g3:92:26: ^( $show_stmt ^( ENGINE INNODB STATUS ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(92, 29);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(92, 39);
					// MySQL51Parser.g3:92:39: ^( ENGINE INNODB STATUS )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(92, 41);
					root_2 = (object)adaptor.BecomeRoot(stream_ENGINE.NextNode(), root_2);

					DebugLocation(92, 48);
					adaptor.AddChild(root_2, stream_INNODB.NextNode());
					DebugLocation(92, 55);
					adaptor.AddChild(root_2, stream_STATUS.NextNode());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 24:
				DebugEnterAlt(24);
				// MySQL51Parser.g3:93:7: OPEN TABLES ( ( FROM | IN ) ident )? ( like_or_where )?
				{
				DebugLocation(93, 7);
				OPEN88=(IToken)Match(input,OPEN,Follow._OPEN_in_show_stmt1057); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_OPEN.Add(OPEN88);

				DebugLocation(93, 12);
				TABLES89=(IToken)Match(input,TABLES,Follow._TABLES_in_show_stmt1059); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TABLES.Add(TABLES89);

				DebugLocation(93, 19);
				// MySQL51Parser.g3:93:19: ( ( FROM | IN ) ident )?
				int alt25=2;
				try { DebugEnterSubRule(25);
				try { DebugEnterDecision(25, false);
				int LA25_0 = input.LA(1);

				if ((LA25_0==FROM||LA25_0==IN))
				{
					alt25 = 1;
				}
				} finally { DebugExitDecision(25); }
				switch (alt25)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:93:20: ( FROM | IN ) ident
					{
					DebugLocation(93, 20);
					// MySQL51Parser.g3:93:20: ( FROM | IN )
					int alt24=2;
					try { DebugEnterSubRule(24);
					try { DebugEnterDecision(24, false);
					int LA24_0 = input.LA(1);

					if ((LA24_0==FROM))
					{
						alt24 = 1;
					}
					else if ((LA24_0==IN))
					{
						alt24 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 24, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					} finally { DebugExitDecision(24); }
					switch (alt24)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:93:21: FROM
						{
						DebugLocation(93, 21);
						FROM90=(IToken)Match(input,FROM,Follow._FROM_in_show_stmt1063); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_FROM.Add(FROM90);


						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:93:26: IN
						{
						DebugLocation(93, 26);
						IN91=(IToken)Match(input,IN,Follow._IN_in_show_stmt1065); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_IN.Add(IN91);


						}
						break;

					}
					} finally { DebugExitSubRule(24); }

					DebugLocation(93, 30);
					PushFollow(Follow._ident_in_show_stmt1068);
					ident92=ident();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_ident.Add(ident92.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(25); }

				DebugLocation(93, 38);
				// MySQL51Parser.g3:93:38: ( like_or_where )?
				int alt26=2;
				try { DebugEnterSubRule(26);
				try { DebugEnterDecision(26, false);
				int LA26_0 = input.LA(1);

				if ((LA26_0==LIKE||LA26_0==WHERE))
				{
					alt26 = 1;
				}
				} finally { DebugExitDecision(26); }
				switch (alt26)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:93:38: like_or_where
					{
					DebugLocation(93, 38);
					PushFollow(Follow._like_or_where_in_show_stmt1072);
					like_or_where93=like_or_where();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_like_or_where.Add(like_or_where93.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(26); }



				{
				// AST REWRITE
				// elements: show_stmt, OPEN, ident, like_or_where
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 93:53: -> ^( $show_stmt ^( OPEN ( ident )? ( like_or_where )? ) )
				{
					DebugLocation(93, 56);
					// MySQL51Parser.g3:93:56: ^( $show_stmt ^( OPEN ( ident )? ( like_or_where )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(93, 59);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(93, 69);
					// MySQL51Parser.g3:93:69: ^( OPEN ( ident )? ( like_or_where )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(93, 71);
					root_2 = (object)adaptor.BecomeRoot(stream_OPEN.NextNode(), root_2);

					DebugLocation(93, 76);
					// MySQL51Parser.g3:93:76: ( ident )?
					if (stream_ident.HasNext)
					{
						DebugLocation(93, 76);
						adaptor.AddChild(root_2, stream_ident.NextTree());

					}
					stream_ident.Reset();
					DebugLocation(93, 83);
					// MySQL51Parser.g3:93:83: ( like_or_where )?
					if (stream_like_or_where.HasNext)
					{
						DebugLocation(93, 83);
						adaptor.AddChild(root_2, stream_like_or_where.NextTree());

					}
					stream_like_or_where.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 25:
				DebugEnterAlt(25);
				// MySQL51Parser.g3:94:7: PLUGINS
				{
				DebugLocation(94, 7);
				PLUGINS94=(IToken)Match(input,PLUGINS,Follow._PLUGINS_in_show_stmt1098); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_PLUGINS.Add(PLUGINS94);



				{
				// AST REWRITE
				// elements: show_stmt, PLUGINS
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 94:19: -> ^( $show_stmt ^( PLUGINS ) )
				{
					DebugLocation(94, 22);
					// MySQL51Parser.g3:94:22: ^( $show_stmt ^( PLUGINS ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(94, 25);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(94, 35);
					// MySQL51Parser.g3:94:35: ^( PLUGINS )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(94, 37);
					root_2 = (object)adaptor.BecomeRoot(stream_PLUGINS.NextNode(), root_2);

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 26:
				DebugEnterAlt(26);
				// MySQL51Parser.g3:95:7: PROCEDURE CODE ident
				{
				DebugLocation(95, 7);
				PROCEDURE95=(IToken)Match(input,PROCEDURE,Follow._PROCEDURE_in_show_stmt1121); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_PROCEDURE.Add(PROCEDURE95);

				DebugLocation(95, 17);
				CODE96=(IToken)Match(input,CODE,Follow._CODE_in_show_stmt1123); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CODE.Add(CODE96);

				DebugLocation(95, 22);
				PushFollow(Follow._ident_in_show_stmt1125);
				ident97=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(ident97.Tree);


				{
				// AST REWRITE
				// elements: show_stmt, CODE, PROCEDURE, ident
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 95:33: -> ^( $show_stmt ^( CODE PROCEDURE ident ) )
				{
					DebugLocation(95, 36);
					// MySQL51Parser.g3:95:36: ^( $show_stmt ^( CODE PROCEDURE ident ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(95, 39);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(95, 49);
					// MySQL51Parser.g3:95:49: ^( CODE PROCEDURE ident )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(95, 51);
					root_2 = (object)adaptor.BecomeRoot(stream_CODE.NextNode(), root_2);

					DebugLocation(95, 56);
					adaptor.AddChild(root_2, stream_PROCEDURE.NextNode());
					DebugLocation(95, 66);
					adaptor.AddChild(root_2, stream_ident.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 27:
				DebugEnterAlt(27);
				// MySQL51Parser.g3:96:7: PROCEDURE STATUS ( like_or_where )?
				{
				DebugLocation(96, 7);
				PROCEDURE98=(IToken)Match(input,PROCEDURE,Follow._PROCEDURE_in_show_stmt1153); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_PROCEDURE.Add(PROCEDURE98);

				DebugLocation(96, 17);
				STATUS99=(IToken)Match(input,STATUS,Follow._STATUS_in_show_stmt1155); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_STATUS.Add(STATUS99);

				DebugLocation(96, 24);
				// MySQL51Parser.g3:96:24: ( like_or_where )?
				int alt27=2;
				try { DebugEnterSubRule(27);
				try { DebugEnterDecision(27, false);
				int LA27_0 = input.LA(1);

				if ((LA27_0==LIKE||LA27_0==WHERE))
				{
					alt27 = 1;
				}
				} finally { DebugExitDecision(27); }
				switch (alt27)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:96:24: like_or_where
					{
					DebugLocation(96, 24);
					PushFollow(Follow._like_or_where_in_show_stmt1157);
					like_or_where100=like_or_where();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_like_or_where.Add(like_or_where100.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(27); }



				{
				// AST REWRITE
				// elements: show_stmt, STATUS, PROCEDURE, ident
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 96:39: -> ^( $show_stmt ^( STATUS PROCEDURE ident ) )
				{
					DebugLocation(96, 42);
					// MySQL51Parser.g3:96:42: ^( $show_stmt ^( STATUS PROCEDURE ident ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(96, 45);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(96, 55);
					// MySQL51Parser.g3:96:55: ^( STATUS PROCEDURE ident )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(96, 57);
					root_2 = (object)adaptor.BecomeRoot(stream_STATUS.NextNode(), root_2);

					DebugLocation(96, 64);
					adaptor.AddChild(root_2, stream_PROCEDURE.NextNode());
					DebugLocation(96, 74);
					adaptor.AddChild(root_2, stream_ident.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 28:
				DebugEnterAlt(28);
				// MySQL51Parser.g3:97:7: PRIVILEGES
				{
				DebugLocation(97, 7);
				PRIVILEGES101=(IToken)Match(input,PRIVILEGES,Follow._PRIVILEGES_in_show_stmt1181); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_PRIVILEGES.Add(PRIVILEGES101);



				{
				// AST REWRITE
				// elements: show_stmt, PRIVILEGES
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 97:23: -> ^( $show_stmt ^( PRIVILEGES ) )
				{
					DebugLocation(97, 26);
					// MySQL51Parser.g3:97:26: ^( $show_stmt ^( PRIVILEGES ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(97, 29);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(97, 39);
					// MySQL51Parser.g3:97:39: ^( PRIVILEGES )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(97, 41);
					root_2 = (object)adaptor.BecomeRoot(stream_PRIVILEGES.NextNode(), root_2);

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 29:
				DebugEnterAlt(29);
				// MySQL51Parser.g3:98:7: ( FULL )? PROCESSLIST
				{
				DebugLocation(98, 7);
				// MySQL51Parser.g3:98:7: ( FULL )?
				int alt28=2;
				try { DebugEnterSubRule(28);
				try { DebugEnterDecision(28, false);
				int LA28_0 = input.LA(1);

				if ((LA28_0==FULL))
				{
					alt28 = 1;
				}
				} finally { DebugExitDecision(28); }
				switch (alt28)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:98:7: FULL
					{
					DebugLocation(98, 7);
					FULL102=(IToken)Match(input,FULL,Follow._FULL_in_show_stmt1205); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_FULL.Add(FULL102);


					}
					break;

				}
				} finally { DebugExitSubRule(28); }

				DebugLocation(98, 13);
				PROCESSLIST103=(IToken)Match(input,PROCESSLIST,Follow._PROCESSLIST_in_show_stmt1208); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_PROCESSLIST.Add(PROCESSLIST103);



				{
				// AST REWRITE
				// elements: show_stmt, PROCESSLIST, FULL
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 98:25: -> ^( $show_stmt ^( PROCESSLIST ( FULL )? ) )
				{
					DebugLocation(98, 28);
					// MySQL51Parser.g3:98:28: ^( $show_stmt ^( PROCESSLIST ( FULL )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(98, 31);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(98, 41);
					// MySQL51Parser.g3:98:41: ^( PROCESSLIST ( FULL )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(98, 43);
					root_2 = (object)adaptor.BecomeRoot(stream_PROCESSLIST.NextNode(), root_2);

					DebugLocation(98, 55);
					// MySQL51Parser.g3:98:55: ( FULL )?
					if (stream_FULL.HasNext)
					{
						DebugLocation(98, 55);
						adaptor.AddChild(root_2, stream_FULL.NextNode());

					}
					stream_FULL.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 30:
				DebugEnterAlt(30);
				// MySQL51Parser.g3:99:7: PROFILE show_profile_types ( FOR QUERY NUMBER )? ( limit )?
				{
				DebugLocation(99, 7);
				PROFILE104=(IToken)Match(input,PROFILE,Follow._PROFILE_in_show_stmt1230); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_PROFILE.Add(PROFILE104);

				DebugLocation(99, 15);
				PushFollow(Follow._show_profile_types_in_show_stmt1232);
				show_profile_types105=show_profile_types();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_show_profile_types.Add(show_profile_types105.Tree);
				DebugLocation(99, 34);
				// MySQL51Parser.g3:99:34: ( FOR QUERY NUMBER )?
				int alt29=2;
				try { DebugEnterSubRule(29);
				try { DebugEnterDecision(29, false);
				int LA29_0 = input.LA(1);

				if ((LA29_0==FOR))
				{
					alt29 = 1;
				}
				} finally { DebugExitDecision(29); }
				switch (alt29)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:99:35: FOR QUERY NUMBER
					{
					DebugLocation(99, 35);
					FOR106=(IToken)Match(input,FOR,Follow._FOR_in_show_stmt1235); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_FOR.Add(FOR106);

					DebugLocation(99, 39);
					QUERY107=(IToken)Match(input,QUERY,Follow._QUERY_in_show_stmt1237); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_QUERY.Add(QUERY107);

					DebugLocation(99, 45);
					NUMBER108=(IToken)Match(input,NUMBER,Follow._NUMBER_in_show_stmt1239); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_NUMBER.Add(NUMBER108);


					}
					break;

				}
				} finally { DebugExitSubRule(29); }

				DebugLocation(99, 54);
				// MySQL51Parser.g3:99:54: ( limit )?
				int alt30=2;
				try { DebugEnterSubRule(30);
				try { DebugEnterDecision(30, false);
				int LA30_0 = input.LA(1);

				if ((LA30_0==LIMIT))
				{
					alt30 = 1;
				}
				} finally { DebugExitDecision(30); }
				switch (alt30)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:99:54: limit
					{
					DebugLocation(99, 54);
					PushFollow(Follow._limit_in_show_stmt1243);
					limit109=limit();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_limit.Add(limit109.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(30); }



				{
				// AST REWRITE
				// elements: show_stmt, PROFILE, show_profile_types, NUMBER, limit
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 99:61: -> ^( $show_stmt ^( PROFILE show_profile_types ( NUMBER )? ( limit )? ) )
				{
					DebugLocation(99, 64);
					// MySQL51Parser.g3:99:64: ^( $show_stmt ^( PROFILE show_profile_types ( NUMBER )? ( limit )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(99, 67);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(99, 77);
					// MySQL51Parser.g3:99:77: ^( PROFILE show_profile_types ( NUMBER )? ( limit )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(99, 79);
					root_2 = (object)adaptor.BecomeRoot(stream_PROFILE.NextNode(), root_2);

					DebugLocation(99, 87);
					adaptor.AddChild(root_2, stream_show_profile_types.NextTree());
					DebugLocation(99, 106);
					// MySQL51Parser.g3:99:106: ( NUMBER )?
					if (stream_NUMBER.HasNext)
					{
						DebugLocation(99, 106);
						adaptor.AddChild(root_2, stream_NUMBER.NextNode());

					}
					stream_NUMBER.Reset();
					DebugLocation(99, 114);
					// MySQL51Parser.g3:99:114: ( limit )?
					if (stream_limit.HasNext)
					{
						DebugLocation(99, 114);
						adaptor.AddChild(root_2, stream_limit.NextTree());

					}
					stream_limit.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 31:
				DebugEnterAlt(31);
				// MySQL51Parser.g3:100:7: PROFILES
				{
				DebugLocation(100, 7);
				PROFILES110=(IToken)Match(input,PROFILES,Follow._PROFILES_in_show_stmt1271); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_PROFILES.Add(PROFILES110);



				{
				// AST REWRITE
				// elements: show_stmt, PROFILES
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 100:19: -> ^( $show_stmt ^( PROFILES ) )
				{
					DebugLocation(100, 22);
					// MySQL51Parser.g3:100:22: ^( $show_stmt ^( PROFILES ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(100, 25);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(100, 35);
					// MySQL51Parser.g3:100:35: ^( PROFILES )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(100, 37);
					root_2 = (object)adaptor.BecomeRoot(stream_PROFILES.NextNode(), root_2);

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 32:
				DebugEnterAlt(32);
				// MySQL51Parser.g3:101:7: SCHEDULER STATUS
				{
				DebugLocation(101, 7);
				SCHEDULER111=(IToken)Match(input,SCHEDULER,Follow._SCHEDULER_in_show_stmt1293); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_SCHEDULER.Add(SCHEDULER111);

				DebugLocation(101, 17);
				STATUS112=(IToken)Match(input,STATUS,Follow._STATUS_in_show_stmt1295); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_STATUS.Add(STATUS112);



				{
				// AST REWRITE
				// elements: show_stmt, STATUS, SCHEDULER
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 101:25: -> ^( $show_stmt ^( STATUS SCHEDULER ) )
				{
					DebugLocation(101, 28);
					// MySQL51Parser.g3:101:28: ^( $show_stmt ^( STATUS SCHEDULER ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(101, 31);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(101, 41);
					// MySQL51Parser.g3:101:41: ^( STATUS SCHEDULER )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(101, 43);
					root_2 = (object)adaptor.BecomeRoot(stream_STATUS.NextNode(), root_2);

					DebugLocation(101, 50);
					adaptor.AddChild(root_2, stream_SCHEDULER.NextNode());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 33:
				DebugEnterAlt(33);
				// MySQL51Parser.g3:102:7: optScopeModifier STATUS ( like_or_where )?
				{
				DebugLocation(102, 7);
				PushFollow(Follow._optScopeModifier_in_show_stmt1317);
				optScopeModifier113=optScopeModifier();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_optScopeModifier.Add(optScopeModifier113.Tree);
				DebugLocation(102, 24);
				STATUS114=(IToken)Match(input,STATUS,Follow._STATUS_in_show_stmt1319); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_STATUS.Add(STATUS114);

				DebugLocation(102, 31);
				// MySQL51Parser.g3:102:31: ( like_or_where )?
				int alt31=2;
				try { DebugEnterSubRule(31);
				try { DebugEnterDecision(31, false);
				int LA31_0 = input.LA(1);

				if ((LA31_0==LIKE||LA31_0==WHERE))
				{
					alt31 = 1;
				}
				} finally { DebugExitDecision(31); }
				switch (alt31)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:102:31: like_or_where
					{
					DebugLocation(102, 31);
					PushFollow(Follow._like_or_where_in_show_stmt1321);
					like_or_where115=like_or_where();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_like_or_where.Add(like_or_where115.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(31); }



				{
				// AST REWRITE
				// elements: show_stmt, STATUS, optScopeModifier, like_or_where
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 102:47: -> ^( $show_stmt ^( STATUS ( optScopeModifier )? ( like_or_where )? ) )
				{
					DebugLocation(102, 50);
					// MySQL51Parser.g3:102:50: ^( $show_stmt ^( STATUS ( optScopeModifier )? ( like_or_where )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(102, 53);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(102, 63);
					// MySQL51Parser.g3:102:63: ^( STATUS ( optScopeModifier )? ( like_or_where )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(102, 65);
					root_2 = (object)adaptor.BecomeRoot(stream_STATUS.NextNode(), root_2);

					DebugLocation(102, 72);
					// MySQL51Parser.g3:102:72: ( optScopeModifier )?
					if (stream_optScopeModifier.HasNext)
					{
						DebugLocation(102, 72);
						adaptor.AddChild(root_2, stream_optScopeModifier.NextTree());

					}
					stream_optScopeModifier.Reset();
					DebugLocation(102, 90);
					// MySQL51Parser.g3:102:90: ( like_or_where )?
					if (stream_like_or_where.HasNext)
					{
						DebugLocation(102, 90);
						adaptor.AddChild(root_2, stream_like_or_where.NextTree());

					}
					stream_like_or_where.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 34:
				DebugEnterAlt(34);
				// MySQL51Parser.g3:103:7: TABLE STATUS ( ( FROM | IN ) ident )? ( like_or_where )?
				{
				DebugLocation(103, 7);
				TABLE116=(IToken)Match(input,TABLE,Follow._TABLE_in_show_stmt1348); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TABLE.Add(TABLE116);

				DebugLocation(103, 13);
				STATUS117=(IToken)Match(input,STATUS,Follow._STATUS_in_show_stmt1350); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_STATUS.Add(STATUS117);

				DebugLocation(103, 20);
				// MySQL51Parser.g3:103:20: ( ( FROM | IN ) ident )?
				int alt33=2;
				try { DebugEnterSubRule(33);
				try { DebugEnterDecision(33, false);
				int LA33_0 = input.LA(1);

				if ((LA33_0==FROM||LA33_0==IN))
				{
					alt33 = 1;
				}
				} finally { DebugExitDecision(33); }
				switch (alt33)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:103:21: ( FROM | IN ) ident
					{
					DebugLocation(103, 21);
					// MySQL51Parser.g3:103:21: ( FROM | IN )
					int alt32=2;
					try { DebugEnterSubRule(32);
					try { DebugEnterDecision(32, false);
					int LA32_0 = input.LA(1);

					if ((LA32_0==FROM))
					{
						alt32 = 1;
					}
					else if ((LA32_0==IN))
					{
						alt32 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 32, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					} finally { DebugExitDecision(32); }
					switch (alt32)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:103:22: FROM
						{
						DebugLocation(103, 22);
						FROM118=(IToken)Match(input,FROM,Follow._FROM_in_show_stmt1354); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_FROM.Add(FROM118);


						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:103:27: IN
						{
						DebugLocation(103, 27);
						IN119=(IToken)Match(input,IN,Follow._IN_in_show_stmt1356); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_IN.Add(IN119);


						}
						break;

					}
					} finally { DebugExitSubRule(32); }

					DebugLocation(103, 31);
					PushFollow(Follow._ident_in_show_stmt1359);
					ident120=ident();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_ident.Add(ident120.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(33); }

				DebugLocation(103, 39);
				// MySQL51Parser.g3:103:39: ( like_or_where )?
				int alt34=2;
				try { DebugEnterSubRule(34);
				try { DebugEnterDecision(34, false);
				int LA34_0 = input.LA(1);

				if ((LA34_0==LIKE||LA34_0==WHERE))
				{
					alt34 = 1;
				}
				} finally { DebugExitDecision(34); }
				switch (alt34)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:103:39: like_or_where
					{
					DebugLocation(103, 39);
					PushFollow(Follow._like_or_where_in_show_stmt1363);
					like_or_where121=like_or_where();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_like_or_where.Add(like_or_where121.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(34); }



				{
				// AST REWRITE
				// elements: show_stmt, STATUS, TABLE, ident, like_or_where
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 103:59: -> ^( $show_stmt ^( STATUS TABLE ( ident )? ( like_or_where )? ) )
				{
					DebugLocation(103, 62);
					// MySQL51Parser.g3:103:62: ^( $show_stmt ^( STATUS TABLE ( ident )? ( like_or_where )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(103, 65);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(103, 76);
					// MySQL51Parser.g3:103:76: ^( STATUS TABLE ( ident )? ( like_or_where )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(103, 78);
					root_2 = (object)adaptor.BecomeRoot(stream_STATUS.NextNode(), root_2);

					DebugLocation(103, 85);
					adaptor.AddChild(root_2, stream_TABLE.NextNode());
					DebugLocation(103, 91);
					// MySQL51Parser.g3:103:91: ( ident )?
					if (stream_ident.HasNext)
					{
						DebugLocation(103, 91);
						adaptor.AddChild(root_2, stream_ident.NextTree());

					}
					stream_ident.Reset();
					DebugLocation(103, 98);
					// MySQL51Parser.g3:103:98: ( like_or_where )?
					if (stream_like_or_where.HasNext)
					{
						DebugLocation(103, 98);
						adaptor.AddChild(root_2, stream_like_or_where.NextTree());

					}
					stream_like_or_where.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 35:
				DebugEnterAlt(35);
				// MySQL51Parser.g3:104:7: TABLES ( ( FROM | IN ) ident )? ( like_or_where )?
				{
				DebugLocation(104, 7);
				TABLES122=(IToken)Match(input,TABLES,Follow._TABLES_in_show_stmt1397); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TABLES.Add(TABLES122);

				DebugLocation(104, 14);
				// MySQL51Parser.g3:104:14: ( ( FROM | IN ) ident )?
				int alt36=2;
				try { DebugEnterSubRule(36);
				try { DebugEnterDecision(36, false);
				int LA36_0 = input.LA(1);

				if ((LA36_0==FROM||LA36_0==IN))
				{
					alt36 = 1;
				}
				} finally { DebugExitDecision(36); }
				switch (alt36)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:104:15: ( FROM | IN ) ident
					{
					DebugLocation(104, 15);
					// MySQL51Parser.g3:104:15: ( FROM | IN )
					int alt35=2;
					try { DebugEnterSubRule(35);
					try { DebugEnterDecision(35, false);
					int LA35_0 = input.LA(1);

					if ((LA35_0==FROM))
					{
						alt35 = 1;
					}
					else if ((LA35_0==IN))
					{
						alt35 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 35, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					} finally { DebugExitDecision(35); }
					switch (alt35)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:104:16: FROM
						{
						DebugLocation(104, 16);
						FROM123=(IToken)Match(input,FROM,Follow._FROM_in_show_stmt1401); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_FROM.Add(FROM123);


						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:104:21: IN
						{
						DebugLocation(104, 21);
						IN124=(IToken)Match(input,IN,Follow._IN_in_show_stmt1403); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_IN.Add(IN124);


						}
						break;

					}
					} finally { DebugExitSubRule(35); }

					DebugLocation(104, 25);
					PushFollow(Follow._ident_in_show_stmt1406);
					ident125=ident();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_ident.Add(ident125.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(36); }

				DebugLocation(104, 33);
				// MySQL51Parser.g3:104:33: ( like_or_where )?
				int alt37=2;
				try { DebugEnterSubRule(37);
				try { DebugEnterDecision(37, false);
				int LA37_0 = input.LA(1);

				if ((LA37_0==LIKE||LA37_0==WHERE))
				{
					alt37 = 1;
				}
				} finally { DebugExitDecision(37); }
				switch (alt37)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:104:33: like_or_where
					{
					DebugLocation(104, 33);
					PushFollow(Follow._like_or_where_in_show_stmt1410);
					like_or_where126=like_or_where();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_like_or_where.Add(like_or_where126.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(37); }



				{
				// AST REWRITE
				// elements: show_stmt, TABLES, ident, like_or_where
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 104:57: -> ^( $show_stmt ^( TABLES ( ident )? ( like_or_where )? ) )
				{
					DebugLocation(104, 60);
					// MySQL51Parser.g3:104:60: ^( $show_stmt ^( TABLES ( ident )? ( like_or_where )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(104, 63);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(104, 73);
					// MySQL51Parser.g3:104:73: ^( TABLES ( ident )? ( like_or_where )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(104, 75);
					root_2 = (object)adaptor.BecomeRoot(stream_TABLES.NextNode(), root_2);

					DebugLocation(104, 82);
					// MySQL51Parser.g3:104:82: ( ident )?
					if (stream_ident.HasNext)
					{
						DebugLocation(104, 82);
						adaptor.AddChild(root_2, stream_ident.NextTree());

					}
					stream_ident.Reset();
					DebugLocation(104, 89);
					// MySQL51Parser.g3:104:89: ( like_or_where )?
					if (stream_like_or_where.HasNext)
					{
						DebugLocation(104, 89);
						adaptor.AddChild(root_2, stream_like_or_where.NextTree());

					}
					stream_like_or_where.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 36:
				DebugEnterAlt(36);
				// MySQL51Parser.g3:105:7: TRIGGERS ( ( FROM | IN ) ident )? ( like_or_where )?
				{
				DebugLocation(105, 7);
				TRIGGERS127=(IToken)Match(input,TRIGGERS,Follow._TRIGGERS_in_show_stmt1445); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TRIGGERS.Add(TRIGGERS127);

				DebugLocation(105, 16);
				// MySQL51Parser.g3:105:16: ( ( FROM | IN ) ident )?
				int alt39=2;
				try { DebugEnterSubRule(39);
				try { DebugEnterDecision(39, false);
				int LA39_0 = input.LA(1);

				if ((LA39_0==FROM||LA39_0==IN))
				{
					alt39 = 1;
				}
				} finally { DebugExitDecision(39); }
				switch (alt39)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:105:17: ( FROM | IN ) ident
					{
					DebugLocation(105, 17);
					// MySQL51Parser.g3:105:17: ( FROM | IN )
					int alt38=2;
					try { DebugEnterSubRule(38);
					try { DebugEnterDecision(38, false);
					int LA38_0 = input.LA(1);

					if ((LA38_0==FROM))
					{
						alt38 = 1;
					}
					else if ((LA38_0==IN))
					{
						alt38 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 38, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					} finally { DebugExitDecision(38); }
					switch (alt38)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:105:18: FROM
						{
						DebugLocation(105, 18);
						FROM128=(IToken)Match(input,FROM,Follow._FROM_in_show_stmt1449); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_FROM.Add(FROM128);


						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:105:23: IN
						{
						DebugLocation(105, 23);
						IN129=(IToken)Match(input,IN,Follow._IN_in_show_stmt1451); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_IN.Add(IN129);


						}
						break;

					}
					} finally { DebugExitSubRule(38); }

					DebugLocation(105, 27);
					PushFollow(Follow._ident_in_show_stmt1454);
					ident130=ident();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_ident.Add(ident130.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(39); }

				DebugLocation(105, 35);
				// MySQL51Parser.g3:105:35: ( like_or_where )?
				int alt40=2;
				try { DebugEnterSubRule(40);
				try { DebugEnterDecision(40, false);
				int LA40_0 = input.LA(1);

				if ((LA40_0==LIKE||LA40_0==WHERE))
				{
					alt40 = 1;
				}
				} finally { DebugExitDecision(40); }
				switch (alt40)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:105:35: like_or_where
					{
					DebugLocation(105, 35);
					PushFollow(Follow._like_or_where_in_show_stmt1458);
					like_or_where131=like_or_where();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_like_or_where.Add(like_or_where131.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(40); }



				{
				// AST REWRITE
				// elements: show_stmt, TRIGGERS, ident, like_or_where
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 105:57: -> ^( $show_stmt ^( TRIGGERS ( ident )? ( like_or_where )? ) )
				{
					DebugLocation(105, 60);
					// MySQL51Parser.g3:105:60: ^( $show_stmt ^( TRIGGERS ( ident )? ( like_or_where )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(105, 63);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(105, 73);
					// MySQL51Parser.g3:105:73: ^( TRIGGERS ( ident )? ( like_or_where )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(105, 75);
					root_2 = (object)adaptor.BecomeRoot(stream_TRIGGERS.NextNode(), root_2);

					DebugLocation(105, 84);
					// MySQL51Parser.g3:105:84: ( ident )?
					if (stream_ident.HasNext)
					{
						DebugLocation(105, 84);
						adaptor.AddChild(root_2, stream_ident.NextTree());

					}
					stream_ident.Reset();
					DebugLocation(105, 91);
					// MySQL51Parser.g3:105:91: ( like_or_where )?
					if (stream_like_or_where.HasNext)
					{
						DebugLocation(105, 91);
						adaptor.AddChild(root_2, stream_like_or_where.NextTree());

					}
					stream_like_or_where.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 37:
				DebugEnterAlt(37);
				// MySQL51Parser.g3:106:7: optScopeModifier VARIABLES ( like_or_where )?
				{
				DebugLocation(106, 7);
				PushFollow(Follow._optScopeModifier_in_show_stmt1491);
				optScopeModifier132=optScopeModifier();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_optScopeModifier.Add(optScopeModifier132.Tree);
				DebugLocation(106, 24);
				VARIABLES133=(IToken)Match(input,VARIABLES,Follow._VARIABLES_in_show_stmt1493); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_VARIABLES.Add(VARIABLES133);

				DebugLocation(106, 34);
				// MySQL51Parser.g3:106:34: ( like_or_where )?
				int alt41=2;
				try { DebugEnterSubRule(41);
				try { DebugEnterDecision(41, false);
				int LA41_0 = input.LA(1);

				if ((LA41_0==LIKE||LA41_0==WHERE))
				{
					alt41 = 1;
				}
				} finally { DebugExitDecision(41); }
				switch (alt41)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:106:34: like_or_where
					{
					DebugLocation(106, 34);
					PushFollow(Follow._like_or_where_in_show_stmt1495);
					like_or_where134=like_or_where();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_like_or_where.Add(like_or_where134.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(41); }



				{
				// AST REWRITE
				// elements: show_stmt, VARIABLES, optScopeModifier, like_or_where
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 106:51: -> ^( $show_stmt ^( VARIABLES ( optScopeModifier )? ( like_or_where )? ) )
				{
					DebugLocation(106, 54);
					// MySQL51Parser.g3:106:54: ^( $show_stmt ^( VARIABLES ( optScopeModifier )? ( like_or_where )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(106, 57);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(106, 67);
					// MySQL51Parser.g3:106:67: ^( VARIABLES ( optScopeModifier )? ( like_or_where )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(106, 69);
					root_2 = (object)adaptor.BecomeRoot(stream_VARIABLES.NextNode(), root_2);

					DebugLocation(106, 79);
					// MySQL51Parser.g3:106:79: ( optScopeModifier )?
					if (stream_optScopeModifier.HasNext)
					{
						DebugLocation(106, 79);
						adaptor.AddChild(root_2, stream_optScopeModifier.NextTree());

					}
					stream_optScopeModifier.Reset();
					DebugLocation(106, 97);
					// MySQL51Parser.g3:106:97: ( like_or_where )?
					if (stream_like_or_where.HasNext)
					{
						DebugLocation(106, 97);
						adaptor.AddChild(root_2, stream_like_or_where.NextTree());

					}
					stream_like_or_where.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 38:
				DebugEnterAlt(38);
				// MySQL51Parser.g3:107:7: WARNINGS ( limit )?
				{
				DebugLocation(107, 7);
				WARNINGS135=(IToken)Match(input,WARNINGS,Follow._WARNINGS_in_show_stmt1523); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_WARNINGS.Add(WARNINGS135);

				DebugLocation(107, 16);
				// MySQL51Parser.g3:107:16: ( limit )?
				int alt42=2;
				try { DebugEnterSubRule(42);
				try { DebugEnterDecision(42, false);
				int LA42_0 = input.LA(1);

				if ((LA42_0==LIMIT))
				{
					alt42 = 1;
				}
				} finally { DebugExitDecision(42); }
				switch (alt42)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:107:16: limit
					{
					DebugLocation(107, 16);
					PushFollow(Follow._limit_in_show_stmt1525);
					limit136=limit();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_limit.Add(limit136.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(42); }



				{
				// AST REWRITE
				// elements: show_stmt, WARNINGS, limit
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 107:25: -> ^( $show_stmt ^( WARNINGS ( limit )? ) )
				{
					DebugLocation(107, 28);
					// MySQL51Parser.g3:107:28: ^( $show_stmt ^( WARNINGS ( limit )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(107, 31);
					root_1 = (object)adaptor.BecomeRoot(stream_retval.NextNode(), root_1);

					DebugLocation(107, 41);
					// MySQL51Parser.g3:107:41: ^( WARNINGS ( limit )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(107, 43);
					root_2 = (object)adaptor.BecomeRoot(stream_WARNINGS.NextNode(), root_2);

					DebugLocation(107, 52);
					// MySQL51Parser.g3:107:52: ( limit )?
					if (stream_limit.HasNext)
					{
						DebugLocation(107, 52);
						adaptor.AddChild(root_2, stream_limit.NextTree());

					}
					stream_limit.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			} finally { DebugExitSubRule(43); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("show_stmt", 4);
			LeaveRule("show_stmt", 4);
			LeaveRule_show_stmt();
		}
		DebugLocation(109, 2);
		} finally { DebugExitRule(GrammarFileName, "show_stmt"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "show_stmt"

	private sealed partial class optScopeModifier_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public optScopeModifier_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_optScopeModifier();
	partial void LeaveRule_optScopeModifier();

	// $ANTLR start "optScopeModifier"
	// MySQL51Parser.g3:111:1: optScopeModifier : ( GLOBAL -> GLOBAL | SESSION -> SESSION |l= LOCAL -> SESSION[$l] | -> SESSION );
	[GrammarRule("optScopeModifier")]
	private MySQL51Parser.optScopeModifier_return optScopeModifier()
	{
		EnterRule_optScopeModifier();
		EnterRule("optScopeModifier", 5);
		TraceIn("optScopeModifier", 5);
		MySQL51Parser.optScopeModifier_return retval = new MySQL51Parser.optScopeModifier_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken l = default(IToken);
		IToken GLOBAL137 = default(IToken);
		IToken SESSION138 = default(IToken);

		object l_tree = default(object);
		object GLOBAL137_tree = default(object);
		object SESSION138_tree = default(object);
		RewriteRuleITokenStream stream_GLOBAL=new RewriteRuleITokenStream(adaptor,"token GLOBAL");
		RewriteRuleITokenStream stream_SESSION=new RewriteRuleITokenStream(adaptor,"token SESSION");
		RewriteRuleITokenStream stream_LOCAL=new RewriteRuleITokenStream(adaptor,"token LOCAL");

		try { DebugEnterRule(GrammarFileName, "optScopeModifier");
		DebugLocation(111, 2);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:112:3: ( GLOBAL -> GLOBAL | SESSION -> SESSION |l= LOCAL -> SESSION[$l] | -> SESSION )
			int alt44=4;
			try { DebugEnterDecision(44, false);
			switch (input.LA(1))
			{
			case GLOBAL:
				{
				alt44 = 1;
				}
				break;
			case SESSION:
				{
				alt44 = 2;
				}
				break;
			case LOCAL:
				{
				alt44 = 3;
				}
				break;
			case STATUS:
			case VARIABLES:
				{
				alt44 = 4;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 44, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(44); }
			switch (alt44)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:112:5: GLOBAL
				{
				DebugLocation(112, 5);
				GLOBAL137=(IToken)Match(input,GLOBAL,Follow._GLOBAL_in_optScopeModifier1563); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_GLOBAL.Add(GLOBAL137);



				{
				// AST REWRITE
				// elements: GLOBAL
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 112:15: -> GLOBAL
				{
					DebugLocation(112, 18);
					adaptor.AddChild(root_0, stream_GLOBAL.NextNode());

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:113:5: SESSION
				{
				DebugLocation(113, 5);
				SESSION138=(IToken)Match(input,SESSION,Follow._SESSION_in_optScopeModifier1576); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_SESSION.Add(SESSION138);



				{
				// AST REWRITE
				// elements: SESSION
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 113:15: -> SESSION
				{
					DebugLocation(113, 18);
					adaptor.AddChild(root_0, stream_SESSION.NextNode());

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:114:5: l= LOCAL
				{
				DebugLocation(114, 6);
				l=(IToken)Match(input,LOCAL,Follow._LOCAL_in_optScopeModifier1590); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LOCAL.Add(l);



				{
				// AST REWRITE
				// elements: 
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 114:15: -> SESSION[$l]
				{
					DebugLocation(114, 18);
					adaptor.AddChild(root_0, (object)adaptor.Create(SESSION, l));

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:115:38: 
				{

				{
				// AST REWRITE
				// elements: 
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 115:38: -> SESSION
				{
					DebugLocation(115, 41);
					adaptor.AddChild(root_0, (object)adaptor.Create(SESSION, "SESSION"));

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("optScopeModifier", 5);
			LeaveRule("optScopeModifier", 5);
			LeaveRule_optScopeModifier();
		}
		DebugLocation(116, 2);
		} finally { DebugExitRule(GrammarFileName, "optScopeModifier"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "optScopeModifier"

	private sealed partial class show_profile_types_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public show_profile_types_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_show_profile_types();
	partial void LeaveRule_show_profile_types();

	// $ANTLR start "show_profile_types"
	// MySQL51Parser.g3:118:1: show_profile_types : ( ALL | BLOCK IO | CONTEXT SWITCHES | CPU | IPC | MEMORY | PAGE FAULTS | SOURCE | SWAPS );
	[GrammarRule("show_profile_types")]
	private MySQL51Parser.show_profile_types_return show_profile_types()
	{
		EnterRule_show_profile_types();
		EnterRule("show_profile_types", 6);
		TraceIn("show_profile_types", 6);
		MySQL51Parser.show_profile_types_return retval = new MySQL51Parser.show_profile_types_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken ALL139 = default(IToken);
		IToken BLOCK140 = default(IToken);
		IToken IO141 = default(IToken);
		IToken CONTEXT142 = default(IToken);
		IToken SWITCHES143 = default(IToken);
		IToken CPU144 = default(IToken);
		IToken IPC145 = default(IToken);
		IToken MEMORY146 = default(IToken);
		IToken PAGE147 = default(IToken);
		IToken FAULTS148 = default(IToken);
		IToken SOURCE149 = default(IToken);
		IToken SWAPS150 = default(IToken);

		object ALL139_tree = default(object);
		object BLOCK140_tree = default(object);
		object IO141_tree = default(object);
		object CONTEXT142_tree = default(object);
		object SWITCHES143_tree = default(object);
		object CPU144_tree = default(object);
		object IPC145_tree = default(object);
		object MEMORY146_tree = default(object);
		object PAGE147_tree = default(object);
		object FAULTS148_tree = default(object);
		object SOURCE149_tree = default(object);
		object SWAPS150_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "show_profile_types");
		DebugLocation(118, 2);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:119:3: ( ALL | BLOCK IO | CONTEXT SWITCHES | CPU | IPC | MEMORY | PAGE FAULTS | SOURCE | SWAPS )
			int alt45=9;
			try { DebugEnterDecision(45, false);
			switch (input.LA(1))
			{
			case ALL:
				{
				alt45 = 1;
				}
				break;
			case BLOCK:
				{
				alt45 = 2;
				}
				break;
			case CONTEXT:
				{
				alt45 = 3;
				}
				break;
			case CPU:
				{
				alt45 = 4;
				}
				break;
			case IPC:
				{
				alt45 = 5;
				}
				break;
			case MEMORY:
				{
				alt45 = 6;
				}
				break;
			case PAGE:
				{
				alt45 = 7;
				}
				break;
			case SOURCE:
				{
				alt45 = 8;
				}
				break;
			case SWAPS:
				{
				alt45 = 9;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 45, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(45); }
			switch (alt45)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:119:5: ALL
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(119, 5);
				ALL139=(IToken)Match(input,ALL,Follow._ALL_in_show_profile_types1620); if (state.failed) return retval;
				if (state.backtracking == 0) {
				ALL139_tree = (object)adaptor.Create(ALL139);
				adaptor.AddChild(root_0, ALL139_tree);
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:120:5: BLOCK IO
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(120, 5);
				BLOCK140=(IToken)Match(input,BLOCK,Follow._BLOCK_in_show_profile_types1626); if (state.failed) return retval;
				if (state.backtracking == 0) {
				BLOCK140_tree = (object)adaptor.Create(BLOCK140);
				adaptor.AddChild(root_0, BLOCK140_tree);
				}
				DebugLocation(120, 11);
				IO141=(IToken)Match(input,IO,Follow._IO_in_show_profile_types1628); if (state.failed) return retval;
				if (state.backtracking == 0) {
				IO141_tree = (object)adaptor.Create(IO141);
				adaptor.AddChild(root_0, IO141_tree);
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:121:5: CONTEXT SWITCHES
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(121, 5);
				CONTEXT142=(IToken)Match(input,CONTEXT,Follow._CONTEXT_in_show_profile_types1634); if (state.failed) return retval;
				if (state.backtracking == 0) {
				CONTEXT142_tree = (object)adaptor.Create(CONTEXT142);
				adaptor.AddChild(root_0, CONTEXT142_tree);
				}
				DebugLocation(121, 13);
				SWITCHES143=(IToken)Match(input,SWITCHES,Follow._SWITCHES_in_show_profile_types1636); if (state.failed) return retval;
				if (state.backtracking == 0) {
				SWITCHES143_tree = (object)adaptor.Create(SWITCHES143);
				adaptor.AddChild(root_0, SWITCHES143_tree);
				}

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:122:5: CPU
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(122, 5);
				CPU144=(IToken)Match(input,CPU,Follow._CPU_in_show_profile_types1642); if (state.failed) return retval;
				if (state.backtracking == 0) {
				CPU144_tree = (object)adaptor.Create(CPU144);
				adaptor.AddChild(root_0, CPU144_tree);
				}

				}
				break;
			case 5:
				DebugEnterAlt(5);
				// MySQL51Parser.g3:123:5: IPC
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(123, 5);
				IPC145=(IToken)Match(input,IPC,Follow._IPC_in_show_profile_types1648); if (state.failed) return retval;
				if (state.backtracking == 0) {
				IPC145_tree = (object)adaptor.Create(IPC145);
				adaptor.AddChild(root_0, IPC145_tree);
				}

				}
				break;
			case 6:
				DebugEnterAlt(6);
				// MySQL51Parser.g3:124:5: MEMORY
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(124, 5);
				MEMORY146=(IToken)Match(input,MEMORY,Follow._MEMORY_in_show_profile_types1654); if (state.failed) return retval;
				if (state.backtracking == 0) {
				MEMORY146_tree = (object)adaptor.Create(MEMORY146);
				adaptor.AddChild(root_0, MEMORY146_tree);
				}

				}
				break;
			case 7:
				DebugEnterAlt(7);
				// MySQL51Parser.g3:125:5: PAGE FAULTS
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(125, 5);
				PAGE147=(IToken)Match(input,PAGE,Follow._PAGE_in_show_profile_types1660); if (state.failed) return retval;
				if (state.backtracking == 0) {
				PAGE147_tree = (object)adaptor.Create(PAGE147);
				adaptor.AddChild(root_0, PAGE147_tree);
				}
				DebugLocation(125, 10);
				FAULTS148=(IToken)Match(input,FAULTS,Follow._FAULTS_in_show_profile_types1662); if (state.failed) return retval;
				if (state.backtracking == 0) {
				FAULTS148_tree = (object)adaptor.Create(FAULTS148);
				adaptor.AddChild(root_0, FAULTS148_tree);
				}

				}
				break;
			case 8:
				DebugEnterAlt(8);
				// MySQL51Parser.g3:126:5: SOURCE
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(126, 5);
				SOURCE149=(IToken)Match(input,SOURCE,Follow._SOURCE_in_show_profile_types1668); if (state.failed) return retval;
				if (state.backtracking == 0) {
				SOURCE149_tree = (object)adaptor.Create(SOURCE149);
				adaptor.AddChild(root_0, SOURCE149_tree);
				}

				}
				break;
			case 9:
				DebugEnterAlt(9);
				// MySQL51Parser.g3:127:5: SWAPS
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(127, 5);
				SWAPS150=(IToken)Match(input,SWAPS,Follow._SWAPS_in_show_profile_types1674); if (state.failed) return retval;
				if (state.backtracking == 0) {
				SWAPS150_tree = (object)adaptor.Create(SWAPS150);
				adaptor.AddChild(root_0, SWAPS150_tree);
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("show_profile_types", 6);
			LeaveRule("show_profile_types", 6);
			LeaveRule_show_profile_types();
		}
		DebugLocation(128, 2);
		} finally { DebugExitRule(GrammarFileName, "show_profile_types"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "show_profile_types"

	private sealed partial class like_or_where_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public like_or_where_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_like_or_where();
	partial void LeaveRule_like_or_where();

	// $ANTLR start "like_or_where"
	// MySQL51Parser.g3:130:1: like_or_where : ( LIKE string_or_placeholder -> ^( LIKE string_or_placeholder ) | WHERE expr -> ^( WHERE expr ) );
	[GrammarRule("like_or_where")]
	private MySQL51Parser.like_or_where_return like_or_where()
	{
		EnterRule_like_or_where();
		EnterRule("like_or_where", 7);
		TraceIn("like_or_where", 7);
		MySQL51Parser.like_or_where_return retval = new MySQL51Parser.like_or_where_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken LIKE151 = default(IToken);
		IToken WHERE153 = default(IToken);
		MySQL51Parser.string_or_placeholder_return string_or_placeholder152 = default(MySQL51Parser.string_or_placeholder_return);
		MySQL51Parser.expr_return expr154 = default(MySQL51Parser.expr_return);

		object LIKE151_tree = default(object);
		object WHERE153_tree = default(object);
		RewriteRuleITokenStream stream_LIKE=new RewriteRuleITokenStream(adaptor,"token LIKE");
		RewriteRuleITokenStream stream_WHERE=new RewriteRuleITokenStream(adaptor,"token WHERE");
		RewriteRuleSubtreeStream stream_string_or_placeholder=new RewriteRuleSubtreeStream(adaptor,"rule string_or_placeholder");
		RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr");
		try { DebugEnterRule(GrammarFileName, "like_or_where");
		DebugLocation(130, 2);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:131:3: ( LIKE string_or_placeholder -> ^( LIKE string_or_placeholder ) | WHERE expr -> ^( WHERE expr ) )
			int alt46=2;
			try { DebugEnterDecision(46, false);
			int LA46_0 = input.LA(1);

			if ((LA46_0==LIKE))
			{
				alt46 = 1;
			}
			else if ((LA46_0==WHERE))
			{
				alt46 = 2;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 46, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(46); }
			switch (alt46)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:132:5: LIKE string_or_placeholder
				{
				DebugLocation(132, 5);
				LIKE151=(IToken)Match(input,LIKE,Follow._LIKE_in_like_or_where1692); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LIKE.Add(LIKE151);

				DebugLocation(132, 10);
				PushFollow(Follow._string_or_placeholder_in_like_or_where1694);
				string_or_placeholder152=string_or_placeholder();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_string_or_placeholder.Add(string_or_placeholder152.Tree);


				{
				// AST REWRITE
				// elements: LIKE, string_or_placeholder
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 132:34: -> ^( LIKE string_or_placeholder )
				{
					DebugLocation(132, 37);
					// MySQL51Parser.g3:132:37: ^( LIKE string_or_placeholder )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(132, 39);
					root_1 = (object)adaptor.BecomeRoot(stream_LIKE.NextNode(), root_1);

					DebugLocation(132, 44);
					adaptor.AddChild(root_1, stream_string_or_placeholder.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:133:5: WHERE expr
				{
				DebugLocation(133, 5);
				WHERE153=(IToken)Match(input,WHERE,Follow._WHERE_in_like_or_where1710); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_WHERE.Add(WHERE153);

				DebugLocation(133, 11);
				PushFollow(Follow._expr_in_like_or_where1712);
				expr154=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr154.Tree);


				{
				// AST REWRITE
				// elements: WHERE, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 133:19: -> ^( WHERE expr )
				{
					DebugLocation(133, 22);
					// MySQL51Parser.g3:133:22: ^( WHERE expr )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(133, 24);
					root_1 = (object)adaptor.BecomeRoot(stream_WHERE.NextNode(), root_1);

					DebugLocation(133, 30);
					adaptor.AddChild(root_1, stream_expr.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("like_or_where", 7);
			LeaveRule("like_or_where", 7);
			LeaveRule_like_or_where();
		}
		DebugLocation(134, 2);
		} finally { DebugExitRule(GrammarFileName, "like_or_where"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "like_or_where"

	private sealed partial class explain_stmt_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public explain_stmt_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_explain_stmt();
	partial void LeaveRule_explain_stmt();

	// $ANTLR start "explain_stmt"
	// MySQL51Parser.g3:136:1: explain_stmt : EXPLAIN select -> ^( EXPLAIN select ) ;
	[GrammarRule("explain_stmt")]
	private MySQL51Parser.explain_stmt_return explain_stmt()
	{
		EnterRule_explain_stmt();
		EnterRule("explain_stmt", 8);
		TraceIn("explain_stmt", 8);
		MySQL51Parser.explain_stmt_return retval = new MySQL51Parser.explain_stmt_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken EXPLAIN155 = default(IToken);
		MySQL51Parser.select_return select156 = default(MySQL51Parser.select_return);

		object EXPLAIN155_tree = default(object);
		RewriteRuleITokenStream stream_EXPLAIN=new RewriteRuleITokenStream(adaptor,"token EXPLAIN");
		RewriteRuleSubtreeStream stream_select=new RewriteRuleSubtreeStream(adaptor,"rule select");
		try { DebugEnterRule(GrammarFileName, "explain_stmt");
		DebugLocation(136, 2);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:137:3: ( EXPLAIN select -> ^( EXPLAIN select ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:137:5: EXPLAIN select
			{
			DebugLocation(137, 5);
			EXPLAIN155=(IToken)Match(input,EXPLAIN,Follow._EXPLAIN_in_explain_stmt1738); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_EXPLAIN.Add(EXPLAIN155);

			DebugLocation(137, 13);
			PushFollow(Follow._select_in_explain_stmt1740);
			select156=select();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_select.Add(select156.Tree);


			{
			// AST REWRITE
			// elements: EXPLAIN, select
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 137:20: -> ^( EXPLAIN select )
			{
				DebugLocation(137, 23);
				// MySQL51Parser.g3:137:23: ^( EXPLAIN select )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(137, 25);
				root_1 = (object)adaptor.BecomeRoot(stream_EXPLAIN.NextNode(), root_1);

				DebugLocation(137, 33);
				adaptor.AddChild(root_1, stream_select.NextTree());

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("explain_stmt", 8);
			LeaveRule("explain_stmt", 8);
			LeaveRule_explain_stmt();
		}
		DebugLocation(138, 2);
		} finally { DebugExitRule(GrammarFileName, "explain_stmt"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "explain_stmt"

	private sealed partial class select_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public select_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_select();
	partial void LeaveRule_select();

	// $ANTLR start "select"
	// MySQL51Parser.g3:140:1: select : select_paren ( UNION (mod= ALL |mod= DISTINCT )? union_selects+= select )* -> {seenUnion}? ^( UNION ( $mod)? select_paren ( $union_selects)+ ) -> select_paren ;
	[GrammarRule("select")]
	private MySQL51Parser.select_return select()
	{
		EnterRule_select();
		EnterRule("select", 9);
		TraceIn("select", 9);
		MySQL51Parser.select_return retval = new MySQL51Parser.select_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken mod = default(IToken);
		IToken UNION158 = default(IToken);
		List<object> list_union_selects = null;
		MySQL51Parser.select_paren_return select_paren157 = default(MySQL51Parser.select_paren_return);
		MySQL51Parser.select_return union_selects = default(MySQL51Parser.select_return);
		object mod_tree = default(object);
		object UNION158_tree = default(object);
		RewriteRuleITokenStream stream_UNION=new RewriteRuleITokenStream(adaptor,"token UNION");
		RewriteRuleITokenStream stream_ALL=new RewriteRuleITokenStream(adaptor,"token ALL");
		RewriteRuleITokenStream stream_DISTINCT=new RewriteRuleITokenStream(adaptor,"token DISTINCT");
		RewriteRuleSubtreeStream stream_select_paren=new RewriteRuleSubtreeStream(adaptor,"rule select_paren");
		RewriteRuleSubtreeStream stream_select=new RewriteRuleSubtreeStream(adaptor,"rule select");

		bool seenUnion = false;

		try { DebugEnterRule(GrammarFileName, "select");
		DebugLocation(140, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:144:2: ( select_paren ( UNION (mod= ALL |mod= DISTINCT )? union_selects+= select )* -> {seenUnion}? ^( UNION ( $mod)? select_paren ( $union_selects)+ ) -> select_paren )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:144:4: select_paren ( UNION (mod= ALL |mod= DISTINCT )? union_selects+= select )*
			{
			DebugLocation(144, 4);
			PushFollow(Follow._select_paren_in_select1765);
			select_paren157=select_paren();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_select_paren.Add(select_paren157.Tree);
			DebugLocation(145, 3);
			// MySQL51Parser.g3:145:3: ( UNION (mod= ALL |mod= DISTINCT )? union_selects+= select )*
			try { DebugEnterSubRule(48);
			while (true)
			{
				int alt48=2;
				try { DebugEnterDecision(48, false);
				int LA48_0 = input.LA(1);

				if ((LA48_0==UNION))
				{
					alt48 = 1;
				}


				} finally { DebugExitDecision(48); }
				switch ( alt48 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:145:4: UNION (mod= ALL |mod= DISTINCT )? union_selects+= select
					{
					DebugLocation(145, 4);
					UNION158=(IToken)Match(input,UNION,Follow._UNION_in_select1770); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_UNION.Add(UNION158);

					DebugLocation(145, 10);
					// MySQL51Parser.g3:145:10: (mod= ALL |mod= DISTINCT )?
					int alt47=3;
					try { DebugEnterSubRule(47);
					try { DebugEnterDecision(47, false);
					int LA47_0 = input.LA(1);

					if ((LA47_0==ALL))
					{
						alt47 = 1;
					}
					else if ((LA47_0==DISTINCT))
					{
						alt47 = 2;
					}
					} finally { DebugExitDecision(47); }
					switch (alt47)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:145:11: mod= ALL
						{
						DebugLocation(145, 14);
						mod=(IToken)Match(input,ALL,Follow._ALL_in_select1775); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_ALL.Add(mod);


						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:145:21: mod= DISTINCT
						{
						DebugLocation(145, 24);
						mod=(IToken)Match(input,DISTINCT,Follow._DISTINCT_in_select1781); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_DISTINCT.Add(mod);


						}
						break;

					}
					} finally { DebugExitSubRule(47); }

					DebugLocation(145, 49);
					PushFollow(Follow._select_in_select1787);
					union_selects=select();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_select.Add(union_selects.Tree);
					if (list_union_selects==null) list_union_selects=new List<object>();
					list_union_selects.Add(union_selects.Tree);

					DebugLocation(145, 58);
					if (state.backtracking == 0)
					{
						seenUnion=true;
					}

					}
					break;

				default:
					goto loop48;
				}
			}

			loop48:
				;

			} finally { DebugExitSubRule(48); }



			{
			// AST REWRITE
			// elements: UNION, mod, select_paren, union_selects, select_paren
			// token labels: mod
			// rule labels: retval
			// token list labels: 
			// rule list labels: union_selects
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleITokenStream stream_mod=new RewriteRuleITokenStream(adaptor,"token mod",mod);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);
			RewriteRuleSubtreeStream stream_union_selects=new RewriteRuleSubtreeStream(adaptor,"token union_selects",list_union_selects);
			root_0 = (object)adaptor.Nil();
			// 146:5: -> {seenUnion}? ^( UNION ( $mod)? select_paren ( $union_selects)+ )
			if (seenUnion)
			{
				DebugLocation(146, 21);
				// MySQL51Parser.g3:146:21: ^( UNION ( $mod)? select_paren ( $union_selects)+ )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(146, 23);
				root_1 = (object)adaptor.BecomeRoot(stream_UNION.NextNode(), root_1);

				DebugLocation(146, 30);
				// MySQL51Parser.g3:146:30: ( $mod)?
				if (stream_mod.HasNext)
				{
					DebugLocation(146, 30);
					adaptor.AddChild(root_1, stream_mod.NextNode());

				}
				stream_mod.Reset();
				DebugLocation(146, 35);
				adaptor.AddChild(root_1, stream_select_paren.NextTree());
				DebugLocation(146, 49);
				if (!(stream_union_selects.HasNext))
				{
					throw new RewriteEarlyExitException();
				}
				while ( stream_union_selects.HasNext )
				{
					DebugLocation(146, 49);
					adaptor.AddChild(root_1, stream_union_selects.NextTree());

				}
				stream_union_selects.Reset();

				adaptor.AddChild(root_0, root_1);
				}

			}
			else // 147:4: -> select_paren
			{
				DebugLocation(147, 7);
				adaptor.AddChild(root_0, stream_select_paren.NextTree());

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("select", 9);
			LeaveRule("select", 9);
			LeaveRule_select();
		}
		DebugLocation(148, 1);
		} finally { DebugExitRule(GrammarFileName, "select"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "select"

	private sealed partial class select_paren_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public select_paren_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_select_paren();
	partial void LeaveRule_select_paren();

	// $ANTLR start "select_paren"
	// MySQL51Parser.g3:150:1: select_paren : ( LPAREN select_paren RPAREN -> select_paren | select_inner -> select_inner );
	[GrammarRule("select_paren")]
	private MySQL51Parser.select_paren_return select_paren()
	{
		EnterRule_select_paren();
		EnterRule("select_paren", 10);
		TraceIn("select_paren", 10);
		MySQL51Parser.select_paren_return retval = new MySQL51Parser.select_paren_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken LPAREN159 = default(IToken);
		IToken RPAREN161 = default(IToken);
		MySQL51Parser.select_paren_return select_paren160 = default(MySQL51Parser.select_paren_return);
		MySQL51Parser.select_inner_return select_inner162 = default(MySQL51Parser.select_inner_return);

		object LPAREN159_tree = default(object);
		object RPAREN161_tree = default(object);
		RewriteRuleITokenStream stream_LPAREN=new RewriteRuleITokenStream(adaptor,"token LPAREN");
		RewriteRuleITokenStream stream_RPAREN=new RewriteRuleITokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_select_paren=new RewriteRuleSubtreeStream(adaptor,"rule select_paren");
		RewriteRuleSubtreeStream stream_select_inner=new RewriteRuleSubtreeStream(adaptor,"rule select_inner");
		try { DebugEnterRule(GrammarFileName, "select_paren");
		DebugLocation(150, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:151:2: ( LPAREN select_paren RPAREN -> select_paren | select_inner -> select_inner )
			int alt49=2;
			try { DebugEnterDecision(49, false);
			int LA49_0 = input.LA(1);

			if ((LA49_0==LPAREN))
			{
				alt49 = 1;
			}
			else if ((LA49_0==SELECT))
			{
				alt49 = 2;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 49, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(49); }
			switch (alt49)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:151:4: LPAREN select_paren RPAREN
				{
				DebugLocation(151, 4);
				LPAREN159=(IToken)Match(input,LPAREN,Follow._LPAREN_in_select_paren1831); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN159);

				DebugLocation(151, 11);
				PushFollow(Follow._select_paren_in_select_paren1833);
				select_paren160=select_paren();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_select_paren.Add(select_paren160.Tree);
				DebugLocation(151, 24);
				RPAREN161=(IToken)Match(input,RPAREN,Follow._RPAREN_in_select_paren1835); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN161);



				{
				// AST REWRITE
				// elements: select_paren
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 151:31: -> select_paren
				{
					DebugLocation(151, 34);
					adaptor.AddChild(root_0, stream_select_paren.NextTree());

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:152:4: select_inner
				{
				DebugLocation(152, 4);
				PushFollow(Follow._select_inner_in_select_paren1844);
				select_inner162=select_inner();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_select_inner.Add(select_inner162.Tree);


				{
				// AST REWRITE
				// elements: select_inner
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 152:20: -> select_inner
				{
					DebugLocation(152, 23);
					adaptor.AddChild(root_0, stream_select_inner.NextTree());

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("select_paren", 10);
			LeaveRule("select_paren", 10);
			LeaveRule_select_paren();
		}
		DebugLocation(153, 1);
		} finally { DebugExitRule(GrammarFileName, "select_paren"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "select_paren"

	private sealed partial class select_inner_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public select_inner_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_select_inner();
	partial void LeaveRule_select_inner();

	// $ANTLR start "select_inner"
	// MySQL51Parser.g3:155:1: select_inner : SELECT ( options {k=1; } : select_options )* exprs+= select_expr ( COMMA exprs+= select_expr )* ( ( FROM table_references ) ( WHERE where= where_condition )? ( group_by )? ( HAVING having= where_condition )? ( order_by )? ( limit )? ( PROCEDURE procId= ident procArgs= parenOptExprList )? ( ( INTO OUTFILE file= STRING opts= infile_options_helper | INTO DUMPFILE file= STRING | INTO vars+= variable ( COMMA vars+= variable )* ) )? (forUpdate= FOR UPDATE |clock= LOCK IN SHARE MODE )? | order_by ( limit )? | limit )? -> ^( SELECT ( ^( OPTIONS ( select_options )* ) )? ^( COLUMNS ( $exprs)+ ) ( ^( FROM table_references ) )? ( ^( WHERE $where) )? ( group_by )? ( ^( HAVING $having) )? ( order_by )? ( limit )? ( FOR )? ( LOCK )? ) ;
	[GrammarRule("select_inner")]
	private MySQL51Parser.select_inner_return select_inner()
	{
		EnterRule_select_inner();
		EnterRule("select_inner", 11);
		TraceIn("select_inner", 11);
		MySQL51Parser.select_inner_return retval = new MySQL51Parser.select_inner_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken file = default(IToken);
		IToken forUpdate = default(IToken);
		IToken clock = default(IToken);
		IToken SELECT163 = default(IToken);
		IToken COMMA165 = default(IToken);
		IToken FROM166 = default(IToken);
		IToken WHERE168 = default(IToken);
		IToken HAVING170 = default(IToken);
		IToken PROCEDURE173 = default(IToken);
		IToken INTO174 = default(IToken);
		IToken OUTFILE175 = default(IToken);
		IToken INTO176 = default(IToken);
		IToken DUMPFILE177 = default(IToken);
		IToken INTO178 = default(IToken);
		IToken COMMA179 = default(IToken);
		IToken UPDATE180 = default(IToken);
		IToken IN181 = default(IToken);
		IToken SHARE182 = default(IToken);
		IToken MODE183 = default(IToken);
		List<object> list_exprs = null;
		List<object> list_vars = null;
		MySQL51Parser.where_condition_return where = default(MySQL51Parser.where_condition_return);
		MySQL51Parser.where_condition_return having = default(MySQL51Parser.where_condition_return);
		MySQL51Parser.ident_return procId = default(MySQL51Parser.ident_return);
		MySQL51Parser.parenOptExprList_return procArgs = default(MySQL51Parser.parenOptExprList_return);
		MySQL51Parser.infile_options_helper_return opts = default(MySQL51Parser.infile_options_helper_return);
		MySQL51Parser.select_options_return select_options164 = default(MySQL51Parser.select_options_return);
		MySQL51Parser.table_references_return table_references167 = default(MySQL51Parser.table_references_return);
		MySQL51Parser.group_by_return group_by169 = default(MySQL51Parser.group_by_return);
		MySQL51Parser.order_by_return order_by171 = default(MySQL51Parser.order_by_return);
		MySQL51Parser.limit_return limit172 = default(MySQL51Parser.limit_return);
		MySQL51Parser.order_by_return order_by184 = default(MySQL51Parser.order_by_return);
		MySQL51Parser.limit_return limit185 = default(MySQL51Parser.limit_return);
		MySQL51Parser.limit_return limit186 = default(MySQL51Parser.limit_return);
		MySQL51Parser.select_expr_return exprs = default(MySQL51Parser.select_expr_return);
		MySQL51Parser.variable_return vars = default(MySQL51Parser.variable_return);
		object file_tree = default(object);
		object forUpdate_tree = default(object);
		object clock_tree = default(object);
		object SELECT163_tree = default(object);
		object COMMA165_tree = default(object);
		object FROM166_tree = default(object);
		object WHERE168_tree = default(object);
		object HAVING170_tree = default(object);
		object PROCEDURE173_tree = default(object);
		object INTO174_tree = default(object);
		object OUTFILE175_tree = default(object);
		object INTO176_tree = default(object);
		object DUMPFILE177_tree = default(object);
		object INTO178_tree = default(object);
		object COMMA179_tree = default(object);
		object UPDATE180_tree = default(object);
		object IN181_tree = default(object);
		object SHARE182_tree = default(object);
		object MODE183_tree = default(object);
		RewriteRuleITokenStream stream_SELECT=new RewriteRuleITokenStream(adaptor,"token SELECT");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleITokenStream stream_FROM=new RewriteRuleITokenStream(adaptor,"token FROM");
		RewriteRuleITokenStream stream_WHERE=new RewriteRuleITokenStream(adaptor,"token WHERE");
		RewriteRuleITokenStream stream_HAVING=new RewriteRuleITokenStream(adaptor,"token HAVING");
		RewriteRuleITokenStream stream_PROCEDURE=new RewriteRuleITokenStream(adaptor,"token PROCEDURE");
		RewriteRuleITokenStream stream_INTO=new RewriteRuleITokenStream(adaptor,"token INTO");
		RewriteRuleITokenStream stream_OUTFILE=new RewriteRuleITokenStream(adaptor,"token OUTFILE");
		RewriteRuleITokenStream stream_STRING=new RewriteRuleITokenStream(adaptor,"token STRING");
		RewriteRuleITokenStream stream_DUMPFILE=new RewriteRuleITokenStream(adaptor,"token DUMPFILE");
		RewriteRuleITokenStream stream_FOR=new RewriteRuleITokenStream(adaptor,"token FOR");
		RewriteRuleITokenStream stream_UPDATE=new RewriteRuleITokenStream(adaptor,"token UPDATE");
		RewriteRuleITokenStream stream_LOCK=new RewriteRuleITokenStream(adaptor,"token LOCK");
		RewriteRuleITokenStream stream_IN=new RewriteRuleITokenStream(adaptor,"token IN");
		RewriteRuleITokenStream stream_SHARE=new RewriteRuleITokenStream(adaptor,"token SHARE");
		RewriteRuleITokenStream stream_MODE=new RewriteRuleITokenStream(adaptor,"token MODE");
		RewriteRuleSubtreeStream stream_select_options=new RewriteRuleSubtreeStream(adaptor,"rule select_options");
		RewriteRuleSubtreeStream stream_select_expr=new RewriteRuleSubtreeStream(adaptor,"rule select_expr");
		RewriteRuleSubtreeStream stream_table_references=new RewriteRuleSubtreeStream(adaptor,"rule table_references");
		RewriteRuleSubtreeStream stream_where_condition=new RewriteRuleSubtreeStream(adaptor,"rule where_condition");
		RewriteRuleSubtreeStream stream_group_by=new RewriteRuleSubtreeStream(adaptor,"rule group_by");
		RewriteRuleSubtreeStream stream_order_by=new RewriteRuleSubtreeStream(adaptor,"rule order_by");
		RewriteRuleSubtreeStream stream_limit=new RewriteRuleSubtreeStream(adaptor,"rule limit");
		RewriteRuleSubtreeStream stream_ident=new RewriteRuleSubtreeStream(adaptor,"rule ident");
		RewriteRuleSubtreeStream stream_parenOptExprList=new RewriteRuleSubtreeStream(adaptor,"rule parenOptExprList");
		RewriteRuleSubtreeStream stream_infile_options_helper=new RewriteRuleSubtreeStream(adaptor,"rule infile_options_helper");
		RewriteRuleSubtreeStream stream_variable=new RewriteRuleSubtreeStream(adaptor,"rule variable");
		try { DebugEnterRule(GrammarFileName, "select_inner");
		DebugLocation(155, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:156:2: ( SELECT ( options {k=1; } : select_options )* exprs+= select_expr ( COMMA exprs+= select_expr )* ( ( FROM table_references ) ( WHERE where= where_condition )? ( group_by )? ( HAVING having= where_condition )? ( order_by )? ( limit )? ( PROCEDURE procId= ident procArgs= parenOptExprList )? ( ( INTO OUTFILE file= STRING opts= infile_options_helper | INTO DUMPFILE file= STRING | INTO vars+= variable ( COMMA vars+= variable )* ) )? (forUpdate= FOR UPDATE |clock= LOCK IN SHARE MODE )? | order_by ( limit )? | limit )? -> ^( SELECT ( ^( OPTIONS ( select_options )* ) )? ^( COLUMNS ( $exprs)+ ) ( ^( FROM table_references ) )? ( ^( WHERE $where) )? ( group_by )? ( ^( HAVING $having) )? ( order_by )? ( limit )? ( FOR )? ( LOCK )? ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:156:4: SELECT ( options {k=1; } : select_options )* exprs+= select_expr ( COMMA exprs+= select_expr )* ( ( FROM table_references ) ( WHERE where= where_condition )? ( group_by )? ( HAVING having= where_condition )? ( order_by )? ( limit )? ( PROCEDURE procId= ident procArgs= parenOptExprList )? ( ( INTO OUTFILE file= STRING opts= infile_options_helper | INTO DUMPFILE file= STRING | INTO vars+= variable ( COMMA vars+= variable )* ) )? (forUpdate= FOR UPDATE |clock= LOCK IN SHARE MODE )? | order_by ( limit )? | limit )?
			{
			DebugLocation(156, 4);
			SELECT163=(IToken)Match(input,SELECT,Follow._SELECT_in_select_inner1863); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_SELECT.Add(SELECT163);

			DebugLocation(156, 11);
			// MySQL51Parser.g3:156:11: ( options {k=1; } : select_options )*
			try { DebugEnterSubRule(50);
			while (true)
			{
				int alt50=2;
				try { DebugEnterDecision(50, false);
				try
				{
					alt50 = dfa50.Predict(input);
				}
				catch (NoViableAltException nvae)
				{
					DebugRecognitionException(nvae);
					throw;
				}
				} finally { DebugExitDecision(50); }
				switch ( alt50 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:156:26: select_options
					{
					DebugLocation(156, 26);
					PushFollow(Follow._select_options_in_select_inner1873);
					select_options164=select_options();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_select_options.Add(select_options164.Tree);

					}
					break;

				default:
					goto loop50;
				}
			}

			loop50:
				;

			} finally { DebugExitSubRule(50); }

			DebugLocation(157, 8);
			PushFollow(Follow._select_expr_in_select_inner1881);
			exprs=select_expr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_select_expr.Add(exprs.Tree);
			if (list_exprs==null) list_exprs=new List<object>();
			list_exprs.Add(exprs.Tree);

			DebugLocation(157, 22);
			// MySQL51Parser.g3:157:22: ( COMMA exprs+= select_expr )*
			try { DebugEnterSubRule(51);
			while (true)
			{
				int alt51=2;
				try { DebugEnterDecision(51, false);
				int LA51_0 = input.LA(1);

				if ((LA51_0==COMMA))
				{
					alt51 = 1;
				}


				} finally { DebugExitDecision(51); }
				switch ( alt51 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:157:23: COMMA exprs+= select_expr
					{
					DebugLocation(157, 23);
					COMMA165=(IToken)Match(input,COMMA,Follow._COMMA_in_select_inner1884); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMA.Add(COMMA165);

					DebugLocation(157, 34);
					PushFollow(Follow._select_expr_in_select_inner1888);
					exprs=select_expr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_select_expr.Add(exprs.Tree);
					if (list_exprs==null) list_exprs=new List<object>();
					list_exprs.Add(exprs.Tree);


					}
					break;

				default:
					goto loop51;
				}
			}

			loop51:
				;

			} finally { DebugExitSubRule(51); }

			DebugLocation(158, 3);
			// MySQL51Parser.g3:158:3: ( ( FROM table_references ) ( WHERE where= where_condition )? ( group_by )? ( HAVING having= where_condition )? ( order_by )? ( limit )? ( PROCEDURE procId= ident procArgs= parenOptExprList )? ( ( INTO OUTFILE file= STRING opts= infile_options_helper | INTO DUMPFILE file= STRING | INTO vars+= variable ( COMMA vars+= variable )* ) )? (forUpdate= FOR UPDATE |clock= LOCK IN SHARE MODE )? | order_by ( limit )? | limit )?
			int alt63=4;
			try { DebugEnterSubRule(63);
			try { DebugEnterDecision(63, false);
			switch (input.LA(1))
			{
			case FROM:
				{
				alt63 = 1;
				}
				break;
			case ORDER:
				{
				alt63 = 2;
				}
				break;
			case LIMIT:
				{
				alt63 = 3;
				}
				break;
			}

			} finally { DebugExitDecision(63); }
			switch (alt63)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:159:13: ( FROM table_references ) ( WHERE where= where_condition )? ( group_by )? ( HAVING having= where_condition )? ( order_by )? ( limit )? ( PROCEDURE procId= ident procArgs= parenOptExprList )? ( ( INTO OUTFILE file= STRING opts= infile_options_helper | INTO DUMPFILE file= STRING | INTO vars+= variable ( COMMA vars+= variable )* ) )? (forUpdate= FOR UPDATE |clock= LOCK IN SHARE MODE )?
				{
				DebugLocation(159, 13);
				// MySQL51Parser.g3:159:13: ( FROM table_references )
				DebugEnterAlt(1);
				// MySQL51Parser.g3:159:14: FROM table_references
				{
				DebugLocation(159, 14);
				FROM166=(IToken)Match(input,FROM,Follow._FROM_in_select_inner1909); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_FROM.Add(FROM166);

				DebugLocation(159, 19);
				PushFollow(Follow._table_references_in_select_inner1911);
				table_references167=table_references();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_table_references.Add(table_references167.Tree);

				}

				DebugLocation(160, 13);
				// MySQL51Parser.g3:160:13: ( WHERE where= where_condition )?
				int alt52=2;
				try { DebugEnterSubRule(52);
				try { DebugEnterDecision(52, false);
				int LA52_0 = input.LA(1);

				if ((LA52_0==WHERE))
				{
					alt52 = 1;
				}
				} finally { DebugExitDecision(52); }
				switch (alt52)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:160:14: WHERE where= where_condition
					{
					DebugLocation(160, 14);
					WHERE168=(IToken)Match(input,WHERE,Follow._WHERE_in_select_inner1927); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_WHERE.Add(WHERE168);

					DebugLocation(160, 25);
					PushFollow(Follow._where_condition_in_select_inner1931);
					where=where_condition();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_where_condition.Add(where.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(52); }

				DebugLocation(161, 13);
				// MySQL51Parser.g3:161:13: ( group_by )?
				int alt53=2;
				try { DebugEnterSubRule(53);
				try { DebugEnterDecision(53, false);
				int LA53_0 = input.LA(1);

				if ((LA53_0==GROUP))
				{
					alt53 = 1;
				}
				} finally { DebugExitDecision(53); }
				switch (alt53)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:161:13: group_by
					{
					DebugLocation(161, 13);
					PushFollow(Follow._group_by_in_select_inner1947);
					group_by169=group_by();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_group_by.Add(group_by169.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(53); }

				DebugLocation(162, 13);
				// MySQL51Parser.g3:162:13: ( HAVING having= where_condition )?
				int alt54=2;
				try { DebugEnterSubRule(54);
				try { DebugEnterDecision(54, false);
				int LA54_0 = input.LA(1);

				if ((LA54_0==HAVING))
				{
					alt54 = 1;
				}
				} finally { DebugExitDecision(54); }
				switch (alt54)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:162:14: HAVING having= where_condition
					{
					DebugLocation(162, 14);
					HAVING170=(IToken)Match(input,HAVING,Follow._HAVING_in_select_inner1963); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_HAVING.Add(HAVING170);

					DebugLocation(162, 27);
					PushFollow(Follow._where_condition_in_select_inner1967);
					having=where_condition();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_where_condition.Add(having.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(54); }

				DebugLocation(163, 13);
				// MySQL51Parser.g3:163:13: ( order_by )?
				int alt55=2;
				try { DebugEnterSubRule(55);
				try { DebugEnterDecision(55, false);
				int LA55_0 = input.LA(1);

				if ((LA55_0==ORDER))
				{
					alt55 = 1;
				}
				} finally { DebugExitDecision(55); }
				switch (alt55)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:163:13: order_by
					{
					DebugLocation(163, 13);
					PushFollow(Follow._order_by_in_select_inner1983);
					order_by171=order_by();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_order_by.Add(order_by171.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(55); }

				DebugLocation(164, 13);
				// MySQL51Parser.g3:164:13: ( limit )?
				int alt56=2;
				try { DebugEnterSubRule(56);
				try { DebugEnterDecision(56, false);
				int LA56_0 = input.LA(1);

				if ((LA56_0==LIMIT))
				{
					alt56 = 1;
				}
				} finally { DebugExitDecision(56); }
				switch (alt56)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:164:13: limit
					{
					DebugLocation(164, 13);
					PushFollow(Follow._limit_in_select_inner1998);
					limit172=limit();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_limit.Add(limit172.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(56); }

				DebugLocation(166, 13);
				// MySQL51Parser.g3:166:13: ( PROCEDURE procId= ident procArgs= parenOptExprList )?
				int alt57=2;
				try { DebugEnterSubRule(57);
				try { DebugEnterDecision(57, false);
				int LA57_0 = input.LA(1);

				if ((LA57_0==PROCEDURE))
				{
					alt57 = 1;
				}
				} finally { DebugExitDecision(57); }
				switch (alt57)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:166:14: PROCEDURE procId= ident procArgs= parenOptExprList
					{
					DebugLocation(166, 14);
					PROCEDURE173=(IToken)Match(input,PROCEDURE,Follow._PROCEDURE_in_select_inner2027); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_PROCEDURE.Add(PROCEDURE173);

					DebugLocation(166, 30);
					PushFollow(Follow._ident_in_select_inner2031);
					procId=ident();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_ident.Add(procId.Tree);
					DebugLocation(166, 45);
					PushFollow(Follow._parenOptExprList_in_select_inner2035);
					procArgs=parenOptExprList();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_parenOptExprList.Add(procArgs.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(57); }

				DebugLocation(168, 13);
				// MySQL51Parser.g3:168:13: ( ( INTO OUTFILE file= STRING opts= infile_options_helper | INTO DUMPFILE file= STRING | INTO vars+= variable ( COMMA vars+= variable )* ) )?
				int alt60=2;
				try { DebugEnterSubRule(60);
				try { DebugEnterDecision(60, false);
				int LA60_0 = input.LA(1);

				if ((LA60_0==INTO))
				{
					alt60 = 1;
				}
				} finally { DebugExitDecision(60); }
				switch (alt60)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:168:14: ( INTO OUTFILE file= STRING opts= infile_options_helper | INTO DUMPFILE file= STRING | INTO vars+= variable ( COMMA vars+= variable )* )
					{
					DebugLocation(168, 14);
					// MySQL51Parser.g3:168:14: ( INTO OUTFILE file= STRING opts= infile_options_helper | INTO DUMPFILE file= STRING | INTO vars+= variable ( COMMA vars+= variable )* )
					int alt59=3;
					try { DebugEnterSubRule(59);
					try { DebugEnterDecision(59, false);
					int LA59_0 = input.LA(1);

					if ((LA59_0==INTO))
					{
						switch (input.LA(2))
						{
						case OUTFILE:
							{
							alt59 = 1;
							}
							break;
						case DUMPFILE:
							{
							alt59 = 2;
							}
							break;
						case GLOBAL_VARIABLE:
						case SESSION_VARIABLE:
							{
							alt59 = 3;
							}
							break;
						default:
							{
								if (state.backtracking>0) {state.failed=true; return retval;}
								NoViableAltException nvae = new NoViableAltException("", 59, 1, input);
								DebugRecognitionException(nvae);
								throw nvae;
							}
						}

					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 59, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					} finally { DebugExitDecision(59); }
					switch (alt59)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:168:16: INTO OUTFILE file= STRING opts= infile_options_helper
						{
						DebugLocation(168, 16);
						INTO174=(IToken)Match(input,INTO,Follow._INTO_in_select_inner2068); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_INTO.Add(INTO174);

						DebugLocation(168, 21);
						OUTFILE175=(IToken)Match(input,OUTFILE,Follow._OUTFILE_in_select_inner2070); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_OUTFILE.Add(OUTFILE175);

						DebugLocation(168, 33);
						file=(IToken)Match(input,STRING,Follow._STRING_in_select_inner2074); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_STRING.Add(file);

						DebugLocation(168, 45);
						PushFollow(Follow._infile_options_helper_in_select_inner2078);
						opts=infile_options_helper();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_infile_options_helper.Add(opts.Tree);

						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:169:19: INTO DUMPFILE file= STRING
						{
						DebugLocation(169, 19);
						INTO176=(IToken)Match(input,INTO,Follow._INTO_in_select_inner2098); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_INTO.Add(INTO176);

						DebugLocation(169, 24);
						DUMPFILE177=(IToken)Match(input,DUMPFILE,Follow._DUMPFILE_in_select_inner2100); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_DUMPFILE.Add(DUMPFILE177);

						DebugLocation(169, 37);
						file=(IToken)Match(input,STRING,Follow._STRING_in_select_inner2104); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_STRING.Add(file);


						}
						break;
					case 3:
						DebugEnterAlt(3);
						// MySQL51Parser.g3:170:19: INTO vars+= variable ( COMMA vars+= variable )*
						{
						DebugLocation(170, 19);
						INTO178=(IToken)Match(input,INTO,Follow._INTO_in_select_inner2124); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_INTO.Add(INTO178);

						DebugLocation(170, 28);
						PushFollow(Follow._variable_in_select_inner2128);
						vars=variable();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_variable.Add(vars.Tree);
						if (list_vars==null) list_vars=new List<object>();
						list_vars.Add(vars.Tree);

						DebugLocation(170, 39);
						// MySQL51Parser.g3:170:39: ( COMMA vars+= variable )*
						try { DebugEnterSubRule(58);
						while (true)
						{
							int alt58=2;
							try { DebugEnterDecision(58, false);
							int LA58_0 = input.LA(1);

							if ((LA58_0==COMMA))
							{
								alt58 = 1;
							}


							} finally { DebugExitDecision(58); }
							switch ( alt58 )
							{
							case 1:
								DebugEnterAlt(1);
								// MySQL51Parser.g3:170:40: COMMA vars+= variable
								{
								DebugLocation(170, 40);
								COMMA179=(IToken)Match(input,COMMA,Follow._COMMA_in_select_inner2131); if (state.failed) return retval; 
								if (state.backtracking == 0) stream_COMMA.Add(COMMA179);

								DebugLocation(170, 50);
								PushFollow(Follow._variable_in_select_inner2135);
								vars=variable();
								PopFollow();
								if (state.failed) return retval;
								if (state.backtracking == 0) stream_variable.Add(vars.Tree);
								if (list_vars==null) list_vars=new List<object>();
								list_vars.Add(vars.Tree);


								}
								break;

							default:
								goto loop58;
							}
						}

						loop58:
							;

						} finally { DebugExitSubRule(58); }


						}
						break;

					}
					} finally { DebugExitSubRule(59); }


					}
					break;

				}
				} finally { DebugExitSubRule(60); }

				DebugLocation(173, 13);
				// MySQL51Parser.g3:173:13: (forUpdate= FOR UPDATE |clock= LOCK IN SHARE MODE )?
				int alt61=3;
				try { DebugEnterSubRule(61);
				try { DebugEnterDecision(61, false);
				int LA61_0 = input.LA(1);

				if ((LA61_0==FOR))
				{
					alt61 = 1;
				}
				else if ((LA61_0==LOCK))
				{
					alt61 = 2;
				}
				} finally { DebugExitDecision(61); }
				switch (alt61)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:173:14: forUpdate= FOR UPDATE
					{
					DebugLocation(173, 23);
					forUpdate=(IToken)Match(input,FOR,Follow._FOR_in_select_inner2188); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_FOR.Add(forUpdate);

					DebugLocation(173, 28);
					UPDATE180=(IToken)Match(input,UPDATE,Follow._UPDATE_in_select_inner2190); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_UPDATE.Add(UPDATE180);


					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:173:37: clock= LOCK IN SHARE MODE
					{
					DebugLocation(173, 42);
					clock=(IToken)Match(input,LOCK,Follow._LOCK_in_select_inner2196); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_LOCK.Add(clock);

					DebugLocation(173, 48);
					IN181=(IToken)Match(input,IN,Follow._IN_in_select_inner2198); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_IN.Add(IN181);

					DebugLocation(173, 51);
					SHARE182=(IToken)Match(input,SHARE,Follow._SHARE_in_select_inner2200); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SHARE.Add(SHARE182);

					DebugLocation(173, 57);
					MODE183=(IToken)Match(input,MODE,Follow._MODE_in_select_inner2202); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_MODE.Add(MODE183);


					}
					break;

				}
				} finally { DebugExitSubRule(61); }


				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:174:13: order_by ( limit )?
				{
				DebugLocation(174, 13);
				PushFollow(Follow._order_by_in_select_inner2218);
				order_by184=order_by();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_order_by.Add(order_by184.Tree);
				DebugLocation(175, 13);
				// MySQL51Parser.g3:175:13: ( limit )?
				int alt62=2;
				try { DebugEnterSubRule(62);
				try { DebugEnterDecision(62, false);
				int LA62_0 = input.LA(1);

				if ((LA62_0==LIMIT))
				{
					alt62 = 1;
				}
				} finally { DebugExitDecision(62); }
				switch (alt62)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:175:13: limit
					{
					DebugLocation(175, 13);
					PushFollow(Follow._limit_in_select_inner2232);
					limit185=limit();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_limit.Add(limit185.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(62); }


				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:176:13: limit
				{
				DebugLocation(176, 13);
				PushFollow(Follow._limit_in_select_inner2247);
				limit186=limit();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_limit.Add(limit186.Tree);

				}
				break;

			}
			} finally { DebugExitSubRule(63); }



			{
			// AST REWRITE
			// elements: SELECT, select_options, exprs, FROM, table_references, WHERE, where, group_by, HAVING, having, order_by, limit, FOR, LOCK
			// token labels: 
			// rule labels: where, having, retval
			// token list labels: 
			// rule list labels: exprs
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_where=new RewriteRuleSubtreeStream(adaptor,"rule where",where!=null?where.Tree:null);
			RewriteRuleSubtreeStream stream_having=new RewriteRuleSubtreeStream(adaptor,"rule having",having!=null?having.Tree:null);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);
			RewriteRuleSubtreeStream stream_exprs=new RewriteRuleSubtreeStream(adaptor,"token exprs",list_exprs);
			root_0 = (object)adaptor.Nil();
			// 178:3: -> ^( SELECT ( ^( OPTIONS ( select_options )* ) )? ^( COLUMNS ( $exprs)+ ) ( ^( FROM table_references ) )? ( ^( WHERE $where) )? ( group_by )? ( ^( HAVING $having) )? ( order_by )? ( limit )? ( FOR )? ( LOCK )? )
			{
				DebugLocation(178, 6);
				// MySQL51Parser.g3:178:6: ^( SELECT ( ^( OPTIONS ( select_options )* ) )? ^( COLUMNS ( $exprs)+ ) ( ^( FROM table_references ) )? ( ^( WHERE $where) )? ( group_by )? ( ^( HAVING $having) )? ( order_by )? ( limit )? ( FOR )? ( LOCK )? )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(178, 8);
				root_1 = (object)adaptor.BecomeRoot(stream_SELECT.NextNode(), root_1);

				DebugLocation(179, 5);
				// MySQL51Parser.g3:179:5: ( ^( OPTIONS ( select_options )* ) )?
				if (stream_select_options.HasNext)
				{
					DebugLocation(179, 5);
					// MySQL51Parser.g3:179:5: ^( OPTIONS ( select_options )* )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(179, 7);
					root_2 = (object)adaptor.BecomeRoot((object)adaptor.Create(OPTIONS, "OPTIONS"), root_2);

					DebugLocation(179, 15);
					// MySQL51Parser.g3:179:15: ( select_options )*
					while ( stream_select_options.HasNext )
					{
						DebugLocation(179, 15);
						adaptor.AddChild(root_2, stream_select_options.NextTree());

					}
					stream_select_options.Reset();

					adaptor.AddChild(root_1, root_2);
					}

				}
				stream_select_options.Reset();
				DebugLocation(180, 5);
				// MySQL51Parser.g3:180:5: ^( COLUMNS ( $exprs)+ )
				{
				object root_2 = (object)adaptor.Nil();
				DebugLocation(180, 7);
				root_2 = (object)adaptor.BecomeRoot((object)adaptor.Create(COLUMNS, "COLUMNS"), root_2);

				DebugLocation(180, 16);
				if (!(stream_exprs.HasNext))
				{
					throw new RewriteEarlyExitException();
				}
				while ( stream_exprs.HasNext )
				{
					DebugLocation(180, 16);
					adaptor.AddChild(root_2, stream_exprs.NextTree());

				}
				stream_exprs.Reset();

				adaptor.AddChild(root_1, root_2);
				}
				DebugLocation(181, 5);
				// MySQL51Parser.g3:181:5: ( ^( FROM table_references ) )?
				if (stream_FROM.HasNext||stream_table_references.HasNext)
				{
					DebugLocation(181, 5);
					// MySQL51Parser.g3:181:5: ^( FROM table_references )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(181, 7);
					root_2 = (object)adaptor.BecomeRoot(stream_FROM.NextNode(), root_2);

					DebugLocation(181, 12);
					adaptor.AddChild(root_2, stream_table_references.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

				}
				stream_FROM.Reset();
				stream_table_references.Reset();
				DebugLocation(182, 5);
				// MySQL51Parser.g3:182:5: ( ^( WHERE $where) )?
				if (stream_WHERE.HasNext||stream_where.HasNext)
				{
					DebugLocation(182, 5);
					// MySQL51Parser.g3:182:5: ^( WHERE $where)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(182, 7);
					root_2 = (object)adaptor.BecomeRoot(stream_WHERE.NextNode(), root_2);

					DebugLocation(182, 14);
					adaptor.AddChild(root_2, stream_where.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

				}
				stream_WHERE.Reset();
				stream_where.Reset();
				DebugLocation(183, 5);
				// MySQL51Parser.g3:183:5: ( group_by )?
				if (stream_group_by.HasNext)
				{
					DebugLocation(183, 5);
					adaptor.AddChild(root_1, stream_group_by.NextTree());

				}
				stream_group_by.Reset();
				DebugLocation(184, 5);
				// MySQL51Parser.g3:184:5: ( ^( HAVING $having) )?
				if (stream_HAVING.HasNext||stream_having.HasNext)
				{
					DebugLocation(184, 5);
					// MySQL51Parser.g3:184:5: ^( HAVING $having)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(184, 7);
					root_2 = (object)adaptor.BecomeRoot(stream_HAVING.NextNode(), root_2);

					DebugLocation(184, 15);
					adaptor.AddChild(root_2, stream_having.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

				}
				stream_HAVING.Reset();
				stream_having.Reset();
				DebugLocation(185, 5);
				// MySQL51Parser.g3:185:5: ( order_by )?
				if (stream_order_by.HasNext)
				{
					DebugLocation(185, 5);
					adaptor.AddChild(root_1, stream_order_by.NextTree());

				}
				stream_order_by.Reset();
				DebugLocation(186, 5);
				// MySQL51Parser.g3:186:5: ( limit )?
				if (stream_limit.HasNext)
				{
					DebugLocation(186, 5);
					adaptor.AddChild(root_1, stream_limit.NextTree());

				}
				stream_limit.Reset();
				DebugLocation(187, 5);
				// MySQL51Parser.g3:187:5: ( FOR )?
				if (stream_FOR.HasNext)
				{
					DebugLocation(187, 5);
					adaptor.AddChild(root_1, stream_FOR.NextNode());

				}
				stream_FOR.Reset();
				DebugLocation(188, 5);
				// MySQL51Parser.g3:188:5: ( LOCK )?
				if (stream_LOCK.HasNext)
				{
					DebugLocation(188, 5);
					adaptor.AddChild(root_1, stream_LOCK.NextNode());

				}
				stream_LOCK.Reset();

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("select_inner", 11);
			LeaveRule("select_inner", 11);
			LeaveRule_select_inner();
		}
		DebugLocation(190, 1);
		} finally { DebugExitRule(GrammarFileName, "select_inner"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "select_inner"

	private sealed partial class infile_options_helper_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public infile_options_helper_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_infile_options_helper();
	partial void LeaveRule_infile_options_helper();

	// $ANTLR start "infile_options_helper"
	// MySQL51Parser.g3:192:1: infile_options_helper : ( ( COLUMNS | FIELDS ) ( TERMINATED BY fieldTerm= STRING )? ( (optEnclosed= OPTIONALLY )? ENCLOSED BY fieldEncl= STRING )? ( ESCAPED BY fieldEsc= STRING )? )? ( LINES ( STARTING BY linesStart= STRING )? ( TERMINATED BY linesTerm= STRING )? )? ;
	[GrammarRule("infile_options_helper")]
	private MySQL51Parser.infile_options_helper_return infile_options_helper()
	{
		EnterRule_infile_options_helper();
		EnterRule("infile_options_helper", 12);
		TraceIn("infile_options_helper", 12);
		MySQL51Parser.infile_options_helper_return retval = new MySQL51Parser.infile_options_helper_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken fieldTerm = default(IToken);
		IToken optEnclosed = default(IToken);
		IToken fieldEncl = default(IToken);
		IToken fieldEsc = default(IToken);
		IToken linesStart = default(IToken);
		IToken linesTerm = default(IToken);
		IToken set187 = default(IToken);
		IToken TERMINATED188 = default(IToken);
		IToken BY189 = default(IToken);
		IToken ENCLOSED190 = default(IToken);
		IToken BY191 = default(IToken);
		IToken ESCAPED192 = default(IToken);
		IToken BY193 = default(IToken);
		IToken LINES194 = default(IToken);
		IToken STARTING195 = default(IToken);
		IToken BY196 = default(IToken);
		IToken TERMINATED197 = default(IToken);
		IToken BY198 = default(IToken);

		object fieldTerm_tree = default(object);
		object optEnclosed_tree = default(object);
		object fieldEncl_tree = default(object);
		object fieldEsc_tree = default(object);
		object linesStart_tree = default(object);
		object linesTerm_tree = default(object);
		object set187_tree = default(object);
		object TERMINATED188_tree = default(object);
		object BY189_tree = default(object);
		object ENCLOSED190_tree = default(object);
		object BY191_tree = default(object);
		object ESCAPED192_tree = default(object);
		object BY193_tree = default(object);
		object LINES194_tree = default(object);
		object STARTING195_tree = default(object);
		object BY196_tree = default(object);
		object TERMINATED197_tree = default(object);
		object BY198_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "infile_options_helper");
		DebugLocation(192, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:193:2: ( ( ( COLUMNS | FIELDS ) ( TERMINATED BY fieldTerm= STRING )? ( (optEnclosed= OPTIONALLY )? ENCLOSED BY fieldEncl= STRING )? ( ESCAPED BY fieldEsc= STRING )? )? ( LINES ( STARTING BY linesStart= STRING )? ( TERMINATED BY linesTerm= STRING )? )? )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:193:4: ( ( COLUMNS | FIELDS ) ( TERMINATED BY fieldTerm= STRING )? ( (optEnclosed= OPTIONALLY )? ENCLOSED BY fieldEncl= STRING )? ( ESCAPED BY fieldEsc= STRING )? )? ( LINES ( STARTING BY linesStart= STRING )? ( TERMINATED BY linesTerm= STRING )? )?
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(193, 4);
			// MySQL51Parser.g3:193:4: ( ( COLUMNS | FIELDS ) ( TERMINATED BY fieldTerm= STRING )? ( (optEnclosed= OPTIONALLY )? ENCLOSED BY fieldEncl= STRING )? ( ESCAPED BY fieldEsc= STRING )? )?
			int alt68=2;
			try { DebugEnterSubRule(68);
			try { DebugEnterDecision(68, false);
			int LA68_0 = input.LA(1);

			if ((LA68_0==COLUMNS||LA68_0==FIELDS))
			{
				alt68 = 1;
			}
			} finally { DebugExitDecision(68); }
			switch (alt68)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:193:6: ( COLUMNS | FIELDS ) ( TERMINATED BY fieldTerm= STRING )? ( (optEnclosed= OPTIONALLY )? ENCLOSED BY fieldEncl= STRING )? ( ESCAPED BY fieldEsc= STRING )?
				{
				DebugLocation(193, 6);
				set187=(IToken)input.LT(1);
				if (input.LA(1)==COLUMNS||input.LA(1)==FIELDS)
				{
					input.Consume();
					if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set187));
					state.errorRecovery=false;state.failed=false;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					MismatchedSetException mse = new MismatchedSetException(null,input);
					DebugRecognitionException(mse);
					throw mse;
				}

				DebugLocation(194, 4);
				// MySQL51Parser.g3:194:4: ( TERMINATED BY fieldTerm= STRING )?
				int alt64=2;
				try { DebugEnterSubRule(64);
				try { DebugEnterDecision(64, false);
				int LA64_0 = input.LA(1);

				if ((LA64_0==TERMINATED))
				{
					alt64 = 1;
				}
				} finally { DebugExitDecision(64); }
				switch (alt64)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:194:5: TERMINATED BY fieldTerm= STRING
					{
					DebugLocation(194, 5);
					TERMINATED188=(IToken)Match(input,TERMINATED,Follow._TERMINATED_in_infile_options_helper2382); if (state.failed) return retval;
					if (state.backtracking == 0) {
					TERMINATED188_tree = (object)adaptor.Create(TERMINATED188);
					adaptor.AddChild(root_0, TERMINATED188_tree);
					}
					DebugLocation(194, 16);
					BY189=(IToken)Match(input,BY,Follow._BY_in_infile_options_helper2384); if (state.failed) return retval;
					if (state.backtracking == 0) {
					BY189_tree = (object)adaptor.Create(BY189);
					adaptor.AddChild(root_0, BY189_tree);
					}
					DebugLocation(194, 28);
					fieldTerm=(IToken)Match(input,STRING,Follow._STRING_in_infile_options_helper2388); if (state.failed) return retval;
					if (state.backtracking == 0) {
					fieldTerm_tree = (object)adaptor.Create(fieldTerm);
					adaptor.AddChild(root_0, fieldTerm_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(64); }

				DebugLocation(195, 4);
				// MySQL51Parser.g3:195:4: ( (optEnclosed= OPTIONALLY )? ENCLOSED BY fieldEncl= STRING )?
				int alt66=2;
				try { DebugEnterSubRule(66);
				try { DebugEnterDecision(66, false);
				int LA66_0 = input.LA(1);

				if ((LA66_0==ENCLOSED||LA66_0==OPTIONALLY))
				{
					alt66 = 1;
				}
				} finally { DebugExitDecision(66); }
				switch (alt66)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:195:5: (optEnclosed= OPTIONALLY )? ENCLOSED BY fieldEncl= STRING
					{
					DebugLocation(195, 16);
					// MySQL51Parser.g3:195:16: (optEnclosed= OPTIONALLY )?
					int alt65=2;
					try { DebugEnterSubRule(65);
					try { DebugEnterDecision(65, false);
					int LA65_0 = input.LA(1);

					if ((LA65_0==OPTIONALLY))
					{
						alt65 = 1;
					}
					} finally { DebugExitDecision(65); }
					switch (alt65)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:195:16: optEnclosed= OPTIONALLY
						{
						DebugLocation(195, 16);
						optEnclosed=(IToken)Match(input,OPTIONALLY,Follow._OPTIONALLY_in_infile_options_helper2398); if (state.failed) return retval;
						if (state.backtracking == 0) {
						optEnclosed_tree = (object)adaptor.Create(optEnclosed);
						adaptor.AddChild(root_0, optEnclosed_tree);
						}

						}
						break;

					}
					} finally { DebugExitSubRule(65); }

					DebugLocation(195, 29);
					ENCLOSED190=(IToken)Match(input,ENCLOSED,Follow._ENCLOSED_in_infile_options_helper2401); if (state.failed) return retval;
					if (state.backtracking == 0) {
					ENCLOSED190_tree = (object)adaptor.Create(ENCLOSED190);
					adaptor.AddChild(root_0, ENCLOSED190_tree);
					}
					DebugLocation(195, 38);
					BY191=(IToken)Match(input,BY,Follow._BY_in_infile_options_helper2403); if (state.failed) return retval;
					if (state.backtracking == 0) {
					BY191_tree = (object)adaptor.Create(BY191);
					adaptor.AddChild(root_0, BY191_tree);
					}
					DebugLocation(195, 50);
					fieldEncl=(IToken)Match(input,STRING,Follow._STRING_in_infile_options_helper2407); if (state.failed) return retval;
					if (state.backtracking == 0) {
					fieldEncl_tree = (object)adaptor.Create(fieldEncl);
					adaptor.AddChild(root_0, fieldEncl_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(66); }

				DebugLocation(196, 4);
				// MySQL51Parser.g3:196:4: ( ESCAPED BY fieldEsc= STRING )?
				int alt67=2;
				try { DebugEnterSubRule(67);
				try { DebugEnterDecision(67, false);
				int LA67_0 = input.LA(1);

				if ((LA67_0==ESCAPED))
				{
					alt67 = 1;
				}
				} finally { DebugExitDecision(67); }
				switch (alt67)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:196:5: ESCAPED BY fieldEsc= STRING
					{
					DebugLocation(196, 5);
					ESCAPED192=(IToken)Match(input,ESCAPED,Follow._ESCAPED_in_infile_options_helper2419); if (state.failed) return retval;
					if (state.backtracking == 0) {
					ESCAPED192_tree = (object)adaptor.Create(ESCAPED192);
					adaptor.AddChild(root_0, ESCAPED192_tree);
					}
					DebugLocation(196, 13);
					BY193=(IToken)Match(input,BY,Follow._BY_in_infile_options_helper2421); if (state.failed) return retval;
					if (state.backtracking == 0) {
					BY193_tree = (object)adaptor.Create(BY193);
					adaptor.AddChild(root_0, BY193_tree);
					}
					DebugLocation(196, 24);
					fieldEsc=(IToken)Match(input,STRING,Follow._STRING_in_infile_options_helper2425); if (state.failed) return retval;
					if (state.backtracking == 0) {
					fieldEsc_tree = (object)adaptor.Create(fieldEsc);
					adaptor.AddChild(root_0, fieldEsc_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(67); }


				}
				break;

			}
			} finally { DebugExitSubRule(68); }

			DebugLocation(198, 3);
			// MySQL51Parser.g3:198:3: ( LINES ( STARTING BY linesStart= STRING )? ( TERMINATED BY linesTerm= STRING )? )?
			int alt71=2;
			try { DebugEnterSubRule(71);
			try { DebugEnterDecision(71, false);
			int LA71_0 = input.LA(1);

			if ((LA71_0==LINES))
			{
				alt71 = 1;
			}
			} finally { DebugExitDecision(71); }
			switch (alt71)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:198:5: LINES ( STARTING BY linesStart= STRING )? ( TERMINATED BY linesTerm= STRING )?
				{
				DebugLocation(198, 5);
				LINES194=(IToken)Match(input,LINES,Follow._LINES_in_infile_options_helper2448); if (state.failed) return retval;
				if (state.backtracking == 0) {
				LINES194_tree = (object)adaptor.Create(LINES194);
				adaptor.AddChild(root_0, LINES194_tree);
				}
				DebugLocation(199, 4);
				// MySQL51Parser.g3:199:4: ( STARTING BY linesStart= STRING )?
				int alt69=2;
				try { DebugEnterSubRule(69);
				try { DebugEnterDecision(69, false);
				int LA69_0 = input.LA(1);

				if ((LA69_0==STARTING))
				{
					alt69 = 1;
				}
				} finally { DebugExitDecision(69); }
				switch (alt69)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:199:5: STARTING BY linesStart= STRING
					{
					DebugLocation(199, 5);
					STARTING195=(IToken)Match(input,STARTING,Follow._STARTING_in_infile_options_helper2454); if (state.failed) return retval;
					if (state.backtracking == 0) {
					STARTING195_tree = (object)adaptor.Create(STARTING195);
					adaptor.AddChild(root_0, STARTING195_tree);
					}
					DebugLocation(199, 14);
					BY196=(IToken)Match(input,BY,Follow._BY_in_infile_options_helper2456); if (state.failed) return retval;
					if (state.backtracking == 0) {
					BY196_tree = (object)adaptor.Create(BY196);
					adaptor.AddChild(root_0, BY196_tree);
					}
					DebugLocation(199, 27);
					linesStart=(IToken)Match(input,STRING,Follow._STRING_in_infile_options_helper2460); if (state.failed) return retval;
					if (state.backtracking == 0) {
					linesStart_tree = (object)adaptor.Create(linesStart);
					adaptor.AddChild(root_0, linesStart_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(69); }

				DebugLocation(200, 4);
				// MySQL51Parser.g3:200:4: ( TERMINATED BY linesTerm= STRING )?
				int alt70=2;
				try { DebugEnterSubRule(70);
				try { DebugEnterDecision(70, false);
				int LA70_0 = input.LA(1);

				if ((LA70_0==TERMINATED))
				{
					alt70 = 1;
				}
				} finally { DebugExitDecision(70); }
				switch (alt70)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:200:5: TERMINATED BY linesTerm= STRING
					{
					DebugLocation(200, 5);
					TERMINATED197=(IToken)Match(input,TERMINATED,Follow._TERMINATED_in_infile_options_helper2468); if (state.failed) return retval;
					if (state.backtracking == 0) {
					TERMINATED197_tree = (object)adaptor.Create(TERMINATED197);
					adaptor.AddChild(root_0, TERMINATED197_tree);
					}
					DebugLocation(200, 16);
					BY198=(IToken)Match(input,BY,Follow._BY_in_infile_options_helper2470); if (state.failed) return retval;
					if (state.backtracking == 0) {
					BY198_tree = (object)adaptor.Create(BY198);
					adaptor.AddChild(root_0, BY198_tree);
					}
					DebugLocation(200, 28);
					linesTerm=(IToken)Match(input,STRING,Follow._STRING_in_infile_options_helper2474); if (state.failed) return retval;
					if (state.backtracking == 0) {
					linesTerm_tree = (object)adaptor.Create(linesTerm);
					adaptor.AddChild(root_0, linesTerm_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(70); }


				}
				break;

			}
			} finally { DebugExitSubRule(71); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("infile_options_helper", 12);
			LeaveRule("infile_options_helper", 12);
			LeaveRule_infile_options_helper();
		}
		DebugLocation(202, 1);
		} finally { DebugExitRule(GrammarFileName, "infile_options_helper"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "infile_options_helper"

	private sealed partial class variable_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public variable_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_variable();
	partial void LeaveRule_variable();

	// $ANTLR start "variable"
	// MySQL51Parser.g3:204:1: variable : ( SESSION_VARIABLE | GLOBAL_VARIABLE );
	[GrammarRule("variable")]
	private MySQL51Parser.variable_return variable()
	{
		EnterRule_variable();
		EnterRule("variable", 13);
		TraceIn("variable", 13);
		MySQL51Parser.variable_return retval = new MySQL51Parser.variable_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken set199 = default(IToken);

		object set199_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "variable");
		DebugLocation(204, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:205:2: ( SESSION_VARIABLE | GLOBAL_VARIABLE )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(205, 2);
			set199=(IToken)input.LT(1);
			if (input.LA(1)==GLOBAL_VARIABLE||input.LA(1)==SESSION_VARIABLE)
			{
				input.Consume();
				if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set199));
				state.errorRecovery=false;state.failed=false;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				DebugRecognitionException(mse);
				throw mse;
			}


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("variable", 13);
			LeaveRule("variable", 13);
			LeaveRule_variable();
		}
		DebugLocation(207, 1);
		} finally { DebugExitRule(GrammarFileName, "variable"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "variable"

	private sealed partial class limit_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public limit_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_limit();
	partial void LeaveRule_limit();

	// $ANTLR start "limit"
	// MySQL51Parser.g3:209:1: limit : LIMIT ( ( (offset= number_or_placeholder COMMA )? lim= number_or_placeholder ) | (lim= number_or_placeholder offsetForm= OFFSET offset= number_or_placeholder ) ) -> ^( LIMIT $lim ( $offset)? ( $offsetForm)? ) ;
	[GrammarRule("limit")]
	private MySQL51Parser.limit_return limit()
	{
		EnterRule_limit();
		EnterRule("limit", 14);
		TraceIn("limit", 14);
		MySQL51Parser.limit_return retval = new MySQL51Parser.limit_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken offsetForm = default(IToken);
		IToken LIMIT200 = default(IToken);
		IToken COMMA201 = default(IToken);
		MySQL51Parser.number_or_placeholder_return offset = default(MySQL51Parser.number_or_placeholder_return);
		MySQL51Parser.number_or_placeholder_return lim = default(MySQL51Parser.number_or_placeholder_return);

		object offsetForm_tree = default(object);
		object LIMIT200_tree = default(object);
		object COMMA201_tree = default(object);
		RewriteRuleITokenStream stream_LIMIT=new RewriteRuleITokenStream(adaptor,"token LIMIT");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleITokenStream stream_OFFSET=new RewriteRuleITokenStream(adaptor,"token OFFSET");
		RewriteRuleSubtreeStream stream_number_or_placeholder=new RewriteRuleSubtreeStream(adaptor,"rule number_or_placeholder");
		try { DebugEnterRule(GrammarFileName, "limit");
		DebugLocation(209, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:210:2: ( LIMIT ( ( (offset= number_or_placeholder COMMA )? lim= number_or_placeholder ) | (lim= number_or_placeholder offsetForm= OFFSET offset= number_or_placeholder ) ) -> ^( LIMIT $lim ( $offset)? ( $offsetForm)? ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:210:4: LIMIT ( ( (offset= number_or_placeholder COMMA )? lim= number_or_placeholder ) | (lim= number_or_placeholder offsetForm= OFFSET offset= number_or_placeholder ) )
			{
			DebugLocation(210, 4);
			LIMIT200=(IToken)Match(input,LIMIT,Follow._LIMIT_in_limit2509); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_LIMIT.Add(LIMIT200);

			DebugLocation(211, 4);
			// MySQL51Parser.g3:211:4: ( ( (offset= number_or_placeholder COMMA )? lim= number_or_placeholder ) | (lim= number_or_placeholder offsetForm= OFFSET offset= number_or_placeholder ) )
			int alt73=2;
			try { DebugEnterSubRule(73);
			try { DebugEnterDecision(73, false);
			int LA73_0 = input.LA(1);

			if ((LA73_0==NUMBER||LA73_0==VALUE_PLACEHOLDER))
			{
				int LA73_1 = input.LA(2);

				if ((LA73_1==EOF||LA73_1==COMMA||LA73_1==FOR||LA73_1==INTO||LA73_1==LOCK||LA73_1==ON||LA73_1==PROCEDURE||LA73_1==RPAREN||LA73_1==SEMI||LA73_1==UNION))
				{
					alt73 = 1;
				}
				else if ((LA73_1==OFFSET))
				{
					alt73 = 2;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 73, 1, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 73, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(73); }
			switch (alt73)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:211:6: ( (offset= number_or_placeholder COMMA )? lim= number_or_placeholder )
				{
				DebugLocation(211, 6);
				// MySQL51Parser.g3:211:6: ( (offset= number_or_placeholder COMMA )? lim= number_or_placeholder )
				DebugEnterAlt(1);
				// MySQL51Parser.g3:211:7: (offset= number_or_placeholder COMMA )? lim= number_or_placeholder
				{
				DebugLocation(211, 7);
				// MySQL51Parser.g3:211:7: (offset= number_or_placeholder COMMA )?
				int alt72=2;
				try { DebugEnterSubRule(72);
				try { DebugEnterDecision(72, false);
				int LA72_0 = input.LA(1);

				if ((LA72_0==NUMBER||LA72_0==VALUE_PLACEHOLDER))
				{
					int LA72_1 = input.LA(2);

					if ((LA72_1==COMMA))
					{
						alt72 = 1;
					}
				}
				} finally { DebugExitDecision(72); }
				switch (alt72)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:211:8: offset= number_or_placeholder COMMA
					{
					DebugLocation(211, 14);
					PushFollow(Follow._number_or_placeholder_in_limit2520);
					offset=number_or_placeholder();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_number_or_placeholder.Add(offset.Tree);
					DebugLocation(211, 37);
					COMMA201=(IToken)Match(input,COMMA,Follow._COMMA_in_limit2522); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMA.Add(COMMA201);


					}
					break;

				}
				} finally { DebugExitSubRule(72); }

				DebugLocation(211, 48);
				PushFollow(Follow._number_or_placeholder_in_limit2528);
				lim=number_or_placeholder();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_number_or_placeholder.Add(lim.Tree);

				}


				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:212:7: (lim= number_or_placeholder offsetForm= OFFSET offset= number_or_placeholder )
				{
				DebugLocation(212, 7);
				// MySQL51Parser.g3:212:7: (lim= number_or_placeholder offsetForm= OFFSET offset= number_or_placeholder )
				DebugEnterAlt(1);
				// MySQL51Parser.g3:212:8: lim= number_or_placeholder offsetForm= OFFSET offset= number_or_placeholder
				{
				DebugLocation(212, 11);
				PushFollow(Follow._number_or_placeholder_in_limit2541);
				lim=number_or_placeholder();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_number_or_placeholder.Add(lim.Tree);
				DebugLocation(212, 44);
				offsetForm=(IToken)Match(input,OFFSET,Follow._OFFSET_in_limit2545); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_OFFSET.Add(offsetForm);

				DebugLocation(212, 58);
				PushFollow(Follow._number_or_placeholder_in_limit2549);
				offset=number_or_placeholder();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_number_or_placeholder.Add(offset.Tree);

				}


				}
				break;

			}
			} finally { DebugExitSubRule(73); }



			{
			// AST REWRITE
			// elements: LIMIT, lim, offset, offsetForm
			// token labels: offsetForm
			// rule labels: lim, offset, retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleITokenStream stream_offsetForm=new RewriteRuleITokenStream(adaptor,"token offsetForm",offsetForm);
			RewriteRuleSubtreeStream stream_lim=new RewriteRuleSubtreeStream(adaptor,"rule lim",lim!=null?lim.Tree:null);
			RewriteRuleSubtreeStream stream_offset=new RewriteRuleSubtreeStream(adaptor,"rule offset",offset!=null?offset.Tree:null);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 214:3: -> ^( LIMIT $lim ( $offset)? ( $offsetForm)? )
			{
				DebugLocation(214, 6);
				// MySQL51Parser.g3:214:6: ^( LIMIT $lim ( $offset)? ( $offsetForm)? )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(214, 8);
				root_1 = (object)adaptor.BecomeRoot(stream_LIMIT.NextNode(), root_1);

				DebugLocation(214, 15);
				adaptor.AddChild(root_1, stream_lim.NextTree());
				DebugLocation(214, 20);
				// MySQL51Parser.g3:214:20: ( $offset)?
				if (stream_offset.HasNext)
				{
					DebugLocation(214, 20);
					adaptor.AddChild(root_1, stream_offset.NextTree());

				}
				stream_offset.Reset();
				DebugLocation(214, 29);
				// MySQL51Parser.g3:214:29: ( $offsetForm)?
				if (stream_offsetForm.HasNext)
				{
					DebugLocation(214, 29);
					adaptor.AddChild(root_1, stream_offsetForm.NextNode());

				}
				stream_offsetForm.Reset();

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("limit", 14);
			LeaveRule("limit", 14);
			LeaveRule_limit();
		}
		DebugLocation(215, 1);
		} finally { DebugExitRule(GrammarFileName, "limit"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "limit"

	private sealed partial class string_or_placeholder_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public string_or_placeholder_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_string_or_placeholder();
	partial void LeaveRule_string_or_placeholder();

	// $ANTLR start "string_or_placeholder"
	// MySQL51Parser.g3:217:1: string_or_placeholder : ( STRING | VALUE_PLACEHOLDER );
	[GrammarRule("string_or_placeholder")]
	private MySQL51Parser.string_or_placeholder_return string_or_placeholder()
	{
		EnterRule_string_or_placeholder();
		EnterRule("string_or_placeholder", 15);
		TraceIn("string_or_placeholder", 15);
		MySQL51Parser.string_or_placeholder_return retval = new MySQL51Parser.string_or_placeholder_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken set202 = default(IToken);

		object set202_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "string_or_placeholder");
		DebugLocation(217, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:218:2: ( STRING | VALUE_PLACEHOLDER )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(218, 2);
			set202=(IToken)input.LT(1);
			if (input.LA(1)==STRING||input.LA(1)==VALUE_PLACEHOLDER)
			{
				input.Consume();
				if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set202));
				state.errorRecovery=false;state.failed=false;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				DebugRecognitionException(mse);
				throw mse;
			}


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("string_or_placeholder", 15);
			LeaveRule("string_or_placeholder", 15);
			LeaveRule_string_or_placeholder();
		}
		DebugLocation(220, 1);
		} finally { DebugExitRule(GrammarFileName, "string_or_placeholder"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "string_or_placeholder"

	private sealed partial class number_or_placeholder_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public number_or_placeholder_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_number_or_placeholder();
	partial void LeaveRule_number_or_placeholder();

	// $ANTLR start "number_or_placeholder"
	// MySQL51Parser.g3:222:1: number_or_placeholder : ( NUMBER | VALUE_PLACEHOLDER );
	[GrammarRule("number_or_placeholder")]
	private MySQL51Parser.number_or_placeholder_return number_or_placeholder()
	{
		EnterRule_number_or_placeholder();
		EnterRule("number_or_placeholder", 16);
		TraceIn("number_or_placeholder", 16);
		MySQL51Parser.number_or_placeholder_return retval = new MySQL51Parser.number_or_placeholder_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken set203 = default(IToken);

		object set203_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "number_or_placeholder");
		DebugLocation(222, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:223:2: ( NUMBER | VALUE_PLACEHOLDER )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(223, 2);
			set203=(IToken)input.LT(1);
			if (input.LA(1)==NUMBER||input.LA(1)==VALUE_PLACEHOLDER)
			{
				input.Consume();
				if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set203));
				state.errorRecovery=false;state.failed=false;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				DebugRecognitionException(mse);
				throw mse;
			}


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("number_or_placeholder", 16);
			LeaveRule("number_or_placeholder", 16);
			LeaveRule_number_or_placeholder();
		}
		DebugLocation(225, 1);
		} finally { DebugExitRule(GrammarFileName, "number_or_placeholder"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "number_or_placeholder"

	private sealed partial class text_string_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public text_string_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_text_string();
	partial void LeaveRule_text_string();

	// $ANTLR start "text_string"
	// MySQL51Parser.g3:227:1: text_string : ( STRING | BINARY_VALUE | HEXA_VALUE );
	[GrammarRule("text_string")]
	private MySQL51Parser.text_string_return text_string()
	{
		EnterRule_text_string();
		EnterRule("text_string", 17);
		TraceIn("text_string", 17);
		MySQL51Parser.text_string_return retval = new MySQL51Parser.text_string_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken set204 = default(IToken);

		object set204_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "text_string");
		DebugLocation(227, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:228:2: ( STRING | BINARY_VALUE | HEXA_VALUE )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(228, 2);
			set204=(IToken)input.LT(1);
			if (input.LA(1)==BINARY_VALUE||input.LA(1)==HEXA_VALUE||input.LA(1)==STRING)
			{
				input.Consume();
				if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set204));
				state.errorRecovery=false;state.failed=false;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				DebugRecognitionException(mse);
				throw mse;
			}


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("text_string", 17);
			LeaveRule("text_string", 17);
			LeaveRule_text_string();
		}
		DebugLocation(231, 1);
		} finally { DebugExitRule(GrammarFileName, "text_string"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "text_string"

	private sealed partial class group_by_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public group_by_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_group_by();
	partial void LeaveRule_group_by();

	// $ANTLR start "group_by"
	// MySQL51Parser.g3:233:1: group_by : GROUP BY elements+= order_group_by_elements ( COMMA elements+= order_group_by_elements )* (rollup= WITH ROLLUP )? -> ^( GROUP ( $elements)+ ( $rollup)? ) ;
	[GrammarRule("group_by")]
	private MySQL51Parser.group_by_return group_by()
	{
		EnterRule_group_by();
		EnterRule("group_by", 18);
		TraceIn("group_by", 18);
		MySQL51Parser.group_by_return retval = new MySQL51Parser.group_by_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken rollup = default(IToken);
		IToken GROUP205 = default(IToken);
		IToken BY206 = default(IToken);
		IToken COMMA207 = default(IToken);
		IToken ROLLUP208 = default(IToken);
		List<object> list_elements = null;
		MySQL51Parser.order_group_by_elements_return elements = default(MySQL51Parser.order_group_by_elements_return);
		object rollup_tree = default(object);
		object GROUP205_tree = default(object);
		object BY206_tree = default(object);
		object COMMA207_tree = default(object);
		object ROLLUP208_tree = default(object);
		RewriteRuleITokenStream stream_GROUP=new RewriteRuleITokenStream(adaptor,"token GROUP");
		RewriteRuleITokenStream stream_BY=new RewriteRuleITokenStream(adaptor,"token BY");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleITokenStream stream_WITH=new RewriteRuleITokenStream(adaptor,"token WITH");
		RewriteRuleITokenStream stream_ROLLUP=new RewriteRuleITokenStream(adaptor,"token ROLLUP");
		RewriteRuleSubtreeStream stream_order_group_by_elements=new RewriteRuleSubtreeStream(adaptor,"rule order_group_by_elements");
		try { DebugEnterRule(GrammarFileName, "group_by");
		DebugLocation(233, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:234:2: ( GROUP BY elements+= order_group_by_elements ( COMMA elements+= order_group_by_elements )* (rollup= WITH ROLLUP )? -> ^( GROUP ( $elements)+ ( $rollup)? ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:234:4: GROUP BY elements+= order_group_by_elements ( COMMA elements+= order_group_by_elements )* (rollup= WITH ROLLUP )?
			{
			DebugLocation(234, 4);
			GROUP205=(IToken)Match(input,GROUP,Follow._GROUP_in_group_by2638); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_GROUP.Add(GROUP205);

			DebugLocation(234, 10);
			BY206=(IToken)Match(input,BY,Follow._BY_in_group_by2640); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_BY.Add(BY206);

			DebugLocation(235, 12);
			PushFollow(Follow._order_group_by_elements_in_group_by2648);
			elements=order_group_by_elements();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_order_group_by_elements.Add(elements.Tree);
			if (list_elements==null) list_elements=new List<object>();
			list_elements.Add(elements.Tree);

			DebugLocation(235, 38);
			// MySQL51Parser.g3:235:38: ( COMMA elements+= order_group_by_elements )*
			try { DebugEnterSubRule(74);
			while (true)
			{
				int alt74=2;
				try { DebugEnterDecision(74, false);
				int LA74_0 = input.LA(1);

				if ((LA74_0==COMMA))
				{
					alt74 = 1;
				}


				} finally { DebugExitDecision(74); }
				switch ( alt74 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:235:39: COMMA elements+= order_group_by_elements
					{
					DebugLocation(235, 39);
					COMMA207=(IToken)Match(input,COMMA,Follow._COMMA_in_group_by2651); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMA.Add(COMMA207);

					DebugLocation(235, 53);
					PushFollow(Follow._order_group_by_elements_in_group_by2655);
					elements=order_group_by_elements();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_order_group_by_elements.Add(elements.Tree);
					if (list_elements==null) list_elements=new List<object>();
					list_elements.Add(elements.Tree);


					}
					break;

				default:
					goto loop74;
				}
			}

			loop74:
				;

			} finally { DebugExitSubRule(74); }

			DebugLocation(236, 3);
			// MySQL51Parser.g3:236:3: (rollup= WITH ROLLUP )?
			int alt75=2;
			try { DebugEnterSubRule(75);
			try { DebugEnterDecision(75, false);
			int LA75_0 = input.LA(1);

			if ((LA75_0==WITH))
			{
				alt75 = 1;
			}
			} finally { DebugExitDecision(75); }
			switch (alt75)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:236:4: rollup= WITH ROLLUP
				{
				DebugLocation(236, 10);
				rollup=(IToken)Match(input,WITH,Follow._WITH_in_group_by2665); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_WITH.Add(rollup);

				DebugLocation(236, 16);
				ROLLUP208=(IToken)Match(input,ROLLUP,Follow._ROLLUP_in_group_by2667); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_ROLLUP.Add(ROLLUP208);


				}
				break;

			}
			} finally { DebugExitSubRule(75); }



			{
			// AST REWRITE
			// elements: GROUP, elements, rollup
			// token labels: rollup
			// rule labels: retval
			// token list labels: 
			// rule list labels: elements
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleITokenStream stream_rollup=new RewriteRuleITokenStream(adaptor,"token rollup",rollup);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);
			RewriteRuleSubtreeStream stream_elements=new RewriteRuleSubtreeStream(adaptor,"token elements",list_elements);
			root_0 = (object)adaptor.Nil();
			// 237:3: -> ^( GROUP ( $elements)+ ( $rollup)? )
			{
				DebugLocation(237, 6);
				// MySQL51Parser.g3:237:6: ^( GROUP ( $elements)+ ( $rollup)? )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(237, 8);
				root_1 = (object)adaptor.BecomeRoot(stream_GROUP.NextNode(), root_1);

				DebugLocation(237, 15);
				if (!(stream_elements.HasNext))
				{
					throw new RewriteEarlyExitException();
				}
				while ( stream_elements.HasNext )
				{
					DebugLocation(237, 15);
					adaptor.AddChild(root_1, stream_elements.NextTree());

				}
				stream_elements.Reset();
				DebugLocation(237, 26);
				// MySQL51Parser.g3:237:26: ( $rollup)?
				if (stream_rollup.HasNext)
				{
					DebugLocation(237, 26);
					adaptor.AddChild(root_1, stream_rollup.NextNode());

				}
				stream_rollup.Reset();

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("group_by", 18);
			LeaveRule("group_by", 18);
			LeaveRule_group_by();
		}
		DebugLocation(238, 1);
		} finally { DebugExitRule(GrammarFileName, "group_by"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "group_by"

	private sealed partial class order_by_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public order_by_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_order_by();
	partial void LeaveRule_order_by();

	// $ANTLR start "order_by"
	// MySQL51Parser.g3:240:1: order_by : ORDER BY elements+= order_group_by_elements ( COMMA elements+= order_group_by_elements )* -> ^( ORDER ( $elements)+ ) ;
	[GrammarRule("order_by")]
	private MySQL51Parser.order_by_return order_by()
	{
		EnterRule_order_by();
		EnterRule("order_by", 19);
		TraceIn("order_by", 19);
		MySQL51Parser.order_by_return retval = new MySQL51Parser.order_by_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken ORDER209 = default(IToken);
		IToken BY210 = default(IToken);
		IToken COMMA211 = default(IToken);
		List<object> list_elements = null;
		MySQL51Parser.order_group_by_elements_return elements = default(MySQL51Parser.order_group_by_elements_return);
		object ORDER209_tree = default(object);
		object BY210_tree = default(object);
		object COMMA211_tree = default(object);
		RewriteRuleITokenStream stream_ORDER=new RewriteRuleITokenStream(adaptor,"token ORDER");
		RewriteRuleITokenStream stream_BY=new RewriteRuleITokenStream(adaptor,"token BY");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_order_group_by_elements=new RewriteRuleSubtreeStream(adaptor,"rule order_group_by_elements");
		try { DebugEnterRule(GrammarFileName, "order_by");
		DebugLocation(240, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:241:2: ( ORDER BY elements+= order_group_by_elements ( COMMA elements+= order_group_by_elements )* -> ^( ORDER ( $elements)+ ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:241:4: ORDER BY elements+= order_group_by_elements ( COMMA elements+= order_group_by_elements )*
			{
			DebugLocation(241, 4);
			ORDER209=(IToken)Match(input,ORDER,Follow._ORDER_in_order_by2696); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_ORDER.Add(ORDER209);

			DebugLocation(241, 10);
			BY210=(IToken)Match(input,BY,Follow._BY_in_order_by2698); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_BY.Add(BY210);

			DebugLocation(242, 12);
			PushFollow(Follow._order_group_by_elements_in_order_by2705);
			elements=order_group_by_elements();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_order_group_by_elements.Add(elements.Tree);
			if (list_elements==null) list_elements=new List<object>();
			list_elements.Add(elements.Tree);

			DebugLocation(242, 38);
			// MySQL51Parser.g3:242:38: ( COMMA elements+= order_group_by_elements )*
			try { DebugEnterSubRule(76);
			while (true)
			{
				int alt76=2;
				try { DebugEnterDecision(76, false);
				int LA76_0 = input.LA(1);

				if ((LA76_0==COMMA))
				{
					alt76 = 1;
				}


				} finally { DebugExitDecision(76); }
				switch ( alt76 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:242:39: COMMA elements+= order_group_by_elements
					{
					DebugLocation(242, 39);
					COMMA211=(IToken)Match(input,COMMA,Follow._COMMA_in_order_by2708); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMA.Add(COMMA211);

					DebugLocation(242, 53);
					PushFollow(Follow._order_group_by_elements_in_order_by2712);
					elements=order_group_by_elements();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_order_group_by_elements.Add(elements.Tree);
					if (list_elements==null) list_elements=new List<object>();
					list_elements.Add(elements.Tree);


					}
					break;

				default:
					goto loop76;
				}
			}

			loop76:
				;

			} finally { DebugExitSubRule(76); }



			{
			// AST REWRITE
			// elements: ORDER, elements
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: elements
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);
			RewriteRuleSubtreeStream stream_elements=new RewriteRuleSubtreeStream(adaptor,"token elements",list_elements);
			root_0 = (object)adaptor.Nil();
			// 243:3: -> ^( ORDER ( $elements)+ )
			{
				DebugLocation(243, 6);
				// MySQL51Parser.g3:243:6: ^( ORDER ( $elements)+ )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(243, 8);
				root_1 = (object)adaptor.BecomeRoot(stream_ORDER.NextNode(), root_1);

				DebugLocation(243, 15);
				if (!(stream_elements.HasNext))
				{
					throw new RewriteEarlyExitException();
				}
				while ( stream_elements.HasNext )
				{
					DebugLocation(243, 15);
					adaptor.AddChild(root_1, stream_elements.NextTree());

				}
				stream_elements.Reset();

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("order_by", 19);
			LeaveRule("order_by", 19);
			LeaveRule_order_by();
		}
		DebugLocation(244, 1);
		} finally { DebugExitRule(GrammarFileName, "order_by"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "order_by"

	private sealed partial class order_group_by_elements_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public order_group_by_elements_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_order_group_by_elements();
	partial void LeaveRule_order_group_by_elements();

	// $ANTLR start "order_group_by_elements"
	// MySQL51Parser.g3:246:1: order_group_by_elements : expr (asc= ASC -> ^( DIRECTION[$asc] expr ) |desc= DESC -> ^( DIRECTION[$desc] expr ) | -> ^( DIRECTION[\"ASC\"] expr ) ) ;
	[GrammarRule("order_group_by_elements")]
	private MySQL51Parser.order_group_by_elements_return order_group_by_elements()
	{
		EnterRule_order_group_by_elements();
		EnterRule("order_group_by_elements", 20);
		TraceIn("order_group_by_elements", 20);
		MySQL51Parser.order_group_by_elements_return retval = new MySQL51Parser.order_group_by_elements_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken asc = default(IToken);
		IToken desc = default(IToken);
		MySQL51Parser.expr_return expr212 = default(MySQL51Parser.expr_return);

		object asc_tree = default(object);
		object desc_tree = default(object);
		RewriteRuleITokenStream stream_ASC=new RewriteRuleITokenStream(adaptor,"token ASC");
		RewriteRuleITokenStream stream_DESC=new RewriteRuleITokenStream(adaptor,"token DESC");
		RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr");
		try { DebugEnterRule(GrammarFileName, "order_group_by_elements");
		DebugLocation(246, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:247:2: ( expr (asc= ASC -> ^( DIRECTION[$asc] expr ) |desc= DESC -> ^( DIRECTION[$desc] expr ) | -> ^( DIRECTION[\"ASC\"] expr ) ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:247:4: expr (asc= ASC -> ^( DIRECTION[$asc] expr ) |desc= DESC -> ^( DIRECTION[$desc] expr ) | -> ^( DIRECTION[\"ASC\"] expr ) )
			{
			DebugLocation(247, 4);
			PushFollow(Follow._expr_in_order_group_by_elements2739);
			expr212=expr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_expr.Add(expr212.Tree);
			DebugLocation(248, 3);
			// MySQL51Parser.g3:248:3: (asc= ASC -> ^( DIRECTION[$asc] expr ) |desc= DESC -> ^( DIRECTION[$desc] expr ) | -> ^( DIRECTION[\"ASC\"] expr ) )
			int alt77=3;
			try { DebugEnterSubRule(77);
			try { DebugEnterDecision(77, false);
			switch (input.LA(1))
			{
			case ASC:
				{
				alt77 = 1;
				}
				break;
			case DESC:
				{
				alt77 = 2;
				}
				break;
			case EOF:
			case COMMA:
			case FOR:
			case HAVING:
			case INTO:
			case LIMIT:
			case LOCK:
			case ON:
			case ORDER:
			case PROCEDURE:
			case RPAREN:
			case SEMI:
			case SEPARATOR:
			case UNION:
			case WITH:
				{
				alt77 = 3;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 77, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(77); }
			switch (alt77)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:248:5: asc= ASC
				{
				DebugLocation(248, 8);
				asc=(IToken)Match(input,ASC,Follow._ASC_in_order_group_by_elements2748); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_ASC.Add(asc);



				{
				// AST REWRITE
				// elements: expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 248:18: -> ^( DIRECTION[$asc] expr )
				{
					DebugLocation(248, 21);
					// MySQL51Parser.g3:248:21: ^( DIRECTION[$asc] expr )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(248, 23);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(DIRECTION, asc), root_1);

					DebugLocation(248, 39);
					adaptor.AddChild(root_1, stream_expr.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:249:5: desc= DESC
				{
				DebugLocation(249, 9);
				desc=(IToken)Match(input,DESC,Follow._DESC_in_order_group_by_elements2770); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_DESC.Add(desc);



				{
				// AST REWRITE
				// elements: expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 249:19: -> ^( DIRECTION[$desc] expr )
				{
					DebugLocation(249, 22);
					// MySQL51Parser.g3:249:22: ^( DIRECTION[$desc] expr )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(249, 24);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(DIRECTION, desc), root_1);

					DebugLocation(249, 41);
					adaptor.AddChild(root_1, stream_expr.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:250:26: 
				{

				{
				// AST REWRITE
				// elements: expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 250:26: -> ^( DIRECTION[\"ASC\"] expr )
				{
					DebugLocation(250, 29);
					// MySQL51Parser.g3:250:29: ^( DIRECTION[\"ASC\"] expr )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(250, 31);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(DIRECTION, "ASC"), root_1);

					DebugLocation(250, 48);
					adaptor.AddChild(root_1, stream_expr.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			} finally { DebugExitSubRule(77); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("order_group_by_elements", 20);
			LeaveRule("order_group_by_elements", 20);
			LeaveRule_order_group_by_elements();
		}
		DebugLocation(252, 1);
		} finally { DebugExitRule(GrammarFileName, "order_group_by_elements"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "order_group_by_elements"

	private sealed partial class select_options_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public select_options_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_select_options();
	partial void LeaveRule_select_options();

	// $ANTLR start "select_options"
	// MySQL51Parser.g3:254:1: select_options : ( ALL | DISTINCT | DISTINCTROW | HIGH_PRIORITY | STRAIGHT_JOIN | SQL_SMALL_RESULT | SQL_BIG_RESULT | SQL_BUFFER_RESULT | SQL_CACHE | SQL_NO_CACHE | SQL_CALC_FOUND_ROWS );
	[GrammarRule("select_options")]
	private MySQL51Parser.select_options_return select_options()
	{
		EnterRule_select_options();
		EnterRule("select_options", 21);
		TraceIn("select_options", 21);
		MySQL51Parser.select_options_return retval = new MySQL51Parser.select_options_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken set213 = default(IToken);

		object set213_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "select_options");
		DebugLocation(254, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:255:2: ( ALL | DISTINCT | DISTINCTROW | HIGH_PRIORITY | STRAIGHT_JOIN | SQL_SMALL_RESULT | SQL_BIG_RESULT | SQL_BUFFER_RESULT | SQL_CACHE | SQL_NO_CACHE | SQL_CALC_FOUND_ROWS )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(255, 2);
			set213=(IToken)input.LT(1);
			if (input.LA(1)==ALL||(input.LA(1)>=DISTINCT && input.LA(1)<=DISTINCTROW)||input.LA(1)==HIGH_PRIORITY||(input.LA(1)>=SQL_BIG_RESULT && input.LA(1)<=SQL_SMALL_RESULT)||input.LA(1)==STRAIGHT_JOIN)
			{
				input.Consume();
				if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set213));
				state.errorRecovery=false;state.failed=false;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				DebugRecognitionException(mse);
				throw mse;
			}


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("select_options", 21);
			LeaveRule("select_options", 21);
			LeaveRule_select_options();
		}
		DebugLocation(266, 1);
		} finally { DebugExitRule(GrammarFileName, "select_options"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "select_options"

	private sealed partial class select_expr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public select_expr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_select_expr();
	partial void LeaveRule_select_expr();

	// $ANTLR start "select_expr"
	// MySQL51Parser.g3:268:1: select_expr : (star= MULT -> ^( SELECT_EXPR $star) | expr ( ( AS )? ident )? -> ^( SELECT_EXPR expr ( ^( ALIAS ident ) )? ) );
	[GrammarRule("select_expr")]
	private MySQL51Parser.select_expr_return select_expr()
	{
		EnterRule_select_expr();
		EnterRule("select_expr", 22);
		TraceIn("select_expr", 22);
		MySQL51Parser.select_expr_return retval = new MySQL51Parser.select_expr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken star = default(IToken);
		IToken AS215 = default(IToken);
		MySQL51Parser.expr_return expr214 = default(MySQL51Parser.expr_return);
		MySQL51Parser.ident_return ident216 = default(MySQL51Parser.ident_return);

		object star_tree = default(object);
		object AS215_tree = default(object);
		RewriteRuleITokenStream stream_MULT=new RewriteRuleITokenStream(adaptor,"token MULT");
		RewriteRuleITokenStream stream_AS=new RewriteRuleITokenStream(adaptor,"token AS");
		RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr");
		RewriteRuleSubtreeStream stream_ident=new RewriteRuleSubtreeStream(adaptor,"rule ident");
		try { DebugEnterRule(GrammarFileName, "select_expr");
		DebugLocation(268, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:269:2: (star= MULT -> ^( SELECT_EXPR $star) | expr ( ( AS )? ident )? -> ^( SELECT_EXPR expr ( ^( ALIAS ident ) )? ) )
			int alt80=2;
			try { DebugEnterDecision(80, false);
			int LA80_0 = input.LA(1);

			if ((LA80_0==MULT))
			{
				alt80 = 1;
			}
			else if ((LA80_0==ACTION||(LA80_0>=ADDDATE && LA80_0<=ALGORITHM)||LA80_0==ANY||LA80_0==ASCII||(LA80_0>=AT && LA80_0<=BACKUP)||LA80_0==BEGIN||(LA80_0>=BINARY && LA80_0<=BIT)||LA80_0==BITWISE_INVERSION||(LA80_0>=BIT_AND && LA80_0<=BIT_XOR)||(LA80_0>=BLOCK && LA80_0<=BOOLEAN)||LA80_0==BTREE||(LA80_0>=BYTE && LA80_0<=CACHE)||LA80_0==CASCADED||(LA80_0>=CAST && LA80_0<=CHAIN)||(LA80_0>=CHANGED && LA80_0<=CHAR)||LA80_0==CHARSET||(LA80_0>=CHECKSUM && LA80_0<=COLLATION)||LA80_0==COLUMNS||LA80_0==COMMENT||(LA80_0>=COMMIT && LA80_0<=CONCURRENT)||(LA80_0>=CONNECTION && LA80_0<=CONSISTENT)||(LA80_0>=CONTAINS && LA80_0<=CONTEXT)||LA80_0==CONTRIBUTORS||(LA80_0>=COUNT && LA80_0<=CPU)||(LA80_0>=CUBE && LA80_0<=CURRENT_USER)||LA80_0==CURTIME||(LA80_0>=DATA && LA80_0<=DATABASE)||(LA80_0>=DATAFILE && LA80_0<=DATE_ADD)||LA80_0==DATE_SUB||LA80_0==DAY||LA80_0==DEALLOCATE||LA80_0==DEFINER||LA80_0==DELAY_KEY_WRITE||LA80_0==DES_KEY_FILE||(LA80_0>=DIRECTORY && LA80_0<=DISK)||LA80_0==DO||(LA80_0>=DUMPFILE && LA80_0<=DYNAMIC)||LA80_0==ENABLE||(LA80_0>=END && LA80_0<=ENUM)||(LA80_0>=ERRORS && LA80_0<=ESCAPE)||(LA80_0>=EVENT && LA80_0<=EXISTS)||LA80_0==EXPANSION||(LA80_0>=EXTENDED && LA80_0<=FAULTS)||(LA80_0>=FIELDS && LA80_0<=FIXED)||LA80_0==FLUSH||(LA80_0>=FOUND && LA80_0<=FRAC_SECOND)||LA80_0==FULL||(LA80_0>=FUNCTION && LA80_0<=GLOBAL_VARIABLE)||LA80_0==GRANTS||(LA80_0>=GROUP && LA80_0<=HASH)||(LA80_0>=HELP && LA80_0<=HEXA_VALUE)||(LA80_0>=HOST && LA80_0<=HOUR)||(LA80_0>=ID && LA80_0<=IF)||LA80_0==IMPORT||LA80_0==INDEXES||LA80_0==INITIAL_SIZE||LA80_0==INNOBASE||(LA80_0>=INSERT && LA80_0<=INSTALL)||LA80_0==INTERVAL||(LA80_0>=INVOKER && LA80_0<=IPC)||(LA80_0>=ISOLATION && LA80_0<=ISSUER)||LA80_0==KEY_BLOCK_SIZE||(LA80_0>=LABEL && LA80_0<=LAST)||(LA80_0>=LEAVES && LA80_0<=LEFT)||LA80_0==LESS||LA80_0==LEVEL||(LA80_0>=LINESTRING && LA80_0<=LIST)||LA80_0==LOCAL||(LA80_0>=LOCKS && LA80_0<=LOGFILE)||LA80_0==LOGS||(LA80_0>=LPAREN && LA80_0<=MASTER_SSL_KEY)||LA80_0==MASTER_USER||(LA80_0>=MAX && LA80_0<=MEDIUM)||(LA80_0>=MEMORY && LA80_0<=MID)||(LA80_0>=MIGRATE && LA80_0<=MINUTE)||(LA80_0>=MIN_ROWS && LA80_0<=MODE)||LA80_0==MODIFY||LA80_0==MONTH||(LA80_0>=MULTILINESTRING && LA80_0<=NATIONAL)||(LA80_0>=NCHAR && LA80_0<=NOT)||(LA80_0>=NOT_OP && LA80_0<=NO_WAIT)||LA80_0==NULL||LA80_0==NUMBER||(LA80_0>=NVARCHAR && LA80_0<=OLD_PASSWORD)||(LA80_0>=ONE && LA80_0<=OPEN)||LA80_0==OPTIONS||(LA80_0>=OWNER && LA80_0<=POSITION)||(LA80_0>=PREPARE && LA80_0<=PREV)||LA80_0==PRIVILEGES||(LA80_0>=PROCESS && LA80_0<=PROFILES)||(LA80_0>=QUARTER && LA80_0<=QUICK)||(LA80_0>=REBUILD && LA80_0<=REDUNDANT)||(LA80_0>=RELAY_LOG_FILE && LA80_0<=RELAY_THREAD)||(LA80_0>=RELOAD && LA80_0<=REMOVE)||(LA80_0>=REORGANIZE && LA80_0<=REPLICATION)||(LA80_0>=RESET && LA80_0<=RESTORE)||LA80_0==RESUME||LA80_0==RETURNS||LA80_0==RIGHT||(LA80_0>=ROLLBACK && LA80_0<=ROW_FORMAT)||(LA80_0>=RTREE && LA80_0<=SCHEDULE)||LA80_0==SECOND||LA80_0==SECURITY||(LA80_0>=SERIAL && LA80_0<=SESSION_VARIABLE)||LA80_0==SHARE||(LA80_0>=SHUTDOWN && LA80_0<=SLAVE)||(LA80_0>=SNAPSHOT && LA80_0<=SOCKET)||(LA80_0>=SONAME && LA80_0<=SOURCE)||(LA80_0>=SQL_BUFFER_RESULT && LA80_0<=SQL_CACHE)||LA80_0==SQL_NO_CACHE||LA80_0==SQL_THREAD||LA80_0==START||(LA80_0>=STARTS && LA80_0<=STORAGE)||(LA80_0>=STRING && LA80_0<=SYSTEM_USER)||(LA80_0>=TABLES && LA80_0<=TEMPTABLE)||(LA80_0>=TEXT && LA80_0<=THAN)||(LA80_0>=TIME && LA80_0<=TIMESTAMP_DIFF)||(LA80_0>=TRANSACTION && LA80_0<=TRANSACTIONAL)||(LA80_0>=TRIGGERS && LA80_0<=UNDEFINED)||(LA80_0>=UNDOFILE && LA80_0<=UNINSTALL)||LA80_0==UNKNOWN||LA80_0==UNTIL||LA80_0==UPGRADE||LA80_0==USER||LA80_0==USE_FRM||(LA80_0>=UTC_DATE && LA80_0<=VALUE)||LA80_0==VALUE_PLACEHOLDER||(LA80_0>=VARIABLES && LA80_0<=VARIANCE)||(LA80_0>=VAR_POP && LA80_0<=WEEK)||(LA80_0>=WORK && LA80_0<=WRAPPER)||(LA80_0>=X509 && LA80_0<=XA)||LA80_0==YEAR||LA80_0==CONCAT))
			{
				alt80 = 2;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 80, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(80); }
			switch (alt80)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:269:4: star= MULT
				{
				DebugLocation(269, 8);
				star=(IToken)Match(input,MULT,Follow._MULT_in_select_expr2879); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_MULT.Add(star);



				{
				// AST REWRITE
				// elements: star
				// token labels: star
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleITokenStream stream_star=new RewriteRuleITokenStream(adaptor,"token star",star);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 269:17: -> ^( SELECT_EXPR $star)
				{
					DebugLocation(269, 20);
					// MySQL51Parser.g3:269:20: ^( SELECT_EXPR $star)
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(269, 22);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(SELECT_EXPR, "SELECT_EXPR"), root_1);

					DebugLocation(269, 35);
					adaptor.AddChild(root_1, stream_star.NextNode());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:270:4: expr ( ( AS )? ident )?
				{
				DebugLocation(270, 4);
				PushFollow(Follow._expr_in_select_expr2896);
				expr214=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr214.Tree);
				DebugLocation(270, 9);
				// MySQL51Parser.g3:270:9: ( ( AS )? ident )?
				int alt79=2;
				try { DebugEnterSubRule(79);
				try { DebugEnterDecision(79, false);
				int LA79_0 = input.LA(1);

				if ((LA79_0==ACTION||(LA79_0>=ADDDATE && LA79_0<=ALGORITHM)||(LA79_0>=ANY && LA79_0<=AS)||LA79_0==ASCII||(LA79_0>=AT && LA79_0<=BACKUP)||LA79_0==BEGIN||(LA79_0>=BINLOG && LA79_0<=BIT)||(LA79_0>=BLOCK && LA79_0<=BOOLEAN)||LA79_0==BTREE||(LA79_0>=BYTE && LA79_0<=CACHE)||LA79_0==CASCADED||LA79_0==CHAIN||LA79_0==CHANGED||LA79_0==CHARSET||(LA79_0>=CHECKSUM && LA79_0<=CODE)||LA79_0==COLLATION||LA79_0==COLUMNS||LA79_0==COMMENT||(LA79_0>=COMMIT && LA79_0<=CONCURRENT)||(LA79_0>=CONNECTION && LA79_0<=CONSISTENT)||(LA79_0>=CONTAINS && LA79_0<=CONTEXT)||LA79_0==CONTRIBUTORS||LA79_0==CPU||LA79_0==CUBE||LA79_0==DATA||(LA79_0>=DATAFILE && LA79_0<=DATETIME)||LA79_0==DAY||LA79_0==DEALLOCATE||LA79_0==DEFINER||LA79_0==DELAY_KEY_WRITE||LA79_0==DES_KEY_FILE||(LA79_0>=DIRECTORY && LA79_0<=DISK)||LA79_0==DO||(LA79_0>=DUMPFILE && LA79_0<=DYNAMIC)||LA79_0==ENABLE||(LA79_0>=END && LA79_0<=ENUM)||(LA79_0>=ERRORS && LA79_0<=ESCAPE)||(LA79_0>=EVENT && LA79_0<=EXECUTE)||LA79_0==EXPANSION||(LA79_0>=EXTENDED && LA79_0<=EXTENT_SIZE)||(LA79_0>=FAST && LA79_0<=FAULTS)||(LA79_0>=FIELDS && LA79_0<=FIXED)||LA79_0==FLUSH||(LA79_0>=FOUND && LA79_0<=FRAC_SECOND)||LA79_0==FULL||(LA79_0>=FUNCTION && LA79_0<=GLOBAL)||LA79_0==GRANTS||LA79_0==GROUP||(LA79_0>=HANDLER && LA79_0<=HASH)||LA79_0==HELP||(LA79_0>=HOST && LA79_0<=HOUR)||(LA79_0>=ID && LA79_0<=IDENTIFIED)||LA79_0==IMPORT||LA79_0==INDEXES||LA79_0==INITIAL_SIZE||LA79_0==INNOBASE||(LA79_0>=INSERT_METHOD && LA79_0<=INSTALL)||(LA79_0>=INVOKER && LA79_0<=IPC)||(LA79_0>=ISOLATION && LA79_0<=ISSUER)||LA79_0==KEY_BLOCK_SIZE||(LA79_0>=LABEL && LA79_0<=LAST)||LA79_0==LEAVES||LA79_0==LESS||LA79_0==LEVEL||(LA79_0>=LINESTRING && LA79_0<=LIST)||LA79_0==LOCAL||(LA79_0>=LOCKS && LA79_0<=LOGFILE)||LA79_0==LOGS||(LA79_0>=MASTER && LA79_0<=MASTER_SSL_KEY)||LA79_0==MASTER_USER||(LA79_0>=MAX_CONNECTIONS_PER_HOUR && LA79_0<=MEDIUM)||(LA79_0>=MEMORY && LA79_0<=MICROSECOND)||LA79_0==MIGRATE||LA79_0==MINUTE||LA79_0==MIN_ROWS||LA79_0==MODE||LA79_0==MODIFY||LA79_0==MONTH||(LA79_0>=MULTILINESTRING && LA79_0<=NATIONAL)||(LA79_0>=NCHAR && LA79_0<=NONE)||LA79_0==NO_WAIT||(LA79_0>=NVARCHAR && LA79_0<=OLD_PASSWORD)||(LA79_0>=ONE && LA79_0<=OPEN)||LA79_0==OPTIONS||(LA79_0>=OWNER && LA79_0<=PLUGINS)||(LA79_0>=POINT && LA79_0<=PORT)||(LA79_0>=PREPARE && LA79_0<=PREV)||LA79_0==PRIVILEGES||(LA79_0>=PROCESS && LA79_0<=PROFILES)||(LA79_0>=QUARTER && LA79_0<=QUICK)||(LA79_0>=REBUILD && LA79_0<=REDUNDANT)||(LA79_0>=RELAY_LOG_FILE && LA79_0<=RELAY_THREAD)||(LA79_0>=RELOAD && LA79_0<=REMOVE)||(LA79_0>=REORGANIZE && LA79_0<=REPAIR)||LA79_0==REPEATABLE||LA79_0==REPLICATION||(LA79_0>=RESET && LA79_0<=RESTORE)||LA79_0==RESUME||LA79_0==RETURNS||(LA79_0>=ROLLBACK && LA79_0<=ROW_FORMAT)||(LA79_0>=RTREE && LA79_0<=SCHEDULE)||LA79_0==SECOND||LA79_0==SECURITY||(LA79_0>=SERIAL && LA79_0<=SESSION)||LA79_0==SHARE||(LA79_0>=SHUTDOWN && LA79_0<=SLAVE)||(LA79_0>=SNAPSHOT && LA79_0<=SOCKET)||(LA79_0>=SONAME && LA79_0<=SOURCE)||(LA79_0>=SQL_BUFFER_RESULT && LA79_0<=SQL_CACHE)||LA79_0==SQL_NO_CACHE||LA79_0==SQL_THREAD||LA79_0==START||(LA79_0>=STARTS && LA79_0<=STATUS)||(LA79_0>=STOP && LA79_0<=STORAGE)||(LA79_0>=STRING_KEYWORD && LA79_0<=SUBPARTITIONS)||(LA79_0>=SUPER && LA79_0<=SWITCHES)||(LA79_0>=TABLES && LA79_0<=TEMPTABLE)||(LA79_0>=TEXT && LA79_0<=THAN)||(LA79_0>=TIME && LA79_0<=TIMESTAMP_DIFF)||(LA79_0>=TRANSACTION && LA79_0<=TRANSACTIONAL)||LA79_0==TRIGGERS||(LA79_0>=TRUNCATE && LA79_0<=UNDEFINED)||(LA79_0>=UNDOFILE && LA79_0<=UNINSTALL)||LA79_0==UNKNOWN||LA79_0==UNTIL||LA79_0==UPGRADE||LA79_0==USER||LA79_0==USE_FRM||LA79_0==VALUE||LA79_0==VARIABLES||(LA79_0>=VIEW && LA79_0<=WEEK)||(LA79_0>=WORK && LA79_0<=WRAPPER)||(LA79_0>=X509 && LA79_0<=XA)||LA79_0==YEAR))
				{
					alt79 = 1;
				}
				} finally { DebugExitDecision(79); }
				switch (alt79)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:270:10: ( AS )? ident
					{
					DebugLocation(270, 10);
					// MySQL51Parser.g3:270:10: ( AS )?
					int alt78=2;
					try { DebugEnterSubRule(78);
					try { DebugEnterDecision(78, false);
					int LA78_0 = input.LA(1);

					if ((LA78_0==AS))
					{
						alt78 = 1;
					}
					} finally { DebugExitDecision(78); }
					switch (alt78)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:270:10: AS
						{
						DebugLocation(270, 10);
						AS215=(IToken)Match(input,AS,Follow._AS_in_select_expr2899); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_AS.Add(AS215);


						}
						break;

					}
					} finally { DebugExitSubRule(78); }

					DebugLocation(270, 14);
					PushFollow(Follow._ident_in_select_expr2902);
					ident216=ident();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_ident.Add(ident216.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(79); }



				{
				// AST REWRITE
				// elements: expr, ident
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 270:23: -> ^( SELECT_EXPR expr ( ^( ALIAS ident ) )? )
				{
					DebugLocation(270, 26);
					// MySQL51Parser.g3:270:26: ^( SELECT_EXPR expr ( ^( ALIAS ident ) )? )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(270, 28);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(SELECT_EXPR, "SELECT_EXPR"), root_1);

					DebugLocation(270, 40);
					adaptor.AddChild(root_1, stream_expr.NextTree());
					DebugLocation(270, 45);
					// MySQL51Parser.g3:270:45: ( ^( ALIAS ident ) )?
					if (stream_ident.HasNext)
					{
						DebugLocation(270, 45);
						// MySQL51Parser.g3:270:45: ^( ALIAS ident )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(270, 47);
						root_2 = (object)adaptor.BecomeRoot((object)adaptor.Create(ALIAS, "ALIAS"), root_2);

						DebugLocation(270, 53);
						adaptor.AddChild(root_2, stream_ident.NextTree());

						adaptor.AddChild(root_1, root_2);
						}

					}
					stream_ident.Reset();

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("select_expr", 22);
			LeaveRule("select_expr", 22);
			LeaveRule_select_expr();
		}
		DebugLocation(271, 1);
		} finally { DebugExitRule(GrammarFileName, "select_expr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "select_expr"

	protected sealed partial class table_references_scope
	{
		public int count;

		public table_references_scope(MySQL51Parser grammar) { OnCreated(grammar); }
		partial void OnCreated(MySQL51Parser grammar);
	}
	partial void table_references_scopeInit( table_references_scope scope );
	partial void table_references_scopeAfter( table_references_scope scope );
	protected readonly Stack<table_references_scope> table_references_stack = new Stack<table_references_scope>();

	private sealed partial class table_references_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		public int table_count;
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public table_references_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_table_references();
	partial void LeaveRule_table_references();

	// $ANTLR start "table_references"
	// MySQL51Parser.g3:281:1: table_references returns [int table_count] : (t1= table_ref -> $t1) ( COMMA t2= table_ref -> ^( COMMA_JOIN[$COMMA] $table_references $t2) )* ;
	[GrammarRule("table_references")]
	private MySQL51Parser.table_references_return table_references()
	{
		EnterRule_table_references();
		EnterRule("table_references", 23);
		TraceIn("table_references", 23);
		table_references_stack.Push(new table_references_scope(this));table_references_scopeInit(table_references_stack.Peek());
		MySQL51Parser.table_references_return retval = new MySQL51Parser.table_references_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken COMMA217 = default(IToken);
		MySQL51Parser.table_ref_return t1 = default(MySQL51Parser.table_ref_return);
		MySQL51Parser.table_ref_return t2 = default(MySQL51Parser.table_ref_return);

		object COMMA217_tree = default(object);
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_table_ref=new RewriteRuleSubtreeStream(adaptor,"rule table_ref");

		table_references_stack.Peek().count =  0;

		try { DebugEnterRule(GrammarFileName, "table_references");
		DebugLocation(281, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:291:2: ( (t1= table_ref -> $t1) ( COMMA t2= table_ref -> ^( COMMA_JOIN[$COMMA] $table_references $t2) )* )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:291:4: (t1= table_ref -> $t1) ( COMMA t2= table_ref -> ^( COMMA_JOIN[$COMMA] $table_references $t2) )*
			{
			DebugLocation(291, 4);
			// MySQL51Parser.g3:291:4: (t1= table_ref -> $t1)
			DebugEnterAlt(1);
			// MySQL51Parser.g3:291:6: t1= table_ref
			{
			DebugLocation(291, 8);
			PushFollow(Follow._table_ref_in_table_references2954);
			t1=table_ref();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_table_ref.Add(t1.Tree);


			{
			// AST REWRITE
			// elements: t1
			// token labels: 
			// rule labels: t1, retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_t1=new RewriteRuleSubtreeStream(adaptor,"rule t1",t1!=null?t1.Tree:null);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 291:22: -> $t1
			{
				DebugLocation(291, 26);
				adaptor.AddChild(root_0, stream_t1.NextTree());

			}

			retval.Tree = root_0;
			}
			}

			}

			DebugLocation(292, 3);
			// MySQL51Parser.g3:292:3: ( COMMA t2= table_ref -> ^( COMMA_JOIN[$COMMA] $table_references $t2) )*
			try { DebugEnterSubRule(81);
			while (true)
			{
				int alt81=2;
				try { DebugEnterDecision(81, false);
				int LA81_0 = input.LA(1);

				if ((LA81_0==COMMA))
				{
					alt81 = 1;
				}


				} finally { DebugExitDecision(81); }
				switch ( alt81 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:292:5: COMMA t2= table_ref
					{
					DebugLocation(292, 5);
					COMMA217=(IToken)Match(input,COMMA,Follow._COMMA_in_table_references2969); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMA.Add(COMMA217);

					DebugLocation(292, 13);
					PushFollow(Follow._table_ref_in_table_references2973);
					t2=table_ref();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_table_ref.Add(t2.Tree);


					{
					// AST REWRITE
					// elements: table_references, t2
					// token labels: 
					// rule labels: t2, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleSubtreeStream stream_t2=new RewriteRuleSubtreeStream(adaptor,"rule t2",t2!=null?t2.Tree:null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 292:25: -> ^( COMMA_JOIN[$COMMA] $table_references $t2)
					{
						DebugLocation(292, 28);
						// MySQL51Parser.g3:292:28: ^( COMMA_JOIN[$COMMA] $table_references $t2)
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(292, 30);
						root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(COMMA_JOIN, COMMA217), root_1);

						DebugLocation(292, 50);
						adaptor.AddChild(root_1, stream_retval.NextTree());
						DebugLocation(292, 68);
						adaptor.AddChild(root_1, stream_t2.NextTree());

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;

				default:
					goto loop81;
				}
			}

			loop81:
				;

			} finally { DebugExitSubRule(81); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
			if (state.backtracking == 0)
			{

				retval.table_count = table_references_stack.Peek().count;

			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("table_references", 23);
			LeaveRule("table_references", 23);
			LeaveRule_table_references();
			table_references_scopeAfter(table_references_stack.Peek());table_references_stack.Pop();
		}
		DebugLocation(294, 1);
		} finally { DebugExitRule(GrammarFileName, "table_references"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "table_references"

	private sealed partial class table_ref_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public table_ref_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_table_ref();
	partial void LeaveRule_table_ref();

	// $ANTLR start "table_ref"
	// MySQL51Parser.g3:297:1: table_ref : (t1= table_factor -> $t1) ( ( LEFT | RIGHT )=> (ltype= LEFT |ltype= RIGHT ) (outer= OUTER )? JOIN t3= table_ref lrjoinCond= join_condition_both -> ^( $ltype $t3 $lrjoinCond ( $outer)? ) | (type= INNER |type= CROSS )? JOIN t2= table_factor (cond1= join_condition_both )? -> ^( JOIN $t2 ( $cond1)? ( $type)? ) | (type= STRAIGHT_JOIN t2= table_factor ( ( join_condition_on )=>cond2= join_condition_on -> ^( $type $t2 $cond2) | -> ^( $type $t2) ) ) | ( NATURAL )=> NATURAL ( (type= LEFT |type= RIGHT ) (outer= OUTER )? )? JOIN t2= table_factor -> ^( NATURAL ( $type)? $t2 ( $outer)? ) )* ;
	[GrammarRule("table_ref")]
	private MySQL51Parser.table_ref_return table_ref()
	{
		EnterRule_table_ref();
		EnterRule("table_ref", 24);
		TraceIn("table_ref", 24);
		MySQL51Parser.table_ref_return retval = new MySQL51Parser.table_ref_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken ltype = default(IToken);
		IToken outer = default(IToken);
		IToken type = default(IToken);
		IToken JOIN218 = default(IToken);
		IToken JOIN219 = default(IToken);
		IToken NATURAL220 = default(IToken);
		IToken JOIN221 = default(IToken);
		MySQL51Parser.table_factor_return t1 = default(MySQL51Parser.table_factor_return);
		MySQL51Parser.table_ref_return t3 = default(MySQL51Parser.table_ref_return);
		MySQL51Parser.join_condition_both_return lrjoinCond = default(MySQL51Parser.join_condition_both_return);
		MySQL51Parser.table_factor_return t2 = default(MySQL51Parser.table_factor_return);
		MySQL51Parser.join_condition_both_return cond1 = default(MySQL51Parser.join_condition_both_return);
		MySQL51Parser.join_condition_on_return cond2 = default(MySQL51Parser.join_condition_on_return);

		object ltype_tree = default(object);
		object outer_tree = default(object);
		object type_tree = default(object);
		object JOIN218_tree = default(object);
		object JOIN219_tree = default(object);
		object NATURAL220_tree = default(object);
		object JOIN221_tree = default(object);
		RewriteRuleITokenStream stream_LEFT=new RewriteRuleITokenStream(adaptor,"token LEFT");
		RewriteRuleITokenStream stream_RIGHT=new RewriteRuleITokenStream(adaptor,"token RIGHT");
		RewriteRuleITokenStream stream_OUTER=new RewriteRuleITokenStream(adaptor,"token OUTER");
		RewriteRuleITokenStream stream_JOIN=new RewriteRuleITokenStream(adaptor,"token JOIN");
		RewriteRuleITokenStream stream_INNER=new RewriteRuleITokenStream(adaptor,"token INNER");
		RewriteRuleITokenStream stream_CROSS=new RewriteRuleITokenStream(adaptor,"token CROSS");
		RewriteRuleITokenStream stream_STRAIGHT_JOIN=new RewriteRuleITokenStream(adaptor,"token STRAIGHT_JOIN");
		RewriteRuleITokenStream stream_NATURAL=new RewriteRuleITokenStream(adaptor,"token NATURAL");
		RewriteRuleSubtreeStream stream_table_factor=new RewriteRuleSubtreeStream(adaptor,"rule table_factor");
		RewriteRuleSubtreeStream stream_table_ref=new RewriteRuleSubtreeStream(adaptor,"rule table_ref");
		RewriteRuleSubtreeStream stream_join_condition_both=new RewriteRuleSubtreeStream(adaptor,"rule join_condition_both");
		RewriteRuleSubtreeStream stream_join_condition_on=new RewriteRuleSubtreeStream(adaptor,"rule join_condition_on");
		try { DebugEnterRule(GrammarFileName, "table_ref");
		DebugLocation(297, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:298:2: ( (t1= table_factor -> $t1) ( ( LEFT | RIGHT )=> (ltype= LEFT |ltype= RIGHT ) (outer= OUTER )? JOIN t3= table_ref lrjoinCond= join_condition_both -> ^( $ltype $t3 $lrjoinCond ( $outer)? ) | (type= INNER |type= CROSS )? JOIN t2= table_factor (cond1= join_condition_both )? -> ^( JOIN $t2 ( $cond1)? ( $type)? ) | (type= STRAIGHT_JOIN t2= table_factor ( ( join_condition_on )=>cond2= join_condition_on -> ^( $type $t2 $cond2) | -> ^( $type $t2) ) ) | ( NATURAL )=> NATURAL ( (type= LEFT |type= RIGHT ) (outer= OUTER )? )? JOIN t2= table_factor -> ^( NATURAL ( $type)? $t2 ( $outer)? ) )* )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:298:4: (t1= table_factor -> $t1) ( ( LEFT | RIGHT )=> (ltype= LEFT |ltype= RIGHT ) (outer= OUTER )? JOIN t3= table_ref lrjoinCond= join_condition_both -> ^( $ltype $t3 $lrjoinCond ( $outer)? ) | (type= INNER |type= CROSS )? JOIN t2= table_factor (cond1= join_condition_both )? -> ^( JOIN $t2 ( $cond1)? ( $type)? ) | (type= STRAIGHT_JOIN t2= table_factor ( ( join_condition_on )=>cond2= join_condition_on -> ^( $type $t2 $cond2) | -> ^( $type $t2) ) ) | ( NATURAL )=> NATURAL ( (type= LEFT |type= RIGHT ) (outer= OUTER )? )? JOIN t2= table_factor -> ^( NATURAL ( $type)? $t2 ( $outer)? ) )*
			{
			DebugLocation(298, 4);
			// MySQL51Parser.g3:298:4: (t1= table_factor -> $t1)
			DebugEnterAlt(1);
			// MySQL51Parser.g3:298:5: t1= table_factor
			{
			DebugLocation(298, 7);
			PushFollow(Follow._table_factor_in_table_ref3008);
			t1=table_factor();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_table_factor.Add(t1.Tree);


			{
			// AST REWRITE
			// elements: t1
			// token labels: 
			// rule labels: t1, retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_t1=new RewriteRuleSubtreeStream(adaptor,"rule t1",t1!=null?t1.Tree:null);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 298:21: -> $t1
			{
				DebugLocation(298, 25);
				adaptor.AddChild(root_0, stream_t1.NextTree());

			}

			retval.Tree = root_0;
			}
			}

			}

			DebugLocation(299, 3);
			// MySQL51Parser.g3:299:3: ( ( LEFT | RIGHT )=> (ltype= LEFT |ltype= RIGHT ) (outer= OUTER )? JOIN t3= table_ref lrjoinCond= join_condition_both -> ^( $ltype $t3 $lrjoinCond ( $outer)? ) | (type= INNER |type= CROSS )? JOIN t2= table_factor (cond1= join_condition_both )? -> ^( JOIN $t2 ( $cond1)? ( $type)? ) | (type= STRAIGHT_JOIN t2= table_factor ( ( join_condition_on )=>cond2= join_condition_on -> ^( $type $t2 $cond2) | -> ^( $type $t2) ) ) | ( NATURAL )=> NATURAL ( (type= LEFT |type= RIGHT ) (outer= OUTER )? )? JOIN t2= table_factor -> ^( NATURAL ( $type)? $t2 ( $outer)? ) )*
			try { DebugEnterSubRule(90);
			while (true)
			{
				int alt90=5;
				try { DebugEnterDecision(90, false);
				try
				{
					alt90 = dfa90.Predict(input);
				}
				catch (NoViableAltException nvae)
				{
					DebugRecognitionException(nvae);
					throw;
				}
				} finally { DebugExitDecision(90); }
				switch ( alt90 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:300:4: ( LEFT | RIGHT )=> (ltype= LEFT |ltype= RIGHT ) (outer= OUTER )? JOIN t3= table_ref lrjoinCond= join_condition_both
					{
					DebugLocation(300, 18);
					// MySQL51Parser.g3:300:18: (ltype= LEFT |ltype= RIGHT )
					int alt82=2;
					try { DebugEnterSubRule(82);
					try { DebugEnterDecision(82, false);
					int LA82_0 = input.LA(1);

					if ((LA82_0==LEFT))
					{
						alt82 = 1;
					}
					else if ((LA82_0==RIGHT))
					{
						alt82 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 82, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					} finally { DebugExitDecision(82); }
					switch (alt82)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:300:19: ltype= LEFT
						{
						DebugLocation(300, 24);
						ltype=(IToken)Match(input,LEFT,Follow._LEFT_in_table_ref3033); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_LEFT.Add(ltype);


						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:300:30: ltype= RIGHT
						{
						DebugLocation(300, 35);
						ltype=(IToken)Match(input,RIGHT,Follow._RIGHT_in_table_ref3037); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_RIGHT.Add(ltype);


						}
						break;

					}
					} finally { DebugExitSubRule(82); }

					DebugLocation(300, 48);
					// MySQL51Parser.g3:300:48: (outer= OUTER )?
					int alt83=2;
					try { DebugEnterSubRule(83);
					try { DebugEnterDecision(83, false);
					int LA83_0 = input.LA(1);

					if ((LA83_0==OUTER))
					{
						alt83 = 1;
					}
					} finally { DebugExitDecision(83); }
					switch (alt83)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:300:48: outer= OUTER
						{
						DebugLocation(300, 48);
						outer=(IToken)Match(input,OUTER,Follow._OUTER_in_table_ref3042); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_OUTER.Add(outer);


						}
						break;

					}
					} finally { DebugExitSubRule(83); }

					DebugLocation(300, 56);
					JOIN218=(IToken)Match(input,JOIN,Follow._JOIN_in_table_ref3045); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_JOIN.Add(JOIN218);

					DebugLocation(300, 63);
					PushFollow(Follow._table_ref_in_table_ref3049);
					t3=table_ref();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_table_ref.Add(t3.Tree);
					DebugLocation(300, 84);
					PushFollow(Follow._join_condition_both_in_table_ref3053);
					lrjoinCond=join_condition_both();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_join_condition_both.Add(lrjoinCond.Tree);


					{
					// AST REWRITE
					// elements: ltype, t3, lrjoinCond, outer
					// token labels: ltype, outer
					// rule labels: t3, lrjoinCond, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleITokenStream stream_ltype=new RewriteRuleITokenStream(adaptor,"token ltype",ltype);
					RewriteRuleITokenStream stream_outer=new RewriteRuleITokenStream(adaptor,"token outer",outer);
					RewriteRuleSubtreeStream stream_t3=new RewriteRuleSubtreeStream(adaptor,"rule t3",t3!=null?t3.Tree:null);
					RewriteRuleSubtreeStream stream_lrjoinCond=new RewriteRuleSubtreeStream(adaptor,"rule lrjoinCond",lrjoinCond!=null?lrjoinCond.Tree:null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 301:5: -> ^( $ltype $t3 $lrjoinCond ( $outer)? )
					{
						DebugLocation(301, 8);
						// MySQL51Parser.g3:301:8: ^( $ltype $t3 $lrjoinCond ( $outer)? )
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(301, 11);
						root_1 = (object)adaptor.BecomeRoot(stream_ltype.NextNode(), root_1);

						DebugLocation(301, 17);
						adaptor.AddChild(root_1, retval.Tree);
						DebugLocation(301, 26);
						adaptor.AddChild(root_1, stream_t3.NextTree());
						DebugLocation(301, 30);
						adaptor.AddChild(root_1, stream_lrjoinCond.NextTree());
						DebugLocation(301, 42);
						// MySQL51Parser.g3:301:42: ( $outer)?
						if (stream_outer.HasNext)
						{
							DebugLocation(301, 42);
							adaptor.AddChild(root_1, stream_outer.NextNode());

						}
						stream_outer.Reset();

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:302:5: (type= INNER |type= CROSS )? JOIN t2= table_factor (cond1= join_condition_both )?
					{
					DebugLocation(302, 5);
					// MySQL51Parser.g3:302:5: (type= INNER |type= CROSS )?
					int alt84=3;
					try { DebugEnterSubRule(84);
					try { DebugEnterDecision(84, false);
					int LA84_0 = input.LA(1);

					if ((LA84_0==INNER))
					{
						alt84 = 1;
					}
					else if ((LA84_0==CROSS))
					{
						alt84 = 2;
					}
					} finally { DebugExitDecision(84); }
					switch (alt84)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:302:6: type= INNER
						{
						DebugLocation(302, 10);
						type=(IToken)Match(input,INNER,Follow._INNER_in_table_ref3086); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_INNER.Add(type);


						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:302:17: type= CROSS
						{
						DebugLocation(302, 21);
						type=(IToken)Match(input,CROSS,Follow._CROSS_in_table_ref3090); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_CROSS.Add(type);


						}
						break;

					}
					} finally { DebugExitSubRule(84); }

					DebugLocation(302, 30);
					JOIN219=(IToken)Match(input,JOIN,Follow._JOIN_in_table_ref3094); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_JOIN.Add(JOIN219);

					DebugLocation(302, 37);
					PushFollow(Follow._table_factor_in_table_ref3098);
					t2=table_factor();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_table_factor.Add(t2.Tree);
					DebugLocation(302, 56);
					// MySQL51Parser.g3:302:56: (cond1= join_condition_both )?
					int alt85=2;
					try { DebugEnterSubRule(85);
					try { DebugEnterDecision(85, false);
					try
					{
						alt85 = dfa85.Predict(input);
					}
					catch (NoViableAltException nvae)
					{
						DebugRecognitionException(nvae);
						throw;
					}
					} finally { DebugExitDecision(85); }
					switch (alt85)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:302:56: cond1= join_condition_both
						{
						DebugLocation(302, 56);
						PushFollow(Follow._join_condition_both_in_table_ref3102);
						cond1=join_condition_both();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_join_condition_both.Add(cond1.Tree);

						}
						break;

					}
					} finally { DebugExitSubRule(85); }



					{
					// AST REWRITE
					// elements: JOIN, t2, cond1, type
					// token labels: type
					// rule labels: t2, cond1, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleITokenStream stream_type=new RewriteRuleITokenStream(adaptor,"token type",type);
					RewriteRuleSubtreeStream stream_t2=new RewriteRuleSubtreeStream(adaptor,"rule t2",t2!=null?t2.Tree:null);
					RewriteRuleSubtreeStream stream_cond1=new RewriteRuleSubtreeStream(adaptor,"rule cond1",cond1!=null?cond1.Tree:null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 303:5: -> ^( JOIN $t2 ( $cond1)? ( $type)? )
					{
						DebugLocation(303, 8);
						// MySQL51Parser.g3:303:8: ^( JOIN $t2 ( $cond1)? ( $type)? )
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(303, 10);
						root_1 = (object)adaptor.BecomeRoot(stream_JOIN.NextNode(), root_1);

						DebugLocation(303, 15);
						adaptor.AddChild(root_1, retval.Tree);
						DebugLocation(303, 24);
						adaptor.AddChild(root_1, stream_t2.NextTree());
						DebugLocation(303, 28);
						// MySQL51Parser.g3:303:28: ( $cond1)?
						if (stream_cond1.HasNext)
						{
							DebugLocation(303, 28);
							adaptor.AddChild(root_1, stream_cond1.NextTree());

						}
						stream_cond1.Reset();
						DebugLocation(303, 36);
						// MySQL51Parser.g3:303:36: ( $type)?
						if (stream_type.HasNext)
						{
							DebugLocation(303, 36);
							adaptor.AddChild(root_1, stream_type.NextNode());

						}
						stream_type.Reset();

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;
				case 3:
					DebugEnterAlt(3);
					// MySQL51Parser.g3:304:5: (type= STRAIGHT_JOIN t2= table_factor ( ( join_condition_on )=>cond2= join_condition_on -> ^( $type $t2 $cond2) | -> ^( $type $t2) ) )
					{
					DebugLocation(304, 5);
					// MySQL51Parser.g3:304:5: (type= STRAIGHT_JOIN t2= table_factor ( ( join_condition_on )=>cond2= join_condition_on -> ^( $type $t2 $cond2) | -> ^( $type $t2) ) )
					DebugEnterAlt(1);
					// MySQL51Parser.g3:304:7: type= STRAIGHT_JOIN t2= table_factor ( ( join_condition_on )=>cond2= join_condition_on -> ^( $type $t2 $cond2) | -> ^( $type $t2) )
					{
					DebugLocation(304, 11);
					type=(IToken)Match(input,STRAIGHT_JOIN,Follow._STRAIGHT_JOIN_in_table_ref3137); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_STRAIGHT_JOIN.Add(type);

					DebugLocation(304, 28);
					PushFollow(Follow._table_factor_in_table_ref3141);
					t2=table_factor();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_table_factor.Add(t2.Tree);
					DebugLocation(305, 5);
					// MySQL51Parser.g3:305:5: ( ( join_condition_on )=>cond2= join_condition_on -> ^( $type $t2 $cond2) | -> ^( $type $t2) )
					int alt86=2;
					try { DebugEnterSubRule(86);
					try { DebugEnterDecision(86, false);
					try
					{
						alt86 = dfa86.Predict(input);
					}
					catch (NoViableAltException nvae)
					{
						DebugRecognitionException(nvae);
						throw;
					}
					} finally { DebugExitDecision(86); }
					switch (alt86)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:305:7: ( join_condition_on )=>cond2= join_condition_on
						{
						DebugLocation(305, 34);
						PushFollow(Follow._join_condition_on_in_table_ref3157);
						cond2=join_condition_on();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_join_condition_on.Add(cond2.Tree);


						{
						// AST REWRITE
						// elements: type, t2, cond2
						// token labels: type
						// rule labels: t2, cond2, retval
						// token list labels: 
						// rule list labels: 
						// wildcard labels: 
						if (state.backtracking == 0) {
						retval.Tree = root_0;
						RewriteRuleITokenStream stream_type=new RewriteRuleITokenStream(adaptor,"token type",type);
						RewriteRuleSubtreeStream stream_t2=new RewriteRuleSubtreeStream(adaptor,"rule t2",t2!=null?t2.Tree:null);
						RewriteRuleSubtreeStream stream_cond2=new RewriteRuleSubtreeStream(adaptor,"rule cond2",cond2!=null?cond2.Tree:null);
						RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

						root_0 = (object)adaptor.Nil();
						// 305:53: -> ^( $type $t2 $cond2)
						{
							DebugLocation(305, 56);
							// MySQL51Parser.g3:305:56: ^( $type $t2 $cond2)
							{
							object root_1 = (object)adaptor.Nil();
							DebugLocation(305, 59);
							root_1 = (object)adaptor.BecomeRoot(stream_type.NextNode(), root_1);

							DebugLocation(305, 64);
							adaptor.AddChild(root_1, retval.Tree);
							DebugLocation(305, 73);
							adaptor.AddChild(root_1, stream_t2.NextTree());
							DebugLocation(305, 77);
							adaptor.AddChild(root_1, stream_cond2.NextTree());

							adaptor.AddChild(root_0, root_1);
							}

						}

						retval.Tree = root_0;
						}
						}

						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:306:13: 
						{

						{
						// AST REWRITE
						// elements: type, t2
						// token labels: type
						// rule labels: t2, retval
						// token list labels: 
						// rule list labels: 
						// wildcard labels: 
						if (state.backtracking == 0) {
						retval.Tree = root_0;
						RewriteRuleITokenStream stream_type=new RewriteRuleITokenStream(adaptor,"token type",type);
						RewriteRuleSubtreeStream stream_t2=new RewriteRuleSubtreeStream(adaptor,"rule t2",t2!=null?t2.Tree:null);
						RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

						root_0 = (object)adaptor.Nil();
						// 306:13: -> ^( $type $t2)
						{
							DebugLocation(306, 16);
							// MySQL51Parser.g3:306:16: ^( $type $t2)
							{
							object root_1 = (object)adaptor.Nil();
							DebugLocation(306, 19);
							root_1 = (object)adaptor.BecomeRoot(stream_type.NextNode(), root_1);

							DebugLocation(306, 24);
							adaptor.AddChild(root_1, retval.Tree);
							DebugLocation(306, 33);
							adaptor.AddChild(root_1, stream_t2.NextTree());

							adaptor.AddChild(root_0, root_1);
							}

						}

						retval.Tree = root_0;
						}
						}

						}
						break;

					}
					} finally { DebugExitSubRule(86); }


					}


					}
					break;
				case 4:
					DebugEnterAlt(4);
					// MySQL51Parser.g3:309:5: ( NATURAL )=> NATURAL ( (type= LEFT |type= RIGHT ) (outer= OUTER )? )? JOIN t2= table_factor
					{
					DebugLocation(309, 17);
					NATURAL220=(IToken)Match(input,NATURAL,Follow._NATURAL_in_table_ref3218); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_NATURAL.Add(NATURAL220);

					DebugLocation(309, 25);
					// MySQL51Parser.g3:309:25: ( (type= LEFT |type= RIGHT ) (outer= OUTER )? )?
					int alt89=2;
					try { DebugEnterSubRule(89);
					try { DebugEnterDecision(89, false);
					int LA89_0 = input.LA(1);

					if ((LA89_0==LEFT||LA89_0==RIGHT))
					{
						alt89 = 1;
					}
					} finally { DebugExitDecision(89); }
					switch (alt89)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:309:26: (type= LEFT |type= RIGHT ) (outer= OUTER )?
						{
						DebugLocation(309, 26);
						// MySQL51Parser.g3:309:26: (type= LEFT |type= RIGHT )
						int alt87=2;
						try { DebugEnterSubRule(87);
						try { DebugEnterDecision(87, false);
						int LA87_0 = input.LA(1);

						if ((LA87_0==LEFT))
						{
							alt87 = 1;
						}
						else if ((LA87_0==RIGHT))
						{
							alt87 = 2;
						}
						else
						{
							if (state.backtracking>0) {state.failed=true; return retval;}
							NoViableAltException nvae = new NoViableAltException("", 87, 0, input);
							DebugRecognitionException(nvae);
							throw nvae;
						}
						} finally { DebugExitDecision(87); }
						switch (alt87)
						{
						case 1:
							DebugEnterAlt(1);
							// MySQL51Parser.g3:309:27: type= LEFT
							{
							DebugLocation(309, 31);
							type=(IToken)Match(input,LEFT,Follow._LEFT_in_table_ref3224); if (state.failed) return retval; 
							if (state.backtracking == 0) stream_LEFT.Add(type);


							}
							break;
						case 2:
							DebugEnterAlt(2);
							// MySQL51Parser.g3:309:37: type= RIGHT
							{
							DebugLocation(309, 41);
							type=(IToken)Match(input,RIGHT,Follow._RIGHT_in_table_ref3228); if (state.failed) return retval; 
							if (state.backtracking == 0) stream_RIGHT.Add(type);


							}
							break;

						}
						} finally { DebugExitSubRule(87); }

						DebugLocation(309, 54);
						// MySQL51Parser.g3:309:54: (outer= OUTER )?
						int alt88=2;
						try { DebugEnterSubRule(88);
						try { DebugEnterDecision(88, false);
						int LA88_0 = input.LA(1);

						if ((LA88_0==OUTER))
						{
							alt88 = 1;
						}
						} finally { DebugExitDecision(88); }
						switch (alt88)
						{
						case 1:
							DebugEnterAlt(1);
							// MySQL51Parser.g3:309:54: outer= OUTER
							{
							DebugLocation(309, 54);
							outer=(IToken)Match(input,OUTER,Follow._OUTER_in_table_ref3233); if (state.failed) return retval; 
							if (state.backtracking == 0) stream_OUTER.Add(outer);


							}
							break;

						}
						} finally { DebugExitSubRule(88); }


						}
						break;

					}
					} finally { DebugExitSubRule(89); }

					DebugLocation(309, 64);
					JOIN221=(IToken)Match(input,JOIN,Follow._JOIN_in_table_ref3238); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_JOIN.Add(JOIN221);

					DebugLocation(309, 71);
					PushFollow(Follow._table_factor_in_table_ref3242);
					t2=table_factor();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_table_factor.Add(t2.Tree);


					{
					// AST REWRITE
					// elements: NATURAL, type, t2, outer
					// token labels: type, outer
					// rule labels: t2, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleITokenStream stream_type=new RewriteRuleITokenStream(adaptor,"token type",type);
					RewriteRuleITokenStream stream_outer=new RewriteRuleITokenStream(adaptor,"token outer",outer);
					RewriteRuleSubtreeStream stream_t2=new RewriteRuleSubtreeStream(adaptor,"rule t2",t2!=null?t2.Tree:null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 309:85: -> ^( NATURAL ( $type)? $t2 ( $outer)? )
					{
						DebugLocation(309, 88);
						// MySQL51Parser.g3:309:88: ^( NATURAL ( $type)? $t2 ( $outer)? )
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(309, 90);
						root_1 = (object)adaptor.BecomeRoot(stream_NATURAL.NextNode(), root_1);

						DebugLocation(309, 99);
						// MySQL51Parser.g3:309:99: ( $type)?
						if (stream_type.HasNext)
						{
							DebugLocation(309, 99);
							adaptor.AddChild(root_1, stream_type.NextNode());

						}
						stream_type.Reset();
						DebugLocation(309, 105);
						adaptor.AddChild(root_1, retval.Tree);
						DebugLocation(309, 114);
						adaptor.AddChild(root_1, stream_t2.NextTree());
						DebugLocation(309, 118);
						// MySQL51Parser.g3:309:118: ( $outer)?
						if (stream_outer.HasNext)
						{
							DebugLocation(309, 118);
							adaptor.AddChild(root_1, stream_outer.NextNode());

						}
						stream_outer.Reset();

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;

				default:
					goto loop90;
				}
			}

			loop90:
				;

			} finally { DebugExitSubRule(90); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("table_ref", 24);
			LeaveRule("table_ref", 24);
			LeaveRule_table_ref();
		}
		DebugLocation(311, 1);
		} finally { DebugExitRule(GrammarFileName, "table_ref"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "table_ref"

	private sealed partial class table_factor_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public table_factor_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_table_factor();
	partial void LeaveRule_table_factor();

	// $ANTLR start "table_factor"
	// MySQL51Parser.g3:313:1: table_factor : ( simple_table_ref_alias ( index_hint_list )? -> ^( TABLE simple_table_ref_alias ( index_hint_list )? ) | LPAREN select_inner RPAREN ( AS )? ident -> ^( SUBSELECT select_inner ^( ALIAS ident ) ) | LPAREN table_ref ( COMMA table_ref )* RPAREN -> ^( TABLE ( table_ref )+ ) | LCURLY ident t1= table_ref LEFT OUTER JOIN t2= table_ref join_condition_on RCURLY -> ^( ident $t1 $t2 join_condition_on ) | DUAL -> ^( DUAL ) );
	[GrammarRule("table_factor")]
	private MySQL51Parser.table_factor_return table_factor()
	{
		EnterRule_table_factor();
		EnterRule("table_factor", 25);
		TraceIn("table_factor", 25);
		MySQL51Parser.table_factor_return retval = new MySQL51Parser.table_factor_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken LPAREN224 = default(IToken);
		IToken RPAREN226 = default(IToken);
		IToken AS227 = default(IToken);
		IToken LPAREN229 = default(IToken);
		IToken COMMA231 = default(IToken);
		IToken RPAREN233 = default(IToken);
		IToken LCURLY234 = default(IToken);
		IToken LEFT236 = default(IToken);
		IToken OUTER237 = default(IToken);
		IToken JOIN238 = default(IToken);
		IToken RCURLY240 = default(IToken);
		IToken DUAL241 = default(IToken);
		MySQL51Parser.table_ref_return t1 = default(MySQL51Parser.table_ref_return);
		MySQL51Parser.table_ref_return t2 = default(MySQL51Parser.table_ref_return);
		MySQL51Parser.simple_table_ref_alias_return simple_table_ref_alias222 = default(MySQL51Parser.simple_table_ref_alias_return);
		MySQL51Parser.index_hint_list_return index_hint_list223 = default(MySQL51Parser.index_hint_list_return);
		MySQL51Parser.select_inner_return select_inner225 = default(MySQL51Parser.select_inner_return);
		MySQL51Parser.ident_return ident228 = default(MySQL51Parser.ident_return);
		MySQL51Parser.table_ref_return table_ref230 = default(MySQL51Parser.table_ref_return);
		MySQL51Parser.table_ref_return table_ref232 = default(MySQL51Parser.table_ref_return);
		MySQL51Parser.ident_return ident235 = default(MySQL51Parser.ident_return);
		MySQL51Parser.join_condition_on_return join_condition_on239 = default(MySQL51Parser.join_condition_on_return);

		object LPAREN224_tree = default(object);
		object RPAREN226_tree = default(object);
		object AS227_tree = default(object);
		object LPAREN229_tree = default(object);
		object COMMA231_tree = default(object);
		object RPAREN233_tree = default(object);
		object LCURLY234_tree = default(object);
		object LEFT236_tree = default(object);
		object OUTER237_tree = default(object);
		object JOIN238_tree = default(object);
		object RCURLY240_tree = default(object);
		object DUAL241_tree = default(object);
		RewriteRuleITokenStream stream_LPAREN=new RewriteRuleITokenStream(adaptor,"token LPAREN");
		RewriteRuleITokenStream stream_RPAREN=new RewriteRuleITokenStream(adaptor,"token RPAREN");
		RewriteRuleITokenStream stream_AS=new RewriteRuleITokenStream(adaptor,"token AS");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleITokenStream stream_LCURLY=new RewriteRuleITokenStream(adaptor,"token LCURLY");
		RewriteRuleITokenStream stream_LEFT=new RewriteRuleITokenStream(adaptor,"token LEFT");
		RewriteRuleITokenStream stream_OUTER=new RewriteRuleITokenStream(adaptor,"token OUTER");
		RewriteRuleITokenStream stream_JOIN=new RewriteRuleITokenStream(adaptor,"token JOIN");
		RewriteRuleITokenStream stream_RCURLY=new RewriteRuleITokenStream(adaptor,"token RCURLY");
		RewriteRuleITokenStream stream_DUAL=new RewriteRuleITokenStream(adaptor,"token DUAL");
		RewriteRuleSubtreeStream stream_simple_table_ref_alias=new RewriteRuleSubtreeStream(adaptor,"rule simple_table_ref_alias");
		RewriteRuleSubtreeStream stream_index_hint_list=new RewriteRuleSubtreeStream(adaptor,"rule index_hint_list");
		RewriteRuleSubtreeStream stream_select_inner=new RewriteRuleSubtreeStream(adaptor,"rule select_inner");
		RewriteRuleSubtreeStream stream_ident=new RewriteRuleSubtreeStream(adaptor,"rule ident");
		RewriteRuleSubtreeStream stream_table_ref=new RewriteRuleSubtreeStream(adaptor,"rule table_ref");
		RewriteRuleSubtreeStream stream_join_condition_on=new RewriteRuleSubtreeStream(adaptor,"rule join_condition_on");
		try { DebugEnterRule(GrammarFileName, "table_factor");
		DebugLocation(313, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:314:2: ( simple_table_ref_alias ( index_hint_list )? -> ^( TABLE simple_table_ref_alias ( index_hint_list )? ) | LPAREN select_inner RPAREN ( AS )? ident -> ^( SUBSELECT select_inner ^( ALIAS ident ) ) | LPAREN table_ref ( COMMA table_ref )* RPAREN -> ^( TABLE ( table_ref )+ ) | LCURLY ident t1= table_ref LEFT OUTER JOIN t2= table_ref join_condition_on RCURLY -> ^( ident $t1 $t2 join_condition_on ) | DUAL -> ^( DUAL ) )
			int alt94=5;
			try { DebugEnterDecision(94, false);
			int LA94_0 = input.LA(1);

			if ((LA94_0==ACTION||(LA94_0>=ADDDATE && LA94_0<=ALGORITHM)||LA94_0==ANY||LA94_0==ASCII||(LA94_0>=AT && LA94_0<=BACKUP)||LA94_0==BEGIN||(LA94_0>=BINLOG && LA94_0<=BIT)||(LA94_0>=BLOCK && LA94_0<=BOOLEAN)||LA94_0==BTREE||(LA94_0>=BYTE && LA94_0<=CACHE)||LA94_0==CASCADED||LA94_0==CHAIN||LA94_0==CHANGED||LA94_0==CHARSET||(LA94_0>=CHECKSUM && LA94_0<=CODE)||LA94_0==COLLATION||LA94_0==COLUMNS||LA94_0==COMMENT||(LA94_0>=COMMIT && LA94_0<=CONCURRENT)||(LA94_0>=CONNECTION && LA94_0<=CONSISTENT)||(LA94_0>=CONTAINS && LA94_0<=CONTEXT)||LA94_0==CONTRIBUTORS||LA94_0==CPU||LA94_0==CUBE||LA94_0==DATA||(LA94_0>=DATAFILE && LA94_0<=DATETIME)||LA94_0==DAY||LA94_0==DEALLOCATE||LA94_0==DEFINER||LA94_0==DELAY_KEY_WRITE||LA94_0==DES_KEY_FILE||(LA94_0>=DIRECTORY && LA94_0<=DISK)||LA94_0==DO||(LA94_0>=DUMPFILE && LA94_0<=DYNAMIC)||LA94_0==ENABLE||(LA94_0>=END && LA94_0<=ENUM)||(LA94_0>=ERRORS && LA94_0<=ESCAPE)||(LA94_0>=EVENT && LA94_0<=EXECUTE)||LA94_0==EXPANSION||(LA94_0>=EXTENDED && LA94_0<=EXTENT_SIZE)||(LA94_0>=FAST && LA94_0<=FAULTS)||(LA94_0>=FIELDS && LA94_0<=FIXED)||LA94_0==FLUSH||(LA94_0>=FOUND && LA94_0<=FRAC_SECOND)||LA94_0==FULL||(LA94_0>=FUNCTION && LA94_0<=GLOBAL)||LA94_0==GRANTS||LA94_0==GROUP||(LA94_0>=HANDLER && LA94_0<=HASH)||LA94_0==HELP||(LA94_0>=HOST && LA94_0<=HOUR)||(LA94_0>=ID && LA94_0<=IDENTIFIED)||LA94_0==IMPORT||LA94_0==INDEXES||LA94_0==INITIAL_SIZE||LA94_0==INNOBASE||(LA94_0>=INSERT_METHOD && LA94_0<=INSTALL)||(LA94_0>=INVOKER && LA94_0<=IPC)||(LA94_0>=ISOLATION && LA94_0<=ISSUER)||LA94_0==KEY_BLOCK_SIZE||(LA94_0>=LABEL && LA94_0<=LAST)||LA94_0==LEAVES||LA94_0==LESS||LA94_0==LEVEL||(LA94_0>=LINESTRING && LA94_0<=LIST)||LA94_0==LOCAL||(LA94_0>=LOCKS && LA94_0<=LOGFILE)||LA94_0==LOGS||(LA94_0>=MASTER && LA94_0<=MASTER_SSL_KEY)||LA94_0==MASTER_USER||(LA94_0>=MAX_CONNECTIONS_PER_HOUR && LA94_0<=MEDIUM)||(LA94_0>=MEMORY && LA94_0<=MICROSECOND)||LA94_0==MIGRATE||LA94_0==MINUTE||LA94_0==MIN_ROWS||LA94_0==MODE||LA94_0==MODIFY||LA94_0==MONTH||(LA94_0>=MULTILINESTRING && LA94_0<=NATIONAL)||(LA94_0>=NCHAR && LA94_0<=NONE)||LA94_0==NO_WAIT||(LA94_0>=NVARCHAR && LA94_0<=OLD_PASSWORD)||(LA94_0>=ONE && LA94_0<=OPEN)||LA94_0==OPTIONS||(LA94_0>=OWNER && LA94_0<=PLUGINS)||(LA94_0>=POINT && LA94_0<=PORT)||(LA94_0>=PREPARE && LA94_0<=PREV)||LA94_0==PRIVILEGES||(LA94_0>=PROCESS && LA94_0<=PROFILES)||(LA94_0>=QUARTER && LA94_0<=QUICK)||(LA94_0>=REBUILD && LA94_0<=REDUNDANT)||(LA94_0>=RELAY_LOG_FILE && LA94_0<=RELAY_THREAD)||(LA94_0>=RELOAD && LA94_0<=REMOVE)||(LA94_0>=REORGANIZE && LA94_0<=REPAIR)||LA94_0==REPEATABLE||LA94_0==REPLICATION||(LA94_0>=RESET && LA94_0<=RESTORE)||LA94_0==RESUME||LA94_0==RETURNS||(LA94_0>=ROLLBACK && LA94_0<=ROW_FORMAT)||(LA94_0>=RTREE && LA94_0<=SCHEDULE)||LA94_0==SECOND||LA94_0==SECURITY||(LA94_0>=SERIAL && LA94_0<=SESSION)||LA94_0==SHARE||(LA94_0>=SHUTDOWN && LA94_0<=SLAVE)||(LA94_0>=SNAPSHOT && LA94_0<=SOCKET)||(LA94_0>=SONAME && LA94_0<=SOURCE)||(LA94_0>=SQL_BUFFER_RESULT && LA94_0<=SQL_CACHE)||LA94_0==SQL_NO_CACHE||LA94_0==SQL_THREAD||LA94_0==START||(LA94_0>=STARTS && LA94_0<=STATUS)||(LA94_0>=STOP && LA94_0<=STORAGE)||(LA94_0>=STRING_KEYWORD && LA94_0<=SUBPARTITIONS)||(LA94_0>=SUPER && LA94_0<=SWITCHES)||(LA94_0>=TABLES && LA94_0<=TEMPTABLE)||(LA94_0>=TEXT && LA94_0<=THAN)||(LA94_0>=TIME && LA94_0<=TIMESTAMP_DIFF)||(LA94_0>=TRANSACTION && LA94_0<=TRANSACTIONAL)||LA94_0==TRIGGERS||(LA94_0>=TRUNCATE && LA94_0<=UNDEFINED)||(LA94_0>=UNDOFILE && LA94_0<=UNINSTALL)||LA94_0==UNKNOWN||LA94_0==UNTIL||LA94_0==UPGRADE||LA94_0==USER||LA94_0==USE_FRM||LA94_0==VALUE||LA94_0==VARIABLES||(LA94_0>=VIEW && LA94_0<=WEEK)||(LA94_0>=WORK && LA94_0<=WRAPPER)||(LA94_0>=X509 && LA94_0<=XA)||LA94_0==YEAR))
			{
				alt94 = 1;
			}
			else if ((LA94_0==LPAREN))
			{
				int LA94_2 = input.LA(2);

				if ((LA94_2==SELECT))
				{
					alt94 = 2;
				}
				else if ((LA94_2==ACTION||(LA94_2>=ADDDATE && LA94_2<=ALGORITHM)||LA94_2==ANY||LA94_2==ASCII||(LA94_2>=AT && LA94_2<=BACKUP)||LA94_2==BEGIN||(LA94_2>=BINLOG && LA94_2<=BIT)||(LA94_2>=BLOCK && LA94_2<=BOOLEAN)||LA94_2==BTREE||(LA94_2>=BYTE && LA94_2<=CACHE)||LA94_2==CASCADED||LA94_2==CHAIN||LA94_2==CHANGED||LA94_2==CHARSET||(LA94_2>=CHECKSUM && LA94_2<=CODE)||LA94_2==COLLATION||LA94_2==COLUMNS||LA94_2==COMMENT||(LA94_2>=COMMIT && LA94_2<=CONCURRENT)||(LA94_2>=CONNECTION && LA94_2<=CONSISTENT)||(LA94_2>=CONTAINS && LA94_2<=CONTEXT)||LA94_2==CONTRIBUTORS||LA94_2==CPU||LA94_2==CUBE||LA94_2==DATA||(LA94_2>=DATAFILE && LA94_2<=DATETIME)||LA94_2==DAY||LA94_2==DEALLOCATE||LA94_2==DEFINER||LA94_2==DELAY_KEY_WRITE||LA94_2==DES_KEY_FILE||(LA94_2>=DIRECTORY && LA94_2<=DISK)||LA94_2==DO||(LA94_2>=DUAL && LA94_2<=DYNAMIC)||LA94_2==ENABLE||(LA94_2>=END && LA94_2<=ENUM)||(LA94_2>=ERRORS && LA94_2<=ESCAPE)||(LA94_2>=EVENT && LA94_2<=EXECUTE)||LA94_2==EXPANSION||(LA94_2>=EXTENDED && LA94_2<=EXTENT_SIZE)||(LA94_2>=FAST && LA94_2<=FAULTS)||(LA94_2>=FIELDS && LA94_2<=FIXED)||LA94_2==FLUSH||(LA94_2>=FOUND && LA94_2<=FRAC_SECOND)||LA94_2==FULL||(LA94_2>=FUNCTION && LA94_2<=GLOBAL)||LA94_2==GRANTS||LA94_2==GROUP||(LA94_2>=HANDLER && LA94_2<=HASH)||LA94_2==HELP||(LA94_2>=HOST && LA94_2<=HOUR)||(LA94_2>=ID && LA94_2<=IDENTIFIED)||LA94_2==IMPORT||LA94_2==INDEXES||LA94_2==INITIAL_SIZE||LA94_2==INNOBASE||(LA94_2>=INSERT_METHOD && LA94_2<=INSTALL)||(LA94_2>=INVOKER && LA94_2<=IPC)||(LA94_2>=ISOLATION && LA94_2<=ISSUER)||LA94_2==KEY_BLOCK_SIZE||(LA94_2>=LABEL && LA94_2<=LCURLY)||LA94_2==LEAVES||LA94_2==LESS||LA94_2==LEVEL||(LA94_2>=LINESTRING && LA94_2<=LIST)||LA94_2==LOCAL||(LA94_2>=LOCKS && LA94_2<=LOGFILE)||LA94_2==LOGS||(LA94_2>=LPAREN && LA94_2<=MASTER_SSL_KEY)||LA94_2==MASTER_USER||(LA94_2>=MAX_CONNECTIONS_PER_HOUR && LA94_2<=MEDIUM)||(LA94_2>=MEMORY && LA94_2<=MICROSECOND)||LA94_2==MIGRATE||LA94_2==MINUTE||LA94_2==MIN_ROWS||LA94_2==MODE||LA94_2==MODIFY||LA94_2==MONTH||(LA94_2>=MULTILINESTRING && LA94_2<=NATIONAL)||(LA94_2>=NCHAR && LA94_2<=NONE)||LA94_2==NO_WAIT||(LA94_2>=NVARCHAR && LA94_2<=OLD_PASSWORD)||(LA94_2>=ONE && LA94_2<=OPEN)||LA94_2==OPTIONS||(LA94_2>=OWNER && LA94_2<=PLUGINS)||(LA94_2>=POINT && LA94_2<=PORT)||(LA94_2>=PREPARE && LA94_2<=PREV)||LA94_2==PRIVILEGES||(LA94_2>=PROCESS && LA94_2<=PROFILES)||(LA94_2>=QUARTER && LA94_2<=QUICK)||(LA94_2>=REBUILD && LA94_2<=REDUNDANT)||(LA94_2>=RELAY_LOG_FILE && LA94_2<=RELAY_THREAD)||(LA94_2>=RELOAD && LA94_2<=REMOVE)||(LA94_2>=REORGANIZE && LA94_2<=REPAIR)||LA94_2==REPEATABLE||LA94_2==REPLICATION||(LA94_2>=RESET && LA94_2<=RESTORE)||LA94_2==RESUME||LA94_2==RETURNS||(LA94_2>=ROLLBACK && LA94_2<=ROW_FORMAT)||(LA94_2>=RTREE && LA94_2<=SCHEDULE)||LA94_2==SECOND||LA94_2==SECURITY||(LA94_2>=SERIAL && LA94_2<=SESSION)||LA94_2==SHARE||(LA94_2>=SHUTDOWN && LA94_2<=SLAVE)||(LA94_2>=SNAPSHOT && LA94_2<=SOCKET)||(LA94_2>=SONAME && LA94_2<=SOURCE)||(LA94_2>=SQL_BUFFER_RESULT && LA94_2<=SQL_CACHE)||LA94_2==SQL_NO_CACHE||LA94_2==SQL_THREAD||LA94_2==START||(LA94_2>=STARTS && LA94_2<=STATUS)||(LA94_2>=STOP && LA94_2<=STORAGE)||(LA94_2>=STRING_KEYWORD && LA94_2<=SUBPARTITIONS)||(LA94_2>=SUPER && LA94_2<=SWITCHES)||(LA94_2>=TABLES && LA94_2<=TEMPTABLE)||(LA94_2>=TEXT && LA94_2<=THAN)||(LA94_2>=TIME && LA94_2<=TIMESTAMP_DIFF)||(LA94_2>=TRANSACTION && LA94_2<=TRANSACTIONAL)||LA94_2==TRIGGERS||(LA94_2>=TRUNCATE && LA94_2<=UNDEFINED)||(LA94_2>=UNDOFILE && LA94_2<=UNINSTALL)||LA94_2==UNKNOWN||LA94_2==UNTIL||LA94_2==UPGRADE||LA94_2==USER||LA94_2==USE_FRM||LA94_2==VALUE||LA94_2==VARIABLES||(LA94_2>=VIEW && LA94_2<=WEEK)||(LA94_2>=WORK && LA94_2<=WRAPPER)||(LA94_2>=X509 && LA94_2<=XA)||LA94_2==YEAR))
				{
					alt94 = 3;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 94, 2, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}
			else if ((LA94_0==LCURLY))
			{
				alt94 = 4;
			}
			else if ((LA94_0==DUAL))
			{
				alt94 = 5;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 94, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(94); }
			switch (alt94)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:314:4: simple_table_ref_alias ( index_hint_list )?
				{
				DebugLocation(314, 4);
				PushFollow(Follow._simple_table_ref_alias_in_table_factor3278);
				simple_table_ref_alias222=simple_table_ref_alias();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_simple_table_ref_alias.Add(simple_table_ref_alias222.Tree);
				DebugLocation(314, 27);
				// MySQL51Parser.g3:314:27: ( index_hint_list )?
				int alt91=2;
				try { DebugEnterSubRule(91);
				try { DebugEnterDecision(91, false);
				int LA91_0 = input.LA(1);

				if ((LA91_0==FORCE||LA91_0==IGNORE||LA91_0==USE))
				{
					alt91 = 1;
				}
				} finally { DebugExitDecision(91); }
				switch (alt91)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:314:27: index_hint_list
					{
					DebugLocation(314, 27);
					PushFollow(Follow._index_hint_list_in_table_factor3280);
					index_hint_list223=index_hint_list();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_index_hint_list.Add(index_hint_list223.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(91); }

				DebugLocation(314, 44);
				if (state.backtracking == 0)
				{
					table_references_stack.Peek().count++;
				}


				{
				// AST REWRITE
				// elements: simple_table_ref_alias, index_hint_list
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 314:74: -> ^( TABLE simple_table_ref_alias ( index_hint_list )? )
				{
					DebugLocation(314, 77);
					// MySQL51Parser.g3:314:77: ^( TABLE simple_table_ref_alias ( index_hint_list )? )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(314, 79);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(TABLE, "TABLE"), root_1);

					DebugLocation(314, 85);
					adaptor.AddChild(root_1, stream_simple_table_ref_alias.NextTree());
					DebugLocation(314, 108);
					// MySQL51Parser.g3:314:108: ( index_hint_list )?
					if (stream_index_hint_list.HasNext)
					{
						DebugLocation(314, 108);
						adaptor.AddChild(root_1, stream_index_hint_list.NextTree());

					}
					stream_index_hint_list.Reset();

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:315:4: LPAREN select_inner RPAREN ( AS )? ident
				{
				DebugLocation(315, 4);
				LPAREN224=(IToken)Match(input,LPAREN,Follow._LPAREN_in_table_factor3299); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN224);

				DebugLocation(315, 11);
				PushFollow(Follow._select_inner_in_table_factor3301);
				select_inner225=select_inner();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_select_inner.Add(select_inner225.Tree);
				DebugLocation(315, 24);
				RPAREN226=(IToken)Match(input,RPAREN,Follow._RPAREN_in_table_factor3303); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN226);

				DebugLocation(315, 31);
				// MySQL51Parser.g3:315:31: ( AS )?
				int alt92=2;
				try { DebugEnterSubRule(92);
				try { DebugEnterDecision(92, false);
				int LA92_0 = input.LA(1);

				if ((LA92_0==AS))
				{
					alt92 = 1;
				}
				} finally { DebugExitDecision(92); }
				switch (alt92)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:315:31: AS
					{
					DebugLocation(315, 31);
					AS227=(IToken)Match(input,AS,Follow._AS_in_table_factor3305); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_AS.Add(AS227);


					}
					break;

				}
				} finally { DebugExitSubRule(92); }

				DebugLocation(315, 35);
				PushFollow(Follow._ident_in_table_factor3308);
				ident228=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(ident228.Tree);
				DebugLocation(315, 42);
				if (state.backtracking == 0)
				{
					table_references_stack.Peek().count++;
				}


				{
				// AST REWRITE
				// elements: select_inner, ident
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 315:72: -> ^( SUBSELECT select_inner ^( ALIAS ident ) )
				{
					DebugLocation(315, 75);
					// MySQL51Parser.g3:315:75: ^( SUBSELECT select_inner ^( ALIAS ident ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(315, 77);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(SUBSELECT, "SUBSELECT"), root_1);

					DebugLocation(315, 87);
					adaptor.AddChild(root_1, stream_select_inner.NextTree());
					DebugLocation(315, 100);
					// MySQL51Parser.g3:315:100: ^( ALIAS ident )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(315, 102);
					root_2 = (object)adaptor.BecomeRoot((object)adaptor.Create(ALIAS, "ALIAS"), root_2);

					DebugLocation(315, 108);
					adaptor.AddChild(root_2, stream_ident.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:316:9: LPAREN table_ref ( COMMA table_ref )* RPAREN
				{
				DebugLocation(316, 9);
				LPAREN229=(IToken)Match(input,LPAREN,Follow._LPAREN_in_table_factor3335); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN229);

				DebugLocation(316, 16);
				PushFollow(Follow._table_ref_in_table_factor3337);
				table_ref230=table_ref();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_table_ref.Add(table_ref230.Tree);
				DebugLocation(316, 26);
				if (state.backtracking == 0)
				{
					table_references_stack.Peek().count++;
				}
				DebugLocation(316, 56);
				// MySQL51Parser.g3:316:56: ( COMMA table_ref )*
				try { DebugEnterSubRule(93);
				while (true)
				{
					int alt93=2;
					try { DebugEnterDecision(93, false);
					int LA93_0 = input.LA(1);

					if ((LA93_0==COMMA))
					{
						alt93 = 1;
					}


					} finally { DebugExitDecision(93); }
					switch ( alt93 )
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:316:57: COMMA table_ref
						{
						DebugLocation(316, 57);
						COMMA231=(IToken)Match(input,COMMA,Follow._COMMA_in_table_factor3342); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_COMMA.Add(COMMA231);

						DebugLocation(316, 63);
						PushFollow(Follow._table_ref_in_table_factor3344);
						table_ref232=table_ref();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_table_ref.Add(table_ref232.Tree);
						DebugLocation(316, 73);
						if (state.backtracking == 0)
						{
							table_references_stack.Peek().count++;
						}

						}
						break;

					default:
						goto loop93;
					}
				}

				loop93:
					;

				} finally { DebugExitSubRule(93); }

				DebugLocation(316, 106);
				RPAREN233=(IToken)Match(input,RPAREN,Follow._RPAREN_in_table_factor3351); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN233);



				{
				// AST REWRITE
				// elements: table_ref
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 316:115: -> ^( TABLE ( table_ref )+ )
				{
					DebugLocation(316, 118);
					// MySQL51Parser.g3:316:118: ^( TABLE ( table_ref )+ )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(316, 120);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(TABLE, "TABLE"), root_1);

					DebugLocation(316, 126);
					if (!(stream_table_ref.HasNext))
					{
						throw new RewriteEarlyExitException();
					}
					while ( stream_table_ref.HasNext )
					{
						DebugLocation(316, 126);
						adaptor.AddChild(root_1, stream_table_ref.NextTree());

					}
					stream_table_ref.Reset();

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:318:4: LCURLY ident t1= table_ref LEFT OUTER JOIN t2= table_ref join_condition_on RCURLY
				{
				DebugLocation(318, 4);
				LCURLY234=(IToken)Match(input,LCURLY,Follow._LCURLY_in_table_factor3370); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LCURLY.Add(LCURLY234);

				DebugLocation(318, 11);
				PushFollow(Follow._ident_in_table_factor3372);
				ident235=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(ident235.Tree);
				DebugLocation(318, 19);
				PushFollow(Follow._table_ref_in_table_factor3376);
				t1=table_ref();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_table_ref.Add(t1.Tree);
				DebugLocation(318, 30);
				LEFT236=(IToken)Match(input,LEFT,Follow._LEFT_in_table_factor3378); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LEFT.Add(LEFT236);

				DebugLocation(318, 35);
				OUTER237=(IToken)Match(input,OUTER,Follow._OUTER_in_table_factor3380); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_OUTER.Add(OUTER237);

				DebugLocation(318, 41);
				JOIN238=(IToken)Match(input,JOIN,Follow._JOIN_in_table_factor3382); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_JOIN.Add(JOIN238);

				DebugLocation(318, 48);
				PushFollow(Follow._table_ref_in_table_factor3386);
				t2=table_ref();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_table_ref.Add(t2.Tree);
				DebugLocation(318, 59);
				PushFollow(Follow._join_condition_on_in_table_factor3388);
				join_condition_on239=join_condition_on();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_join_condition_on.Add(join_condition_on239.Tree);
				DebugLocation(318, 77);
				RCURLY240=(IToken)Match(input,RCURLY,Follow._RCURLY_in_table_factor3390); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RCURLY.Add(RCURLY240);



				{
				// AST REWRITE
				// elements: ident, t1, t2, join_condition_on
				// token labels: 
				// rule labels: t1, t2, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_t1=new RewriteRuleSubtreeStream(adaptor,"rule t1",t1!=null?t1.Tree:null);
				RewriteRuleSubtreeStream stream_t2=new RewriteRuleSubtreeStream(adaptor,"rule t2",t2!=null?t2.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 319:4: -> ^( ident $t1 $t2 join_condition_on )
				{
					DebugLocation(319, 7);
					// MySQL51Parser.g3:319:7: ^( ident $t1 $t2 join_condition_on )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(319, 9);
					root_1 = (object)adaptor.BecomeRoot(stream_ident.NextNode(), root_1);

					DebugLocation(319, 16);
					adaptor.AddChild(root_1, stream_t1.NextTree());
					DebugLocation(319, 20);
					adaptor.AddChild(root_1, stream_t2.NextTree());
					DebugLocation(319, 23);
					adaptor.AddChild(root_1, stream_join_condition_on.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 5:
				DebugEnterAlt(5);
				// MySQL51Parser.g3:320:4: DUAL
				{
				DebugLocation(320, 4);
				DUAL241=(IToken)Match(input,DUAL,Follow._DUAL_in_table_factor3413); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_DUAL.Add(DUAL241);



				{
				// AST REWRITE
				// elements: DUAL
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 320:16: -> ^( DUAL )
				{
					DebugLocation(320, 19);
					// MySQL51Parser.g3:320:19: ^( DUAL )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(320, 21);
					root_1 = (object)adaptor.BecomeRoot(stream_DUAL.NextNode(), root_1);

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("table_factor", 25);
			LeaveRule("table_factor", 25);
			LeaveRule_table_factor();
		}
		DebugLocation(321, 1);
		} finally { DebugExitRule(GrammarFileName, "table_factor"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "table_factor"

	private sealed partial class join_condition_on_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public join_condition_on_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_join_condition_on();
	partial void LeaveRule_join_condition_on();

	// $ANTLR start "join_condition_on"
	// MySQL51Parser.g3:323:1: join_condition_on : ON where_condition -> ^( ON where_condition ) ;
	[GrammarRule("join_condition_on")]
	private MySQL51Parser.join_condition_on_return join_condition_on()
	{
		EnterRule_join_condition_on();
		EnterRule("join_condition_on", 26);
		TraceIn("join_condition_on", 26);
		MySQL51Parser.join_condition_on_return retval = new MySQL51Parser.join_condition_on_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken ON242 = default(IToken);
		MySQL51Parser.where_condition_return where_condition243 = default(MySQL51Parser.where_condition_return);

		object ON242_tree = default(object);
		RewriteRuleITokenStream stream_ON=new RewriteRuleITokenStream(adaptor,"token ON");
		RewriteRuleSubtreeStream stream_where_condition=new RewriteRuleSubtreeStream(adaptor,"rule where_condition");
		try { DebugEnterRule(GrammarFileName, "join_condition_on");
		DebugLocation(323, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:324:2: ( ON where_condition -> ^( ON where_condition ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:324:4: ON where_condition
			{
			DebugLocation(324, 4);
			ON242=(IToken)Match(input,ON,Follow._ON_in_join_condition_on3437); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_ON.Add(ON242);

			DebugLocation(324, 7);
			PushFollow(Follow._where_condition_in_join_condition_on3439);
			where_condition243=where_condition();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_where_condition.Add(where_condition243.Tree);


			{
			// AST REWRITE
			// elements: ON, where_condition
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 324:24: -> ^( ON where_condition )
			{
				DebugLocation(324, 27);
				// MySQL51Parser.g3:324:27: ^( ON where_condition )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(324, 29);
				root_1 = (object)adaptor.BecomeRoot(stream_ON.NextNode(), root_1);

				DebugLocation(324, 32);
				adaptor.AddChild(root_1, stream_where_condition.NextTree());

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("join_condition_on", 26);
			LeaveRule("join_condition_on", 26);
			LeaveRule_join_condition_on();
		}
		DebugLocation(325, 1);
		} finally { DebugExitRule(GrammarFileName, "join_condition_on"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "join_condition_on"

	private sealed partial class join_condition_both_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public join_condition_both_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_join_condition_both();
	partial void LeaveRule_join_condition_both();

	// $ANTLR start "join_condition_both"
	// MySQL51Parser.g3:327:1: join_condition_both : ( join_condition_on | USING LPAREN fields+= ident ( COMMA fields+= ident )* RPAREN -> ^( USING ( $fields)+ ) );
	[GrammarRule("join_condition_both")]
	private MySQL51Parser.join_condition_both_return join_condition_both()
	{
		EnterRule_join_condition_both();
		EnterRule("join_condition_both", 27);
		TraceIn("join_condition_both", 27);
		MySQL51Parser.join_condition_both_return retval = new MySQL51Parser.join_condition_both_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken USING245 = default(IToken);
		IToken LPAREN246 = default(IToken);
		IToken COMMA247 = default(IToken);
		IToken RPAREN248 = default(IToken);
		List<object> list_fields = null;
		MySQL51Parser.join_condition_on_return join_condition_on244 = default(MySQL51Parser.join_condition_on_return);
		MySQL51Parser.ident_return fields = default(MySQL51Parser.ident_return);
		object USING245_tree = default(object);
		object LPAREN246_tree = default(object);
		object COMMA247_tree = default(object);
		object RPAREN248_tree = default(object);
		RewriteRuleITokenStream stream_USING=new RewriteRuleITokenStream(adaptor,"token USING");
		RewriteRuleITokenStream stream_LPAREN=new RewriteRuleITokenStream(adaptor,"token LPAREN");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleITokenStream stream_RPAREN=new RewriteRuleITokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_ident=new RewriteRuleSubtreeStream(adaptor,"rule ident");
		try { DebugEnterRule(GrammarFileName, "join_condition_both");
		DebugLocation(327, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:328:2: ( join_condition_on | USING LPAREN fields+= ident ( COMMA fields+= ident )* RPAREN -> ^( USING ( $fields)+ ) )
			int alt96=2;
			try { DebugEnterDecision(96, false);
			int LA96_0 = input.LA(1);

			if ((LA96_0==ON))
			{
				alt96 = 1;
			}
			else if ((LA96_0==USING))
			{
				alt96 = 2;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 96, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(96); }
			switch (alt96)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:328:4: join_condition_on
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(328, 4);
				PushFollow(Follow._join_condition_on_in_join_condition_both3459);
				join_condition_on244=join_condition_on();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, join_condition_on244.Tree);

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:329:4: USING LPAREN fields+= ident ( COMMA fields+= ident )* RPAREN
				{
				DebugLocation(329, 4);
				USING245=(IToken)Match(input,USING,Follow._USING_in_join_condition_both3464); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_USING.Add(USING245);

				DebugLocation(329, 10);
				LPAREN246=(IToken)Match(input,LPAREN,Follow._LPAREN_in_join_condition_both3466); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN246);

				DebugLocation(329, 23);
				PushFollow(Follow._ident_in_join_condition_both3470);
				fields=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(fields.Tree);
				if (list_fields==null) list_fields=new List<object>();
				list_fields.Add(fields.Tree);

				DebugLocation(329, 31);
				// MySQL51Parser.g3:329:31: ( COMMA fields+= ident )*
				try { DebugEnterSubRule(95);
				while (true)
				{
					int alt95=2;
					try { DebugEnterDecision(95, false);
					int LA95_0 = input.LA(1);

					if ((LA95_0==COMMA))
					{
						alt95 = 1;
					}


					} finally { DebugExitDecision(95); }
					switch ( alt95 )
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:329:32: COMMA fields+= ident
						{
						DebugLocation(329, 32);
						COMMA247=(IToken)Match(input,COMMA,Follow._COMMA_in_join_condition_both3473); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_COMMA.Add(COMMA247);

						DebugLocation(329, 44);
						PushFollow(Follow._ident_in_join_condition_both3477);
						fields=ident();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_ident.Add(fields.Tree);
						if (list_fields==null) list_fields=new List<object>();
						list_fields.Add(fields.Tree);


						}
						break;

					default:
						goto loop95;
					}
				}

				loop95:
					;

				} finally { DebugExitSubRule(95); }

				DebugLocation(329, 54);
				RPAREN248=(IToken)Match(input,RPAREN,Follow._RPAREN_in_join_condition_both3481); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN248);



				{
				// AST REWRITE
				// elements: USING, fields
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: fields
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);
				RewriteRuleSubtreeStream stream_fields=new RewriteRuleSubtreeStream(adaptor,"token fields",list_fields);
				root_0 = (object)adaptor.Nil();
				// 329:62: -> ^( USING ( $fields)+ )
				{
					DebugLocation(329, 65);
					// MySQL51Parser.g3:329:65: ^( USING ( $fields)+ )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(329, 67);
					root_1 = (object)adaptor.BecomeRoot(stream_USING.NextNode(), root_1);

					DebugLocation(329, 74);
					if (!(stream_fields.HasNext))
					{
						throw new RewriteEarlyExitException();
					}
					while ( stream_fields.HasNext )
					{
						DebugLocation(329, 74);
						adaptor.AddChild(root_1, stream_fields.NextTree());

					}
					stream_fields.Reset();

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("join_condition_both", 27);
			LeaveRule("join_condition_both", 27);
			LeaveRule_join_condition_both();
		}
		DebugLocation(330, 1);
		} finally { DebugExitRule(GrammarFileName, "join_condition_both"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "join_condition_both"

	private sealed partial class simple_table_ref_no_alias_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public simple_table_ref_no_alias_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_simple_table_ref_no_alias();
	partial void LeaveRule_simple_table_ref_no_alias();

	// $ANTLR start "simple_table_ref_no_alias"
	// MySQL51Parser.g3:332:1: simple_table_ref_no_alias : first= ident ( DOT second= ident )? -> $first ( $second)? ;
	[GrammarRule("simple_table_ref_no_alias")]
	private MySQL51Parser.simple_table_ref_no_alias_return simple_table_ref_no_alias()
	{
		EnterRule_simple_table_ref_no_alias();
		EnterRule("simple_table_ref_no_alias", 28);
		TraceIn("simple_table_ref_no_alias", 28);
		MySQL51Parser.simple_table_ref_no_alias_return retval = new MySQL51Parser.simple_table_ref_no_alias_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken DOT249 = default(IToken);
		MySQL51Parser.ident_return first = default(MySQL51Parser.ident_return);
		MySQL51Parser.ident_return second = default(MySQL51Parser.ident_return);

		object DOT249_tree = default(object);
		RewriteRuleITokenStream stream_DOT=new RewriteRuleITokenStream(adaptor,"token DOT");
		RewriteRuleSubtreeStream stream_ident=new RewriteRuleSubtreeStream(adaptor,"rule ident");
		try { DebugEnterRule(GrammarFileName, "simple_table_ref_no_alias");
		DebugLocation(332, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:333:2: (first= ident ( DOT second= ident )? -> $first ( $second)? )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:333:4: first= ident ( DOT second= ident )?
			{
			DebugLocation(333, 9);
			PushFollow(Follow._ident_in_simple_table_ref_no_alias3505);
			first=ident();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_ident.Add(first.Tree);
			DebugLocation(333, 16);
			// MySQL51Parser.g3:333:16: ( DOT second= ident )?
			int alt97=2;
			try { DebugEnterSubRule(97);
			try { DebugEnterDecision(97, false);
			int LA97_0 = input.LA(1);

			if ((LA97_0==DOT))
			{
				int LA97_1 = input.LA(2);

				if ((LA97_1==ACTION||(LA97_1>=ADDDATE && LA97_1<=ALGORITHM)||LA97_1==ANY||LA97_1==ASCII||(LA97_1>=AT && LA97_1<=BACKUP)||LA97_1==BEGIN||(LA97_1>=BINLOG && LA97_1<=BIT)||(LA97_1>=BLOCK && LA97_1<=BOOLEAN)||LA97_1==BTREE||(LA97_1>=BYTE && LA97_1<=CACHE)||LA97_1==CASCADED||LA97_1==CHAIN||LA97_1==CHANGED||LA97_1==CHARSET||(LA97_1>=CHECKSUM && LA97_1<=CODE)||LA97_1==COLLATION||LA97_1==COLUMNS||LA97_1==COMMENT||(LA97_1>=COMMIT && LA97_1<=CONCURRENT)||(LA97_1>=CONNECTION && LA97_1<=CONSISTENT)||(LA97_1>=CONTAINS && LA97_1<=CONTEXT)||LA97_1==CONTRIBUTORS||LA97_1==CPU||LA97_1==CUBE||LA97_1==DATA||(LA97_1>=DATAFILE && LA97_1<=DATETIME)||LA97_1==DAY||LA97_1==DEALLOCATE||LA97_1==DEFINER||LA97_1==DELAY_KEY_WRITE||LA97_1==DES_KEY_FILE||(LA97_1>=DIRECTORY && LA97_1<=DISK)||LA97_1==DO||(LA97_1>=DUMPFILE && LA97_1<=DYNAMIC)||LA97_1==ENABLE||(LA97_1>=END && LA97_1<=ENUM)||(LA97_1>=ERRORS && LA97_1<=ESCAPE)||(LA97_1>=EVENT && LA97_1<=EXECUTE)||LA97_1==EXPANSION||(LA97_1>=EXTENDED && LA97_1<=EXTENT_SIZE)||(LA97_1>=FAST && LA97_1<=FAULTS)||(LA97_1>=FIELDS && LA97_1<=FIXED)||LA97_1==FLUSH||(LA97_1>=FOUND && LA97_1<=FRAC_SECOND)||LA97_1==FULL||(LA97_1>=FUNCTION && LA97_1<=GLOBAL)||LA97_1==GRANTS||LA97_1==GROUP||(LA97_1>=HANDLER && LA97_1<=HASH)||LA97_1==HELP||(LA97_1>=HOST && LA97_1<=HOUR)||(LA97_1>=ID && LA97_1<=IDENTIFIED)||LA97_1==IMPORT||LA97_1==INDEXES||LA97_1==INITIAL_SIZE||LA97_1==INNOBASE||(LA97_1>=INSERT_METHOD && LA97_1<=INSTALL)||(LA97_1>=INVOKER && LA97_1<=IPC)||(LA97_1>=ISOLATION && LA97_1<=ISSUER)||LA97_1==KEY_BLOCK_SIZE||(LA97_1>=LABEL && LA97_1<=LAST)||LA97_1==LEAVES||LA97_1==LESS||LA97_1==LEVEL||(LA97_1>=LINESTRING && LA97_1<=LIST)||LA97_1==LOCAL||(LA97_1>=LOCKS && LA97_1<=LOGFILE)||LA97_1==LOGS||(LA97_1>=MASTER && LA97_1<=MASTER_SSL_KEY)||LA97_1==MASTER_USER||(LA97_1>=MAX_CONNECTIONS_PER_HOUR && LA97_1<=MEDIUM)||(LA97_1>=MEMORY && LA97_1<=MICROSECOND)||LA97_1==MIGRATE||LA97_1==MINUTE||LA97_1==MIN_ROWS||LA97_1==MODE||LA97_1==MODIFY||LA97_1==MONTH||(LA97_1>=MULTILINESTRING && LA97_1<=NATIONAL)||(LA97_1>=NCHAR && LA97_1<=NONE)||LA97_1==NO_WAIT||(LA97_1>=NVARCHAR && LA97_1<=OLD_PASSWORD)||(LA97_1>=ONE && LA97_1<=OPEN)||LA97_1==OPTIONS||(LA97_1>=OWNER && LA97_1<=PLUGINS)||(LA97_1>=POINT && LA97_1<=PORT)||(LA97_1>=PREPARE && LA97_1<=PREV)||LA97_1==PRIVILEGES||(LA97_1>=PROCESS && LA97_1<=PROFILES)||(LA97_1>=QUARTER && LA97_1<=QUICK)||(LA97_1>=REBUILD && LA97_1<=REDUNDANT)||(LA97_1>=RELAY_LOG_FILE && LA97_1<=RELAY_THREAD)||(LA97_1>=RELOAD && LA97_1<=REMOVE)||(LA97_1>=REORGANIZE && LA97_1<=REPAIR)||LA97_1==REPEATABLE||LA97_1==REPLICATION||(LA97_1>=RESET && LA97_1<=RESTORE)||LA97_1==RESUME||LA97_1==RETURNS||(LA97_1>=ROLLBACK && LA97_1<=ROW_FORMAT)||(LA97_1>=RTREE && LA97_1<=SCHEDULE)||LA97_1==SECOND||LA97_1==SECURITY||(LA97_1>=SERIAL && LA97_1<=SESSION)||LA97_1==SHARE||(LA97_1>=SHUTDOWN && LA97_1<=SLAVE)||(LA97_1>=SNAPSHOT && LA97_1<=SOCKET)||(LA97_1>=SONAME && LA97_1<=SOURCE)||(LA97_1>=SQL_BUFFER_RESULT && LA97_1<=SQL_CACHE)||LA97_1==SQL_NO_CACHE||LA97_1==SQL_THREAD||LA97_1==START||(LA97_1>=STARTS && LA97_1<=STATUS)||(LA97_1>=STOP && LA97_1<=STORAGE)||(LA97_1>=STRING_KEYWORD && LA97_1<=SUBPARTITIONS)||(LA97_1>=SUPER && LA97_1<=SWITCHES)||(LA97_1>=TABLES && LA97_1<=TEMPTABLE)||(LA97_1>=TEXT && LA97_1<=THAN)||(LA97_1>=TIME && LA97_1<=TIMESTAMP_DIFF)||(LA97_1>=TRANSACTION && LA97_1<=TRANSACTIONAL)||LA97_1==TRIGGERS||(LA97_1>=TRUNCATE && LA97_1<=UNDEFINED)||(LA97_1>=UNDOFILE && LA97_1<=UNINSTALL)||LA97_1==UNKNOWN||LA97_1==UNTIL||LA97_1==UPGRADE||LA97_1==USER||LA97_1==USE_FRM||LA97_1==VALUE||LA97_1==VARIABLES||(LA97_1>=VIEW && LA97_1<=WEEK)||(LA97_1>=WORK && LA97_1<=WRAPPER)||(LA97_1>=X509 && LA97_1<=XA)||LA97_1==YEAR))
				{
					alt97 = 1;
				}
			}
			} finally { DebugExitDecision(97); }
			switch (alt97)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:333:17: DOT second= ident
				{
				DebugLocation(333, 17);
				DOT249=(IToken)Match(input,DOT,Follow._DOT_in_simple_table_ref_no_alias3508); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_DOT.Add(DOT249);

				DebugLocation(333, 27);
				PushFollow(Follow._ident_in_simple_table_ref_no_alias3512);
				second=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(second.Tree);

				}
				break;

			}
			} finally { DebugExitSubRule(97); }



			{
			// AST REWRITE
			// elements: first, second
			// token labels: 
			// rule labels: first, second, retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_first=new RewriteRuleSubtreeStream(adaptor,"rule first",first!=null?first.Tree:null);
			RewriteRuleSubtreeStream stream_second=new RewriteRuleSubtreeStream(adaptor,"rule second",second!=null?second.Tree:null);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 333:37: -> $first ( $second)?
			{
				DebugLocation(333, 41);
				adaptor.AddChild(root_0, stream_first.NextTree());
				DebugLocation(333, 48);
				// MySQL51Parser.g3:333:48: ( $second)?
				if (stream_second.HasNext)
				{
					DebugLocation(333, 48);
					adaptor.AddChild(root_0, stream_second.NextTree());

				}
				stream_second.Reset();

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("simple_table_ref_no_alias", 28);
			LeaveRule("simple_table_ref_no_alias", 28);
			LeaveRule_simple_table_ref_no_alias();
		}
		DebugLocation(334, 1);
		} finally { DebugExitRule(GrammarFileName, "simple_table_ref_no_alias"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "simple_table_ref_no_alias"

	private sealed partial class simple_table_ref_alias_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public simple_table_ref_alias_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_simple_table_ref_alias();
	partial void LeaveRule_simple_table_ref_alias();

	// $ANTLR start "simple_table_ref_alias"
	// MySQL51Parser.g3:336:1: simple_table_ref_alias : first= ident ( DOT second= ident )? ( table_alias )? -> $first ( $second)? ( table_alias )? ;
	[GrammarRule("simple_table_ref_alias")]
	private MySQL51Parser.simple_table_ref_alias_return simple_table_ref_alias()
	{
		EnterRule_simple_table_ref_alias();
		EnterRule("simple_table_ref_alias", 29);
		TraceIn("simple_table_ref_alias", 29);
		MySQL51Parser.simple_table_ref_alias_return retval = new MySQL51Parser.simple_table_ref_alias_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken DOT250 = default(IToken);
		MySQL51Parser.ident_return first = default(MySQL51Parser.ident_return);
		MySQL51Parser.ident_return second = default(MySQL51Parser.ident_return);
		MySQL51Parser.table_alias_return table_alias251 = default(MySQL51Parser.table_alias_return);

		object DOT250_tree = default(object);
		RewriteRuleITokenStream stream_DOT=new RewriteRuleITokenStream(adaptor,"token DOT");
		RewriteRuleSubtreeStream stream_ident=new RewriteRuleSubtreeStream(adaptor,"rule ident");
		RewriteRuleSubtreeStream stream_table_alias=new RewriteRuleSubtreeStream(adaptor,"rule table_alias");
		try { DebugEnterRule(GrammarFileName, "simple_table_ref_alias");
		DebugLocation(336, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:337:2: (first= ident ( DOT second= ident )? ( table_alias )? -> $first ( $second)? ( table_alias )? )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:337:4: first= ident ( DOT second= ident )? ( table_alias )?
			{
			DebugLocation(337, 9);
			PushFollow(Follow._ident_in_simple_table_ref_alias3537);
			first=ident();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_ident.Add(first.Tree);
			DebugLocation(337, 16);
			// MySQL51Parser.g3:337:16: ( DOT second= ident )?
			int alt98=2;
			try { DebugEnterSubRule(98);
			try { DebugEnterDecision(98, false);
			int LA98_0 = input.LA(1);

			if ((LA98_0==DOT))
			{
				alt98 = 1;
			}
			} finally { DebugExitDecision(98); }
			switch (alt98)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:337:17: DOT second= ident
				{
				DebugLocation(337, 17);
				DOT250=(IToken)Match(input,DOT,Follow._DOT_in_simple_table_ref_alias3540); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_DOT.Add(DOT250);

				DebugLocation(337, 27);
				PushFollow(Follow._ident_in_simple_table_ref_alias3544);
				second=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(second.Tree);

				}
				break;

			}
			} finally { DebugExitSubRule(98); }

			DebugLocation(337, 36);
			// MySQL51Parser.g3:337:36: ( table_alias )?
			int alt99=2;
			try { DebugEnterSubRule(99);
			try { DebugEnterDecision(99, false);
			int LA99_0 = input.LA(1);

			if ((LA99_0==ACTION||(LA99_0>=ADDDATE && LA99_0<=ALGORITHM)||(LA99_0>=ANY && LA99_0<=AS)||LA99_0==ASCII||(LA99_0>=AT && LA99_0<=BACKUP)||LA99_0==BEGIN||(LA99_0>=BINLOG && LA99_0<=BIT)||(LA99_0>=BLOCK && LA99_0<=BOOLEAN)||LA99_0==BTREE||(LA99_0>=BYTE && LA99_0<=CACHE)||LA99_0==CASCADED||LA99_0==CHAIN||LA99_0==CHANGED||LA99_0==CHARSET||(LA99_0>=CHECKSUM && LA99_0<=CODE)||LA99_0==COLLATION||LA99_0==COLUMNS||LA99_0==COMMENT||(LA99_0>=COMMIT && LA99_0<=CONCURRENT)||(LA99_0>=CONNECTION && LA99_0<=CONSISTENT)||(LA99_0>=CONTAINS && LA99_0<=CONTEXT)||LA99_0==CONTRIBUTORS||LA99_0==CPU||LA99_0==CUBE||LA99_0==DATA||(LA99_0>=DATAFILE && LA99_0<=DATETIME)||LA99_0==DAY||LA99_0==DEALLOCATE||LA99_0==DEFINER||LA99_0==DELAY_KEY_WRITE||LA99_0==DES_KEY_FILE||(LA99_0>=DIRECTORY && LA99_0<=DISK)||LA99_0==DO||(LA99_0>=DUMPFILE && LA99_0<=DYNAMIC)||LA99_0==ENABLE||(LA99_0>=END && LA99_0<=ENUM)||(LA99_0>=ERRORS && LA99_0<=ESCAPE)||(LA99_0>=EVENT && LA99_0<=EXECUTE)||LA99_0==EXPANSION||(LA99_0>=EXTENDED && LA99_0<=EXTENT_SIZE)||(LA99_0>=FAST && LA99_0<=FAULTS)||(LA99_0>=FIELDS && LA99_0<=FIXED)||LA99_0==FLUSH||(LA99_0>=FOUND && LA99_0<=FRAC_SECOND)||LA99_0==FULL||(LA99_0>=FUNCTION && LA99_0<=GLOBAL)||LA99_0==GRANTS||(LA99_0>=HANDLER && LA99_0<=HASH)||LA99_0==HELP||(LA99_0>=HOST && LA99_0<=HOUR)||(LA99_0>=ID && LA99_0<=IDENTIFIED)||LA99_0==IMPORT||LA99_0==INDEXES||LA99_0==INITIAL_SIZE||LA99_0==INNOBASE||(LA99_0>=INSERT_METHOD && LA99_0<=INSTALL)||(LA99_0>=INVOKER && LA99_0<=IPC)||(LA99_0>=ISOLATION && LA99_0<=ISSUER)||LA99_0==KEY_BLOCK_SIZE||(LA99_0>=LABEL && LA99_0<=LAST)||LA99_0==LEAVES||LA99_0==LESS||LA99_0==LEVEL||(LA99_0>=LINESTRING && LA99_0<=LIST)||LA99_0==LOCAL||(LA99_0>=LOCKS && LA99_0<=LOGFILE)||LA99_0==LOGS||(LA99_0>=MASTER && LA99_0<=MASTER_SSL_KEY)||LA99_0==MASTER_USER||(LA99_0>=MAX_CONNECTIONS_PER_HOUR && LA99_0<=MEDIUM)||(LA99_0>=MEMORY && LA99_0<=MICROSECOND)||LA99_0==MIGRATE||LA99_0==MINUTE||LA99_0==MIN_ROWS||LA99_0==MODE||LA99_0==MODIFY||LA99_0==MONTH||(LA99_0>=MULTILINESTRING && LA99_0<=NATIONAL)||(LA99_0>=NCHAR && LA99_0<=NONE)||LA99_0==NO_WAIT||(LA99_0>=NVARCHAR && LA99_0<=OLD_PASSWORD)||(LA99_0>=ONE && LA99_0<=OPEN)||LA99_0==OPTIONS||(LA99_0>=OWNER && LA99_0<=PLUGINS)||(LA99_0>=POINT && LA99_0<=PORT)||(LA99_0>=PREPARE && LA99_0<=PREV)||LA99_0==PRIVILEGES||(LA99_0>=PROCESS && LA99_0<=PROFILES)||(LA99_0>=QUARTER && LA99_0<=QUICK)||(LA99_0>=REBUILD && LA99_0<=REDUNDANT)||(LA99_0>=RELAY_LOG_FILE && LA99_0<=RELAY_THREAD)||(LA99_0>=RELOAD && LA99_0<=REMOVE)||(LA99_0>=REORGANIZE && LA99_0<=REPAIR)||LA99_0==REPEATABLE||LA99_0==REPLICATION||(LA99_0>=RESET && LA99_0<=RESTORE)||LA99_0==RESUME||LA99_0==RETURNS||(LA99_0>=ROLLBACK && LA99_0<=ROW_FORMAT)||(LA99_0>=RTREE && LA99_0<=SCHEDULE)||LA99_0==SECOND||LA99_0==SECURITY||(LA99_0>=SERIAL && LA99_0<=SESSION)||LA99_0==SHARE||(LA99_0>=SHUTDOWN && LA99_0<=SLAVE)||(LA99_0>=SNAPSHOT && LA99_0<=SOCKET)||(LA99_0>=SONAME && LA99_0<=SOURCE)||(LA99_0>=SQL_BUFFER_RESULT && LA99_0<=SQL_CACHE)||LA99_0==SQL_NO_CACHE||LA99_0==SQL_THREAD||LA99_0==START||(LA99_0>=STARTS && LA99_0<=STATUS)||(LA99_0>=STOP && LA99_0<=STORAGE)||(LA99_0>=STRING_KEYWORD && LA99_0<=SUBPARTITIONS)||(LA99_0>=SUPER && LA99_0<=SWITCHES)||(LA99_0>=TABLES && LA99_0<=TEMPTABLE)||(LA99_0>=TEXT && LA99_0<=THAN)||(LA99_0>=TIME && LA99_0<=TIMESTAMP_DIFF)||(LA99_0>=TRANSACTION && LA99_0<=TRANSACTIONAL)||LA99_0==TRIGGERS||(LA99_0>=TRUNCATE && LA99_0<=UNDEFINED)||(LA99_0>=UNDOFILE && LA99_0<=UNINSTALL)||LA99_0==UNKNOWN||LA99_0==UNTIL||LA99_0==UPGRADE||LA99_0==USER||LA99_0==USE_FRM||LA99_0==VALUE||LA99_0==VARIABLES||(LA99_0>=VIEW && LA99_0<=WEEK)||(LA99_0>=WORK && LA99_0<=WRAPPER)||(LA99_0>=X509 && LA99_0<=XA)||LA99_0==YEAR))
			{
				alt99 = 1;
			}
			else if ((LA99_0==GROUP))
			{
				int LA99_2 = input.LA(2);

				if ((LA99_2==EOF||LA99_2==COMMA||LA99_2==CROSS||(LA99_2>=FOR && LA99_2<=FORCE)||LA99_2==GROUP||LA99_2==HAVING||LA99_2==IGNORE||LA99_2==INNER||LA99_2==INTO||LA99_2==JOIN||LA99_2==LEFT||LA99_2==LIMIT||LA99_2==LOCK||LA99_2==LOW_PRIORITY||LA99_2==NATURAL||LA99_2==ON||LA99_2==ORDER||LA99_2==PROCEDURE||LA99_2==READ||LA99_2==RIGHT||LA99_2==RPAREN||LA99_2==SEMI||LA99_2==SET||LA99_2==STRAIGHT_JOIN||LA99_2==UNION||LA99_2==USE||LA99_2==USING||LA99_2==WHERE||LA99_2==WRITE))
				{
					alt99 = 1;
				}
			}
			} finally { DebugExitDecision(99); }
			switch (alt99)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:337:36: table_alias
				{
				DebugLocation(337, 36);
				PushFollow(Follow._table_alias_in_simple_table_ref_alias3548);
				table_alias251=table_alias();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_table_alias.Add(table_alias251.Tree);

				}
				break;

			}
			} finally { DebugExitSubRule(99); }



			{
			// AST REWRITE
			// elements: first, second, table_alias
			// token labels: 
			// rule labels: first, second, retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_first=new RewriteRuleSubtreeStream(adaptor,"rule first",first!=null?first.Tree:null);
			RewriteRuleSubtreeStream stream_second=new RewriteRuleSubtreeStream(adaptor,"rule second",second!=null?second.Tree:null);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 337:50: -> $first ( $second)? ( table_alias )?
			{
				DebugLocation(337, 54);
				adaptor.AddChild(root_0, stream_first.NextTree());
				DebugLocation(337, 61);
				// MySQL51Parser.g3:337:61: ( $second)?
				if (stream_second.HasNext)
				{
					DebugLocation(337, 61);
					adaptor.AddChild(root_0, stream_second.NextTree());

				}
				stream_second.Reset();
				DebugLocation(337, 69);
				// MySQL51Parser.g3:337:69: ( table_alias )?
				if (stream_table_alias.HasNext)
				{
					DebugLocation(337, 69);
					adaptor.AddChild(root_0, stream_table_alias.NextTree());

				}
				stream_table_alias.Reset();

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("simple_table_ref_alias", 29);
			LeaveRule("simple_table_ref_alias", 29);
			LeaveRule_simple_table_ref_alias();
		}
		DebugLocation(338, 1);
		} finally { DebugExitRule(GrammarFileName, "simple_table_ref_alias"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "simple_table_ref_alias"

	private sealed partial class table_alias_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public table_alias_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_table_alias();
	partial void LeaveRule_table_alias();

	// $ANTLR start "table_alias"
	// MySQL51Parser.g3:340:1: table_alias : ( AS )? alias= ident -> ^( ALIAS $alias) ;
	[GrammarRule("table_alias")]
	private MySQL51Parser.table_alias_return table_alias()
	{
		EnterRule_table_alias();
		EnterRule("table_alias", 30);
		TraceIn("table_alias", 30);
		MySQL51Parser.table_alias_return retval = new MySQL51Parser.table_alias_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken AS252 = default(IToken);
		MySQL51Parser.ident_return alias = default(MySQL51Parser.ident_return);

		object AS252_tree = default(object);
		RewriteRuleITokenStream stream_AS=new RewriteRuleITokenStream(adaptor,"token AS");
		RewriteRuleSubtreeStream stream_ident=new RewriteRuleSubtreeStream(adaptor,"rule ident");
		try { DebugEnterRule(GrammarFileName, "table_alias");
		DebugLocation(340, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:341:2: ( ( AS )? alias= ident -> ^( ALIAS $alias) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:341:4: ( AS )? alias= ident
			{
			DebugLocation(341, 4);
			// MySQL51Parser.g3:341:4: ( AS )?
			int alt100=2;
			try { DebugEnterSubRule(100);
			try { DebugEnterDecision(100, false);
			int LA100_0 = input.LA(1);

			if ((LA100_0==AS))
			{
				alt100 = 1;
			}
			} finally { DebugExitDecision(100); }
			switch (alt100)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:341:4: AS
				{
				DebugLocation(341, 4);
				AS252=(IToken)Match(input,AS,Follow._AS_in_table_alias3573); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_AS.Add(AS252);


				}
				break;

			}
			} finally { DebugExitSubRule(100); }

			DebugLocation(341, 13);
			PushFollow(Follow._ident_in_table_alias3578);
			alias=ident();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_ident.Add(alias.Tree);


			{
			// AST REWRITE
			// elements: alias
			// token labels: 
			// rule labels: alias, retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_alias=new RewriteRuleSubtreeStream(adaptor,"rule alias",alias!=null?alias.Tree:null);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 341:20: -> ^( ALIAS $alias)
			{
				DebugLocation(341, 23);
				// MySQL51Parser.g3:341:23: ^( ALIAS $alias)
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(341, 25);
				root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(ALIAS, "ALIAS"), root_1);

				DebugLocation(341, 32);
				adaptor.AddChild(root_1, stream_alias.NextTree());

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("table_alias", 30);
			LeaveRule("table_alias", 30);
			LeaveRule_table_alias();
		}
		DebugLocation(342, 1);
		} finally { DebugExitRule(GrammarFileName, "table_alias"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "table_alias"

	private sealed partial class field_name_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public field_name_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_field_name();
	partial void LeaveRule_field_name();

	// $ANTLR start "field_name"
	// MySQL51Parser.g3:344:1: field_name : ident ({...}? => ( DOT ({...}? ( ident |star= MULT ) {...}?) )* ) -> ^( FIELD ( ident )+ ( $star)? ) ;
	[GrammarRule("field_name")]
	private MySQL51Parser.field_name_return field_name()
	{
		EnterRule_field_name();
		EnterRule("field_name", 31);
		TraceIn("field_name", 31);
		MySQL51Parser.field_name_return retval = new MySQL51Parser.field_name_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken star = default(IToken);
		IToken DOT254 = default(IToken);
		MySQL51Parser.ident_return ident253 = default(MySQL51Parser.ident_return);
		MySQL51Parser.ident_return ident255 = default(MySQL51Parser.ident_return);

		object star_tree = default(object);
		object DOT254_tree = default(object);
		RewriteRuleITokenStream stream_DOT=new RewriteRuleITokenStream(adaptor,"token DOT");
		RewriteRuleITokenStream stream_MULT=new RewriteRuleITokenStream(adaptor,"token MULT");
		RewriteRuleSubtreeStream stream_ident=new RewriteRuleSubtreeStream(adaptor,"rule ident");

		int i = 0;
		bool seenStar = false;

		try { DebugEnterRule(GrammarFileName, "field_name");
		DebugLocation(344, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:349:2: ( ident ({...}? => ( DOT ({...}? ( ident |star= MULT ) {...}?) )* ) -> ^( FIELD ( ident )+ ( $star)? ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:349:4: ident ({...}? => ( DOT ({...}? ( ident |star= MULT ) {...}?) )* )
			{
			DebugLocation(349, 4);
			PushFollow(Follow._ident_in_field_name3603);
			ident253=ident();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_ident.Add(ident253.Tree);
			DebugLocation(350, 3);
			// MySQL51Parser.g3:350:3: ({...}? => ( DOT ({...}? ( ident |star= MULT ) {...}?) )* )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:350:4: {...}? => ( DOT ({...}? ( ident |star= MULT ) {...}?) )*
			{
			DebugLocation(350, 4);
			if (!(EvalPredicate(seenStar == false, "seenStar == false")))
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				throw new FailedPredicateException(input, "field_name", "seenStar == false");
			}
			DebugLocation(351, 5);
			// MySQL51Parser.g3:351:5: ( DOT ({...}? ( ident |star= MULT ) {...}?) )*
			try { DebugEnterSubRule(102);
			while (true)
			{
				int alt102=2;
				try { DebugEnterDecision(102, false);
				int LA102_0 = input.LA(1);

				if ((LA102_0==DOT))
				{
					alt102 = 1;
				}


				} finally { DebugExitDecision(102); }
				switch ( alt102 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:351:6: DOT ({...}? ( ident |star= MULT ) {...}?)
					{
					DebugLocation(351, 6);
					DOT254=(IToken)Match(input,DOT,Follow._DOT_in_field_name3617); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_DOT.Add(DOT254);

					DebugLocation(352, 7);
					// MySQL51Parser.g3:352:7: ({...}? ( ident |star= MULT ) {...}?)
					DebugEnterAlt(1);
					// MySQL51Parser.g3:352:8: {...}? ( ident |star= MULT ) {...}?
					{
					DebugLocation(352, 8);
					if (!(EvalPredicate(seenStar == false, "seenStar == false")))
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						throw new FailedPredicateException(input, "field_name", "seenStar == false");
					}
					DebugLocation(352, 29);
					// MySQL51Parser.g3:352:29: ( ident |star= MULT )
					int alt101=2;
					try { DebugEnterSubRule(101);
					try { DebugEnterDecision(101, false);
					int LA101_0 = input.LA(1);

					if ((LA101_0==ACTION||(LA101_0>=ADDDATE && LA101_0<=ALGORITHM)||LA101_0==ANY||LA101_0==ASCII||(LA101_0>=AT && LA101_0<=BACKUP)||LA101_0==BEGIN||(LA101_0>=BINLOG && LA101_0<=BIT)||(LA101_0>=BLOCK && LA101_0<=BOOLEAN)||LA101_0==BTREE||(LA101_0>=BYTE && LA101_0<=CACHE)||LA101_0==CASCADED||LA101_0==CHAIN||LA101_0==CHANGED||LA101_0==CHARSET||(LA101_0>=CHECKSUM && LA101_0<=CODE)||LA101_0==COLLATION||LA101_0==COLUMNS||LA101_0==COMMENT||(LA101_0>=COMMIT && LA101_0<=CONCURRENT)||(LA101_0>=CONNECTION && LA101_0<=CONSISTENT)||(LA101_0>=CONTAINS && LA101_0<=CONTEXT)||LA101_0==CONTRIBUTORS||LA101_0==CPU||LA101_0==CUBE||LA101_0==DATA||(LA101_0>=DATAFILE && LA101_0<=DATETIME)||LA101_0==DAY||LA101_0==DEALLOCATE||LA101_0==DEFINER||LA101_0==DELAY_KEY_WRITE||LA101_0==DES_KEY_FILE||(LA101_0>=DIRECTORY && LA101_0<=DISK)||LA101_0==DO||(LA101_0>=DUMPFILE && LA101_0<=DYNAMIC)||LA101_0==ENABLE||(LA101_0>=END && LA101_0<=ENUM)||(LA101_0>=ERRORS && LA101_0<=ESCAPE)||(LA101_0>=EVENT && LA101_0<=EXECUTE)||LA101_0==EXPANSION||(LA101_0>=EXTENDED && LA101_0<=EXTENT_SIZE)||(LA101_0>=FAST && LA101_0<=FAULTS)||(LA101_0>=FIELDS && LA101_0<=FIXED)||LA101_0==FLUSH||(LA101_0>=FOUND && LA101_0<=FRAC_SECOND)||LA101_0==FULL||(LA101_0>=FUNCTION && LA101_0<=GLOBAL)||LA101_0==GRANTS||LA101_0==GROUP||(LA101_0>=HANDLER && LA101_0<=HASH)||LA101_0==HELP||(LA101_0>=HOST && LA101_0<=HOUR)||(LA101_0>=ID && LA101_0<=IDENTIFIED)||LA101_0==IMPORT||LA101_0==INDEXES||LA101_0==INITIAL_SIZE||LA101_0==INNOBASE||(LA101_0>=INSERT_METHOD && LA101_0<=INSTALL)||(LA101_0>=INVOKER && LA101_0<=IPC)||(LA101_0>=ISOLATION && LA101_0<=ISSUER)||LA101_0==KEY_BLOCK_SIZE||(LA101_0>=LABEL && LA101_0<=LAST)||LA101_0==LEAVES||LA101_0==LESS||LA101_0==LEVEL||(LA101_0>=LINESTRING && LA101_0<=LIST)||LA101_0==LOCAL||(LA101_0>=LOCKS && LA101_0<=LOGFILE)||LA101_0==LOGS||(LA101_0>=MASTER && LA101_0<=MASTER_SSL_KEY)||LA101_0==MASTER_USER||(LA101_0>=MAX_CONNECTIONS_PER_HOUR && LA101_0<=MEDIUM)||(LA101_0>=MEMORY && LA101_0<=MICROSECOND)||LA101_0==MIGRATE||LA101_0==MINUTE||LA101_0==MIN_ROWS||LA101_0==MODE||LA101_0==MODIFY||LA101_0==MONTH||(LA101_0>=MULTILINESTRING && LA101_0<=NATIONAL)||(LA101_0>=NCHAR && LA101_0<=NONE)||LA101_0==NO_WAIT||(LA101_0>=NVARCHAR && LA101_0<=OLD_PASSWORD)||(LA101_0>=ONE && LA101_0<=OPEN)||LA101_0==OPTIONS||(LA101_0>=OWNER && LA101_0<=PLUGINS)||(LA101_0>=POINT && LA101_0<=PORT)||(LA101_0>=PREPARE && LA101_0<=PREV)||LA101_0==PRIVILEGES||(LA101_0>=PROCESS && LA101_0<=PROFILES)||(LA101_0>=QUARTER && LA101_0<=QUICK)||(LA101_0>=REBUILD && LA101_0<=REDUNDANT)||(LA101_0>=RELAY_LOG_FILE && LA101_0<=RELAY_THREAD)||(LA101_0>=RELOAD && LA101_0<=REMOVE)||(LA101_0>=REORGANIZE && LA101_0<=REPAIR)||LA101_0==REPEATABLE||LA101_0==REPLICATION||(LA101_0>=RESET && LA101_0<=RESTORE)||LA101_0==RESUME||LA101_0==RETURNS||(LA101_0>=ROLLBACK && LA101_0<=ROW_FORMAT)||(LA101_0>=RTREE && LA101_0<=SCHEDULE)||LA101_0==SECOND||LA101_0==SECURITY||(LA101_0>=SERIAL && LA101_0<=SESSION)||LA101_0==SHARE||(LA101_0>=SHUTDOWN && LA101_0<=SLAVE)||(LA101_0>=SNAPSHOT && LA101_0<=SOCKET)||(LA101_0>=SONAME && LA101_0<=SOURCE)||(LA101_0>=SQL_BUFFER_RESULT && LA101_0<=SQL_CACHE)||LA101_0==SQL_NO_CACHE||LA101_0==SQL_THREAD||LA101_0==START||(LA101_0>=STARTS && LA101_0<=STATUS)||(LA101_0>=STOP && LA101_0<=STORAGE)||(LA101_0>=STRING_KEYWORD && LA101_0<=SUBPARTITIONS)||(LA101_0>=SUPER && LA101_0<=SWITCHES)||(LA101_0>=TABLES && LA101_0<=TEMPTABLE)||(LA101_0>=TEXT && LA101_0<=THAN)||(LA101_0>=TIME && LA101_0<=TIMESTAMP_DIFF)||(LA101_0>=TRANSACTION && LA101_0<=TRANSACTIONAL)||LA101_0==TRIGGERS||(LA101_0>=TRUNCATE && LA101_0<=UNDEFINED)||(LA101_0>=UNDOFILE && LA101_0<=UNINSTALL)||LA101_0==UNKNOWN||LA101_0==UNTIL||LA101_0==UPGRADE||LA101_0==USER||LA101_0==USE_FRM||LA101_0==VALUE||LA101_0==VARIABLES||(LA101_0>=VIEW && LA101_0<=WEEK)||(LA101_0>=WORK && LA101_0<=WRAPPER)||(LA101_0>=X509 && LA101_0<=XA)||LA101_0==YEAR))
					{
						alt101 = 1;
					}
					else if ((LA101_0==MULT))
					{
						alt101 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 101, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					} finally { DebugExitDecision(101); }
					switch (alt101)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:352:30: ident
						{
						DebugLocation(352, 30);
						PushFollow(Follow._ident_in_field_name3630);
						ident255=ident();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_ident.Add(ident255.Tree);

						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:352:38: star= MULT
						{
						DebugLocation(352, 42);
						star=(IToken)Match(input,MULT,Follow._MULT_in_field_name3636); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_MULT.Add(star);

						DebugLocation(352, 48);
						if (state.backtracking == 0)
						{
							seenStar = true;
						}

						}
						break;

					}
					} finally { DebugExitSubRule(101); }

					DebugLocation(352, 68);
					if (!(EvalPredicate(++i <= 2, "++i <= 2")))
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						throw new FailedPredicateException(input, "field_name", "++i <= 2");
					}

					}


					}
					break;

				default:
					goto loop102;
				}
			}

			loop102:
				;

			} finally { DebugExitSubRule(102); }


			}



			{
			// AST REWRITE
			// elements: ident, star
			// token labels: star
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleITokenStream stream_star=new RewriteRuleITokenStream(adaptor,"token star",star);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 355:3: -> ^( FIELD ( ident )+ ( $star)? )
			{
				DebugLocation(355, 6);
				// MySQL51Parser.g3:355:6: ^( FIELD ( ident )+ ( $star)? )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(355, 8);
				root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FIELD, "FIELD"), root_1);

				DebugLocation(355, 14);
				if (!(stream_ident.HasNext))
				{
					throw new RewriteEarlyExitException();
				}
				while ( stream_ident.HasNext )
				{
					DebugLocation(355, 14);
					adaptor.AddChild(root_1, stream_ident.NextTree());

				}
				stream_ident.Reset();
				DebugLocation(355, 22);
				// MySQL51Parser.g3:355:22: ( $star)?
				if (stream_star.HasNext)
				{
					DebugLocation(355, 22);
					adaptor.AddChild(root_1, stream_star.NextNode());

				}
				stream_star.Reset();

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("field_name", 31);
			LeaveRule("field_name", 31);
			LeaveRule_field_name();
		}
		DebugLocation(357, 1);
		} finally { DebugExitRule(GrammarFileName, "field_name"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "field_name"

	private sealed partial class ident_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public ident_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_ident();
	partial void LeaveRule_ident();

	// $ANTLR start "ident"
	// MySQL51Parser.g3:363:1: ident : ( (tok= ASCII |tok= BACKUP |tok= BEGIN |tok= BYTE |tok= CACHE |tok= CHARSET |tok= CHECKSUM |tok= CLOSE |tok= COMMENT |tok= COMMIT |tok= CONTAINS |tok= DEALLOCATE |tok= DO |tok= END |tok= EXECUTE |tok= FLUSH |tok= GROUP |tok= HANDLER |tok= HELP |tok= HOST |tok= INSTALL |tok= LABEL |tok= LANGUAGE |tok= NO |tok= OPEN |tok= OPTIONS |tok= OWNER |tok= PARSER |tok= PARTITION |tok= PORT |tok= PREPARE |tok= REMOVE |tok= REPAIR |tok= RESET |tok= RESTORE |tok= ROLLBACK |tok= SAVEPOINT |tok= SECURITY |tok= SERVER |tok= SIGNED |tok= SOCKET |tok= SLAVE |tok= SONAME |tok= START |tok= STOP |tok= TRUNCATE |tok= UNICODE |tok= UNINSTALL |tok= WRAPPER |tok= XA |tok= UPGRADE ) -> ID[$tok] | ident_sp_label ->);
	[GrammarRule("ident")]
	private MySQL51Parser.ident_return ident()
	{
		EnterRule_ident();
		EnterRule("ident", 32);
		TraceIn("ident", 32);
		MySQL51Parser.ident_return retval = new MySQL51Parser.ident_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken tok = default(IToken);
		MySQL51Parser.ident_sp_label_return ident_sp_label256 = default(MySQL51Parser.ident_sp_label_return);

		object tok_tree = default(object);
		RewriteRuleITokenStream stream_ASCII=new RewriteRuleITokenStream(adaptor,"token ASCII");
		RewriteRuleITokenStream stream_BACKUP=new RewriteRuleITokenStream(adaptor,"token BACKUP");
		RewriteRuleITokenStream stream_BEGIN=new RewriteRuleITokenStream(adaptor,"token BEGIN");
		RewriteRuleITokenStream stream_BYTE=new RewriteRuleITokenStream(adaptor,"token BYTE");
		RewriteRuleITokenStream stream_CACHE=new RewriteRuleITokenStream(adaptor,"token CACHE");
		RewriteRuleITokenStream stream_CHARSET=new RewriteRuleITokenStream(adaptor,"token CHARSET");
		RewriteRuleITokenStream stream_CHECKSUM=new RewriteRuleITokenStream(adaptor,"token CHECKSUM");
		RewriteRuleITokenStream stream_CLOSE=new RewriteRuleITokenStream(adaptor,"token CLOSE");
		RewriteRuleITokenStream stream_COMMENT=new RewriteRuleITokenStream(adaptor,"token COMMENT");
		RewriteRuleITokenStream stream_COMMIT=new RewriteRuleITokenStream(adaptor,"token COMMIT");
		RewriteRuleITokenStream stream_CONTAINS=new RewriteRuleITokenStream(adaptor,"token CONTAINS");
		RewriteRuleITokenStream stream_DEALLOCATE=new RewriteRuleITokenStream(adaptor,"token DEALLOCATE");
		RewriteRuleITokenStream stream_DO=new RewriteRuleITokenStream(adaptor,"token DO");
		RewriteRuleITokenStream stream_END=new RewriteRuleITokenStream(adaptor,"token END");
		RewriteRuleITokenStream stream_EXECUTE=new RewriteRuleITokenStream(adaptor,"token EXECUTE");
		RewriteRuleITokenStream stream_FLUSH=new RewriteRuleITokenStream(adaptor,"token FLUSH");
		RewriteRuleITokenStream stream_GROUP=new RewriteRuleITokenStream(adaptor,"token GROUP");
		RewriteRuleITokenStream stream_HANDLER=new RewriteRuleITokenStream(adaptor,"token HANDLER");
		RewriteRuleITokenStream stream_HELP=new RewriteRuleITokenStream(adaptor,"token HELP");
		RewriteRuleITokenStream stream_HOST=new RewriteRuleITokenStream(adaptor,"token HOST");
		RewriteRuleITokenStream stream_INSTALL=new RewriteRuleITokenStream(adaptor,"token INSTALL");
		RewriteRuleITokenStream stream_LABEL=new RewriteRuleITokenStream(adaptor,"token LABEL");
		RewriteRuleITokenStream stream_LANGUAGE=new RewriteRuleITokenStream(adaptor,"token LANGUAGE");
		RewriteRuleITokenStream stream_NO=new RewriteRuleITokenStream(adaptor,"token NO");
		RewriteRuleITokenStream stream_OPEN=new RewriteRuleITokenStream(adaptor,"token OPEN");
		RewriteRuleITokenStream stream_OPTIONS=new RewriteRuleITokenStream(adaptor,"token OPTIONS");
		RewriteRuleITokenStream stream_OWNER=new RewriteRuleITokenStream(adaptor,"token OWNER");
		RewriteRuleITokenStream stream_PARSER=new RewriteRuleITokenStream(adaptor,"token PARSER");
		RewriteRuleITokenStream stream_PARTITION=new RewriteRuleITokenStream(adaptor,"token PARTITION");
		RewriteRuleITokenStream stream_PORT=new RewriteRuleITokenStream(adaptor,"token PORT");
		RewriteRuleITokenStream stream_PREPARE=new RewriteRuleITokenStream(adaptor,"token PREPARE");
		RewriteRuleITokenStream stream_REMOVE=new RewriteRuleITokenStream(adaptor,"token REMOVE");
		RewriteRuleITokenStream stream_REPAIR=new RewriteRuleITokenStream(adaptor,"token REPAIR");
		RewriteRuleITokenStream stream_RESET=new RewriteRuleITokenStream(adaptor,"token RESET");
		RewriteRuleITokenStream stream_RESTORE=new RewriteRuleITokenStream(adaptor,"token RESTORE");
		RewriteRuleITokenStream stream_ROLLBACK=new RewriteRuleITokenStream(adaptor,"token ROLLBACK");
		RewriteRuleITokenStream stream_SAVEPOINT=new RewriteRuleITokenStream(adaptor,"token SAVEPOINT");
		RewriteRuleITokenStream stream_SECURITY=new RewriteRuleITokenStream(adaptor,"token SECURITY");
		RewriteRuleITokenStream stream_SERVER=new RewriteRuleITokenStream(adaptor,"token SERVER");
		RewriteRuleITokenStream stream_SIGNED=new RewriteRuleITokenStream(adaptor,"token SIGNED");
		RewriteRuleITokenStream stream_SOCKET=new RewriteRuleITokenStream(adaptor,"token SOCKET");
		RewriteRuleITokenStream stream_SLAVE=new RewriteRuleITokenStream(adaptor,"token SLAVE");
		RewriteRuleITokenStream stream_SONAME=new RewriteRuleITokenStream(adaptor,"token SONAME");
		RewriteRuleITokenStream stream_START=new RewriteRuleITokenStream(adaptor,"token START");
		RewriteRuleITokenStream stream_STOP=new RewriteRuleITokenStream(adaptor,"token STOP");
		RewriteRuleITokenStream stream_TRUNCATE=new RewriteRuleITokenStream(adaptor,"token TRUNCATE");
		RewriteRuleITokenStream stream_UNICODE=new RewriteRuleITokenStream(adaptor,"token UNICODE");
		RewriteRuleITokenStream stream_UNINSTALL=new RewriteRuleITokenStream(adaptor,"token UNINSTALL");
		RewriteRuleITokenStream stream_WRAPPER=new RewriteRuleITokenStream(adaptor,"token WRAPPER");
		RewriteRuleITokenStream stream_XA=new RewriteRuleITokenStream(adaptor,"token XA");
		RewriteRuleITokenStream stream_UPGRADE=new RewriteRuleITokenStream(adaptor,"token UPGRADE");
		RewriteRuleSubtreeStream stream_ident_sp_label=new RewriteRuleSubtreeStream(adaptor,"rule ident_sp_label");
		try { DebugEnterRule(GrammarFileName, "ident");
		DebugLocation(363, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:364:2: ( (tok= ASCII |tok= BACKUP |tok= BEGIN |tok= BYTE |tok= CACHE |tok= CHARSET |tok= CHECKSUM |tok= CLOSE |tok= COMMENT |tok= COMMIT |tok= CONTAINS |tok= DEALLOCATE |tok= DO |tok= END |tok= EXECUTE |tok= FLUSH |tok= GROUP |tok= HANDLER |tok= HELP |tok= HOST |tok= INSTALL |tok= LABEL |tok= LANGUAGE |tok= NO |tok= OPEN |tok= OPTIONS |tok= OWNER |tok= PARSER |tok= PARTITION |tok= PORT |tok= PREPARE |tok= REMOVE |tok= REPAIR |tok= RESET |tok= RESTORE |tok= ROLLBACK |tok= SAVEPOINT |tok= SECURITY |tok= SERVER |tok= SIGNED |tok= SOCKET |tok= SLAVE |tok= SONAME |tok= START |tok= STOP |tok= TRUNCATE |tok= UNICODE |tok= UNINSTALL |tok= WRAPPER |tok= XA |tok= UPGRADE ) -> ID[$tok] | ident_sp_label ->)
			int alt104=2;
			try { DebugEnterDecision(104, false);
			int LA104_0 = input.LA(1);

			if ((LA104_0==ASCII||LA104_0==BACKUP||LA104_0==BEGIN||(LA104_0>=BYTE && LA104_0<=CACHE)||LA104_0==CHARSET||LA104_0==CHECKSUM||LA104_0==CLOSE||LA104_0==COMMENT||LA104_0==COMMIT||LA104_0==CONTAINS||LA104_0==DEALLOCATE||LA104_0==DO||LA104_0==END||LA104_0==EXECUTE||LA104_0==FLUSH||LA104_0==GROUP||LA104_0==HANDLER||LA104_0==HELP||LA104_0==HOST||LA104_0==INSTALL||(LA104_0>=LABEL && LA104_0<=LANGUAGE)||LA104_0==NO||LA104_0==OPEN||LA104_0==OPTIONS||LA104_0==OWNER||LA104_0==PARSER||LA104_0==PARTITION||LA104_0==PORT||LA104_0==PREPARE||LA104_0==REMOVE||LA104_0==REPAIR||LA104_0==RESET||LA104_0==RESTORE||LA104_0==ROLLBACK||LA104_0==SAVEPOINT||LA104_0==SECURITY||LA104_0==SERVER||LA104_0==SIGNED||LA104_0==SLAVE||LA104_0==SOCKET||LA104_0==SONAME||LA104_0==START||LA104_0==STOP||LA104_0==TRUNCATE||(LA104_0>=UNICODE && LA104_0<=UNINSTALL)||LA104_0==UPGRADE||LA104_0==WRAPPER||LA104_0==XA))
			{
				alt104 = 1;
			}
			else if ((LA104_0==ACTION||(LA104_0>=ADDDATE && LA104_0<=ALGORITHM)||LA104_0==ANY||(LA104_0>=AT && LA104_0<=AVG_ROW_LENGTH)||(LA104_0>=BINLOG && LA104_0<=BIT)||(LA104_0>=BLOCK && LA104_0<=BOOLEAN)||LA104_0==BTREE||LA104_0==CASCADED||LA104_0==CHAIN||LA104_0==CHANGED||(LA104_0>=CIPHER && LA104_0<=CLIENT)||(LA104_0>=COALESCE && LA104_0<=CODE)||LA104_0==COLLATION||LA104_0==COLUMNS||(LA104_0>=COMMITTED && LA104_0<=CONCURRENT)||(LA104_0>=CONNECTION && LA104_0<=CONSISTENT)||LA104_0==CONTEXT||LA104_0==CONTRIBUTORS||LA104_0==CPU||LA104_0==CUBE||LA104_0==DATA||(LA104_0>=DATAFILE && LA104_0<=DATETIME)||LA104_0==DAY||LA104_0==DEFINER||LA104_0==DELAY_KEY_WRITE||LA104_0==DES_KEY_FILE||(LA104_0>=DIRECTORY && LA104_0<=DISK)||(LA104_0>=DUMPFILE && LA104_0<=DYNAMIC)||LA104_0==ENABLE||(LA104_0>=ENDS && LA104_0<=ENUM)||(LA104_0>=ERRORS && LA104_0<=ESCAPE)||(LA104_0>=EVENT && LA104_0<=EVERY)||LA104_0==EXPANSION||(LA104_0>=EXTENDED && LA104_0<=EXTENT_SIZE)||(LA104_0>=FAST && LA104_0<=FAULTS)||(LA104_0>=FIELDS && LA104_0<=FIXED)||(LA104_0>=FOUND && LA104_0<=FRAC_SECOND)||LA104_0==FULL||(LA104_0>=FUNCTION && LA104_0<=GLOBAL)||LA104_0==GRANTS||LA104_0==HASH||(LA104_0>=HOSTS && LA104_0<=HOUR)||(LA104_0>=ID && LA104_0<=IDENTIFIED)||LA104_0==IMPORT||LA104_0==INDEXES||LA104_0==INITIAL_SIZE||LA104_0==INNOBASE||LA104_0==INSERT_METHOD||(LA104_0>=INVOKER && LA104_0<=IPC)||(LA104_0>=ISOLATION && LA104_0<=ISSUER)||LA104_0==KEY_BLOCK_SIZE||LA104_0==LAST||LA104_0==LEAVES||LA104_0==LESS||LA104_0==LEVEL||(LA104_0>=LINESTRING && LA104_0<=LIST)||LA104_0==LOCAL||(LA104_0>=LOCKS && LA104_0<=LOGFILE)||LA104_0==LOGS||(LA104_0>=MASTER && LA104_0<=MASTER_SSL_KEY)||LA104_0==MASTER_USER||(LA104_0>=MAX_CONNECTIONS_PER_HOUR && LA104_0<=MEDIUM)||(LA104_0>=MEMORY && LA104_0<=MICROSECOND)||LA104_0==MIGRATE||LA104_0==MINUTE||LA104_0==MIN_ROWS||LA104_0==MODE||LA104_0==MODIFY||LA104_0==MONTH||(LA104_0>=MULTILINESTRING && LA104_0<=NATIONAL)||(LA104_0>=NCHAR && LA104_0<=NEXT)||(LA104_0>=NODEGROUP && LA104_0<=NONE)||LA104_0==NO_WAIT||(LA104_0>=NVARCHAR && LA104_0<=OLD_PASSWORD)||(LA104_0>=ONE && LA104_0<=ONE_SHOT)||(LA104_0>=PACK_KEYS && LA104_0<=PAGE)||LA104_0==PARTIAL||(LA104_0>=PARTITIONING && LA104_0<=PLUGINS)||(LA104_0>=POINT && LA104_0<=POLYGON)||(LA104_0>=PRESERVE && LA104_0<=PREV)||LA104_0==PRIVILEGES||(LA104_0>=PROCESS && LA104_0<=PROFILES)||(LA104_0>=QUARTER && LA104_0<=QUICK)||(LA104_0>=REBUILD && LA104_0<=REDUNDANT)||(LA104_0>=RELAY_LOG_FILE && LA104_0<=RELAY_THREAD)||LA104_0==RELOAD||LA104_0==REORGANIZE||LA104_0==REPEATABLE||LA104_0==REPLICATION||LA104_0==RESOURCES||LA104_0==RESUME||LA104_0==RETURNS||(LA104_0>=ROLLUP && LA104_0<=ROW_FORMAT)||LA104_0==RTREE||LA104_0==SCHEDULE||LA104_0==SECOND||(LA104_0>=SERIAL && LA104_0<=SERIALIZABLE)||LA104_0==SESSION||LA104_0==SHARE||LA104_0==SHUTDOWN||LA104_0==SIMPLE||LA104_0==SNAPSHOT||(LA104_0>=SOUNDS && LA104_0<=SOURCE)||(LA104_0>=SQL_BUFFER_RESULT && LA104_0<=SQL_CACHE)||LA104_0==SQL_NO_CACHE||LA104_0==SQL_THREAD||(LA104_0>=STARTS && LA104_0<=STATUS)||LA104_0==STORAGE||(LA104_0>=STRING_KEYWORD && LA104_0<=SUBPARTITIONS)||(LA104_0>=SUPER && LA104_0<=SWITCHES)||(LA104_0>=TABLES && LA104_0<=TEMPTABLE)||(LA104_0>=TEXT && LA104_0<=THAN)||(LA104_0>=TIME && LA104_0<=TIMESTAMP_DIFF)||(LA104_0>=TRANSACTION && LA104_0<=TRANSACTIONAL)||LA104_0==TRIGGERS||(LA104_0>=TYPE && LA104_0<=UNDEFINED)||(LA104_0>=UNDOFILE && LA104_0<=UNDO_BUFFER_SIZE)||LA104_0==UNKNOWN||LA104_0==UNTIL||LA104_0==USER||LA104_0==USE_FRM||LA104_0==VALUE||LA104_0==VARIABLES||(LA104_0>=VIEW && LA104_0<=WEEK)||LA104_0==WORK||LA104_0==X509||LA104_0==YEAR))
			{
				alt104 = 2;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 104, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(104); }
			switch (alt104)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:365:2: (tok= ASCII |tok= BACKUP |tok= BEGIN |tok= BYTE |tok= CACHE |tok= CHARSET |tok= CHECKSUM |tok= CLOSE |tok= COMMENT |tok= COMMIT |tok= CONTAINS |tok= DEALLOCATE |tok= DO |tok= END |tok= EXECUTE |tok= FLUSH |tok= GROUP |tok= HANDLER |tok= HELP |tok= HOST |tok= INSTALL |tok= LABEL |tok= LANGUAGE |tok= NO |tok= OPEN |tok= OPTIONS |tok= OWNER |tok= PARSER |tok= PARTITION |tok= PORT |tok= PREPARE |tok= REMOVE |tok= REPAIR |tok= RESET |tok= RESTORE |tok= ROLLBACK |tok= SAVEPOINT |tok= SECURITY |tok= SERVER |tok= SIGNED |tok= SOCKET |tok= SLAVE |tok= SONAME |tok= START |tok= STOP |tok= TRUNCATE |tok= UNICODE |tok= UNINSTALL |tok= WRAPPER |tok= XA |tok= UPGRADE )
				{
				DebugLocation(365, 2);
				// MySQL51Parser.g3:365:2: (tok= ASCII |tok= BACKUP |tok= BEGIN |tok= BYTE |tok= CACHE |tok= CHARSET |tok= CHECKSUM |tok= CLOSE |tok= COMMENT |tok= COMMIT |tok= CONTAINS |tok= DEALLOCATE |tok= DO |tok= END |tok= EXECUTE |tok= FLUSH |tok= GROUP |tok= HANDLER |tok= HELP |tok= HOST |tok= INSTALL |tok= LABEL |tok= LANGUAGE |tok= NO |tok= OPEN |tok= OPTIONS |tok= OWNER |tok= PARSER |tok= PARTITION |tok= PORT |tok= PREPARE |tok= REMOVE |tok= REPAIR |tok= RESET |tok= RESTORE |tok= ROLLBACK |tok= SAVEPOINT |tok= SECURITY |tok= SERVER |tok= SIGNED |tok= SOCKET |tok= SLAVE |tok= SONAME |tok= START |tok= STOP |tok= TRUNCATE |tok= UNICODE |tok= UNINSTALL |tok= WRAPPER |tok= XA |tok= UPGRADE )
				int alt103=51;
				try { DebugEnterSubRule(103);
				try { DebugEnterDecision(103, false);
				switch (input.LA(1))
				{
				case ASCII:
					{
					alt103 = 1;
					}
					break;
				case BACKUP:
					{
					alt103 = 2;
					}
					break;
				case BEGIN:
					{
					alt103 = 3;
					}
					break;
				case BYTE:
					{
					alt103 = 4;
					}
					break;
				case CACHE:
					{
					alt103 = 5;
					}
					break;
				case CHARSET:
					{
					alt103 = 6;
					}
					break;
				case CHECKSUM:
					{
					alt103 = 7;
					}
					break;
				case CLOSE:
					{
					alt103 = 8;
					}
					break;
				case COMMENT:
					{
					alt103 = 9;
					}
					break;
				case COMMIT:
					{
					alt103 = 10;
					}
					break;
				case CONTAINS:
					{
					alt103 = 11;
					}
					break;
				case DEALLOCATE:
					{
					alt103 = 12;
					}
					break;
				case DO:
					{
					alt103 = 13;
					}
					break;
				case END:
					{
					alt103 = 14;
					}
					break;
				case EXECUTE:
					{
					alt103 = 15;
					}
					break;
				case FLUSH:
					{
					alt103 = 16;
					}
					break;
				case GROUP:
					{
					alt103 = 17;
					}
					break;
				case HANDLER:
					{
					alt103 = 18;
					}
					break;
				case HELP:
					{
					alt103 = 19;
					}
					break;
				case HOST:
					{
					alt103 = 20;
					}
					break;
				case INSTALL:
					{
					alt103 = 21;
					}
					break;
				case LABEL:
					{
					alt103 = 22;
					}
					break;
				case LANGUAGE:
					{
					alt103 = 23;
					}
					break;
				case NO:
					{
					alt103 = 24;
					}
					break;
				case OPEN:
					{
					alt103 = 25;
					}
					break;
				case OPTIONS:
					{
					alt103 = 26;
					}
					break;
				case OWNER:
					{
					alt103 = 27;
					}
					break;
				case PARSER:
					{
					alt103 = 28;
					}
					break;
				case PARTITION:
					{
					alt103 = 29;
					}
					break;
				case PORT:
					{
					alt103 = 30;
					}
					break;
				case PREPARE:
					{
					alt103 = 31;
					}
					break;
				case REMOVE:
					{
					alt103 = 32;
					}
					break;
				case REPAIR:
					{
					alt103 = 33;
					}
					break;
				case RESET:
					{
					alt103 = 34;
					}
					break;
				case RESTORE:
					{
					alt103 = 35;
					}
					break;
				case ROLLBACK:
					{
					alt103 = 36;
					}
					break;
				case SAVEPOINT:
					{
					alt103 = 37;
					}
					break;
				case SECURITY:
					{
					alt103 = 38;
					}
					break;
				case SERVER:
					{
					alt103 = 39;
					}
					break;
				case SIGNED:
					{
					alt103 = 40;
					}
					break;
				case SOCKET:
					{
					alt103 = 41;
					}
					break;
				case SLAVE:
					{
					alt103 = 42;
					}
					break;
				case SONAME:
					{
					alt103 = 43;
					}
					break;
				case START:
					{
					alt103 = 44;
					}
					break;
				case STOP:
					{
					alt103 = 45;
					}
					break;
				case TRUNCATE:
					{
					alt103 = 46;
					}
					break;
				case UNICODE:
					{
					alt103 = 47;
					}
					break;
				case UNINSTALL:
					{
					alt103 = 48;
					}
					break;
				case WRAPPER:
					{
					alt103 = 49;
					}
					break;
				case XA:
					{
					alt103 = 50;
					}
					break;
				case UPGRADE:
					{
					alt103 = 51;
					}
					break;
				default:
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 103, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
				}

				} finally { DebugExitDecision(103); }
				switch (alt103)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:365:4: tok= ASCII
					{
					DebugLocation(365, 7);
					tok=(IToken)Match(input,ASCII,Follow._ASCII_in_ident3689); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_ASCII.Add(tok);


					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:366:4: tok= BACKUP
					{
					DebugLocation(366, 7);
					tok=(IToken)Match(input,BACKUP,Follow._BACKUP_in_ident3696); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_BACKUP.Add(tok);


					}
					break;
				case 3:
					DebugEnterAlt(3);
					// MySQL51Parser.g3:367:4: tok= BEGIN
					{
					DebugLocation(367, 7);
					tok=(IToken)Match(input,BEGIN,Follow._BEGIN_in_ident3703); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_BEGIN.Add(tok);


					}
					break;
				case 4:
					DebugEnterAlt(4);
					// MySQL51Parser.g3:368:4: tok= BYTE
					{
					DebugLocation(368, 7);
					tok=(IToken)Match(input,BYTE,Follow._BYTE_in_ident3710); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_BYTE.Add(tok);


					}
					break;
				case 5:
					DebugEnterAlt(5);
					// MySQL51Parser.g3:369:4: tok= CACHE
					{
					DebugLocation(369, 7);
					tok=(IToken)Match(input,CACHE,Follow._CACHE_in_ident3717); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_CACHE.Add(tok);


					}
					break;
				case 6:
					DebugEnterAlt(6);
					// MySQL51Parser.g3:370:4: tok= CHARSET
					{
					DebugLocation(370, 7);
					tok=(IToken)Match(input,CHARSET,Follow._CHARSET_in_ident3724); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_CHARSET.Add(tok);


					}
					break;
				case 7:
					DebugEnterAlt(7);
					// MySQL51Parser.g3:371:4: tok= CHECKSUM
					{
					DebugLocation(371, 7);
					tok=(IToken)Match(input,CHECKSUM,Follow._CHECKSUM_in_ident3731); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_CHECKSUM.Add(tok);


					}
					break;
				case 8:
					DebugEnterAlt(8);
					// MySQL51Parser.g3:372:4: tok= CLOSE
					{
					DebugLocation(372, 7);
					tok=(IToken)Match(input,CLOSE,Follow._CLOSE_in_ident3738); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_CLOSE.Add(tok);


					}
					break;
				case 9:
					DebugEnterAlt(9);
					// MySQL51Parser.g3:373:4: tok= COMMENT
					{
					DebugLocation(373, 7);
					tok=(IToken)Match(input,COMMENT,Follow._COMMENT_in_ident3745); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMENT.Add(tok);


					}
					break;
				case 10:
					DebugEnterAlt(10);
					// MySQL51Parser.g3:374:4: tok= COMMIT
					{
					DebugLocation(374, 7);
					tok=(IToken)Match(input,COMMIT,Follow._COMMIT_in_ident3752); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMIT.Add(tok);


					}
					break;
				case 11:
					DebugEnterAlt(11);
					// MySQL51Parser.g3:375:4: tok= CONTAINS
					{
					DebugLocation(375, 7);
					tok=(IToken)Match(input,CONTAINS,Follow._CONTAINS_in_ident3759); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_CONTAINS.Add(tok);


					}
					break;
				case 12:
					DebugEnterAlt(12);
					// MySQL51Parser.g3:376:4: tok= DEALLOCATE
					{
					DebugLocation(376, 7);
					tok=(IToken)Match(input,DEALLOCATE,Follow._DEALLOCATE_in_ident3766); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_DEALLOCATE.Add(tok);


					}
					break;
				case 13:
					DebugEnterAlt(13);
					// MySQL51Parser.g3:377:4: tok= DO
					{
					DebugLocation(377, 7);
					tok=(IToken)Match(input,DO,Follow._DO_in_ident3773); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_DO.Add(tok);


					}
					break;
				case 14:
					DebugEnterAlt(14);
					// MySQL51Parser.g3:378:4: tok= END
					{
					DebugLocation(378, 7);
					tok=(IToken)Match(input,END,Follow._END_in_ident3780); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_END.Add(tok);


					}
					break;
				case 15:
					DebugEnterAlt(15);
					// MySQL51Parser.g3:379:4: tok= EXECUTE
					{
					DebugLocation(379, 7);
					tok=(IToken)Match(input,EXECUTE,Follow._EXECUTE_in_ident3787); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_EXECUTE.Add(tok);


					}
					break;
				case 16:
					DebugEnterAlt(16);
					// MySQL51Parser.g3:380:4: tok= FLUSH
					{
					DebugLocation(380, 7);
					tok=(IToken)Match(input,FLUSH,Follow._FLUSH_in_ident3794); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_FLUSH.Add(tok);


					}
					break;
				case 17:
					DebugEnterAlt(17);
					// MySQL51Parser.g3:381:4: tok= GROUP
					{
					DebugLocation(381, 7);
					tok=(IToken)Match(input,GROUP,Follow._GROUP_in_ident3801); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_GROUP.Add(tok);


					}
					break;
				case 18:
					DebugEnterAlt(18);
					// MySQL51Parser.g3:382:4: tok= HANDLER
					{
					DebugLocation(382, 7);
					tok=(IToken)Match(input,HANDLER,Follow._HANDLER_in_ident3808); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_HANDLER.Add(tok);


					}
					break;
				case 19:
					DebugEnterAlt(19);
					// MySQL51Parser.g3:383:4: tok= HELP
					{
					DebugLocation(383, 7);
					tok=(IToken)Match(input,HELP,Follow._HELP_in_ident3815); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_HELP.Add(tok);


					}
					break;
				case 20:
					DebugEnterAlt(20);
					// MySQL51Parser.g3:384:4: tok= HOST
					{
					DebugLocation(384, 7);
					tok=(IToken)Match(input,HOST,Follow._HOST_in_ident3822); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_HOST.Add(tok);


					}
					break;
				case 21:
					DebugEnterAlt(21);
					// MySQL51Parser.g3:385:4: tok= INSTALL
					{
					DebugLocation(385, 7);
					tok=(IToken)Match(input,INSTALL,Follow._INSTALL_in_ident3829); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_INSTALL.Add(tok);


					}
					break;
				case 22:
					DebugEnterAlt(22);
					// MySQL51Parser.g3:386:4: tok= LABEL
					{
					DebugLocation(386, 7);
					tok=(IToken)Match(input,LABEL,Follow._LABEL_in_ident3836); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_LABEL.Add(tok);


					}
					break;
				case 23:
					DebugEnterAlt(23);
					// MySQL51Parser.g3:387:4: tok= LANGUAGE
					{
					DebugLocation(387, 7);
					tok=(IToken)Match(input,LANGUAGE,Follow._LANGUAGE_in_ident3843); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_LANGUAGE.Add(tok);


					}
					break;
				case 24:
					DebugEnterAlt(24);
					// MySQL51Parser.g3:388:4: tok= NO
					{
					DebugLocation(388, 7);
					tok=(IToken)Match(input,NO,Follow._NO_in_ident3850); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_NO.Add(tok);


					}
					break;
				case 25:
					DebugEnterAlt(25);
					// MySQL51Parser.g3:389:4: tok= OPEN
					{
					DebugLocation(389, 7);
					tok=(IToken)Match(input,OPEN,Follow._OPEN_in_ident3857); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_OPEN.Add(tok);


					}
					break;
				case 26:
					DebugEnterAlt(26);
					// MySQL51Parser.g3:390:4: tok= OPTIONS
					{
					DebugLocation(390, 7);
					tok=(IToken)Match(input,OPTIONS,Follow._OPTIONS_in_ident3864); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_OPTIONS.Add(tok);


					}
					break;
				case 27:
					DebugEnterAlt(27);
					// MySQL51Parser.g3:391:4: tok= OWNER
					{
					DebugLocation(391, 7);
					tok=(IToken)Match(input,OWNER,Follow._OWNER_in_ident3871); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_OWNER.Add(tok);


					}
					break;
				case 28:
					DebugEnterAlt(28);
					// MySQL51Parser.g3:392:4: tok= PARSER
					{
					DebugLocation(392, 7);
					tok=(IToken)Match(input,PARSER,Follow._PARSER_in_ident3878); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_PARSER.Add(tok);


					}
					break;
				case 29:
					DebugEnterAlt(29);
					// MySQL51Parser.g3:393:4: tok= PARTITION
					{
					DebugLocation(393, 7);
					tok=(IToken)Match(input,PARTITION,Follow._PARTITION_in_ident3885); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_PARTITION.Add(tok);


					}
					break;
				case 30:
					DebugEnterAlt(30);
					// MySQL51Parser.g3:394:4: tok= PORT
					{
					DebugLocation(394, 7);
					tok=(IToken)Match(input,PORT,Follow._PORT_in_ident3892); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_PORT.Add(tok);


					}
					break;
				case 31:
					DebugEnterAlt(31);
					// MySQL51Parser.g3:395:4: tok= PREPARE
					{
					DebugLocation(395, 7);
					tok=(IToken)Match(input,PREPARE,Follow._PREPARE_in_ident3899); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_PREPARE.Add(tok);


					}
					break;
				case 32:
					DebugEnterAlt(32);
					// MySQL51Parser.g3:396:4: tok= REMOVE
					{
					DebugLocation(396, 7);
					tok=(IToken)Match(input,REMOVE,Follow._REMOVE_in_ident3906); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_REMOVE.Add(tok);


					}
					break;
				case 33:
					DebugEnterAlt(33);
					// MySQL51Parser.g3:397:4: tok= REPAIR
					{
					DebugLocation(397, 7);
					tok=(IToken)Match(input,REPAIR,Follow._REPAIR_in_ident3913); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_REPAIR.Add(tok);


					}
					break;
				case 34:
					DebugEnterAlt(34);
					// MySQL51Parser.g3:398:4: tok= RESET
					{
					DebugLocation(398, 7);
					tok=(IToken)Match(input,RESET,Follow._RESET_in_ident3920); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_RESET.Add(tok);


					}
					break;
				case 35:
					DebugEnterAlt(35);
					// MySQL51Parser.g3:399:4: tok= RESTORE
					{
					DebugLocation(399, 7);
					tok=(IToken)Match(input,RESTORE,Follow._RESTORE_in_ident3927); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_RESTORE.Add(tok);


					}
					break;
				case 36:
					DebugEnterAlt(36);
					// MySQL51Parser.g3:400:4: tok= ROLLBACK
					{
					DebugLocation(400, 7);
					tok=(IToken)Match(input,ROLLBACK,Follow._ROLLBACK_in_ident3934); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_ROLLBACK.Add(tok);


					}
					break;
				case 37:
					DebugEnterAlt(37);
					// MySQL51Parser.g3:401:4: tok= SAVEPOINT
					{
					DebugLocation(401, 7);
					tok=(IToken)Match(input,SAVEPOINT,Follow._SAVEPOINT_in_ident3941); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SAVEPOINT.Add(tok);


					}
					break;
				case 38:
					DebugEnterAlt(38);
					// MySQL51Parser.g3:402:4: tok= SECURITY
					{
					DebugLocation(402, 7);
					tok=(IToken)Match(input,SECURITY,Follow._SECURITY_in_ident3948); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SECURITY.Add(tok);


					}
					break;
				case 39:
					DebugEnterAlt(39);
					// MySQL51Parser.g3:403:4: tok= SERVER
					{
					DebugLocation(403, 7);
					tok=(IToken)Match(input,SERVER,Follow._SERVER_in_ident3955); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SERVER.Add(tok);


					}
					break;
				case 40:
					DebugEnterAlt(40);
					// MySQL51Parser.g3:404:4: tok= SIGNED
					{
					DebugLocation(404, 7);
					tok=(IToken)Match(input,SIGNED,Follow._SIGNED_in_ident3962); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SIGNED.Add(tok);


					}
					break;
				case 41:
					DebugEnterAlt(41);
					// MySQL51Parser.g3:405:4: tok= SOCKET
					{
					DebugLocation(405, 7);
					tok=(IToken)Match(input,SOCKET,Follow._SOCKET_in_ident3969); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SOCKET.Add(tok);


					}
					break;
				case 42:
					DebugEnterAlt(42);
					// MySQL51Parser.g3:406:4: tok= SLAVE
					{
					DebugLocation(406, 7);
					tok=(IToken)Match(input,SLAVE,Follow._SLAVE_in_ident3976); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SLAVE.Add(tok);


					}
					break;
				case 43:
					DebugEnterAlt(43);
					// MySQL51Parser.g3:407:4: tok= SONAME
					{
					DebugLocation(407, 7);
					tok=(IToken)Match(input,SONAME,Follow._SONAME_in_ident3983); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SONAME.Add(tok);


					}
					break;
				case 44:
					DebugEnterAlt(44);
					// MySQL51Parser.g3:408:4: tok= START
					{
					DebugLocation(408, 7);
					tok=(IToken)Match(input,START,Follow._START_in_ident3990); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_START.Add(tok);


					}
					break;
				case 45:
					DebugEnterAlt(45);
					// MySQL51Parser.g3:409:4: tok= STOP
					{
					DebugLocation(409, 7);
					tok=(IToken)Match(input,STOP,Follow._STOP_in_ident3997); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_STOP.Add(tok);


					}
					break;
				case 46:
					DebugEnterAlt(46);
					// MySQL51Parser.g3:410:4: tok= TRUNCATE
					{
					DebugLocation(410, 7);
					tok=(IToken)Match(input,TRUNCATE,Follow._TRUNCATE_in_ident4004); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_TRUNCATE.Add(tok);


					}
					break;
				case 47:
					DebugEnterAlt(47);
					// MySQL51Parser.g3:411:4: tok= UNICODE
					{
					DebugLocation(411, 7);
					tok=(IToken)Match(input,UNICODE,Follow._UNICODE_in_ident4011); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_UNICODE.Add(tok);


					}
					break;
				case 48:
					DebugEnterAlt(48);
					// MySQL51Parser.g3:412:4: tok= UNINSTALL
					{
					DebugLocation(412, 7);
					tok=(IToken)Match(input,UNINSTALL,Follow._UNINSTALL_in_ident4018); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_UNINSTALL.Add(tok);


					}
					break;
				case 49:
					DebugEnterAlt(49);
					// MySQL51Parser.g3:413:4: tok= WRAPPER
					{
					DebugLocation(413, 7);
					tok=(IToken)Match(input,WRAPPER,Follow._WRAPPER_in_ident4025); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_WRAPPER.Add(tok);


					}
					break;
				case 50:
					DebugEnterAlt(50);
					// MySQL51Parser.g3:414:4: tok= XA
					{
					DebugLocation(414, 7);
					tok=(IToken)Match(input,XA,Follow._XA_in_ident4032); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_XA.Add(tok);


					}
					break;
				case 51:
					DebugEnterAlt(51);
					// MySQL51Parser.g3:415:4: tok= UPGRADE
					{
					DebugLocation(415, 7);
					tok=(IToken)Match(input,UPGRADE,Follow._UPGRADE_in_ident4039); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_UPGRADE.Add(tok);


					}
					break;

				}
				} finally { DebugExitSubRule(103); }



				{
				// AST REWRITE
				// elements: 
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 416:4: -> ID[$tok]
				{
					DebugLocation(416, 7);
					adaptor.AddChild(root_0, (object)adaptor.Create(ID, tok));

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:417:4: ident_sp_label
				{
				DebugLocation(417, 4);
				PushFollow(Follow._ident_sp_label_in_ident4052);
				ident_sp_label256=ident_sp_label();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident_sp_label.Add(ident_sp_label256.Tree);


				{
				// AST REWRITE
				// elements: 
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 417:19: ->
				{
					DebugLocation(417, 22);
					adaptor.AddChild(root_0, (ident_sp_label256!=null?((object)ident_sp_label256.Tree):default(object)));

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("ident", 32);
			LeaveRule("ident", 32);
			LeaveRule_ident();
		}
		DebugLocation(418, 1);
		} finally { DebugExitRule(GrammarFileName, "ident"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "ident"

	private sealed partial class ident_sp_label_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public ident_sp_label_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_ident_sp_label();
	partial void LeaveRule_ident_sp_label();

	// $ANTLR start "ident_sp_label"
	// MySQL51Parser.g3:420:1: ident_sp_label : (tok= ID |tok= ACTION |tok= ADDDATE |tok= AFTER |tok= AGAINST |tok= AGGREGATE |tok= ALGORITHM |tok= ANY |tok= AT |tok= AUTHORS |tok= AUTO_INCREMENT |tok= AUTOEXTEND_SIZE |tok= AVG_ROW_LENGTH |tok= AVG |tok= BINLOG |tok= BIT |tok= BLOCK |tok= BOOL |tok= BOOLEAN |tok= BTREE |tok= CASCADED |tok= CHAIN |tok= CHANGED |tok= CIPHER |tok= CLIENT |tok= COALESCE |tok= CODE |tok= COLLATION |tok= COLUMNS |tok= FIELDS |tok= COMMITTED |tok= COMPACT |tok= COMPLETION |tok= COMPRESSED |tok= CONCURRENT |tok= CONNECTION |tok= CONSISTENT |tok= CONTEXT |tok= CONTRIBUTORS |tok= CPU |tok= CUBE |tok= DATA |tok= DATAFILE |tok= DATETIME |tok= DATE |tok= DAY |tok= DEFINER |tok= DELAY_KEY_WRITE |tok= DES_KEY_FILE |tok= DIRECTORY |tok= DISABLE |tok= DISCARD |tok= DISK |tok= DUMPFILE |tok= DUPLICATE |tok= DYNAMIC |tok= ENDS |tok= ENUM |tok= ENGINE |tok= ENGINES |tok= ERRORS |tok= ESCAPE |tok= EVENT |tok= EVENTS |tok= EVERY |tok= EXPANSION |tok= EXTENDED |tok= EXTENT_SIZE |tok= FAULTS |tok= FAST |tok= FOUND |tok= ENABLE |tok= FULL |tok= FILE |tok= FIRST |tok= FIXED |tok= FRAC_SECOND |tok= GEOMETRY |tok= GEOMETRYCOLLECTION |tok= GET_FORMAT |tok= GRANTS |tok= GLOBAL |tok= HASH |tok= HOSTS |tok= HOUR |tok= IDENTIFIED |tok= INVOKER |tok= IMPORT |tok= INDEXES |tok= INITIAL_SIZE |tok= IO |tok= IPC |tok= ISOLATION |tok= ISSUER |tok= INNOBASE |tok= INSERT_METHOD |tok= KEY_BLOCK_SIZE |tok= LAST |tok= LEAVES |tok= LESS |tok= LEVEL |tok= LINESTRING |tok= LIST |tok= LOCAL |tok= LOCKS |tok= LOGFILE |tok= LOGS |tok= MAX_ROWS |tok= MASTER |tok= MASTER_HOST |tok= MASTER_PORT |tok= MASTER_LOG_FILE |tok= MASTER_LOG_POS |tok= MASTER_USER |tok= MASTER_PASSWORD |tok= MASTER_SERVER_ID |tok= MASTER_CONNECT_RETRY |tok= MASTER_SSL |tok= MASTER_SSL_CA |tok= MASTER_SSL_CAPATH |tok= MASTER_SSL_CERT |tok= MASTER_SSL_CIPHER |tok= MASTER_SSL_KEY |tok= MAX_CONNECTIONS_PER_HOUR |tok= MAX_QUERIES_PER_HOUR |tok= MAX_SIZE |tok= MAX_UPDATES_PER_HOUR |tok= MAX_USER_CONNECTIONS |tok= MAX_VALUE |tok= MEDIUM |tok= MEMORY |tok= MERGE |tok= MICROSECOND |tok= MIGRATE |tok= MINUTE |tok= MIN_ROWS |tok= MODIFY |tok= MODE |tok= MONTH |tok= MULTILINESTRING |tok= MULTIPOINT |tok= MULTIPOLYGON |tok= MUTEX |tok= NAME |tok= NAMES |tok= NATIONAL |tok= NCHAR |tok= NDBCLUSTER |tok= NEXT |tok= NEW |tok= NO_WAIT |tok= NODEGROUP |tok= NONE |tok= NVARCHAR |tok= OFFSET |tok= OLD_PASSWORD |tok= ONE_SHOT |tok= ONE |tok= PACK_KEYS |tok= PAGE |tok= PARTIAL |tok= PARTITIONING |tok= PARTITIONS |tok= PASSWORD |tok= PHASE |tok= PLUGIN |tok= PLUGINS |tok= POINT |tok= POLYGON |tok= PRESERVE |tok= PREV |tok= PRIVILEGES |tok= PROCESS |tok= PROCESSLIST |tok= PROFILE |tok= PROFILES |tok= QUARTER |tok= QUERY |tok= QUICK |tok= REBUILD |tok= RECOVER |tok= REDO_BUFFER_SIZE |tok= REDOFILE |tok= REDUNDANT |tok= RELAY_LOG_FILE |tok= RELAY_LOG_POS |tok= RELAY_THREAD |tok= RELOAD |tok= REORGANIZE |tok= REPEATABLE |tok= REPLICATION |tok= RESOURCES |tok= RESUME |tok= RETURNS |tok= ROLLUP |tok= ROUTINE |tok= ROWS |tok= ROW_FORMAT |tok= ROW |tok= RTREE |tok= SCHEDULE |tok= SECOND |tok= SERIAL |tok= SERIALIZABLE |tok= SESSION |tok= SIMPLE |tok= SHARE |tok= SHUTDOWN |tok= SNAPSHOT |tok= SOUNDS |tok= SOURCE |tok= SQL_CACHE |tok= SQL_BUFFER_RESULT |tok= SQL_NO_CACHE |tok= SQL_THREAD |tok= STARTS |tok= STATUS |tok= STORAGE |tok= STRING_KEYWORD |tok= SUBDATE |tok= SUBJECT |tok= SUBPARTITION |tok= SUBPARTITIONS |tok= SUPER |tok= SUSPEND |tok= SWAPS |tok= SWITCHES |tok= TABLES |tok= TABLESPACE |tok= TEMPORARY |tok= TEMPTABLE |tok= TEXT |tok= THAN |tok= TRANSACTION |tok= TRANSACTIONAL |tok= TRIGGERS |tok= TIMESTAMP |tok= TIMESTAMP_ADD |tok= TIMESTAMP_DIFF |tok= TIME |tok= TYPES |tok= TYPE |tok= UDF_RETURNS |tok= FUNCTION |tok= UNCOMMITTED |tok= UNDEFINED |tok= UNDO_BUFFER_SIZE |tok= UNDOFILE |tok= UNKNOWN |tok= UNTIL |tok= USER |tok= USE_FRM |tok= VARIABLES |tok= VIEW |tok= VALUE |tok= WARNINGS |tok= WAIT |tok= WEEK |tok= WORK |tok= X509 |tok= YEAR ) ;
	[GrammarRule("ident_sp_label")]
	private MySQL51Parser.ident_sp_label_return ident_sp_label()
	{
		EnterRule_ident_sp_label();
		EnterRule("ident_sp_label", 33);
		TraceIn("ident_sp_label", 33);
		MySQL51Parser.ident_sp_label_return retval = new MySQL51Parser.ident_sp_label_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken tok = default(IToken);

		object tok_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "ident_sp_label");
		DebugLocation(420, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:421:2: ( (tok= ID |tok= ACTION |tok= ADDDATE |tok= AFTER |tok= AGAINST |tok= AGGREGATE |tok= ALGORITHM |tok= ANY |tok= AT |tok= AUTHORS |tok= AUTO_INCREMENT |tok= AUTOEXTEND_SIZE |tok= AVG_ROW_LENGTH |tok= AVG |tok= BINLOG |tok= BIT |tok= BLOCK |tok= BOOL |tok= BOOLEAN |tok= BTREE |tok= CASCADED |tok= CHAIN |tok= CHANGED |tok= CIPHER |tok= CLIENT |tok= COALESCE |tok= CODE |tok= COLLATION |tok= COLUMNS |tok= FIELDS |tok= COMMITTED |tok= COMPACT |tok= COMPLETION |tok= COMPRESSED |tok= CONCURRENT |tok= CONNECTION |tok= CONSISTENT |tok= CONTEXT |tok= CONTRIBUTORS |tok= CPU |tok= CUBE |tok= DATA |tok= DATAFILE |tok= DATETIME |tok= DATE |tok= DAY |tok= DEFINER |tok= DELAY_KEY_WRITE |tok= DES_KEY_FILE |tok= DIRECTORY |tok= DISABLE |tok= DISCARD |tok= DISK |tok= DUMPFILE |tok= DUPLICATE |tok= DYNAMIC |tok= ENDS |tok= ENUM |tok= ENGINE |tok= ENGINES |tok= ERRORS |tok= ESCAPE |tok= EVENT |tok= EVENTS |tok= EVERY |tok= EXPANSION |tok= EXTENDED |tok= EXTENT_SIZE |tok= FAULTS |tok= FAST |tok= FOUND |tok= ENABLE |tok= FULL |tok= FILE |tok= FIRST |tok= FIXED |tok= FRAC_SECOND |tok= GEOMETRY |tok= GEOMETRYCOLLECTION |tok= GET_FORMAT |tok= GRANTS |tok= GLOBAL |tok= HASH |tok= HOSTS |tok= HOUR |tok= IDENTIFIED |tok= INVOKER |tok= IMPORT |tok= INDEXES |tok= INITIAL_SIZE |tok= IO |tok= IPC |tok= ISOLATION |tok= ISSUER |tok= INNOBASE |tok= INSERT_METHOD |tok= KEY_BLOCK_SIZE |tok= LAST |tok= LEAVES |tok= LESS |tok= LEVEL |tok= LINESTRING |tok= LIST |tok= LOCAL |tok= LOCKS |tok= LOGFILE |tok= LOGS |tok= MAX_ROWS |tok= MASTER |tok= MASTER_HOST |tok= MASTER_PORT |tok= MASTER_LOG_FILE |tok= MASTER_LOG_POS |tok= MASTER_USER |tok= MASTER_PASSWORD |tok= MASTER_SERVER_ID |tok= MASTER_CONNECT_RETRY |tok= MASTER_SSL |tok= MASTER_SSL_CA |tok= MASTER_SSL_CAPATH |tok= MASTER_SSL_CERT |tok= MASTER_SSL_CIPHER |tok= MASTER_SSL_KEY |tok= MAX_CONNECTIONS_PER_HOUR |tok= MAX_QUERIES_PER_HOUR |tok= MAX_SIZE |tok= MAX_UPDATES_PER_HOUR |tok= MAX_USER_CONNECTIONS |tok= MAX_VALUE |tok= MEDIUM |tok= MEMORY |tok= MERGE |tok= MICROSECOND |tok= MIGRATE |tok= MINUTE |tok= MIN_ROWS |tok= MODIFY |tok= MODE |tok= MONTH |tok= MULTILINESTRING |tok= MULTIPOINT |tok= MULTIPOLYGON |tok= MUTEX |tok= NAME |tok= NAMES |tok= NATIONAL |tok= NCHAR |tok= NDBCLUSTER |tok= NEXT |tok= NEW |tok= NO_WAIT |tok= NODEGROUP |tok= NONE |tok= NVARCHAR |tok= OFFSET |tok= OLD_PASSWORD |tok= ONE_SHOT |tok= ONE |tok= PACK_KEYS |tok= PAGE |tok= PARTIAL |tok= PARTITIONING |tok= PARTITIONS |tok= PASSWORD |tok= PHASE |tok= PLUGIN |tok= PLUGINS |tok= POINT |tok= POLYGON |tok= PRESERVE |tok= PREV |tok= PRIVILEGES |tok= PROCESS |tok= PROCESSLIST |tok= PROFILE |tok= PROFILES |tok= QUARTER |tok= QUERY |tok= QUICK |tok= REBUILD |tok= RECOVER |tok= REDO_BUFFER_SIZE |tok= REDOFILE |tok= REDUNDANT |tok= RELAY_LOG_FILE |tok= RELAY_LOG_POS |tok= RELAY_THREAD |tok= RELOAD |tok= REORGANIZE |tok= REPEATABLE |tok= REPLICATION |tok= RESOURCES |tok= RESUME |tok= RETURNS |tok= ROLLUP |tok= ROUTINE |tok= ROWS |tok= ROW_FORMAT |tok= ROW |tok= RTREE |tok= SCHEDULE |tok= SECOND |tok= SERIAL |tok= SERIALIZABLE |tok= SESSION |tok= SIMPLE |tok= SHARE |tok= SHUTDOWN |tok= SNAPSHOT |tok= SOUNDS |tok= SOURCE |tok= SQL_CACHE |tok= SQL_BUFFER_RESULT |tok= SQL_NO_CACHE |tok= SQL_THREAD |tok= STARTS |tok= STATUS |tok= STORAGE |tok= STRING_KEYWORD |tok= SUBDATE |tok= SUBJECT |tok= SUBPARTITION |tok= SUBPARTITIONS |tok= SUPER |tok= SUSPEND |tok= SWAPS |tok= SWITCHES |tok= TABLES |tok= TABLESPACE |tok= TEMPORARY |tok= TEMPTABLE |tok= TEXT |tok= THAN |tok= TRANSACTION |tok= TRANSACTIONAL |tok= TRIGGERS |tok= TIMESTAMP |tok= TIMESTAMP_ADD |tok= TIMESTAMP_DIFF |tok= TIME |tok= TYPES |tok= TYPE |tok= UDF_RETURNS |tok= FUNCTION |tok= UNCOMMITTED |tok= UNDEFINED |tok= UNDO_BUFFER_SIZE |tok= UNDOFILE |tok= UNKNOWN |tok= UNTIL |tok= USER |tok= USE_FRM |tok= VARIABLES |tok= VIEW |tok= VALUE |tok= WARNINGS |tok= WAIT |tok= WEEK |tok= WORK |tok= X509 |tok= YEAR ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:422:2: (tok= ID |tok= ACTION |tok= ADDDATE |tok= AFTER |tok= AGAINST |tok= AGGREGATE |tok= ALGORITHM |tok= ANY |tok= AT |tok= AUTHORS |tok= AUTO_INCREMENT |tok= AUTOEXTEND_SIZE |tok= AVG_ROW_LENGTH |tok= AVG |tok= BINLOG |tok= BIT |tok= BLOCK |tok= BOOL |tok= BOOLEAN |tok= BTREE |tok= CASCADED |tok= CHAIN |tok= CHANGED |tok= CIPHER |tok= CLIENT |tok= COALESCE |tok= CODE |tok= COLLATION |tok= COLUMNS |tok= FIELDS |tok= COMMITTED |tok= COMPACT |tok= COMPLETION |tok= COMPRESSED |tok= CONCURRENT |tok= CONNECTION |tok= CONSISTENT |tok= CONTEXT |tok= CONTRIBUTORS |tok= CPU |tok= CUBE |tok= DATA |tok= DATAFILE |tok= DATETIME |tok= DATE |tok= DAY |tok= DEFINER |tok= DELAY_KEY_WRITE |tok= DES_KEY_FILE |tok= DIRECTORY |tok= DISABLE |tok= DISCARD |tok= DISK |tok= DUMPFILE |tok= DUPLICATE |tok= DYNAMIC |tok= ENDS |tok= ENUM |tok= ENGINE |tok= ENGINES |tok= ERRORS |tok= ESCAPE |tok= EVENT |tok= EVENTS |tok= EVERY |tok= EXPANSION |tok= EXTENDED |tok= EXTENT_SIZE |tok= FAULTS |tok= FAST |tok= FOUND |tok= ENABLE |tok= FULL |tok= FILE |tok= FIRST |tok= FIXED |tok= FRAC_SECOND |tok= GEOMETRY |tok= GEOMETRYCOLLECTION |tok= GET_FORMAT |tok= GRANTS |tok= GLOBAL |tok= HASH |tok= HOSTS |tok= HOUR |tok= IDENTIFIED |tok= INVOKER |tok= IMPORT |tok= INDEXES |tok= INITIAL_SIZE |tok= IO |tok= IPC |tok= ISOLATION |tok= ISSUER |tok= INNOBASE |tok= INSERT_METHOD |tok= KEY_BLOCK_SIZE |tok= LAST |tok= LEAVES |tok= LESS |tok= LEVEL |tok= LINESTRING |tok= LIST |tok= LOCAL |tok= LOCKS |tok= LOGFILE |tok= LOGS |tok= MAX_ROWS |tok= MASTER |tok= MASTER_HOST |tok= MASTER_PORT |tok= MASTER_LOG_FILE |tok= MASTER_LOG_POS |tok= MASTER_USER |tok= MASTER_PASSWORD |tok= MASTER_SERVER_ID |tok= MASTER_CONNECT_RETRY |tok= MASTER_SSL |tok= MASTER_SSL_CA |tok= MASTER_SSL_CAPATH |tok= MASTER_SSL_CERT |tok= MASTER_SSL_CIPHER |tok= MASTER_SSL_KEY |tok= MAX_CONNECTIONS_PER_HOUR |tok= MAX_QUERIES_PER_HOUR |tok= MAX_SIZE |tok= MAX_UPDATES_PER_HOUR |tok= MAX_USER_CONNECTIONS |tok= MAX_VALUE |tok= MEDIUM |tok= MEMORY |tok= MERGE |tok= MICROSECOND |tok= MIGRATE |tok= MINUTE |tok= MIN_ROWS |tok= MODIFY |tok= MODE |tok= MONTH |tok= MULTILINESTRING |tok= MULTIPOINT |tok= MULTIPOLYGON |tok= MUTEX |tok= NAME |tok= NAMES |tok= NATIONAL |tok= NCHAR |tok= NDBCLUSTER |tok= NEXT |tok= NEW |tok= NO_WAIT |tok= NODEGROUP |tok= NONE |tok= NVARCHAR |tok= OFFSET |tok= OLD_PASSWORD |tok= ONE_SHOT |tok= ONE |tok= PACK_KEYS |tok= PAGE |tok= PARTIAL |tok= PARTITIONING |tok= PARTITIONS |tok= PASSWORD |tok= PHASE |tok= PLUGIN |tok= PLUGINS |tok= POINT |tok= POLYGON |tok= PRESERVE |tok= PREV |tok= PRIVILEGES |tok= PROCESS |tok= PROCESSLIST |tok= PROFILE |tok= PROFILES |tok= QUARTER |tok= QUERY |tok= QUICK |tok= REBUILD |tok= RECOVER |tok= REDO_BUFFER_SIZE |tok= REDOFILE |tok= REDUNDANT |tok= RELAY_LOG_FILE |tok= RELAY_LOG_POS |tok= RELAY_THREAD |tok= RELOAD |tok= REORGANIZE |tok= REPEATABLE |tok= REPLICATION |tok= RESOURCES |tok= RESUME |tok= RETURNS |tok= ROLLUP |tok= ROUTINE |tok= ROWS |tok= ROW_FORMAT |tok= ROW |tok= RTREE |tok= SCHEDULE |tok= SECOND |tok= SERIAL |tok= SERIALIZABLE |tok= SESSION |tok= SIMPLE |tok= SHARE |tok= SHUTDOWN |tok= SNAPSHOT |tok= SOUNDS |tok= SOURCE |tok= SQL_CACHE |tok= SQL_BUFFER_RESULT |tok= SQL_NO_CACHE |tok= SQL_THREAD |tok= STARTS |tok= STATUS |tok= STORAGE |tok= STRING_KEYWORD |tok= SUBDATE |tok= SUBJECT |tok= SUBPARTITION |tok= SUBPARTITIONS |tok= SUPER |tok= SUSPEND |tok= SWAPS |tok= SWITCHES |tok= TABLES |tok= TABLESPACE |tok= TEMPORARY |tok= TEMPTABLE |tok= TEXT |tok= THAN |tok= TRANSACTION |tok= TRANSACTIONAL |tok= TRIGGERS |tok= TIMESTAMP |tok= TIMESTAMP_ADD |tok= TIMESTAMP_DIFF |tok= TIME |tok= TYPES |tok= TYPE |tok= UDF_RETURNS |tok= FUNCTION |tok= UNCOMMITTED |tok= UNDEFINED |tok= UNDO_BUFFER_SIZE |tok= UNDOFILE |tok= UNKNOWN |tok= UNTIL |tok= USER |tok= USE_FRM |tok= VARIABLES |tok= VIEW |tok= VALUE |tok= WARNINGS |tok= WAIT |tok= WEEK |tok= WORK |tok= X509 |tok= YEAR )
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(422, 2);
			// MySQL51Parser.g3:422:2: (tok= ID |tok= ACTION |tok= ADDDATE |tok= AFTER |tok= AGAINST |tok= AGGREGATE |tok= ALGORITHM |tok= ANY |tok= AT |tok= AUTHORS |tok= AUTO_INCREMENT |tok= AUTOEXTEND_SIZE |tok= AVG_ROW_LENGTH |tok= AVG |tok= BINLOG |tok= BIT |tok= BLOCK |tok= BOOL |tok= BOOLEAN |tok= BTREE |tok= CASCADED |tok= CHAIN |tok= CHANGED |tok= CIPHER |tok= CLIENT |tok= COALESCE |tok= CODE |tok= COLLATION |tok= COLUMNS |tok= FIELDS |tok= COMMITTED |tok= COMPACT |tok= COMPLETION |tok= COMPRESSED |tok= CONCURRENT |tok= CONNECTION |tok= CONSISTENT |tok= CONTEXT |tok= CONTRIBUTORS |tok= CPU |tok= CUBE |tok= DATA |tok= DATAFILE |tok= DATETIME |tok= DATE |tok= DAY |tok= DEFINER |tok= DELAY_KEY_WRITE |tok= DES_KEY_FILE |tok= DIRECTORY |tok= DISABLE |tok= DISCARD |tok= DISK |tok= DUMPFILE |tok= DUPLICATE |tok= DYNAMIC |tok= ENDS |tok= ENUM |tok= ENGINE |tok= ENGINES |tok= ERRORS |tok= ESCAPE |tok= EVENT |tok= EVENTS |tok= EVERY |tok= EXPANSION |tok= EXTENDED |tok= EXTENT_SIZE |tok= FAULTS |tok= FAST |tok= FOUND |tok= ENABLE |tok= FULL |tok= FILE |tok= FIRST |tok= FIXED |tok= FRAC_SECOND |tok= GEOMETRY |tok= GEOMETRYCOLLECTION |tok= GET_FORMAT |tok= GRANTS |tok= GLOBAL |tok= HASH |tok= HOSTS |tok= HOUR |tok= IDENTIFIED |tok= INVOKER |tok= IMPORT |tok= INDEXES |tok= INITIAL_SIZE |tok= IO |tok= IPC |tok= ISOLATION |tok= ISSUER |tok= INNOBASE |tok= INSERT_METHOD |tok= KEY_BLOCK_SIZE |tok= LAST |tok= LEAVES |tok= LESS |tok= LEVEL |tok= LINESTRING |tok= LIST |tok= LOCAL |tok= LOCKS |tok= LOGFILE |tok= LOGS |tok= MAX_ROWS |tok= MASTER |tok= MASTER_HOST |tok= MASTER_PORT |tok= MASTER_LOG_FILE |tok= MASTER_LOG_POS |tok= MASTER_USER |tok= MASTER_PASSWORD |tok= MASTER_SERVER_ID |tok= MASTER_CONNECT_RETRY |tok= MASTER_SSL |tok= MASTER_SSL_CA |tok= MASTER_SSL_CAPATH |tok= MASTER_SSL_CERT |tok= MASTER_SSL_CIPHER |tok= MASTER_SSL_KEY |tok= MAX_CONNECTIONS_PER_HOUR |tok= MAX_QUERIES_PER_HOUR |tok= MAX_SIZE |tok= MAX_UPDATES_PER_HOUR |tok= MAX_USER_CONNECTIONS |tok= MAX_VALUE |tok= MEDIUM |tok= MEMORY |tok= MERGE |tok= MICROSECOND |tok= MIGRATE |tok= MINUTE |tok= MIN_ROWS |tok= MODIFY |tok= MODE |tok= MONTH |tok= MULTILINESTRING |tok= MULTIPOINT |tok= MULTIPOLYGON |tok= MUTEX |tok= NAME |tok= NAMES |tok= NATIONAL |tok= NCHAR |tok= NDBCLUSTER |tok= NEXT |tok= NEW |tok= NO_WAIT |tok= NODEGROUP |tok= NONE |tok= NVARCHAR |tok= OFFSET |tok= OLD_PASSWORD |tok= ONE_SHOT |tok= ONE |tok= PACK_KEYS |tok= PAGE |tok= PARTIAL |tok= PARTITIONING |tok= PARTITIONS |tok= PASSWORD |tok= PHASE |tok= PLUGIN |tok= PLUGINS |tok= POINT |tok= POLYGON |tok= PRESERVE |tok= PREV |tok= PRIVILEGES |tok= PROCESS |tok= PROCESSLIST |tok= PROFILE |tok= PROFILES |tok= QUARTER |tok= QUERY |tok= QUICK |tok= REBUILD |tok= RECOVER |tok= REDO_BUFFER_SIZE |tok= REDOFILE |tok= REDUNDANT |tok= RELAY_LOG_FILE |tok= RELAY_LOG_POS |tok= RELAY_THREAD |tok= RELOAD |tok= REORGANIZE |tok= REPEATABLE |tok= REPLICATION |tok= RESOURCES |tok= RESUME |tok= RETURNS |tok= ROLLUP |tok= ROUTINE |tok= ROWS |tok= ROW_FORMAT |tok= ROW |tok= RTREE |tok= SCHEDULE |tok= SECOND |tok= SERIAL |tok= SERIALIZABLE |tok= SESSION |tok= SIMPLE |tok= SHARE |tok= SHUTDOWN |tok= SNAPSHOT |tok= SOUNDS |tok= SOURCE |tok= SQL_CACHE |tok= SQL_BUFFER_RESULT |tok= SQL_NO_CACHE |tok= SQL_THREAD |tok= STARTS |tok= STATUS |tok= STORAGE |tok= STRING_KEYWORD |tok= SUBDATE |tok= SUBJECT |tok= SUBPARTITION |tok= SUBPARTITIONS |tok= SUPER |tok= SUSPEND |tok= SWAPS |tok= SWITCHES |tok= TABLES |tok= TABLESPACE |tok= TEMPORARY |tok= TEMPTABLE |tok= TEXT |tok= THAN |tok= TRANSACTION |tok= TRANSACTIONAL |tok= TRIGGERS |tok= TIMESTAMP |tok= TIMESTAMP_ADD |tok= TIMESTAMP_DIFF |tok= TIME |tok= TYPES |tok= TYPE |tok= UDF_RETURNS |tok= FUNCTION |tok= UNCOMMITTED |tok= UNDEFINED |tok= UNDO_BUFFER_SIZE |tok= UNDOFILE |tok= UNKNOWN |tok= UNTIL |tok= USER |tok= USE_FRM |tok= VARIABLES |tok= VIEW |tok= VALUE |tok= WARNINGS |tok= WAIT |tok= WEEK |tok= WORK |tok= X509 |tok= YEAR )
			int alt105=261;
			try { DebugEnterSubRule(105);
			try { DebugEnterDecision(105, false);
			switch (input.LA(1))
			{
			case ID:
				{
				alt105 = 1;
				}
				break;
			case ACTION:
				{
				alt105 = 2;
				}
				break;
			case ADDDATE:
				{
				alt105 = 3;
				}
				break;
			case AFTER:
				{
				alt105 = 4;
				}
				break;
			case AGAINST:
				{
				alt105 = 5;
				}
				break;
			case AGGREGATE:
				{
				alt105 = 6;
				}
				break;
			case ALGORITHM:
				{
				alt105 = 7;
				}
				break;
			case ANY:
				{
				alt105 = 8;
				}
				break;
			case AT:
				{
				alt105 = 9;
				}
				break;
			case AUTHORS:
				{
				alt105 = 10;
				}
				break;
			case AUTO_INCREMENT:
				{
				alt105 = 11;
				}
				break;
			case AUTOEXTEND_SIZE:
				{
				alt105 = 12;
				}
				break;
			case AVG_ROW_LENGTH:
				{
				alt105 = 13;
				}
				break;
			case AVG:
				{
				alt105 = 14;
				}
				break;
			case BINLOG:
				{
				alt105 = 15;
				}
				break;
			case BIT:
				{
				alt105 = 16;
				}
				break;
			case BLOCK:
				{
				alt105 = 17;
				}
				break;
			case BOOL:
				{
				alt105 = 18;
				}
				break;
			case BOOLEAN:
				{
				alt105 = 19;
				}
				break;
			case BTREE:
				{
				alt105 = 20;
				}
				break;
			case CASCADED:
				{
				alt105 = 21;
				}
				break;
			case CHAIN:
				{
				alt105 = 22;
				}
				break;
			case CHANGED:
				{
				alt105 = 23;
				}
				break;
			case CIPHER:
				{
				alt105 = 24;
				}
				break;
			case CLIENT:
				{
				alt105 = 25;
				}
				break;
			case COALESCE:
				{
				alt105 = 26;
				}
				break;
			case CODE:
				{
				alt105 = 27;
				}
				break;
			case COLLATION:
				{
				alt105 = 28;
				}
				break;
			case COLUMNS:
				{
				alt105 = 29;
				}
				break;
			case FIELDS:
				{
				alt105 = 30;
				}
				break;
			case COMMITTED:
				{
				alt105 = 31;
				}
				break;
			case COMPACT:
				{
				alt105 = 32;
				}
				break;
			case COMPLETION:
				{
				alt105 = 33;
				}
				break;
			case COMPRESSED:
				{
				alt105 = 34;
				}
				break;
			case CONCURRENT:
				{
				alt105 = 35;
				}
				break;
			case CONNECTION:
				{
				alt105 = 36;
				}
				break;
			case CONSISTENT:
				{
				alt105 = 37;
				}
				break;
			case CONTEXT:
				{
				alt105 = 38;
				}
				break;
			case CONTRIBUTORS:
				{
				alt105 = 39;
				}
				break;
			case CPU:
				{
				alt105 = 40;
				}
				break;
			case CUBE:
				{
				alt105 = 41;
				}
				break;
			case DATA:
				{
				alt105 = 42;
				}
				break;
			case DATAFILE:
				{
				alt105 = 43;
				}
				break;
			case DATETIME:
				{
				alt105 = 44;
				}
				break;
			case DATE:
				{
				alt105 = 45;
				}
				break;
			case DAY:
				{
				alt105 = 46;
				}
				break;
			case DEFINER:
				{
				alt105 = 47;
				}
				break;
			case DELAY_KEY_WRITE:
				{
				alt105 = 48;
				}
				break;
			case DES_KEY_FILE:
				{
				alt105 = 49;
				}
				break;
			case DIRECTORY:
				{
				alt105 = 50;
				}
				break;
			case DISABLE:
				{
				alt105 = 51;
				}
				break;
			case DISCARD:
				{
				alt105 = 52;
				}
				break;
			case DISK:
				{
				alt105 = 53;
				}
				break;
			case DUMPFILE:
				{
				alt105 = 54;
				}
				break;
			case DUPLICATE:
				{
				alt105 = 55;
				}
				break;
			case DYNAMIC:
				{
				alt105 = 56;
				}
				break;
			case ENDS:
				{
				alt105 = 57;
				}
				break;
			case ENUM:
				{
				alt105 = 58;
				}
				break;
			case ENGINE:
				{
				alt105 = 59;
				}
				break;
			case ENGINES:
				{
				alt105 = 60;
				}
				break;
			case ERRORS:
				{
				alt105 = 61;
				}
				break;
			case ESCAPE:
				{
				alt105 = 62;
				}
				break;
			case EVENT:
				{
				alt105 = 63;
				}
				break;
			case EVENTS:
				{
				alt105 = 64;
				}
				break;
			case EVERY:
				{
				alt105 = 65;
				}
				break;
			case EXPANSION:
				{
				alt105 = 66;
				}
				break;
			case EXTENDED:
				{
				alt105 = 67;
				}
				break;
			case EXTENT_SIZE:
				{
				alt105 = 68;
				}
				break;
			case FAULTS:
				{
				alt105 = 69;
				}
				break;
			case FAST:
				{
				alt105 = 70;
				}
				break;
			case FOUND:
				{
				alt105 = 71;
				}
				break;
			case ENABLE:
				{
				alt105 = 72;
				}
				break;
			case FULL:
				{
				alt105 = 73;
				}
				break;
			case FILE:
				{
				alt105 = 74;
				}
				break;
			case FIRST:
				{
				alt105 = 75;
				}
				break;
			case FIXED:
				{
				alt105 = 76;
				}
				break;
			case FRAC_SECOND:
				{
				alt105 = 77;
				}
				break;
			case GEOMETRY:
				{
				alt105 = 78;
				}
				break;
			case GEOMETRYCOLLECTION:
				{
				alt105 = 79;
				}
				break;
			case GET_FORMAT:
				{
				alt105 = 80;
				}
				break;
			case GRANTS:
				{
				alt105 = 81;
				}
				break;
			case GLOBAL:
				{
				alt105 = 82;
				}
				break;
			case HASH:
				{
				alt105 = 83;
				}
				break;
			case HOSTS:
				{
				alt105 = 84;
				}
				break;
			case HOUR:
				{
				alt105 = 85;
				}
				break;
			case IDENTIFIED:
				{
				alt105 = 86;
				}
				break;
			case INVOKER:
				{
				alt105 = 87;
				}
				break;
			case IMPORT:
				{
				alt105 = 88;
				}
				break;
			case INDEXES:
				{
				alt105 = 89;
				}
				break;
			case INITIAL_SIZE:
				{
				alt105 = 90;
				}
				break;
			case IO:
				{
				alt105 = 91;
				}
				break;
			case IPC:
				{
				alt105 = 92;
				}
				break;
			case ISOLATION:
				{
				alt105 = 93;
				}
				break;
			case ISSUER:
				{
				alt105 = 94;
				}
				break;
			case INNOBASE:
				{
				alt105 = 95;
				}
				break;
			case INSERT_METHOD:
				{
				alt105 = 96;
				}
				break;
			case KEY_BLOCK_SIZE:
				{
				alt105 = 97;
				}
				break;
			case LAST:
				{
				alt105 = 98;
				}
				break;
			case LEAVES:
				{
				alt105 = 99;
				}
				break;
			case LESS:
				{
				alt105 = 100;
				}
				break;
			case LEVEL:
				{
				alt105 = 101;
				}
				break;
			case LINESTRING:
				{
				alt105 = 102;
				}
				break;
			case LIST:
				{
				alt105 = 103;
				}
				break;
			case LOCAL:
				{
				alt105 = 104;
				}
				break;
			case LOCKS:
				{
				alt105 = 105;
				}
				break;
			case LOGFILE:
				{
				alt105 = 106;
				}
				break;
			case LOGS:
				{
				alt105 = 107;
				}
				break;
			case MAX_ROWS:
				{
				alt105 = 108;
				}
				break;
			case MASTER:
				{
				alt105 = 109;
				}
				break;
			case MASTER_HOST:
				{
				alt105 = 110;
				}
				break;
			case MASTER_PORT:
				{
				alt105 = 111;
				}
				break;
			case MASTER_LOG_FILE:
				{
				alt105 = 112;
				}
				break;
			case MASTER_LOG_POS:
				{
				alt105 = 113;
				}
				break;
			case MASTER_USER:
				{
				alt105 = 114;
				}
				break;
			case MASTER_PASSWORD:
				{
				alt105 = 115;
				}
				break;
			case MASTER_SERVER_ID:
				{
				alt105 = 116;
				}
				break;
			case MASTER_CONNECT_RETRY:
				{
				alt105 = 117;
				}
				break;
			case MASTER_SSL:
				{
				alt105 = 118;
				}
				break;
			case MASTER_SSL_CA:
				{
				alt105 = 119;
				}
				break;
			case MASTER_SSL_CAPATH:
				{
				alt105 = 120;
				}
				break;
			case MASTER_SSL_CERT:
				{
				alt105 = 121;
				}
				break;
			case MASTER_SSL_CIPHER:
				{
				alt105 = 122;
				}
				break;
			case MASTER_SSL_KEY:
				{
				alt105 = 123;
				}
				break;
			case MAX_CONNECTIONS_PER_HOUR:
				{
				alt105 = 124;
				}
				break;
			case MAX_QUERIES_PER_HOUR:
				{
				alt105 = 125;
				}
				break;
			case MAX_SIZE:
				{
				alt105 = 126;
				}
				break;
			case MAX_UPDATES_PER_HOUR:
				{
				alt105 = 127;
				}
				break;
			case MAX_USER_CONNECTIONS:
				{
				alt105 = 128;
				}
				break;
			case MAX_VALUE:
				{
				alt105 = 129;
				}
				break;
			case MEDIUM:
				{
				alt105 = 130;
				}
				break;
			case MEMORY:
				{
				alt105 = 131;
				}
				break;
			case MERGE:
				{
				alt105 = 132;
				}
				break;
			case MICROSECOND:
				{
				alt105 = 133;
				}
				break;
			case MIGRATE:
				{
				alt105 = 134;
				}
				break;
			case MINUTE:
				{
				alt105 = 135;
				}
				break;
			case MIN_ROWS:
				{
				alt105 = 136;
				}
				break;
			case MODIFY:
				{
				alt105 = 137;
				}
				break;
			case MODE:
				{
				alt105 = 138;
				}
				break;
			case MONTH:
				{
				alt105 = 139;
				}
				break;
			case MULTILINESTRING:
				{
				alt105 = 140;
				}
				break;
			case MULTIPOINT:
				{
				alt105 = 141;
				}
				break;
			case MULTIPOLYGON:
				{
				alt105 = 142;
				}
				break;
			case MUTEX:
				{
				alt105 = 143;
				}
				break;
			case NAME:
				{
				alt105 = 144;
				}
				break;
			case NAMES:
				{
				alt105 = 145;
				}
				break;
			case NATIONAL:
				{
				alt105 = 146;
				}
				break;
			case NCHAR:
				{
				alt105 = 147;
				}
				break;
			case NDBCLUSTER:
				{
				alt105 = 148;
				}
				break;
			case NEXT:
				{
				alt105 = 149;
				}
				break;
			case NEW:
				{
				alt105 = 150;
				}
				break;
			case NO_WAIT:
				{
				alt105 = 151;
				}
				break;
			case NODEGROUP:
				{
				alt105 = 152;
				}
				break;
			case NONE:
				{
				alt105 = 153;
				}
				break;
			case NVARCHAR:
				{
				alt105 = 154;
				}
				break;
			case OFFSET:
				{
				alt105 = 155;
				}
				break;
			case OLD_PASSWORD:
				{
				alt105 = 156;
				}
				break;
			case ONE_SHOT:
				{
				alt105 = 157;
				}
				break;
			case ONE:
				{
				alt105 = 158;
				}
				break;
			case PACK_KEYS:
				{
				alt105 = 159;
				}
				break;
			case PAGE:
				{
				alt105 = 160;
				}
				break;
			case PARTIAL:
				{
				alt105 = 161;
				}
				break;
			case PARTITIONING:
				{
				alt105 = 162;
				}
				break;
			case PARTITIONS:
				{
				alt105 = 163;
				}
				break;
			case PASSWORD:
				{
				alt105 = 164;
				}
				break;
			case PHASE:
				{
				alt105 = 165;
				}
				break;
			case PLUGIN:
				{
				alt105 = 166;
				}
				break;
			case PLUGINS:
				{
				alt105 = 167;
				}
				break;
			case POINT:
				{
				alt105 = 168;
				}
				break;
			case POLYGON:
				{
				alt105 = 169;
				}
				break;
			case PRESERVE:
				{
				alt105 = 170;
				}
				break;
			case PREV:
				{
				alt105 = 171;
				}
				break;
			case PRIVILEGES:
				{
				alt105 = 172;
				}
				break;
			case PROCESS:
				{
				alt105 = 173;
				}
				break;
			case PROCESSLIST:
				{
				alt105 = 174;
				}
				break;
			case PROFILE:
				{
				alt105 = 175;
				}
				break;
			case PROFILES:
				{
				alt105 = 176;
				}
				break;
			case QUARTER:
				{
				alt105 = 177;
				}
				break;
			case QUERY:
				{
				alt105 = 178;
				}
				break;
			case QUICK:
				{
				alt105 = 179;
				}
				break;
			case REBUILD:
				{
				alt105 = 180;
				}
				break;
			case RECOVER:
				{
				alt105 = 181;
				}
				break;
			case REDO_BUFFER_SIZE:
				{
				alt105 = 182;
				}
				break;
			case REDOFILE:
				{
				alt105 = 183;
				}
				break;
			case REDUNDANT:
				{
				alt105 = 184;
				}
				break;
			case RELAY_LOG_FILE:
				{
				alt105 = 185;
				}
				break;
			case RELAY_LOG_POS:
				{
				alt105 = 186;
				}
				break;
			case RELAY_THREAD:
				{
				alt105 = 187;
				}
				break;
			case RELOAD:
				{
				alt105 = 188;
				}
				break;
			case REORGANIZE:
				{
				alt105 = 189;
				}
				break;
			case REPEATABLE:
				{
				alt105 = 190;
				}
				break;
			case REPLICATION:
				{
				alt105 = 191;
				}
				break;
			case RESOURCES:
				{
				alt105 = 192;
				}
				break;
			case RESUME:
				{
				alt105 = 193;
				}
				break;
			case RETURNS:
				{
				alt105 = 194;
				}
				break;
			case ROLLUP:
				{
				alt105 = 195;
				}
				break;
			case ROUTINE:
				{
				alt105 = 196;
				}
				break;
			case ROWS:
				{
				alt105 = 197;
				}
				break;
			case ROW_FORMAT:
				{
				alt105 = 198;
				}
				break;
			case ROW:
				{
				alt105 = 199;
				}
				break;
			case RTREE:
				{
				alt105 = 200;
				}
				break;
			case SCHEDULE:
				{
				alt105 = 201;
				}
				break;
			case SECOND:
				{
				alt105 = 202;
				}
				break;
			case SERIAL:
				{
				alt105 = 203;
				}
				break;
			case SERIALIZABLE:
				{
				alt105 = 204;
				}
				break;
			case SESSION:
				{
				alt105 = 205;
				}
				break;
			case SIMPLE:
				{
				alt105 = 206;
				}
				break;
			case SHARE:
				{
				alt105 = 207;
				}
				break;
			case SHUTDOWN:
				{
				alt105 = 208;
				}
				break;
			case SNAPSHOT:
				{
				alt105 = 209;
				}
				break;
			case SOUNDS:
				{
				alt105 = 210;
				}
				break;
			case SOURCE:
				{
				alt105 = 211;
				}
				break;
			case SQL_CACHE:
				{
				alt105 = 212;
				}
				break;
			case SQL_BUFFER_RESULT:
				{
				alt105 = 213;
				}
				break;
			case SQL_NO_CACHE:
				{
				alt105 = 214;
				}
				break;
			case SQL_THREAD:
				{
				alt105 = 215;
				}
				break;
			case STARTS:
				{
				alt105 = 216;
				}
				break;
			case STATUS:
				{
				alt105 = 217;
				}
				break;
			case STORAGE:
				{
				alt105 = 218;
				}
				break;
			case STRING_KEYWORD:
				{
				alt105 = 219;
				}
				break;
			case SUBDATE:
				{
				alt105 = 220;
				}
				break;
			case SUBJECT:
				{
				alt105 = 221;
				}
				break;
			case SUBPARTITION:
				{
				alt105 = 222;
				}
				break;
			case SUBPARTITIONS:
				{
				alt105 = 223;
				}
				break;
			case SUPER:
				{
				alt105 = 224;
				}
				break;
			case SUSPEND:
				{
				alt105 = 225;
				}
				break;
			case SWAPS:
				{
				alt105 = 226;
				}
				break;
			case SWITCHES:
				{
				alt105 = 227;
				}
				break;
			case TABLES:
				{
				alt105 = 228;
				}
				break;
			case TABLESPACE:
				{
				alt105 = 229;
				}
				break;
			case TEMPORARY:
				{
				alt105 = 230;
				}
				break;
			case TEMPTABLE:
				{
				alt105 = 231;
				}
				break;
			case TEXT:
				{
				alt105 = 232;
				}
				break;
			case THAN:
				{
				alt105 = 233;
				}
				break;
			case TRANSACTION:
				{
				alt105 = 234;
				}
				break;
			case TRANSACTIONAL:
				{
				alt105 = 235;
				}
				break;
			case TRIGGERS:
				{
				alt105 = 236;
				}
				break;
			case TIMESTAMP:
				{
				alt105 = 237;
				}
				break;
			case TIMESTAMP_ADD:
				{
				alt105 = 238;
				}
				break;
			case TIMESTAMP_DIFF:
				{
				alt105 = 239;
				}
				break;
			case TIME:
				{
				alt105 = 240;
				}
				break;
			case TYPES:
				{
				alt105 = 241;
				}
				break;
			case TYPE:
				{
				alt105 = 242;
				}
				break;
			case UDF_RETURNS:
				{
				alt105 = 243;
				}
				break;
			case FUNCTION:
				{
				alt105 = 244;
				}
				break;
			case UNCOMMITTED:
				{
				alt105 = 245;
				}
				break;
			case UNDEFINED:
				{
				alt105 = 246;
				}
				break;
			case UNDO_BUFFER_SIZE:
				{
				alt105 = 247;
				}
				break;
			case UNDOFILE:
				{
				alt105 = 248;
				}
				break;
			case UNKNOWN:
				{
				alt105 = 249;
				}
				break;
			case UNTIL:
				{
				alt105 = 250;
				}
				break;
			case USER:
				{
				alt105 = 251;
				}
				break;
			case USE_FRM:
				{
				alt105 = 252;
				}
				break;
			case VARIABLES:
				{
				alt105 = 253;
				}
				break;
			case VIEW:
				{
				alt105 = 254;
				}
				break;
			case VALUE:
				{
				alt105 = 255;
				}
				break;
			case WARNINGS:
				{
				alt105 = 256;
				}
				break;
			case WAIT:
				{
				alt105 = 257;
				}
				break;
			case WEEK:
				{
				alt105 = 258;
				}
				break;
			case WORK:
				{
				alt105 = 259;
				}
				break;
			case X509:
				{
				alt105 = 260;
				}
				break;
			case YEAR:
				{
				alt105 = 261;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 105, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(105); }
			switch (alt105)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:422:4: tok= ID
				{
				DebugLocation(422, 7);
				tok=(IToken)Match(input,ID,Follow._ID_in_ident_sp_label4074); if (state.failed) return retval;

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:423:4: tok= ACTION
				{
				DebugLocation(423, 7);
				tok=(IToken)Match(input,ACTION,Follow._ACTION_in_ident_sp_label4082); if (state.failed) return retval;

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:424:4: tok= ADDDATE
				{
				DebugLocation(424, 7);
				tok=(IToken)Match(input,ADDDATE,Follow._ADDDATE_in_ident_sp_label4090); if (state.failed) return retval;

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:425:4: tok= AFTER
				{
				DebugLocation(425, 7);
				tok=(IToken)Match(input,AFTER,Follow._AFTER_in_ident_sp_label4098); if (state.failed) return retval;

				}
				break;
			case 5:
				DebugEnterAlt(5);
				// MySQL51Parser.g3:426:4: tok= AGAINST
				{
				DebugLocation(426, 7);
				tok=(IToken)Match(input,AGAINST,Follow._AGAINST_in_ident_sp_label4106); if (state.failed) return retval;

				}
				break;
			case 6:
				DebugEnterAlt(6);
				// MySQL51Parser.g3:427:4: tok= AGGREGATE
				{
				DebugLocation(427, 7);
				tok=(IToken)Match(input,AGGREGATE,Follow._AGGREGATE_in_ident_sp_label4114); if (state.failed) return retval;

				}
				break;
			case 7:
				DebugEnterAlt(7);
				// MySQL51Parser.g3:428:4: tok= ALGORITHM
				{
				DebugLocation(428, 7);
				tok=(IToken)Match(input,ALGORITHM,Follow._ALGORITHM_in_ident_sp_label4122); if (state.failed) return retval;

				}
				break;
			case 8:
				DebugEnterAlt(8);
				// MySQL51Parser.g3:429:4: tok= ANY
				{
				DebugLocation(429, 7);
				tok=(IToken)Match(input,ANY,Follow._ANY_in_ident_sp_label4130); if (state.failed) return retval;

				}
				break;
			case 9:
				DebugEnterAlt(9);
				// MySQL51Parser.g3:430:4: tok= AT
				{
				DebugLocation(430, 7);
				tok=(IToken)Match(input,AT,Follow._AT_in_ident_sp_label4138); if (state.failed) return retval;

				}
				break;
			case 10:
				DebugEnterAlt(10);
				// MySQL51Parser.g3:431:4: tok= AUTHORS
				{
				DebugLocation(431, 7);
				tok=(IToken)Match(input,AUTHORS,Follow._AUTHORS_in_ident_sp_label4146); if (state.failed) return retval;

				}
				break;
			case 11:
				DebugEnterAlt(11);
				// MySQL51Parser.g3:432:4: tok= AUTO_INCREMENT
				{
				DebugLocation(432, 7);
				tok=(IToken)Match(input,AUTO_INCREMENT,Follow._AUTO_INCREMENT_in_ident_sp_label4154); if (state.failed) return retval;

				}
				break;
			case 12:
				DebugEnterAlt(12);
				// MySQL51Parser.g3:433:4: tok= AUTOEXTEND_SIZE
				{
				DebugLocation(433, 7);
				tok=(IToken)Match(input,AUTOEXTEND_SIZE,Follow._AUTOEXTEND_SIZE_in_ident_sp_label4162); if (state.failed) return retval;

				}
				break;
			case 13:
				DebugEnterAlt(13);
				// MySQL51Parser.g3:434:4: tok= AVG_ROW_LENGTH
				{
				DebugLocation(434, 7);
				tok=(IToken)Match(input,AVG_ROW_LENGTH,Follow._AVG_ROW_LENGTH_in_ident_sp_label4170); if (state.failed) return retval;

				}
				break;
			case 14:
				DebugEnterAlt(14);
				// MySQL51Parser.g3:435:4: tok= AVG
				{
				DebugLocation(435, 7);
				tok=(IToken)Match(input,AVG,Follow._AVG_in_ident_sp_label4178); if (state.failed) return retval;

				}
				break;
			case 15:
				DebugEnterAlt(15);
				// MySQL51Parser.g3:436:4: tok= BINLOG
				{
				DebugLocation(436, 7);
				tok=(IToken)Match(input,BINLOG,Follow._BINLOG_in_ident_sp_label4186); if (state.failed) return retval;

				}
				break;
			case 16:
				DebugEnterAlt(16);
				// MySQL51Parser.g3:437:4: tok= BIT
				{
				DebugLocation(437, 7);
				tok=(IToken)Match(input,BIT,Follow._BIT_in_ident_sp_label4194); if (state.failed) return retval;

				}
				break;
			case 17:
				DebugEnterAlt(17);
				// MySQL51Parser.g3:438:4: tok= BLOCK
				{
				DebugLocation(438, 7);
				tok=(IToken)Match(input,BLOCK,Follow._BLOCK_in_ident_sp_label4202); if (state.failed) return retval;

				}
				break;
			case 18:
				DebugEnterAlt(18);
				// MySQL51Parser.g3:439:4: tok= BOOL
				{
				DebugLocation(439, 7);
				tok=(IToken)Match(input,BOOL,Follow._BOOL_in_ident_sp_label4210); if (state.failed) return retval;

				}
				break;
			case 19:
				DebugEnterAlt(19);
				// MySQL51Parser.g3:440:4: tok= BOOLEAN
				{
				DebugLocation(440, 7);
				tok=(IToken)Match(input,BOOLEAN,Follow._BOOLEAN_in_ident_sp_label4218); if (state.failed) return retval;

				}
				break;
			case 20:
				DebugEnterAlt(20);
				// MySQL51Parser.g3:441:4: tok= BTREE
				{
				DebugLocation(441, 7);
				tok=(IToken)Match(input,BTREE,Follow._BTREE_in_ident_sp_label4226); if (state.failed) return retval;

				}
				break;
			case 21:
				DebugEnterAlt(21);
				// MySQL51Parser.g3:442:4: tok= CASCADED
				{
				DebugLocation(442, 7);
				tok=(IToken)Match(input,CASCADED,Follow._CASCADED_in_ident_sp_label4234); if (state.failed) return retval;

				}
				break;
			case 22:
				DebugEnterAlt(22);
				// MySQL51Parser.g3:443:4: tok= CHAIN
				{
				DebugLocation(443, 7);
				tok=(IToken)Match(input,CHAIN,Follow._CHAIN_in_ident_sp_label4242); if (state.failed) return retval;

				}
				break;
			case 23:
				DebugEnterAlt(23);
				// MySQL51Parser.g3:444:4: tok= CHANGED
				{
				DebugLocation(444, 7);
				tok=(IToken)Match(input,CHANGED,Follow._CHANGED_in_ident_sp_label4250); if (state.failed) return retval;

				}
				break;
			case 24:
				DebugEnterAlt(24);
				// MySQL51Parser.g3:445:4: tok= CIPHER
				{
				DebugLocation(445, 7);
				tok=(IToken)Match(input,CIPHER,Follow._CIPHER_in_ident_sp_label4258); if (state.failed) return retval;

				}
				break;
			case 25:
				DebugEnterAlt(25);
				// MySQL51Parser.g3:446:4: tok= CLIENT
				{
				DebugLocation(446, 7);
				tok=(IToken)Match(input,CLIENT,Follow._CLIENT_in_ident_sp_label4266); if (state.failed) return retval;

				}
				break;
			case 26:
				DebugEnterAlt(26);
				// MySQL51Parser.g3:447:4: tok= COALESCE
				{
				DebugLocation(447, 7);
				tok=(IToken)Match(input,COALESCE,Follow._COALESCE_in_ident_sp_label4274); if (state.failed) return retval;

				}
				break;
			case 27:
				DebugEnterAlt(27);
				// MySQL51Parser.g3:448:4: tok= CODE
				{
				DebugLocation(448, 7);
				tok=(IToken)Match(input,CODE,Follow._CODE_in_ident_sp_label4282); if (state.failed) return retval;

				}
				break;
			case 28:
				DebugEnterAlt(28);
				// MySQL51Parser.g3:449:4: tok= COLLATION
				{
				DebugLocation(449, 7);
				tok=(IToken)Match(input,COLLATION,Follow._COLLATION_in_ident_sp_label4290); if (state.failed) return retval;

				}
				break;
			case 29:
				DebugEnterAlt(29);
				// MySQL51Parser.g3:450:4: tok= COLUMNS
				{
				DebugLocation(450, 7);
				tok=(IToken)Match(input,COLUMNS,Follow._COLUMNS_in_ident_sp_label4298); if (state.failed) return retval;

				}
				break;
			case 30:
				DebugEnterAlt(30);
				// MySQL51Parser.g3:451:4: tok= FIELDS
				{
				DebugLocation(451, 7);
				tok=(IToken)Match(input,FIELDS,Follow._FIELDS_in_ident_sp_label4306); if (state.failed) return retval;

				}
				break;
			case 31:
				DebugEnterAlt(31);
				// MySQL51Parser.g3:452:4: tok= COMMITTED
				{
				DebugLocation(452, 7);
				tok=(IToken)Match(input,COMMITTED,Follow._COMMITTED_in_ident_sp_label4314); if (state.failed) return retval;

				}
				break;
			case 32:
				DebugEnterAlt(32);
				// MySQL51Parser.g3:453:4: tok= COMPACT
				{
				DebugLocation(453, 7);
				tok=(IToken)Match(input,COMPACT,Follow._COMPACT_in_ident_sp_label4322); if (state.failed) return retval;

				}
				break;
			case 33:
				DebugEnterAlt(33);
				// MySQL51Parser.g3:454:4: tok= COMPLETION
				{
				DebugLocation(454, 7);
				tok=(IToken)Match(input,COMPLETION,Follow._COMPLETION_in_ident_sp_label4330); if (state.failed) return retval;

				}
				break;
			case 34:
				DebugEnterAlt(34);
				// MySQL51Parser.g3:455:4: tok= COMPRESSED
				{
				DebugLocation(455, 7);
				tok=(IToken)Match(input,COMPRESSED,Follow._COMPRESSED_in_ident_sp_label4338); if (state.failed) return retval;

				}
				break;
			case 35:
				DebugEnterAlt(35);
				// MySQL51Parser.g3:456:4: tok= CONCURRENT
				{
				DebugLocation(456, 7);
				tok=(IToken)Match(input,CONCURRENT,Follow._CONCURRENT_in_ident_sp_label4346); if (state.failed) return retval;

				}
				break;
			case 36:
				DebugEnterAlt(36);
				// MySQL51Parser.g3:457:4: tok= CONNECTION
				{
				DebugLocation(457, 7);
				tok=(IToken)Match(input,CONNECTION,Follow._CONNECTION_in_ident_sp_label4354); if (state.failed) return retval;

				}
				break;
			case 37:
				DebugEnterAlt(37);
				// MySQL51Parser.g3:458:4: tok= CONSISTENT
				{
				DebugLocation(458, 7);
				tok=(IToken)Match(input,CONSISTENT,Follow._CONSISTENT_in_ident_sp_label4362); if (state.failed) return retval;

				}
				break;
			case 38:
				DebugEnterAlt(38);
				// MySQL51Parser.g3:459:4: tok= CONTEXT
				{
				DebugLocation(459, 7);
				tok=(IToken)Match(input,CONTEXT,Follow._CONTEXT_in_ident_sp_label4370); if (state.failed) return retval;

				}
				break;
			case 39:
				DebugEnterAlt(39);
				// MySQL51Parser.g3:460:4: tok= CONTRIBUTORS
				{
				DebugLocation(460, 7);
				tok=(IToken)Match(input,CONTRIBUTORS,Follow._CONTRIBUTORS_in_ident_sp_label4378); if (state.failed) return retval;

				}
				break;
			case 40:
				DebugEnterAlt(40);
				// MySQL51Parser.g3:461:4: tok= CPU
				{
				DebugLocation(461, 7);
				tok=(IToken)Match(input,CPU,Follow._CPU_in_ident_sp_label4386); if (state.failed) return retval;

				}
				break;
			case 41:
				DebugEnterAlt(41);
				// MySQL51Parser.g3:462:4: tok= CUBE
				{
				DebugLocation(462, 7);
				tok=(IToken)Match(input,CUBE,Follow._CUBE_in_ident_sp_label4394); if (state.failed) return retval;

				}
				break;
			case 42:
				DebugEnterAlt(42);
				// MySQL51Parser.g3:463:4: tok= DATA
				{
				DebugLocation(463, 7);
				tok=(IToken)Match(input,DATA,Follow._DATA_in_ident_sp_label4402); if (state.failed) return retval;

				}
				break;
			case 43:
				DebugEnterAlt(43);
				// MySQL51Parser.g3:464:4: tok= DATAFILE
				{
				DebugLocation(464, 7);
				tok=(IToken)Match(input,DATAFILE,Follow._DATAFILE_in_ident_sp_label4410); if (state.failed) return retval;

				}
				break;
			case 44:
				DebugEnterAlt(44);
				// MySQL51Parser.g3:465:4: tok= DATETIME
				{
				DebugLocation(465, 7);
				tok=(IToken)Match(input,DATETIME,Follow._DATETIME_in_ident_sp_label4418); if (state.failed) return retval;

				}
				break;
			case 45:
				DebugEnterAlt(45);
				// MySQL51Parser.g3:466:4: tok= DATE
				{
				DebugLocation(466, 7);
				tok=(IToken)Match(input,DATE,Follow._DATE_in_ident_sp_label4426); if (state.failed) return retval;

				}
				break;
			case 46:
				DebugEnterAlt(46);
				// MySQL51Parser.g3:467:4: tok= DAY
				{
				DebugLocation(467, 7);
				tok=(IToken)Match(input,DAY,Follow._DAY_in_ident_sp_label4434); if (state.failed) return retval;

				}
				break;
			case 47:
				DebugEnterAlt(47);
				// MySQL51Parser.g3:468:4: tok= DEFINER
				{
				DebugLocation(468, 7);
				tok=(IToken)Match(input,DEFINER,Follow._DEFINER_in_ident_sp_label4442); if (state.failed) return retval;

				}
				break;
			case 48:
				DebugEnterAlt(48);
				// MySQL51Parser.g3:469:4: tok= DELAY_KEY_WRITE
				{
				DebugLocation(469, 7);
				tok=(IToken)Match(input,DELAY_KEY_WRITE,Follow._DELAY_KEY_WRITE_in_ident_sp_label4450); if (state.failed) return retval;

				}
				break;
			case 49:
				DebugEnterAlt(49);
				// MySQL51Parser.g3:470:4: tok= DES_KEY_FILE
				{
				DebugLocation(470, 7);
				tok=(IToken)Match(input,DES_KEY_FILE,Follow._DES_KEY_FILE_in_ident_sp_label4458); if (state.failed) return retval;

				}
				break;
			case 50:
				DebugEnterAlt(50);
				// MySQL51Parser.g3:471:4: tok= DIRECTORY
				{
				DebugLocation(471, 7);
				tok=(IToken)Match(input,DIRECTORY,Follow._DIRECTORY_in_ident_sp_label4466); if (state.failed) return retval;

				}
				break;
			case 51:
				DebugEnterAlt(51);
				// MySQL51Parser.g3:472:4: tok= DISABLE
				{
				DebugLocation(472, 7);
				tok=(IToken)Match(input,DISABLE,Follow._DISABLE_in_ident_sp_label4474); if (state.failed) return retval;

				}
				break;
			case 52:
				DebugEnterAlt(52);
				// MySQL51Parser.g3:473:4: tok= DISCARD
				{
				DebugLocation(473, 7);
				tok=(IToken)Match(input,DISCARD,Follow._DISCARD_in_ident_sp_label4482); if (state.failed) return retval;

				}
				break;
			case 53:
				DebugEnterAlt(53);
				// MySQL51Parser.g3:474:4: tok= DISK
				{
				DebugLocation(474, 7);
				tok=(IToken)Match(input,DISK,Follow._DISK_in_ident_sp_label4490); if (state.failed) return retval;

				}
				break;
			case 54:
				DebugEnterAlt(54);
				// MySQL51Parser.g3:475:4: tok= DUMPFILE
				{
				DebugLocation(475, 7);
				tok=(IToken)Match(input,DUMPFILE,Follow._DUMPFILE_in_ident_sp_label4498); if (state.failed) return retval;

				}
				break;
			case 55:
				DebugEnterAlt(55);
				// MySQL51Parser.g3:476:4: tok= DUPLICATE
				{
				DebugLocation(476, 7);
				tok=(IToken)Match(input,DUPLICATE,Follow._DUPLICATE_in_ident_sp_label4506); if (state.failed) return retval;

				}
				break;
			case 56:
				DebugEnterAlt(56);
				// MySQL51Parser.g3:477:4: tok= DYNAMIC
				{
				DebugLocation(477, 7);
				tok=(IToken)Match(input,DYNAMIC,Follow._DYNAMIC_in_ident_sp_label4514); if (state.failed) return retval;

				}
				break;
			case 57:
				DebugEnterAlt(57);
				// MySQL51Parser.g3:478:4: tok= ENDS
				{
				DebugLocation(478, 7);
				tok=(IToken)Match(input,ENDS,Follow._ENDS_in_ident_sp_label4522); if (state.failed) return retval;

				}
				break;
			case 58:
				DebugEnterAlt(58);
				// MySQL51Parser.g3:479:4: tok= ENUM
				{
				DebugLocation(479, 7);
				tok=(IToken)Match(input,ENUM,Follow._ENUM_in_ident_sp_label4530); if (state.failed) return retval;

				}
				break;
			case 59:
				DebugEnterAlt(59);
				// MySQL51Parser.g3:480:4: tok= ENGINE
				{
				DebugLocation(480, 7);
				tok=(IToken)Match(input,ENGINE,Follow._ENGINE_in_ident_sp_label4538); if (state.failed) return retval;

				}
				break;
			case 60:
				DebugEnterAlt(60);
				// MySQL51Parser.g3:481:4: tok= ENGINES
				{
				DebugLocation(481, 7);
				tok=(IToken)Match(input,ENGINES,Follow._ENGINES_in_ident_sp_label4546); if (state.failed) return retval;

				}
				break;
			case 61:
				DebugEnterAlt(61);
				// MySQL51Parser.g3:482:4: tok= ERRORS
				{
				DebugLocation(482, 7);
				tok=(IToken)Match(input,ERRORS,Follow._ERRORS_in_ident_sp_label4554); if (state.failed) return retval;

				}
				break;
			case 62:
				DebugEnterAlt(62);
				// MySQL51Parser.g3:483:4: tok= ESCAPE
				{
				DebugLocation(483, 7);
				tok=(IToken)Match(input,ESCAPE,Follow._ESCAPE_in_ident_sp_label4562); if (state.failed) return retval;

				}
				break;
			case 63:
				DebugEnterAlt(63);
				// MySQL51Parser.g3:484:4: tok= EVENT
				{
				DebugLocation(484, 7);
				tok=(IToken)Match(input,EVENT,Follow._EVENT_in_ident_sp_label4570); if (state.failed) return retval;

				}
				break;
			case 64:
				DebugEnterAlt(64);
				// MySQL51Parser.g3:485:4: tok= EVENTS
				{
				DebugLocation(485, 7);
				tok=(IToken)Match(input,EVENTS,Follow._EVENTS_in_ident_sp_label4578); if (state.failed) return retval;

				}
				break;
			case 65:
				DebugEnterAlt(65);
				// MySQL51Parser.g3:486:4: tok= EVERY
				{
				DebugLocation(486, 7);
				tok=(IToken)Match(input,EVERY,Follow._EVERY_in_ident_sp_label4586); if (state.failed) return retval;

				}
				break;
			case 66:
				DebugEnterAlt(66);
				// MySQL51Parser.g3:487:4: tok= EXPANSION
				{
				DebugLocation(487, 7);
				tok=(IToken)Match(input,EXPANSION,Follow._EXPANSION_in_ident_sp_label4594); if (state.failed) return retval;

				}
				break;
			case 67:
				DebugEnterAlt(67);
				// MySQL51Parser.g3:488:4: tok= EXTENDED
				{
				DebugLocation(488, 7);
				tok=(IToken)Match(input,EXTENDED,Follow._EXTENDED_in_ident_sp_label4602); if (state.failed) return retval;

				}
				break;
			case 68:
				DebugEnterAlt(68);
				// MySQL51Parser.g3:489:4: tok= EXTENT_SIZE
				{
				DebugLocation(489, 7);
				tok=(IToken)Match(input,EXTENT_SIZE,Follow._EXTENT_SIZE_in_ident_sp_label4610); if (state.failed) return retval;

				}
				break;
			case 69:
				DebugEnterAlt(69);
				// MySQL51Parser.g3:490:4: tok= FAULTS
				{
				DebugLocation(490, 7);
				tok=(IToken)Match(input,FAULTS,Follow._FAULTS_in_ident_sp_label4618); if (state.failed) return retval;

				}
				break;
			case 70:
				DebugEnterAlt(70);
				// MySQL51Parser.g3:491:4: tok= FAST
				{
				DebugLocation(491, 7);
				tok=(IToken)Match(input,FAST,Follow._FAST_in_ident_sp_label4626); if (state.failed) return retval;

				}
				break;
			case 71:
				DebugEnterAlt(71);
				// MySQL51Parser.g3:492:4: tok= FOUND
				{
				DebugLocation(492, 7);
				tok=(IToken)Match(input,FOUND,Follow._FOUND_in_ident_sp_label4634); if (state.failed) return retval;

				}
				break;
			case 72:
				DebugEnterAlt(72);
				// MySQL51Parser.g3:493:4: tok= ENABLE
				{
				DebugLocation(493, 7);
				tok=(IToken)Match(input,ENABLE,Follow._ENABLE_in_ident_sp_label4642); if (state.failed) return retval;

				}
				break;
			case 73:
				DebugEnterAlt(73);
				// MySQL51Parser.g3:494:4: tok= FULL
				{
				DebugLocation(494, 7);
				tok=(IToken)Match(input,FULL,Follow._FULL_in_ident_sp_label4650); if (state.failed) return retval;

				}
				break;
			case 74:
				DebugEnterAlt(74);
				// MySQL51Parser.g3:495:4: tok= FILE
				{
				DebugLocation(495, 7);
				tok=(IToken)Match(input,FILE,Follow._FILE_in_ident_sp_label4658); if (state.failed) return retval;

				}
				break;
			case 75:
				DebugEnterAlt(75);
				// MySQL51Parser.g3:496:4: tok= FIRST
				{
				DebugLocation(496, 7);
				tok=(IToken)Match(input,FIRST,Follow._FIRST_in_ident_sp_label4666); if (state.failed) return retval;

				}
				break;
			case 76:
				DebugEnterAlt(76);
				// MySQL51Parser.g3:497:4: tok= FIXED
				{
				DebugLocation(497, 7);
				tok=(IToken)Match(input,FIXED,Follow._FIXED_in_ident_sp_label4674); if (state.failed) return retval;

				}
				break;
			case 77:
				DebugEnterAlt(77);
				// MySQL51Parser.g3:498:4: tok= FRAC_SECOND
				{
				DebugLocation(498, 7);
				tok=(IToken)Match(input,FRAC_SECOND,Follow._FRAC_SECOND_in_ident_sp_label4682); if (state.failed) return retval;

				}
				break;
			case 78:
				DebugEnterAlt(78);
				// MySQL51Parser.g3:499:4: tok= GEOMETRY
				{
				DebugLocation(499, 7);
				tok=(IToken)Match(input,GEOMETRY,Follow._GEOMETRY_in_ident_sp_label4690); if (state.failed) return retval;

				}
				break;
			case 79:
				DebugEnterAlt(79);
				// MySQL51Parser.g3:500:4: tok= GEOMETRYCOLLECTION
				{
				DebugLocation(500, 7);
				tok=(IToken)Match(input,GEOMETRYCOLLECTION,Follow._GEOMETRYCOLLECTION_in_ident_sp_label4698); if (state.failed) return retval;

				}
				break;
			case 80:
				DebugEnterAlt(80);
				// MySQL51Parser.g3:501:4: tok= GET_FORMAT
				{
				DebugLocation(501, 7);
				tok=(IToken)Match(input,GET_FORMAT,Follow._GET_FORMAT_in_ident_sp_label4706); if (state.failed) return retval;

				}
				break;
			case 81:
				DebugEnterAlt(81);
				// MySQL51Parser.g3:502:4: tok= GRANTS
				{
				DebugLocation(502, 7);
				tok=(IToken)Match(input,GRANTS,Follow._GRANTS_in_ident_sp_label4714); if (state.failed) return retval;

				}
				break;
			case 82:
				DebugEnterAlt(82);
				// MySQL51Parser.g3:503:4: tok= GLOBAL
				{
				DebugLocation(503, 7);
				tok=(IToken)Match(input,GLOBAL,Follow._GLOBAL_in_ident_sp_label4722); if (state.failed) return retval;

				}
				break;
			case 83:
				DebugEnterAlt(83);
				// MySQL51Parser.g3:504:4: tok= HASH
				{
				DebugLocation(504, 7);
				tok=(IToken)Match(input,HASH,Follow._HASH_in_ident_sp_label4730); if (state.failed) return retval;

				}
				break;
			case 84:
				DebugEnterAlt(84);
				// MySQL51Parser.g3:505:4: tok= HOSTS
				{
				DebugLocation(505, 7);
				tok=(IToken)Match(input,HOSTS,Follow._HOSTS_in_ident_sp_label4738); if (state.failed) return retval;

				}
				break;
			case 85:
				DebugEnterAlt(85);
				// MySQL51Parser.g3:506:4: tok= HOUR
				{
				DebugLocation(506, 7);
				tok=(IToken)Match(input,HOUR,Follow._HOUR_in_ident_sp_label4746); if (state.failed) return retval;

				}
				break;
			case 86:
				DebugEnterAlt(86);
				// MySQL51Parser.g3:507:4: tok= IDENTIFIED
				{
				DebugLocation(507, 7);
				tok=(IToken)Match(input,IDENTIFIED,Follow._IDENTIFIED_in_ident_sp_label4754); if (state.failed) return retval;

				}
				break;
			case 87:
				DebugEnterAlt(87);
				// MySQL51Parser.g3:508:4: tok= INVOKER
				{
				DebugLocation(508, 7);
				tok=(IToken)Match(input,INVOKER,Follow._INVOKER_in_ident_sp_label4762); if (state.failed) return retval;

				}
				break;
			case 88:
				DebugEnterAlt(88);
				// MySQL51Parser.g3:509:4: tok= IMPORT
				{
				DebugLocation(509, 7);
				tok=(IToken)Match(input,IMPORT,Follow._IMPORT_in_ident_sp_label4770); if (state.failed) return retval;

				}
				break;
			case 89:
				DebugEnterAlt(89);
				// MySQL51Parser.g3:510:4: tok= INDEXES
				{
				DebugLocation(510, 7);
				tok=(IToken)Match(input,INDEXES,Follow._INDEXES_in_ident_sp_label4778); if (state.failed) return retval;

				}
				break;
			case 90:
				DebugEnterAlt(90);
				// MySQL51Parser.g3:511:4: tok= INITIAL_SIZE
				{
				DebugLocation(511, 7);
				tok=(IToken)Match(input,INITIAL_SIZE,Follow._INITIAL_SIZE_in_ident_sp_label4786); if (state.failed) return retval;

				}
				break;
			case 91:
				DebugEnterAlt(91);
				// MySQL51Parser.g3:512:4: tok= IO
				{
				DebugLocation(512, 7);
				tok=(IToken)Match(input,IO,Follow._IO_in_ident_sp_label4794); if (state.failed) return retval;

				}
				break;
			case 92:
				DebugEnterAlt(92);
				// MySQL51Parser.g3:513:4: tok= IPC
				{
				DebugLocation(513, 7);
				tok=(IToken)Match(input,IPC,Follow._IPC_in_ident_sp_label4802); if (state.failed) return retval;

				}
				break;
			case 93:
				DebugEnterAlt(93);
				// MySQL51Parser.g3:514:4: tok= ISOLATION
				{
				DebugLocation(514, 7);
				tok=(IToken)Match(input,ISOLATION,Follow._ISOLATION_in_ident_sp_label4810); if (state.failed) return retval;

				}
				break;
			case 94:
				DebugEnterAlt(94);
				// MySQL51Parser.g3:515:4: tok= ISSUER
				{
				DebugLocation(515, 7);
				tok=(IToken)Match(input,ISSUER,Follow._ISSUER_in_ident_sp_label4818); if (state.failed) return retval;

				}
				break;
			case 95:
				DebugEnterAlt(95);
				// MySQL51Parser.g3:516:4: tok= INNOBASE
				{
				DebugLocation(516, 7);
				tok=(IToken)Match(input,INNOBASE,Follow._INNOBASE_in_ident_sp_label4826); if (state.failed) return retval;

				}
				break;
			case 96:
				DebugEnterAlt(96);
				// MySQL51Parser.g3:517:4: tok= INSERT_METHOD
				{
				DebugLocation(517, 7);
				tok=(IToken)Match(input,INSERT_METHOD,Follow._INSERT_METHOD_in_ident_sp_label4834); if (state.failed) return retval;

				}
				break;
			case 97:
				DebugEnterAlt(97);
				// MySQL51Parser.g3:518:4: tok= KEY_BLOCK_SIZE
				{
				DebugLocation(518, 7);
				tok=(IToken)Match(input,KEY_BLOCK_SIZE,Follow._KEY_BLOCK_SIZE_in_ident_sp_label4842); if (state.failed) return retval;

				}
				break;
			case 98:
				DebugEnterAlt(98);
				// MySQL51Parser.g3:519:4: tok= LAST
				{
				DebugLocation(519, 7);
				tok=(IToken)Match(input,LAST,Follow._LAST_in_ident_sp_label4850); if (state.failed) return retval;

				}
				break;
			case 99:
				DebugEnterAlt(99);
				// MySQL51Parser.g3:520:4: tok= LEAVES
				{
				DebugLocation(520, 7);
				tok=(IToken)Match(input,LEAVES,Follow._LEAVES_in_ident_sp_label4858); if (state.failed) return retval;

				}
				break;
			case 100:
				DebugEnterAlt(100);
				// MySQL51Parser.g3:521:4: tok= LESS
				{
				DebugLocation(521, 7);
				tok=(IToken)Match(input,LESS,Follow._LESS_in_ident_sp_label4866); if (state.failed) return retval;

				}
				break;
			case 101:
				DebugEnterAlt(101);
				// MySQL51Parser.g3:522:4: tok= LEVEL
				{
				DebugLocation(522, 7);
				tok=(IToken)Match(input,LEVEL,Follow._LEVEL_in_ident_sp_label4874); if (state.failed) return retval;

				}
				break;
			case 102:
				DebugEnterAlt(102);
				// MySQL51Parser.g3:523:4: tok= LINESTRING
				{
				DebugLocation(523, 7);
				tok=(IToken)Match(input,LINESTRING,Follow._LINESTRING_in_ident_sp_label4882); if (state.failed) return retval;

				}
				break;
			case 103:
				DebugEnterAlt(103);
				// MySQL51Parser.g3:524:4: tok= LIST
				{
				DebugLocation(524, 7);
				tok=(IToken)Match(input,LIST,Follow._LIST_in_ident_sp_label4890); if (state.failed) return retval;

				}
				break;
			case 104:
				DebugEnterAlt(104);
				// MySQL51Parser.g3:525:4: tok= LOCAL
				{
				DebugLocation(525, 7);
				tok=(IToken)Match(input,LOCAL,Follow._LOCAL_in_ident_sp_label4898); if (state.failed) return retval;

				}
				break;
			case 105:
				DebugEnterAlt(105);
				// MySQL51Parser.g3:526:4: tok= LOCKS
				{
				DebugLocation(526, 7);
				tok=(IToken)Match(input,LOCKS,Follow._LOCKS_in_ident_sp_label4906); if (state.failed) return retval;

				}
				break;
			case 106:
				DebugEnterAlt(106);
				// MySQL51Parser.g3:527:4: tok= LOGFILE
				{
				DebugLocation(527, 7);
				tok=(IToken)Match(input,LOGFILE,Follow._LOGFILE_in_ident_sp_label4914); if (state.failed) return retval;

				}
				break;
			case 107:
				DebugEnterAlt(107);
				// MySQL51Parser.g3:528:4: tok= LOGS
				{
				DebugLocation(528, 7);
				tok=(IToken)Match(input,LOGS,Follow._LOGS_in_ident_sp_label4922); if (state.failed) return retval;

				}
				break;
			case 108:
				DebugEnterAlt(108);
				// MySQL51Parser.g3:529:4: tok= MAX_ROWS
				{
				DebugLocation(529, 7);
				tok=(IToken)Match(input,MAX_ROWS,Follow._MAX_ROWS_in_ident_sp_label4930); if (state.failed) return retval;

				}
				break;
			case 109:
				DebugEnterAlt(109);
				// MySQL51Parser.g3:530:4: tok= MASTER
				{
				DebugLocation(530, 7);
				tok=(IToken)Match(input,MASTER,Follow._MASTER_in_ident_sp_label4938); if (state.failed) return retval;

				}
				break;
			case 110:
				DebugEnterAlt(110);
				// MySQL51Parser.g3:531:4: tok= MASTER_HOST
				{
				DebugLocation(531, 7);
				tok=(IToken)Match(input,MASTER_HOST,Follow._MASTER_HOST_in_ident_sp_label4946); if (state.failed) return retval;

				}
				break;
			case 111:
				DebugEnterAlt(111);
				// MySQL51Parser.g3:532:4: tok= MASTER_PORT
				{
				DebugLocation(532, 7);
				tok=(IToken)Match(input,MASTER_PORT,Follow._MASTER_PORT_in_ident_sp_label4954); if (state.failed) return retval;

				}
				break;
			case 112:
				DebugEnterAlt(112);
				// MySQL51Parser.g3:533:4: tok= MASTER_LOG_FILE
				{
				DebugLocation(533, 7);
				tok=(IToken)Match(input,MASTER_LOG_FILE,Follow._MASTER_LOG_FILE_in_ident_sp_label4962); if (state.failed) return retval;

				}
				break;
			case 113:
				DebugEnterAlt(113);
				// MySQL51Parser.g3:534:4: tok= MASTER_LOG_POS
				{
				DebugLocation(534, 7);
				tok=(IToken)Match(input,MASTER_LOG_POS,Follow._MASTER_LOG_POS_in_ident_sp_label4970); if (state.failed) return retval;

				}
				break;
			case 114:
				DebugEnterAlt(114);
				// MySQL51Parser.g3:535:4: tok= MASTER_USER
				{
				DebugLocation(535, 7);
				tok=(IToken)Match(input,MASTER_USER,Follow._MASTER_USER_in_ident_sp_label4978); if (state.failed) return retval;

				}
				break;
			case 115:
				DebugEnterAlt(115);
				// MySQL51Parser.g3:536:4: tok= MASTER_PASSWORD
				{
				DebugLocation(536, 7);
				tok=(IToken)Match(input,MASTER_PASSWORD,Follow._MASTER_PASSWORD_in_ident_sp_label4986); if (state.failed) return retval;

				}
				break;
			case 116:
				DebugEnterAlt(116);
				// MySQL51Parser.g3:537:4: tok= MASTER_SERVER_ID
				{
				DebugLocation(537, 7);
				tok=(IToken)Match(input,MASTER_SERVER_ID,Follow._MASTER_SERVER_ID_in_ident_sp_label4994); if (state.failed) return retval;

				}
				break;
			case 117:
				DebugEnterAlt(117);
				// MySQL51Parser.g3:538:4: tok= MASTER_CONNECT_RETRY
				{
				DebugLocation(538, 7);
				tok=(IToken)Match(input,MASTER_CONNECT_RETRY,Follow._MASTER_CONNECT_RETRY_in_ident_sp_label5002); if (state.failed) return retval;

				}
				break;
			case 118:
				DebugEnterAlt(118);
				// MySQL51Parser.g3:539:4: tok= MASTER_SSL
				{
				DebugLocation(539, 7);
				tok=(IToken)Match(input,MASTER_SSL,Follow._MASTER_SSL_in_ident_sp_label5010); if (state.failed) return retval;

				}
				break;
			case 119:
				DebugEnterAlt(119);
				// MySQL51Parser.g3:540:4: tok= MASTER_SSL_CA
				{
				DebugLocation(540, 7);
				tok=(IToken)Match(input,MASTER_SSL_CA,Follow._MASTER_SSL_CA_in_ident_sp_label5018); if (state.failed) return retval;

				}
				break;
			case 120:
				DebugEnterAlt(120);
				// MySQL51Parser.g3:541:4: tok= MASTER_SSL_CAPATH
				{
				DebugLocation(541, 7);
				tok=(IToken)Match(input,MASTER_SSL_CAPATH,Follow._MASTER_SSL_CAPATH_in_ident_sp_label5026); if (state.failed) return retval;

				}
				break;
			case 121:
				DebugEnterAlt(121);
				// MySQL51Parser.g3:542:4: tok= MASTER_SSL_CERT
				{
				DebugLocation(542, 7);
				tok=(IToken)Match(input,MASTER_SSL_CERT,Follow._MASTER_SSL_CERT_in_ident_sp_label5034); if (state.failed) return retval;

				}
				break;
			case 122:
				DebugEnterAlt(122);
				// MySQL51Parser.g3:543:4: tok= MASTER_SSL_CIPHER
				{
				DebugLocation(543, 7);
				tok=(IToken)Match(input,MASTER_SSL_CIPHER,Follow._MASTER_SSL_CIPHER_in_ident_sp_label5042); if (state.failed) return retval;

				}
				break;
			case 123:
				DebugEnterAlt(123);
				// MySQL51Parser.g3:544:4: tok= MASTER_SSL_KEY
				{
				DebugLocation(544, 7);
				tok=(IToken)Match(input,MASTER_SSL_KEY,Follow._MASTER_SSL_KEY_in_ident_sp_label5050); if (state.failed) return retval;

				}
				break;
			case 124:
				DebugEnterAlt(124);
				// MySQL51Parser.g3:545:4: tok= MAX_CONNECTIONS_PER_HOUR
				{
				DebugLocation(545, 7);
				tok=(IToken)Match(input,MAX_CONNECTIONS_PER_HOUR,Follow._MAX_CONNECTIONS_PER_HOUR_in_ident_sp_label5058); if (state.failed) return retval;

				}
				break;
			case 125:
				DebugEnterAlt(125);
				// MySQL51Parser.g3:546:4: tok= MAX_QUERIES_PER_HOUR
				{
				DebugLocation(546, 7);
				tok=(IToken)Match(input,MAX_QUERIES_PER_HOUR,Follow._MAX_QUERIES_PER_HOUR_in_ident_sp_label5066); if (state.failed) return retval;

				}
				break;
			case 126:
				DebugEnterAlt(126);
				// MySQL51Parser.g3:547:4: tok= MAX_SIZE
				{
				DebugLocation(547, 7);
				tok=(IToken)Match(input,MAX_SIZE,Follow._MAX_SIZE_in_ident_sp_label5074); if (state.failed) return retval;

				}
				break;
			case 127:
				DebugEnterAlt(127);
				// MySQL51Parser.g3:548:4: tok= MAX_UPDATES_PER_HOUR
				{
				DebugLocation(548, 7);
				tok=(IToken)Match(input,MAX_UPDATES_PER_HOUR,Follow._MAX_UPDATES_PER_HOUR_in_ident_sp_label5082); if (state.failed) return retval;

				}
				break;
			case 128:
				DebugEnterAlt(128);
				// MySQL51Parser.g3:549:4: tok= MAX_USER_CONNECTIONS
				{
				DebugLocation(549, 7);
				tok=(IToken)Match(input,MAX_USER_CONNECTIONS,Follow._MAX_USER_CONNECTIONS_in_ident_sp_label5090); if (state.failed) return retval;

				}
				break;
			case 129:
				DebugEnterAlt(129);
				// MySQL51Parser.g3:550:4: tok= MAX_VALUE
				{
				DebugLocation(550, 7);
				tok=(IToken)Match(input,MAX_VALUE,Follow._MAX_VALUE_in_ident_sp_label5098); if (state.failed) return retval;

				}
				break;
			case 130:
				DebugEnterAlt(130);
				// MySQL51Parser.g3:551:4: tok= MEDIUM
				{
				DebugLocation(551, 7);
				tok=(IToken)Match(input,MEDIUM,Follow._MEDIUM_in_ident_sp_label5106); if (state.failed) return retval;

				}
				break;
			case 131:
				DebugEnterAlt(131);
				// MySQL51Parser.g3:552:4: tok= MEMORY
				{
				DebugLocation(552, 7);
				tok=(IToken)Match(input,MEMORY,Follow._MEMORY_in_ident_sp_label5114); if (state.failed) return retval;

				}
				break;
			case 132:
				DebugEnterAlt(132);
				// MySQL51Parser.g3:553:4: tok= MERGE
				{
				DebugLocation(553, 7);
				tok=(IToken)Match(input,MERGE,Follow._MERGE_in_ident_sp_label5122); if (state.failed) return retval;

				}
				break;
			case 133:
				DebugEnterAlt(133);
				// MySQL51Parser.g3:554:4: tok= MICROSECOND
				{
				DebugLocation(554, 7);
				tok=(IToken)Match(input,MICROSECOND,Follow._MICROSECOND_in_ident_sp_label5130); if (state.failed) return retval;

				}
				break;
			case 134:
				DebugEnterAlt(134);
				// MySQL51Parser.g3:555:4: tok= MIGRATE
				{
				DebugLocation(555, 7);
				tok=(IToken)Match(input,MIGRATE,Follow._MIGRATE_in_ident_sp_label5138); if (state.failed) return retval;

				}
				break;
			case 135:
				DebugEnterAlt(135);
				// MySQL51Parser.g3:556:4: tok= MINUTE
				{
				DebugLocation(556, 7);
				tok=(IToken)Match(input,MINUTE,Follow._MINUTE_in_ident_sp_label5146); if (state.failed) return retval;

				}
				break;
			case 136:
				DebugEnterAlt(136);
				// MySQL51Parser.g3:557:4: tok= MIN_ROWS
				{
				DebugLocation(557, 7);
				tok=(IToken)Match(input,MIN_ROWS,Follow._MIN_ROWS_in_ident_sp_label5154); if (state.failed) return retval;

				}
				break;
			case 137:
				DebugEnterAlt(137);
				// MySQL51Parser.g3:558:4: tok= MODIFY
				{
				DebugLocation(558, 7);
				tok=(IToken)Match(input,MODIFY,Follow._MODIFY_in_ident_sp_label5162); if (state.failed) return retval;

				}
				break;
			case 138:
				DebugEnterAlt(138);
				// MySQL51Parser.g3:559:4: tok= MODE
				{
				DebugLocation(559, 7);
				tok=(IToken)Match(input,MODE,Follow._MODE_in_ident_sp_label5170); if (state.failed) return retval;

				}
				break;
			case 139:
				DebugEnterAlt(139);
				// MySQL51Parser.g3:560:4: tok= MONTH
				{
				DebugLocation(560, 7);
				tok=(IToken)Match(input,MONTH,Follow._MONTH_in_ident_sp_label5178); if (state.failed) return retval;

				}
				break;
			case 140:
				DebugEnterAlt(140);
				// MySQL51Parser.g3:561:4: tok= MULTILINESTRING
				{
				DebugLocation(561, 7);
				tok=(IToken)Match(input,MULTILINESTRING,Follow._MULTILINESTRING_in_ident_sp_label5186); if (state.failed) return retval;

				}
				break;
			case 141:
				DebugEnterAlt(141);
				// MySQL51Parser.g3:562:4: tok= MULTIPOINT
				{
				DebugLocation(562, 7);
				tok=(IToken)Match(input,MULTIPOINT,Follow._MULTIPOINT_in_ident_sp_label5194); if (state.failed) return retval;

				}
				break;
			case 142:
				DebugEnterAlt(142);
				// MySQL51Parser.g3:563:4: tok= MULTIPOLYGON
				{
				DebugLocation(563, 7);
				tok=(IToken)Match(input,MULTIPOLYGON,Follow._MULTIPOLYGON_in_ident_sp_label5202); if (state.failed) return retval;

				}
				break;
			case 143:
				DebugEnterAlt(143);
				// MySQL51Parser.g3:564:4: tok= MUTEX
				{
				DebugLocation(564, 7);
				tok=(IToken)Match(input,MUTEX,Follow._MUTEX_in_ident_sp_label5210); if (state.failed) return retval;

				}
				break;
			case 144:
				DebugEnterAlt(144);
				// MySQL51Parser.g3:565:4: tok= NAME
				{
				DebugLocation(565, 7);
				tok=(IToken)Match(input,NAME,Follow._NAME_in_ident_sp_label5218); if (state.failed) return retval;

				}
				break;
			case 145:
				DebugEnterAlt(145);
				// MySQL51Parser.g3:566:4: tok= NAMES
				{
				DebugLocation(566, 7);
				tok=(IToken)Match(input,NAMES,Follow._NAMES_in_ident_sp_label5226); if (state.failed) return retval;

				}
				break;
			case 146:
				DebugEnterAlt(146);
				// MySQL51Parser.g3:567:4: tok= NATIONAL
				{
				DebugLocation(567, 7);
				tok=(IToken)Match(input,NATIONAL,Follow._NATIONAL_in_ident_sp_label5234); if (state.failed) return retval;

				}
				break;
			case 147:
				DebugEnterAlt(147);
				// MySQL51Parser.g3:568:4: tok= NCHAR
				{
				DebugLocation(568, 7);
				tok=(IToken)Match(input,NCHAR,Follow._NCHAR_in_ident_sp_label5242); if (state.failed) return retval;

				}
				break;
			case 148:
				DebugEnterAlt(148);
				// MySQL51Parser.g3:569:4: tok= NDBCLUSTER
				{
				DebugLocation(569, 7);
				tok=(IToken)Match(input,NDBCLUSTER,Follow._NDBCLUSTER_in_ident_sp_label5250); if (state.failed) return retval;

				}
				break;
			case 149:
				DebugEnterAlt(149);
				// MySQL51Parser.g3:570:4: tok= NEXT
				{
				DebugLocation(570, 7);
				tok=(IToken)Match(input,NEXT,Follow._NEXT_in_ident_sp_label5258); if (state.failed) return retval;

				}
				break;
			case 150:
				DebugEnterAlt(150);
				// MySQL51Parser.g3:571:4: tok= NEW
				{
				DebugLocation(571, 7);
				tok=(IToken)Match(input,NEW,Follow._NEW_in_ident_sp_label5266); if (state.failed) return retval;

				}
				break;
			case 151:
				DebugEnterAlt(151);
				// MySQL51Parser.g3:572:4: tok= NO_WAIT
				{
				DebugLocation(572, 7);
				tok=(IToken)Match(input,NO_WAIT,Follow._NO_WAIT_in_ident_sp_label5274); if (state.failed) return retval;

				}
				break;
			case 152:
				DebugEnterAlt(152);
				// MySQL51Parser.g3:573:4: tok= NODEGROUP
				{
				DebugLocation(573, 7);
				tok=(IToken)Match(input,NODEGROUP,Follow._NODEGROUP_in_ident_sp_label5282); if (state.failed) return retval;

				}
				break;
			case 153:
				DebugEnterAlt(153);
				// MySQL51Parser.g3:574:4: tok= NONE
				{
				DebugLocation(574, 7);
				tok=(IToken)Match(input,NONE,Follow._NONE_in_ident_sp_label5290); if (state.failed) return retval;

				}
				break;
			case 154:
				DebugEnterAlt(154);
				// MySQL51Parser.g3:575:4: tok= NVARCHAR
				{
				DebugLocation(575, 7);
				tok=(IToken)Match(input,NVARCHAR,Follow._NVARCHAR_in_ident_sp_label5298); if (state.failed) return retval;

				}
				break;
			case 155:
				DebugEnterAlt(155);
				// MySQL51Parser.g3:576:4: tok= OFFSET
				{
				DebugLocation(576, 7);
				tok=(IToken)Match(input,OFFSET,Follow._OFFSET_in_ident_sp_label5306); if (state.failed) return retval;

				}
				break;
			case 156:
				DebugEnterAlt(156);
				// MySQL51Parser.g3:577:4: tok= OLD_PASSWORD
				{
				DebugLocation(577, 7);
				tok=(IToken)Match(input,OLD_PASSWORD,Follow._OLD_PASSWORD_in_ident_sp_label5314); if (state.failed) return retval;

				}
				break;
			case 157:
				DebugEnterAlt(157);
				// MySQL51Parser.g3:578:4: tok= ONE_SHOT
				{
				DebugLocation(578, 7);
				tok=(IToken)Match(input,ONE_SHOT,Follow._ONE_SHOT_in_ident_sp_label5322); if (state.failed) return retval;

				}
				break;
			case 158:
				DebugEnterAlt(158);
				// MySQL51Parser.g3:579:4: tok= ONE
				{
				DebugLocation(579, 7);
				tok=(IToken)Match(input,ONE,Follow._ONE_in_ident_sp_label5330); if (state.failed) return retval;

				}
				break;
			case 159:
				DebugEnterAlt(159);
				// MySQL51Parser.g3:580:4: tok= PACK_KEYS
				{
				DebugLocation(580, 7);
				tok=(IToken)Match(input,PACK_KEYS,Follow._PACK_KEYS_in_ident_sp_label5338); if (state.failed) return retval;

				}
				break;
			case 160:
				DebugEnterAlt(160);
				// MySQL51Parser.g3:581:4: tok= PAGE
				{
				DebugLocation(581, 7);
				tok=(IToken)Match(input,PAGE,Follow._PAGE_in_ident_sp_label5346); if (state.failed) return retval;

				}
				break;
			case 161:
				DebugEnterAlt(161);
				// MySQL51Parser.g3:582:4: tok= PARTIAL
				{
				DebugLocation(582, 7);
				tok=(IToken)Match(input,PARTIAL,Follow._PARTIAL_in_ident_sp_label5354); if (state.failed) return retval;

				}
				break;
			case 162:
				DebugEnterAlt(162);
				// MySQL51Parser.g3:583:4: tok= PARTITIONING
				{
				DebugLocation(583, 7);
				tok=(IToken)Match(input,PARTITIONING,Follow._PARTITIONING_in_ident_sp_label5362); if (state.failed) return retval;

				}
				break;
			case 163:
				DebugEnterAlt(163);
				// MySQL51Parser.g3:584:4: tok= PARTITIONS
				{
				DebugLocation(584, 7);
				tok=(IToken)Match(input,PARTITIONS,Follow._PARTITIONS_in_ident_sp_label5370); if (state.failed) return retval;

				}
				break;
			case 164:
				DebugEnterAlt(164);
				// MySQL51Parser.g3:585:4: tok= PASSWORD
				{
				DebugLocation(585, 7);
				tok=(IToken)Match(input,PASSWORD,Follow._PASSWORD_in_ident_sp_label5378); if (state.failed) return retval;

				}
				break;
			case 165:
				DebugEnterAlt(165);
				// MySQL51Parser.g3:586:4: tok= PHASE
				{
				DebugLocation(586, 7);
				tok=(IToken)Match(input,PHASE,Follow._PHASE_in_ident_sp_label5386); if (state.failed) return retval;

				}
				break;
			case 166:
				DebugEnterAlt(166);
				// MySQL51Parser.g3:587:4: tok= PLUGIN
				{
				DebugLocation(587, 7);
				tok=(IToken)Match(input,PLUGIN,Follow._PLUGIN_in_ident_sp_label5394); if (state.failed) return retval;

				}
				break;
			case 167:
				DebugEnterAlt(167);
				// MySQL51Parser.g3:588:4: tok= PLUGINS
				{
				DebugLocation(588, 7);
				tok=(IToken)Match(input,PLUGINS,Follow._PLUGINS_in_ident_sp_label5402); if (state.failed) return retval;

				}
				break;
			case 168:
				DebugEnterAlt(168);
				// MySQL51Parser.g3:589:4: tok= POINT
				{
				DebugLocation(589, 7);
				tok=(IToken)Match(input,POINT,Follow._POINT_in_ident_sp_label5410); if (state.failed) return retval;

				}
				break;
			case 169:
				DebugEnterAlt(169);
				// MySQL51Parser.g3:590:4: tok= POLYGON
				{
				DebugLocation(590, 7);
				tok=(IToken)Match(input,POLYGON,Follow._POLYGON_in_ident_sp_label5418); if (state.failed) return retval;

				}
				break;
			case 170:
				DebugEnterAlt(170);
				// MySQL51Parser.g3:591:4: tok= PRESERVE
				{
				DebugLocation(591, 7);
				tok=(IToken)Match(input,PRESERVE,Follow._PRESERVE_in_ident_sp_label5426); if (state.failed) return retval;

				}
				break;
			case 171:
				DebugEnterAlt(171);
				// MySQL51Parser.g3:592:4: tok= PREV
				{
				DebugLocation(592, 7);
				tok=(IToken)Match(input,PREV,Follow._PREV_in_ident_sp_label5434); if (state.failed) return retval;

				}
				break;
			case 172:
				DebugEnterAlt(172);
				// MySQL51Parser.g3:593:4: tok= PRIVILEGES
				{
				DebugLocation(593, 7);
				tok=(IToken)Match(input,PRIVILEGES,Follow._PRIVILEGES_in_ident_sp_label5442); if (state.failed) return retval;

				}
				break;
			case 173:
				DebugEnterAlt(173);
				// MySQL51Parser.g3:594:4: tok= PROCESS
				{
				DebugLocation(594, 7);
				tok=(IToken)Match(input,PROCESS,Follow._PROCESS_in_ident_sp_label5450); if (state.failed) return retval;

				}
				break;
			case 174:
				DebugEnterAlt(174);
				// MySQL51Parser.g3:595:4: tok= PROCESSLIST
				{
				DebugLocation(595, 7);
				tok=(IToken)Match(input,PROCESSLIST,Follow._PROCESSLIST_in_ident_sp_label5458); if (state.failed) return retval;

				}
				break;
			case 175:
				DebugEnterAlt(175);
				// MySQL51Parser.g3:596:4: tok= PROFILE
				{
				DebugLocation(596, 7);
				tok=(IToken)Match(input,PROFILE,Follow._PROFILE_in_ident_sp_label5466); if (state.failed) return retval;

				}
				break;
			case 176:
				DebugEnterAlt(176);
				// MySQL51Parser.g3:597:4: tok= PROFILES
				{
				DebugLocation(597, 7);
				tok=(IToken)Match(input,PROFILES,Follow._PROFILES_in_ident_sp_label5474); if (state.failed) return retval;

				}
				break;
			case 177:
				DebugEnterAlt(177);
				// MySQL51Parser.g3:598:4: tok= QUARTER
				{
				DebugLocation(598, 7);
				tok=(IToken)Match(input,QUARTER,Follow._QUARTER_in_ident_sp_label5482); if (state.failed) return retval;

				}
				break;
			case 178:
				DebugEnterAlt(178);
				// MySQL51Parser.g3:599:4: tok= QUERY
				{
				DebugLocation(599, 7);
				tok=(IToken)Match(input,QUERY,Follow._QUERY_in_ident_sp_label5490); if (state.failed) return retval;

				}
				break;
			case 179:
				DebugEnterAlt(179);
				// MySQL51Parser.g3:600:4: tok= QUICK
				{
				DebugLocation(600, 7);
				tok=(IToken)Match(input,QUICK,Follow._QUICK_in_ident_sp_label5498); if (state.failed) return retval;

				}
				break;
			case 180:
				DebugEnterAlt(180);
				// MySQL51Parser.g3:601:4: tok= REBUILD
				{
				DebugLocation(601, 7);
				tok=(IToken)Match(input,REBUILD,Follow._REBUILD_in_ident_sp_label5506); if (state.failed) return retval;

				}
				break;
			case 181:
				DebugEnterAlt(181);
				// MySQL51Parser.g3:602:4: tok= RECOVER
				{
				DebugLocation(602, 7);
				tok=(IToken)Match(input,RECOVER,Follow._RECOVER_in_ident_sp_label5514); if (state.failed) return retval;

				}
				break;
			case 182:
				DebugEnterAlt(182);
				// MySQL51Parser.g3:603:4: tok= REDO_BUFFER_SIZE
				{
				DebugLocation(603, 7);
				tok=(IToken)Match(input,REDO_BUFFER_SIZE,Follow._REDO_BUFFER_SIZE_in_ident_sp_label5522); if (state.failed) return retval;

				}
				break;
			case 183:
				DebugEnterAlt(183);
				// MySQL51Parser.g3:604:4: tok= REDOFILE
				{
				DebugLocation(604, 7);
				tok=(IToken)Match(input,REDOFILE,Follow._REDOFILE_in_ident_sp_label5530); if (state.failed) return retval;

				}
				break;
			case 184:
				DebugEnterAlt(184);
				// MySQL51Parser.g3:605:4: tok= REDUNDANT
				{
				DebugLocation(605, 7);
				tok=(IToken)Match(input,REDUNDANT,Follow._REDUNDANT_in_ident_sp_label5538); if (state.failed) return retval;

				}
				break;
			case 185:
				DebugEnterAlt(185);
				// MySQL51Parser.g3:606:4: tok= RELAY_LOG_FILE
				{
				DebugLocation(606, 7);
				tok=(IToken)Match(input,RELAY_LOG_FILE,Follow._RELAY_LOG_FILE_in_ident_sp_label5546); if (state.failed) return retval;

				}
				break;
			case 186:
				DebugEnterAlt(186);
				// MySQL51Parser.g3:607:4: tok= RELAY_LOG_POS
				{
				DebugLocation(607, 7);
				tok=(IToken)Match(input,RELAY_LOG_POS,Follow._RELAY_LOG_POS_in_ident_sp_label5554); if (state.failed) return retval;

				}
				break;
			case 187:
				DebugEnterAlt(187);
				// MySQL51Parser.g3:608:4: tok= RELAY_THREAD
				{
				DebugLocation(608, 7);
				tok=(IToken)Match(input,RELAY_THREAD,Follow._RELAY_THREAD_in_ident_sp_label5562); if (state.failed) return retval;

				}
				break;
			case 188:
				DebugEnterAlt(188);
				// MySQL51Parser.g3:609:4: tok= RELOAD
				{
				DebugLocation(609, 7);
				tok=(IToken)Match(input,RELOAD,Follow._RELOAD_in_ident_sp_label5570); if (state.failed) return retval;

				}
				break;
			case 189:
				DebugEnterAlt(189);
				// MySQL51Parser.g3:610:4: tok= REORGANIZE
				{
				DebugLocation(610, 7);
				tok=(IToken)Match(input,REORGANIZE,Follow._REORGANIZE_in_ident_sp_label5578); if (state.failed) return retval;

				}
				break;
			case 190:
				DebugEnterAlt(190);
				// MySQL51Parser.g3:611:4: tok= REPEATABLE
				{
				DebugLocation(611, 7);
				tok=(IToken)Match(input,REPEATABLE,Follow._REPEATABLE_in_ident_sp_label5586); if (state.failed) return retval;

				}
				break;
			case 191:
				DebugEnterAlt(191);
				// MySQL51Parser.g3:612:4: tok= REPLICATION
				{
				DebugLocation(612, 7);
				tok=(IToken)Match(input,REPLICATION,Follow._REPLICATION_in_ident_sp_label5594); if (state.failed) return retval;

				}
				break;
			case 192:
				DebugEnterAlt(192);
				// MySQL51Parser.g3:613:4: tok= RESOURCES
				{
				DebugLocation(613, 7);
				tok=(IToken)Match(input,RESOURCES,Follow._RESOURCES_in_ident_sp_label5602); if (state.failed) return retval;

				}
				break;
			case 193:
				DebugEnterAlt(193);
				// MySQL51Parser.g3:614:4: tok= RESUME
				{
				DebugLocation(614, 7);
				tok=(IToken)Match(input,RESUME,Follow._RESUME_in_ident_sp_label5610); if (state.failed) return retval;

				}
				break;
			case 194:
				DebugEnterAlt(194);
				// MySQL51Parser.g3:615:4: tok= RETURNS
				{
				DebugLocation(615, 7);
				tok=(IToken)Match(input,RETURNS,Follow._RETURNS_in_ident_sp_label5618); if (state.failed) return retval;

				}
				break;
			case 195:
				DebugEnterAlt(195);
				// MySQL51Parser.g3:616:4: tok= ROLLUP
				{
				DebugLocation(616, 7);
				tok=(IToken)Match(input,ROLLUP,Follow._ROLLUP_in_ident_sp_label5626); if (state.failed) return retval;

				}
				break;
			case 196:
				DebugEnterAlt(196);
				// MySQL51Parser.g3:617:4: tok= ROUTINE
				{
				DebugLocation(617, 7);
				tok=(IToken)Match(input,ROUTINE,Follow._ROUTINE_in_ident_sp_label5634); if (state.failed) return retval;

				}
				break;
			case 197:
				DebugEnterAlt(197);
				// MySQL51Parser.g3:618:4: tok= ROWS
				{
				DebugLocation(618, 7);
				tok=(IToken)Match(input,ROWS,Follow._ROWS_in_ident_sp_label5642); if (state.failed) return retval;

				}
				break;
			case 198:
				DebugEnterAlt(198);
				// MySQL51Parser.g3:619:4: tok= ROW_FORMAT
				{
				DebugLocation(619, 7);
				tok=(IToken)Match(input,ROW_FORMAT,Follow._ROW_FORMAT_in_ident_sp_label5650); if (state.failed) return retval;

				}
				break;
			case 199:
				DebugEnterAlt(199);
				// MySQL51Parser.g3:620:4: tok= ROW
				{
				DebugLocation(620, 7);
				tok=(IToken)Match(input,ROW,Follow._ROW_in_ident_sp_label5658); if (state.failed) return retval;

				}
				break;
			case 200:
				DebugEnterAlt(200);
				// MySQL51Parser.g3:621:4: tok= RTREE
				{
				DebugLocation(621, 7);
				tok=(IToken)Match(input,RTREE,Follow._RTREE_in_ident_sp_label5666); if (state.failed) return retval;

				}
				break;
			case 201:
				DebugEnterAlt(201);
				// MySQL51Parser.g3:622:4: tok= SCHEDULE
				{
				DebugLocation(622, 7);
				tok=(IToken)Match(input,SCHEDULE,Follow._SCHEDULE_in_ident_sp_label5674); if (state.failed) return retval;

				}
				break;
			case 202:
				DebugEnterAlt(202);
				// MySQL51Parser.g3:623:4: tok= SECOND
				{
				DebugLocation(623, 7);
				tok=(IToken)Match(input,SECOND,Follow._SECOND_in_ident_sp_label5682); if (state.failed) return retval;

				}
				break;
			case 203:
				DebugEnterAlt(203);
				// MySQL51Parser.g3:624:4: tok= SERIAL
				{
				DebugLocation(624, 7);
				tok=(IToken)Match(input,SERIAL,Follow._SERIAL_in_ident_sp_label5690); if (state.failed) return retval;

				}
				break;
			case 204:
				DebugEnterAlt(204);
				// MySQL51Parser.g3:625:4: tok= SERIALIZABLE
				{
				DebugLocation(625, 7);
				tok=(IToken)Match(input,SERIALIZABLE,Follow._SERIALIZABLE_in_ident_sp_label5698); if (state.failed) return retval;

				}
				break;
			case 205:
				DebugEnterAlt(205);
				// MySQL51Parser.g3:626:4: tok= SESSION
				{
				DebugLocation(626, 7);
				tok=(IToken)Match(input,SESSION,Follow._SESSION_in_ident_sp_label5706); if (state.failed) return retval;

				}
				break;
			case 206:
				DebugEnterAlt(206);
				// MySQL51Parser.g3:627:4: tok= SIMPLE
				{
				DebugLocation(627, 7);
				tok=(IToken)Match(input,SIMPLE,Follow._SIMPLE_in_ident_sp_label5714); if (state.failed) return retval;

				}
				break;
			case 207:
				DebugEnterAlt(207);
				// MySQL51Parser.g3:628:4: tok= SHARE
				{
				DebugLocation(628, 7);
				tok=(IToken)Match(input,SHARE,Follow._SHARE_in_ident_sp_label5722); if (state.failed) return retval;

				}
				break;
			case 208:
				DebugEnterAlt(208);
				// MySQL51Parser.g3:629:4: tok= SHUTDOWN
				{
				DebugLocation(629, 7);
				tok=(IToken)Match(input,SHUTDOWN,Follow._SHUTDOWN_in_ident_sp_label5730); if (state.failed) return retval;

				}
				break;
			case 209:
				DebugEnterAlt(209);
				// MySQL51Parser.g3:630:4: tok= SNAPSHOT
				{
				DebugLocation(630, 7);
				tok=(IToken)Match(input,SNAPSHOT,Follow._SNAPSHOT_in_ident_sp_label5738); if (state.failed) return retval;

				}
				break;
			case 210:
				DebugEnterAlt(210);
				// MySQL51Parser.g3:631:4: tok= SOUNDS
				{
				DebugLocation(631, 7);
				tok=(IToken)Match(input,SOUNDS,Follow._SOUNDS_in_ident_sp_label5746); if (state.failed) return retval;

				}
				break;
			case 211:
				DebugEnterAlt(211);
				// MySQL51Parser.g3:632:4: tok= SOURCE
				{
				DebugLocation(632, 7);
				tok=(IToken)Match(input,SOURCE,Follow._SOURCE_in_ident_sp_label5754); if (state.failed) return retval;

				}
				break;
			case 212:
				DebugEnterAlt(212);
				// MySQL51Parser.g3:633:4: tok= SQL_CACHE
				{
				DebugLocation(633, 7);
				tok=(IToken)Match(input,SQL_CACHE,Follow._SQL_CACHE_in_ident_sp_label5762); if (state.failed) return retval;

				}
				break;
			case 213:
				DebugEnterAlt(213);
				// MySQL51Parser.g3:634:4: tok= SQL_BUFFER_RESULT
				{
				DebugLocation(634, 7);
				tok=(IToken)Match(input,SQL_BUFFER_RESULT,Follow._SQL_BUFFER_RESULT_in_ident_sp_label5770); if (state.failed) return retval;

				}
				break;
			case 214:
				DebugEnterAlt(214);
				// MySQL51Parser.g3:635:4: tok= SQL_NO_CACHE
				{
				DebugLocation(635, 7);
				tok=(IToken)Match(input,SQL_NO_CACHE,Follow._SQL_NO_CACHE_in_ident_sp_label5778); if (state.failed) return retval;

				}
				break;
			case 215:
				DebugEnterAlt(215);
				// MySQL51Parser.g3:636:4: tok= SQL_THREAD
				{
				DebugLocation(636, 7);
				tok=(IToken)Match(input,SQL_THREAD,Follow._SQL_THREAD_in_ident_sp_label5786); if (state.failed) return retval;

				}
				break;
			case 216:
				DebugEnterAlt(216);
				// MySQL51Parser.g3:637:4: tok= STARTS
				{
				DebugLocation(637, 7);
				tok=(IToken)Match(input,STARTS,Follow._STARTS_in_ident_sp_label5794); if (state.failed) return retval;

				}
				break;
			case 217:
				DebugEnterAlt(217);
				// MySQL51Parser.g3:638:4: tok= STATUS
				{
				DebugLocation(638, 7);
				tok=(IToken)Match(input,STATUS,Follow._STATUS_in_ident_sp_label5802); if (state.failed) return retval;

				}
				break;
			case 218:
				DebugEnterAlt(218);
				// MySQL51Parser.g3:639:4: tok= STORAGE
				{
				DebugLocation(639, 7);
				tok=(IToken)Match(input,STORAGE,Follow._STORAGE_in_ident_sp_label5810); if (state.failed) return retval;

				}
				break;
			case 219:
				DebugEnterAlt(219);
				// MySQL51Parser.g3:640:4: tok= STRING_KEYWORD
				{
				DebugLocation(640, 7);
				tok=(IToken)Match(input,STRING_KEYWORD,Follow._STRING_KEYWORD_in_ident_sp_label5818); if (state.failed) return retval;

				}
				break;
			case 220:
				DebugEnterAlt(220);
				// MySQL51Parser.g3:641:4: tok= SUBDATE
				{
				DebugLocation(641, 7);
				tok=(IToken)Match(input,SUBDATE,Follow._SUBDATE_in_ident_sp_label5826); if (state.failed) return retval;

				}
				break;
			case 221:
				DebugEnterAlt(221);
				// MySQL51Parser.g3:642:4: tok= SUBJECT
				{
				DebugLocation(642, 7);
				tok=(IToken)Match(input,SUBJECT,Follow._SUBJECT_in_ident_sp_label5834); if (state.failed) return retval;

				}
				break;
			case 222:
				DebugEnterAlt(222);
				// MySQL51Parser.g3:643:4: tok= SUBPARTITION
				{
				DebugLocation(643, 7);
				tok=(IToken)Match(input,SUBPARTITION,Follow._SUBPARTITION_in_ident_sp_label5842); if (state.failed) return retval;

				}
				break;
			case 223:
				DebugEnterAlt(223);
				// MySQL51Parser.g3:644:4: tok= SUBPARTITIONS
				{
				DebugLocation(644, 7);
				tok=(IToken)Match(input,SUBPARTITIONS,Follow._SUBPARTITIONS_in_ident_sp_label5850); if (state.failed) return retval;

				}
				break;
			case 224:
				DebugEnterAlt(224);
				// MySQL51Parser.g3:645:4: tok= SUPER
				{
				DebugLocation(645, 7);
				tok=(IToken)Match(input,SUPER,Follow._SUPER_in_ident_sp_label5858); if (state.failed) return retval;

				}
				break;
			case 225:
				DebugEnterAlt(225);
				// MySQL51Parser.g3:646:4: tok= SUSPEND
				{
				DebugLocation(646, 7);
				tok=(IToken)Match(input,SUSPEND,Follow._SUSPEND_in_ident_sp_label5866); if (state.failed) return retval;

				}
				break;
			case 226:
				DebugEnterAlt(226);
				// MySQL51Parser.g3:647:4: tok= SWAPS
				{
				DebugLocation(647, 7);
				tok=(IToken)Match(input,SWAPS,Follow._SWAPS_in_ident_sp_label5874); if (state.failed) return retval;

				}
				break;
			case 227:
				DebugEnterAlt(227);
				// MySQL51Parser.g3:648:4: tok= SWITCHES
				{
				DebugLocation(648, 7);
				tok=(IToken)Match(input,SWITCHES,Follow._SWITCHES_in_ident_sp_label5882); if (state.failed) return retval;

				}
				break;
			case 228:
				DebugEnterAlt(228);
				// MySQL51Parser.g3:649:4: tok= TABLES
				{
				DebugLocation(649, 7);
				tok=(IToken)Match(input,TABLES,Follow._TABLES_in_ident_sp_label5890); if (state.failed) return retval;

				}
				break;
			case 229:
				DebugEnterAlt(229);
				// MySQL51Parser.g3:650:4: tok= TABLESPACE
				{
				DebugLocation(650, 7);
				tok=(IToken)Match(input,TABLESPACE,Follow._TABLESPACE_in_ident_sp_label5898); if (state.failed) return retval;

				}
				break;
			case 230:
				DebugEnterAlt(230);
				// MySQL51Parser.g3:651:4: tok= TEMPORARY
				{
				DebugLocation(651, 7);
				tok=(IToken)Match(input,TEMPORARY,Follow._TEMPORARY_in_ident_sp_label5906); if (state.failed) return retval;

				}
				break;
			case 231:
				DebugEnterAlt(231);
				// MySQL51Parser.g3:652:4: tok= TEMPTABLE
				{
				DebugLocation(652, 7);
				tok=(IToken)Match(input,TEMPTABLE,Follow._TEMPTABLE_in_ident_sp_label5914); if (state.failed) return retval;

				}
				break;
			case 232:
				DebugEnterAlt(232);
				// MySQL51Parser.g3:653:4: tok= TEXT
				{
				DebugLocation(653, 7);
				tok=(IToken)Match(input,TEXT,Follow._TEXT_in_ident_sp_label5922); if (state.failed) return retval;

				}
				break;
			case 233:
				DebugEnterAlt(233);
				// MySQL51Parser.g3:654:4: tok= THAN
				{
				DebugLocation(654, 7);
				tok=(IToken)Match(input,THAN,Follow._THAN_in_ident_sp_label5930); if (state.failed) return retval;

				}
				break;
			case 234:
				DebugEnterAlt(234);
				// MySQL51Parser.g3:655:4: tok= TRANSACTION
				{
				DebugLocation(655, 7);
				tok=(IToken)Match(input,TRANSACTION,Follow._TRANSACTION_in_ident_sp_label5938); if (state.failed) return retval;

				}
				break;
			case 235:
				DebugEnterAlt(235);
				// MySQL51Parser.g3:656:4: tok= TRANSACTIONAL
				{
				DebugLocation(656, 7);
				tok=(IToken)Match(input,TRANSACTIONAL,Follow._TRANSACTIONAL_in_ident_sp_label5946); if (state.failed) return retval;

				}
				break;
			case 236:
				DebugEnterAlt(236);
				// MySQL51Parser.g3:657:4: tok= TRIGGERS
				{
				DebugLocation(657, 7);
				tok=(IToken)Match(input,TRIGGERS,Follow._TRIGGERS_in_ident_sp_label5954); if (state.failed) return retval;

				}
				break;
			case 237:
				DebugEnterAlt(237);
				// MySQL51Parser.g3:658:4: tok= TIMESTAMP
				{
				DebugLocation(658, 7);
				tok=(IToken)Match(input,TIMESTAMP,Follow._TIMESTAMP_in_ident_sp_label5962); if (state.failed) return retval;

				}
				break;
			case 238:
				DebugEnterAlt(238);
				// MySQL51Parser.g3:659:4: tok= TIMESTAMP_ADD
				{
				DebugLocation(659, 7);
				tok=(IToken)Match(input,TIMESTAMP_ADD,Follow._TIMESTAMP_ADD_in_ident_sp_label5970); if (state.failed) return retval;

				}
				break;
			case 239:
				DebugEnterAlt(239);
				// MySQL51Parser.g3:660:4: tok= TIMESTAMP_DIFF
				{
				DebugLocation(660, 7);
				tok=(IToken)Match(input,TIMESTAMP_DIFF,Follow._TIMESTAMP_DIFF_in_ident_sp_label5978); if (state.failed) return retval;

				}
				break;
			case 240:
				DebugEnterAlt(240);
				// MySQL51Parser.g3:661:4: tok= TIME
				{
				DebugLocation(661, 7);
				tok=(IToken)Match(input,TIME,Follow._TIME_in_ident_sp_label5986); if (state.failed) return retval;

				}
				break;
			case 241:
				DebugEnterAlt(241);
				// MySQL51Parser.g3:662:4: tok= TYPES
				{
				DebugLocation(662, 7);
				tok=(IToken)Match(input,TYPES,Follow._TYPES_in_ident_sp_label5994); if (state.failed) return retval;

				}
				break;
			case 242:
				DebugEnterAlt(242);
				// MySQL51Parser.g3:663:4: tok= TYPE
				{
				DebugLocation(663, 7);
				tok=(IToken)Match(input,TYPE,Follow._TYPE_in_ident_sp_label6002); if (state.failed) return retval;

				}
				break;
			case 243:
				DebugEnterAlt(243);
				// MySQL51Parser.g3:664:4: tok= UDF_RETURNS
				{
				DebugLocation(664, 7);
				tok=(IToken)Match(input,UDF_RETURNS,Follow._UDF_RETURNS_in_ident_sp_label6010); if (state.failed) return retval;

				}
				break;
			case 244:
				DebugEnterAlt(244);
				// MySQL51Parser.g3:665:4: tok= FUNCTION
				{
				DebugLocation(665, 7);
				tok=(IToken)Match(input,FUNCTION,Follow._FUNCTION_in_ident_sp_label6018); if (state.failed) return retval;

				}
				break;
			case 245:
				DebugEnterAlt(245);
				// MySQL51Parser.g3:666:4: tok= UNCOMMITTED
				{
				DebugLocation(666, 7);
				tok=(IToken)Match(input,UNCOMMITTED,Follow._UNCOMMITTED_in_ident_sp_label6026); if (state.failed) return retval;

				}
				break;
			case 246:
				DebugEnterAlt(246);
				// MySQL51Parser.g3:667:4: tok= UNDEFINED
				{
				DebugLocation(667, 7);
				tok=(IToken)Match(input,UNDEFINED,Follow._UNDEFINED_in_ident_sp_label6034); if (state.failed) return retval;

				}
				break;
			case 247:
				DebugEnterAlt(247);
				// MySQL51Parser.g3:668:4: tok= UNDO_BUFFER_SIZE
				{
				DebugLocation(668, 7);
				tok=(IToken)Match(input,UNDO_BUFFER_SIZE,Follow._UNDO_BUFFER_SIZE_in_ident_sp_label6042); if (state.failed) return retval;

				}
				break;
			case 248:
				DebugEnterAlt(248);
				// MySQL51Parser.g3:669:4: tok= UNDOFILE
				{
				DebugLocation(669, 7);
				tok=(IToken)Match(input,UNDOFILE,Follow._UNDOFILE_in_ident_sp_label6050); if (state.failed) return retval;

				}
				break;
			case 249:
				DebugEnterAlt(249);
				// MySQL51Parser.g3:670:4: tok= UNKNOWN
				{
				DebugLocation(670, 7);
				tok=(IToken)Match(input,UNKNOWN,Follow._UNKNOWN_in_ident_sp_label6058); if (state.failed) return retval;

				}
				break;
			case 250:
				DebugEnterAlt(250);
				// MySQL51Parser.g3:671:4: tok= UNTIL
				{
				DebugLocation(671, 7);
				tok=(IToken)Match(input,UNTIL,Follow._UNTIL_in_ident_sp_label6066); if (state.failed) return retval;

				}
				break;
			case 251:
				DebugEnterAlt(251);
				// MySQL51Parser.g3:672:4: tok= USER
				{
				DebugLocation(672, 7);
				tok=(IToken)Match(input,USER,Follow._USER_in_ident_sp_label6074); if (state.failed) return retval;

				}
				break;
			case 252:
				DebugEnterAlt(252);
				// MySQL51Parser.g3:673:4: tok= USE_FRM
				{
				DebugLocation(673, 7);
				tok=(IToken)Match(input,USE_FRM,Follow._USE_FRM_in_ident_sp_label6082); if (state.failed) return retval;

				}
				break;
			case 253:
				DebugEnterAlt(253);
				// MySQL51Parser.g3:674:4: tok= VARIABLES
				{
				DebugLocation(674, 7);
				tok=(IToken)Match(input,VARIABLES,Follow._VARIABLES_in_ident_sp_label6090); if (state.failed) return retval;

				}
				break;
			case 254:
				DebugEnterAlt(254);
				// MySQL51Parser.g3:675:4: tok= VIEW
				{
				DebugLocation(675, 7);
				tok=(IToken)Match(input,VIEW,Follow._VIEW_in_ident_sp_label6098); if (state.failed) return retval;

				}
				break;
			case 255:
				DebugEnterAlt(255);
				// MySQL51Parser.g3:676:4: tok= VALUE
				{
				DebugLocation(676, 7);
				tok=(IToken)Match(input,VALUE,Follow._VALUE_in_ident_sp_label6106); if (state.failed) return retval;

				}
				break;
			case 256:
				DebugEnterAlt(256);
				// MySQL51Parser.g3:677:4: tok= WARNINGS
				{
				DebugLocation(677, 7);
				tok=(IToken)Match(input,WARNINGS,Follow._WARNINGS_in_ident_sp_label6114); if (state.failed) return retval;

				}
				break;
			case 257:
				DebugEnterAlt(257);
				// MySQL51Parser.g3:678:4: tok= WAIT
				{
				DebugLocation(678, 7);
				tok=(IToken)Match(input,WAIT,Follow._WAIT_in_ident_sp_label6122); if (state.failed) return retval;

				}
				break;
			case 258:
				DebugEnterAlt(258);
				// MySQL51Parser.g3:679:4: tok= WEEK
				{
				DebugLocation(679, 7);
				tok=(IToken)Match(input,WEEK,Follow._WEEK_in_ident_sp_label6130); if (state.failed) return retval;

				}
				break;
			case 259:
				DebugEnterAlt(259);
				// MySQL51Parser.g3:680:4: tok= WORK
				{
				DebugLocation(680, 7);
				tok=(IToken)Match(input,WORK,Follow._WORK_in_ident_sp_label6138); if (state.failed) return retval;

				}
				break;
			case 260:
				DebugEnterAlt(260);
				// MySQL51Parser.g3:681:4: tok= X509
				{
				DebugLocation(681, 7);
				tok=(IToken)Match(input,X509,Follow._X509_in_ident_sp_label6146); if (state.failed) return retval;

				}
				break;
			case 261:
				DebugEnterAlt(261);
				// MySQL51Parser.g3:682:4: tok= YEAR
				{
				DebugLocation(682, 7);
				tok=(IToken)Match(input,YEAR,Follow._YEAR_in_ident_sp_label6154); if (state.failed) return retval;

				}
				break;

			}
			} finally { DebugExitSubRule(105); }

			DebugLocation(684, 2);
			if (state.backtracking == 0)
			{

						adaptor.AddChild(root_0, (object)adaptor.Create(ID, tok));
					
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("ident_sp_label", 33);
			LeaveRule("ident_sp_label", 33);
			LeaveRule_ident_sp_label();
		}
		DebugLocation(687, 1);
		} finally { DebugExitRule(GrammarFileName, "ident_sp_label"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "ident_sp_label"

	private sealed partial class index_hint_list_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public index_hint_list_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_index_hint_list();
	partial void LeaveRule_index_hint_list();

	// $ANTLR start "index_hint_list"
	// MySQL51Parser.g3:689:1: index_hint_list : index_hint ( COMMA index_hint )* -> ^( INDEX_HINTS ( index_hint )+ ) ;
	[GrammarRule("index_hint_list")]
	private MySQL51Parser.index_hint_list_return index_hint_list()
	{
		EnterRule_index_hint_list();
		EnterRule("index_hint_list", 34);
		TraceIn("index_hint_list", 34);
		MySQL51Parser.index_hint_list_return retval = new MySQL51Parser.index_hint_list_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken COMMA258 = default(IToken);
		MySQL51Parser.index_hint_return index_hint257 = default(MySQL51Parser.index_hint_return);
		MySQL51Parser.index_hint_return index_hint259 = default(MySQL51Parser.index_hint_return);

		object COMMA258_tree = default(object);
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_index_hint=new RewriteRuleSubtreeStream(adaptor,"rule index_hint");
		try { DebugEnterRule(GrammarFileName, "index_hint_list");
		DebugLocation(689, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:690:2: ( index_hint ( COMMA index_hint )* -> ^( INDEX_HINTS ( index_hint )+ ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:690:4: index_hint ( COMMA index_hint )*
			{
			DebugLocation(690, 4);
			PushFollow(Follow._index_hint_in_index_hint_list6173);
			index_hint257=index_hint();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_index_hint.Add(index_hint257.Tree);
			DebugLocation(690, 15);
			// MySQL51Parser.g3:690:15: ( COMMA index_hint )*
			try { DebugEnterSubRule(106);
			while (true)
			{
				int alt106=2;
				try { DebugEnterDecision(106, false);
				int LA106_0 = input.LA(1);

				if ((LA106_0==COMMA))
				{
					int LA106_2 = input.LA(2);

					if ((LA106_2==FORCE||LA106_2==IGNORE||LA106_2==USE))
					{
						alt106 = 1;
					}


				}


				} finally { DebugExitDecision(106); }
				switch ( alt106 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:690:16: COMMA index_hint
					{
					DebugLocation(690, 16);
					COMMA258=(IToken)Match(input,COMMA,Follow._COMMA_in_index_hint_list6176); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMA.Add(COMMA258);

					DebugLocation(690, 22);
					PushFollow(Follow._index_hint_in_index_hint_list6178);
					index_hint259=index_hint();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_index_hint.Add(index_hint259.Tree);

					}
					break;

				default:
					goto loop106;
				}
			}

			loop106:
				;

			} finally { DebugExitSubRule(106); }



			{
			// AST REWRITE
			// elements: index_hint
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 690:36: -> ^( INDEX_HINTS ( index_hint )+ )
			{
				DebugLocation(690, 39);
				// MySQL51Parser.g3:690:39: ^( INDEX_HINTS ( index_hint )+ )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(690, 41);
				root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(INDEX_HINTS, "INDEX_HINTS"), root_1);

				DebugLocation(690, 53);
				if (!(stream_index_hint.HasNext))
				{
					throw new RewriteEarlyExitException();
				}
				while ( stream_index_hint.HasNext )
				{
					DebugLocation(690, 53);
					adaptor.AddChild(root_1, stream_index_hint.NextTree());

				}
				stream_index_hint.Reset();

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("index_hint_list", 34);
			LeaveRule("index_hint_list", 34);
			LeaveRule_index_hint_list();
		}
		DebugLocation(691, 1);
		} finally { DebugExitRule(GrammarFileName, "index_hint_list"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "index_hint_list"

	protected sealed partial class index_hint_scope
	{
		public bool namesOptional;

		public index_hint_scope(MySQL51Parser grammar) { OnCreated(grammar); }
		partial void OnCreated(MySQL51Parser grammar);
	}
	partial void index_hint_scopeInit( index_hint_scope scope );
	partial void index_hint_scopeAfter( index_hint_scope scope );
	protected readonly Stack<index_hint_scope> index_hint_stack = new Stack<index_hint_scope>();

	private sealed partial class index_hint_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public index_hint_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_index_hint();
	partial void LeaveRule_index_hint();

	// $ANTLR start "index_hint"
	// MySQL51Parser.g3:693:1: index_hint : ( USE index_hint_rest -> ^( USE index_hint_rest ) | IGNORE index_hint_rest -> ^( IGNORE index_hint_rest ) | FORCE index_hint_rest -> ^( FORCE index_hint_rest ) );
	[GrammarRule("index_hint")]
	private MySQL51Parser.index_hint_return index_hint()
	{
		EnterRule_index_hint();
		EnterRule("index_hint", 35);
		TraceIn("index_hint", 35);
		index_hint_stack.Push(new index_hint_scope(this));index_hint_scopeInit(index_hint_stack.Peek());
		MySQL51Parser.index_hint_return retval = new MySQL51Parser.index_hint_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken USE260 = default(IToken);
		IToken IGNORE262 = default(IToken);
		IToken FORCE264 = default(IToken);
		MySQL51Parser.index_hint_rest_return index_hint_rest261 = default(MySQL51Parser.index_hint_rest_return);
		MySQL51Parser.index_hint_rest_return index_hint_rest263 = default(MySQL51Parser.index_hint_rest_return);
		MySQL51Parser.index_hint_rest_return index_hint_rest265 = default(MySQL51Parser.index_hint_rest_return);

		object USE260_tree = default(object);
		object IGNORE262_tree = default(object);
		object FORCE264_tree = default(object);
		RewriteRuleITokenStream stream_USE=new RewriteRuleITokenStream(adaptor,"token USE");
		RewriteRuleITokenStream stream_IGNORE=new RewriteRuleITokenStream(adaptor,"token IGNORE");
		RewriteRuleITokenStream stream_FORCE=new RewriteRuleITokenStream(adaptor,"token FORCE");
		RewriteRuleSubtreeStream stream_index_hint_rest=new RewriteRuleSubtreeStream(adaptor,"rule index_hint_rest");

		index_hint_stack.Peek().namesOptional =  false;

		try { DebugEnterRule(GrammarFileName, "index_hint");
		DebugLocation(693, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:700:2: ( USE index_hint_rest -> ^( USE index_hint_rest ) | IGNORE index_hint_rest -> ^( IGNORE index_hint_rest ) | FORCE index_hint_rest -> ^( FORCE index_hint_rest ) )
			int alt107=3;
			try { DebugEnterDecision(107, false);
			switch (input.LA(1))
			{
			case USE:
				{
				alt107 = 1;
				}
				break;
			case IGNORE:
				{
				alt107 = 2;
				}
				break;
			case FORCE:
				{
				alt107 = 3;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 107, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(107); }
			switch (alt107)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:700:4: USE index_hint_rest
				{
				DebugLocation(700, 4);
				USE260=(IToken)Match(input,USE,Follow._USE_in_index_hint6210); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_USE.Add(USE260);

				DebugLocation(700, 8);
				if (state.backtracking == 0)
				{
					index_hint_stack.Peek().namesOptional =  true;
				}
				DebugLocation(700, 45);
				PushFollow(Follow._index_hint_rest_in_index_hint6214);
				index_hint_rest261=index_hint_rest();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_index_hint_rest.Add(index_hint_rest261.Tree);


				{
				// AST REWRITE
				// elements: USE, index_hint_rest
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 700:62: -> ^( USE index_hint_rest )
				{
					DebugLocation(700, 65);
					// MySQL51Parser.g3:700:65: ^( USE index_hint_rest )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(700, 67);
					root_1 = (object)adaptor.BecomeRoot(stream_USE.NextNode(), root_1);

					DebugLocation(700, 71);
					adaptor.AddChild(root_1, stream_index_hint_rest.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:701:4: IGNORE index_hint_rest
				{
				DebugLocation(701, 4);
				IGNORE262=(IToken)Match(input,IGNORE,Follow._IGNORE_in_index_hint6228); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_IGNORE.Add(IGNORE262);

				DebugLocation(701, 11);
				if (state.backtracking == 0)
				{
					index_hint_stack.Peek().namesOptional =  false;
				}
				DebugLocation(701, 49);
				PushFollow(Follow._index_hint_rest_in_index_hint6232);
				index_hint_rest263=index_hint_rest();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_index_hint_rest.Add(index_hint_rest263.Tree);


				{
				// AST REWRITE
				// elements: IGNORE, index_hint_rest
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 701:65: -> ^( IGNORE index_hint_rest )
				{
					DebugLocation(701, 68);
					// MySQL51Parser.g3:701:68: ^( IGNORE index_hint_rest )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(701, 70);
					root_1 = (object)adaptor.BecomeRoot(stream_IGNORE.NextNode(), root_1);

					DebugLocation(701, 77);
					adaptor.AddChild(root_1, stream_index_hint_rest.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:702:4: FORCE index_hint_rest
				{
				DebugLocation(702, 4);
				FORCE264=(IToken)Match(input,FORCE,Follow._FORCE_in_index_hint6245); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_FORCE.Add(FORCE264);

				DebugLocation(702, 10);
				if (state.backtracking == 0)
				{
					index_hint_stack.Peek().namesOptional =  false;
				}
				DebugLocation(702, 48);
				PushFollow(Follow._index_hint_rest_in_index_hint6249);
				index_hint_rest265=index_hint_rest();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_index_hint_rest.Add(index_hint_rest265.Tree);


				{
				// AST REWRITE
				// elements: FORCE, index_hint_rest
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 702:64: -> ^( FORCE index_hint_rest )
				{
					DebugLocation(702, 67);
					// MySQL51Parser.g3:702:67: ^( FORCE index_hint_rest )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(702, 69);
					root_1 = (object)adaptor.BecomeRoot(stream_FORCE.NextNode(), root_1);

					DebugLocation(702, 75);
					adaptor.AddChild(root_1, stream_index_hint_rest.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("index_hint", 35);
			LeaveRule("index_hint", 35);
			LeaveRule_index_hint();
			index_hint_scopeAfter(index_hint_stack.Peek());index_hint_stack.Pop();
		}
		DebugLocation(703, 1);
		} finally { DebugExitRule(GrammarFileName, "index_hint"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "index_hint"

	private sealed partial class index_hint_rest_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public index_hint_rest_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_index_hint_rest();
	partial void LeaveRule_index_hint_rest();

	// $ANTLR start "index_hint_rest"
	// MySQL51Parser.g3:705:1: index_hint_rest : (name= INDEX |name= KEY ) ( FOR (usage= JOIN |usage= ORDER BY |usage= GROUP BY ) )? LPAREN ({...}? => (names+= ident ( COMMA names+= ident )* )? |names+= ident ( COMMA names+= ident )* ) RPAREN -> $name ^( LPAREN ( $names)? ) ( $usage)? ;
	[GrammarRule("index_hint_rest")]
	private MySQL51Parser.index_hint_rest_return index_hint_rest()
	{
		EnterRule_index_hint_rest();
		EnterRule("index_hint_rest", 36);
		TraceIn("index_hint_rest", 36);
		MySQL51Parser.index_hint_rest_return retval = new MySQL51Parser.index_hint_rest_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken name = default(IToken);
		IToken usage = default(IToken);
		IToken FOR266 = default(IToken);
		IToken BY267 = default(IToken);
		IToken BY268 = default(IToken);
		IToken LPAREN269 = default(IToken);
		IToken COMMA270 = default(IToken);
		IToken COMMA271 = default(IToken);
		IToken RPAREN272 = default(IToken);
		List<object> list_names = null;
		MySQL51Parser.ident_return names = default(MySQL51Parser.ident_return);
		object name_tree = default(object);
		object usage_tree = default(object);
		object FOR266_tree = default(object);
		object BY267_tree = default(object);
		object BY268_tree = default(object);
		object LPAREN269_tree = default(object);
		object COMMA270_tree = default(object);
		object COMMA271_tree = default(object);
		object RPAREN272_tree = default(object);
		RewriteRuleITokenStream stream_INDEX=new RewriteRuleITokenStream(adaptor,"token INDEX");
		RewriteRuleITokenStream stream_KEY=new RewriteRuleITokenStream(adaptor,"token KEY");
		RewriteRuleITokenStream stream_FOR=new RewriteRuleITokenStream(adaptor,"token FOR");
		RewriteRuleITokenStream stream_JOIN=new RewriteRuleITokenStream(adaptor,"token JOIN");
		RewriteRuleITokenStream stream_ORDER=new RewriteRuleITokenStream(adaptor,"token ORDER");
		RewriteRuleITokenStream stream_BY=new RewriteRuleITokenStream(adaptor,"token BY");
		RewriteRuleITokenStream stream_GROUP=new RewriteRuleITokenStream(adaptor,"token GROUP");
		RewriteRuleITokenStream stream_LPAREN=new RewriteRuleITokenStream(adaptor,"token LPAREN");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleITokenStream stream_RPAREN=new RewriteRuleITokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_ident=new RewriteRuleSubtreeStream(adaptor,"rule ident");
		try { DebugEnterRule(GrammarFileName, "index_hint_rest");
		DebugLocation(705, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:706:2: ( (name= INDEX |name= KEY ) ( FOR (usage= JOIN |usage= ORDER BY |usage= GROUP BY ) )? LPAREN ({...}? => (names+= ident ( COMMA names+= ident )* )? |names+= ident ( COMMA names+= ident )* ) RPAREN -> $name ^( LPAREN ( $names)? ) ( $usage)? )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:706:4: (name= INDEX |name= KEY ) ( FOR (usage= JOIN |usage= ORDER BY |usage= GROUP BY ) )? LPAREN ({...}? => (names+= ident ( COMMA names+= ident )* )? |names+= ident ( COMMA names+= ident )* ) RPAREN
			{
			DebugLocation(706, 4);
			// MySQL51Parser.g3:706:4: (name= INDEX |name= KEY )
			int alt108=2;
			try { DebugEnterSubRule(108);
			try { DebugEnterDecision(108, false);
			int LA108_0 = input.LA(1);

			if ((LA108_0==INDEX))
			{
				alt108 = 1;
			}
			else if ((LA108_0==KEY))
			{
				alt108 = 2;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 108, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(108); }
			switch (alt108)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:706:5: name= INDEX
				{
				DebugLocation(706, 9);
				name=(IToken)Match(input,INDEX,Follow._INDEX_in_index_hint_rest6271); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_INDEX.Add(name);


				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:706:16: name= KEY
				{
				DebugLocation(706, 20);
				name=(IToken)Match(input,KEY,Follow._KEY_in_index_hint_rest6275); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_KEY.Add(name);


				}
				break;

			}
			} finally { DebugExitSubRule(108); }

			DebugLocation(706, 26);
			// MySQL51Parser.g3:706:26: ( FOR (usage= JOIN |usage= ORDER BY |usage= GROUP BY ) )?
			int alt110=2;
			try { DebugEnterSubRule(110);
			try { DebugEnterDecision(110, false);
			int LA110_0 = input.LA(1);

			if ((LA110_0==FOR))
			{
				alt110 = 1;
			}
			} finally { DebugExitDecision(110); }
			switch (alt110)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:706:27: FOR (usage= JOIN |usage= ORDER BY |usage= GROUP BY )
				{
				DebugLocation(706, 27);
				FOR266=(IToken)Match(input,FOR,Follow._FOR_in_index_hint_rest6279); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_FOR.Add(FOR266);

				DebugLocation(706, 31);
				// MySQL51Parser.g3:706:31: (usage= JOIN |usage= ORDER BY |usage= GROUP BY )
				int alt109=3;
				try { DebugEnterSubRule(109);
				try { DebugEnterDecision(109, false);
				switch (input.LA(1))
				{
				case JOIN:
					{
					alt109 = 1;
					}
					break;
				case ORDER:
					{
					alt109 = 2;
					}
					break;
				case GROUP:
					{
					alt109 = 3;
					}
					break;
				default:
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 109, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
				}

				} finally { DebugExitDecision(109); }
				switch (alt109)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:706:32: usage= JOIN
					{
					DebugLocation(706, 37);
					usage=(IToken)Match(input,JOIN,Follow._JOIN_in_index_hint_rest6284); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_JOIN.Add(usage);


					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:706:45: usage= ORDER BY
					{
					DebugLocation(706, 50);
					usage=(IToken)Match(input,ORDER,Follow._ORDER_in_index_hint_rest6290); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_ORDER.Add(usage);

					DebugLocation(706, 57);
					BY267=(IToken)Match(input,BY,Follow._BY_in_index_hint_rest6292); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_BY.Add(BY267);


					}
					break;
				case 3:
					DebugEnterAlt(3);
					// MySQL51Parser.g3:706:62: usage= GROUP BY
					{
					DebugLocation(706, 67);
					usage=(IToken)Match(input,GROUP,Follow._GROUP_in_index_hint_rest6298); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_GROUP.Add(usage);

					DebugLocation(706, 74);
					BY268=(IToken)Match(input,BY,Follow._BY_in_index_hint_rest6300); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_BY.Add(BY268);


					}
					break;

				}
				} finally { DebugExitSubRule(109); }


				}
				break;

			}
			} finally { DebugExitSubRule(110); }

			DebugLocation(707, 3);
			LPAREN269=(IToken)Match(input,LPAREN,Follow._LPAREN_in_index_hint_rest6307); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_LPAREN.Add(LPAREN269);

			DebugLocation(708, 3);
			// MySQL51Parser.g3:708:3: ({...}? => (names+= ident ( COMMA names+= ident )* )? |names+= ident ( COMMA names+= ident )* )
			int alt114=2;
			try { DebugEnterSubRule(114);
			try { DebugEnterDecision(114, false);
			try
			{
				alt114 = dfa114.Predict(input);
			}
			catch (NoViableAltException nvae)
			{
				DebugRecognitionException(nvae);
				throw;
			}
			} finally { DebugExitDecision(114); }
			switch (alt114)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:708:5: {...}? => (names+= ident ( COMMA names+= ident )* )?
				{
				DebugLocation(708, 5);
				if (!(EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true")))
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					throw new FailedPredicateException(input, "index_hint_rest", "$index_hint::namesOptional == true");
				}
				DebugLocation(708, 45);
				// MySQL51Parser.g3:708:45: (names+= ident ( COMMA names+= ident )* )?
				int alt112=2;
				try { DebugEnterSubRule(112);
				try { DebugEnterDecision(112, false);
				int LA112_0 = input.LA(1);

				if ((LA112_0==ACTION||(LA112_0>=ADDDATE && LA112_0<=ALGORITHM)||LA112_0==ANY||LA112_0==ASCII||(LA112_0>=AT && LA112_0<=BACKUP)||LA112_0==BEGIN||(LA112_0>=BINLOG && LA112_0<=BIT)||(LA112_0>=BLOCK && LA112_0<=BOOLEAN)||LA112_0==BTREE||(LA112_0>=BYTE && LA112_0<=CACHE)||LA112_0==CASCADED||LA112_0==CHAIN||LA112_0==CHANGED||LA112_0==CHARSET||(LA112_0>=CHECKSUM && LA112_0<=CODE)||LA112_0==COLLATION||LA112_0==COLUMNS||LA112_0==COMMENT||(LA112_0>=COMMIT && LA112_0<=CONCURRENT)||(LA112_0>=CONNECTION && LA112_0<=CONSISTENT)||(LA112_0>=CONTAINS && LA112_0<=CONTEXT)||LA112_0==CONTRIBUTORS||LA112_0==CPU||LA112_0==CUBE||LA112_0==DATA||(LA112_0>=DATAFILE && LA112_0<=DATETIME)||LA112_0==DAY||LA112_0==DEALLOCATE||LA112_0==DEFINER||LA112_0==DELAY_KEY_WRITE||LA112_0==DES_KEY_FILE||(LA112_0>=DIRECTORY && LA112_0<=DISK)||LA112_0==DO||(LA112_0>=DUMPFILE && LA112_0<=DYNAMIC)||LA112_0==ENABLE||(LA112_0>=END && LA112_0<=ENUM)||(LA112_0>=ERRORS && LA112_0<=ESCAPE)||(LA112_0>=EVENT && LA112_0<=EXECUTE)||LA112_0==EXPANSION||(LA112_0>=EXTENDED && LA112_0<=EXTENT_SIZE)||(LA112_0>=FAST && LA112_0<=FAULTS)||(LA112_0>=FIELDS && LA112_0<=FIXED)||LA112_0==FLUSH||(LA112_0>=FOUND && LA112_0<=FRAC_SECOND)||LA112_0==FULL||(LA112_0>=FUNCTION && LA112_0<=GLOBAL)||LA112_0==GRANTS||LA112_0==GROUP||(LA112_0>=HANDLER && LA112_0<=HASH)||LA112_0==HELP||(LA112_0>=HOST && LA112_0<=HOUR)||(LA112_0>=ID && LA112_0<=IDENTIFIED)||LA112_0==IMPORT||LA112_0==INDEXES||LA112_0==INITIAL_SIZE||LA112_0==INNOBASE||(LA112_0>=INSERT_METHOD && LA112_0<=INSTALL)||(LA112_0>=INVOKER && LA112_0<=IPC)||(LA112_0>=ISOLATION && LA112_0<=ISSUER)||LA112_0==KEY_BLOCK_SIZE||(LA112_0>=LABEL && LA112_0<=LAST)||LA112_0==LEAVES||LA112_0==LESS||LA112_0==LEVEL||(LA112_0>=LINESTRING && LA112_0<=LIST)||LA112_0==LOCAL||(LA112_0>=LOCKS && LA112_0<=LOGFILE)||LA112_0==LOGS||(LA112_0>=MASTER && LA112_0<=MASTER_SSL_KEY)||LA112_0==MASTER_USER||(LA112_0>=MAX_CONNECTIONS_PER_HOUR && LA112_0<=MEDIUM)||(LA112_0>=MEMORY && LA112_0<=MICROSECOND)||LA112_0==MIGRATE||LA112_0==MINUTE||LA112_0==MIN_ROWS||LA112_0==MODE||LA112_0==MODIFY||LA112_0==MONTH||(LA112_0>=MULTILINESTRING && LA112_0<=NATIONAL)||(LA112_0>=NCHAR && LA112_0<=NONE)||LA112_0==NO_WAIT||(LA112_0>=NVARCHAR && LA112_0<=OLD_PASSWORD)||(LA112_0>=ONE && LA112_0<=OPEN)||LA112_0==OPTIONS||(LA112_0>=OWNER && LA112_0<=PLUGINS)||(LA112_0>=POINT && LA112_0<=PORT)||(LA112_0>=PREPARE && LA112_0<=PREV)||LA112_0==PRIVILEGES||(LA112_0>=PROCESS && LA112_0<=PROFILES)||(LA112_0>=QUARTER && LA112_0<=QUICK)||(LA112_0>=REBUILD && LA112_0<=REDUNDANT)||(LA112_0>=RELAY_LOG_FILE && LA112_0<=RELAY_THREAD)||(LA112_0>=RELOAD && LA112_0<=REMOVE)||(LA112_0>=REORGANIZE && LA112_0<=REPAIR)||LA112_0==REPEATABLE||LA112_0==REPLICATION||(LA112_0>=RESET && LA112_0<=RESTORE)||LA112_0==RESUME||LA112_0==RETURNS||(LA112_0>=ROLLBACK && LA112_0<=ROW_FORMAT)||(LA112_0>=RTREE && LA112_0<=SCHEDULE)||LA112_0==SECOND||LA112_0==SECURITY||(LA112_0>=SERIAL && LA112_0<=SESSION)||LA112_0==SHARE||(LA112_0>=SHUTDOWN && LA112_0<=SLAVE)||(LA112_0>=SNAPSHOT && LA112_0<=SOCKET)||(LA112_0>=SONAME && LA112_0<=SOURCE)||(LA112_0>=SQL_BUFFER_RESULT && LA112_0<=SQL_CACHE)||LA112_0==SQL_NO_CACHE||LA112_0==SQL_THREAD||LA112_0==START||(LA112_0>=STARTS && LA112_0<=STATUS)||(LA112_0>=STOP && LA112_0<=STORAGE)||(LA112_0>=STRING_KEYWORD && LA112_0<=SUBPARTITIONS)||(LA112_0>=SUPER && LA112_0<=SWITCHES)||(LA112_0>=TABLES && LA112_0<=TEMPTABLE)||(LA112_0>=TEXT && LA112_0<=THAN)||(LA112_0>=TIME && LA112_0<=TIMESTAMP_DIFF)||(LA112_0>=TRANSACTION && LA112_0<=TRANSACTIONAL)||LA112_0==TRIGGERS||(LA112_0>=TRUNCATE && LA112_0<=UNDEFINED)||(LA112_0>=UNDOFILE && LA112_0<=UNINSTALL)||LA112_0==UNKNOWN||LA112_0==UNTIL||LA112_0==UPGRADE||LA112_0==USER||LA112_0==USE_FRM||LA112_0==VALUE||LA112_0==VARIABLES||(LA112_0>=VIEW && LA112_0<=WEEK)||(LA112_0>=WORK && LA112_0<=WRAPPER)||(LA112_0>=X509 && LA112_0<=XA)||LA112_0==YEAR))
				{
					alt112 = 1;
				}
				} finally { DebugExitDecision(112); }
				switch (alt112)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:708:46: names+= ident ( COMMA names+= ident )*
					{
					DebugLocation(708, 51);
					PushFollow(Follow._ident_in_index_hint_rest6319);
					names=ident();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_ident.Add(names.Tree);
					if (list_names==null) list_names=new List<object>();
					list_names.Add(names.Tree);

					DebugLocation(708, 59);
					// MySQL51Parser.g3:708:59: ( COMMA names+= ident )*
					try { DebugEnterSubRule(111);
					while (true)
					{
						int alt111=2;
						try { DebugEnterDecision(111, false);
						int LA111_0 = input.LA(1);

						if ((LA111_0==COMMA))
						{
							alt111 = 1;
						}


						} finally { DebugExitDecision(111); }
						switch ( alt111 )
						{
						case 1:
							DebugEnterAlt(1);
							// MySQL51Parser.g3:708:60: COMMA names+= ident
							{
							DebugLocation(708, 60);
							COMMA270=(IToken)Match(input,COMMA,Follow._COMMA_in_index_hint_rest6322); if (state.failed) return retval; 
							if (state.backtracking == 0) stream_COMMA.Add(COMMA270);

							DebugLocation(708, 71);
							PushFollow(Follow._ident_in_index_hint_rest6326);
							names=ident();
							PopFollow();
							if (state.failed) return retval;
							if (state.backtracking == 0) stream_ident.Add(names.Tree);
							if (list_names==null) list_names=new List<object>();
							list_names.Add(names.Tree);


							}
							break;

						default:
							goto loop111;
						}
					}

					loop111:
						;

					} finally { DebugExitSubRule(111); }


					}
					break;

				}
				} finally { DebugExitSubRule(112); }


				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:709:5: names+= ident ( COMMA names+= ident )*
				{
				DebugLocation(709, 10);
				PushFollow(Follow._ident_in_index_hint_rest6338);
				names=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(names.Tree);
				if (list_names==null) list_names=new List<object>();
				list_names.Add(names.Tree);

				DebugLocation(709, 18);
				// MySQL51Parser.g3:709:18: ( COMMA names+= ident )*
				try { DebugEnterSubRule(113);
				while (true)
				{
					int alt113=2;
					try { DebugEnterDecision(113, false);
					int LA113_0 = input.LA(1);

					if ((LA113_0==COMMA))
					{
						alt113 = 1;
					}


					} finally { DebugExitDecision(113); }
					switch ( alt113 )
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:709:19: COMMA names+= ident
						{
						DebugLocation(709, 19);
						COMMA271=(IToken)Match(input,COMMA,Follow._COMMA_in_index_hint_rest6341); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_COMMA.Add(COMMA271);

						DebugLocation(709, 30);
						PushFollow(Follow._ident_in_index_hint_rest6345);
						names=ident();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_ident.Add(names.Tree);
						if (list_names==null) list_names=new List<object>();
						list_names.Add(names.Tree);


						}
						break;

					default:
						goto loop113;
					}
				}

				loop113:
					;

				} finally { DebugExitSubRule(113); }


				}
				break;

			}
			} finally { DebugExitSubRule(114); }

			DebugLocation(711, 3);
			RPAREN272=(IToken)Match(input,RPAREN,Follow._RPAREN_in_index_hint_rest6356); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_RPAREN.Add(RPAREN272);



			{
			// AST REWRITE
			// elements: name, LPAREN, names, usage
			// token labels: name, usage
			// rule labels: retval
			// token list labels: 
			// rule list labels: names
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleITokenStream stream_name=new RewriteRuleITokenStream(adaptor,"token name",name);
			RewriteRuleITokenStream stream_usage=new RewriteRuleITokenStream(adaptor,"token usage",usage);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);
			RewriteRuleSubtreeStream stream_names=new RewriteRuleSubtreeStream(adaptor,"token names",list_names);
			root_0 = (object)adaptor.Nil();
			// 712:3: -> $name ^( LPAREN ( $names)? ) ( $usage)?
			{
				DebugLocation(712, 7);
				adaptor.AddChild(root_0, stream_name.NextNode());
				DebugLocation(712, 12);
				// MySQL51Parser.g3:712:12: ^( LPAREN ( $names)? )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(712, 14);
				root_1 = (object)adaptor.BecomeRoot(stream_LPAREN.NextNode(), root_1);

				DebugLocation(712, 22);
				// MySQL51Parser.g3:712:22: ( $names)?
				if (stream_names.HasNext)
				{
					DebugLocation(712, 22);
					adaptor.AddChild(root_1, stream_names.NextTree());

				}
				stream_names.Reset();

				adaptor.AddChild(root_0, root_1);
				}
				DebugLocation(712, 31);
				// MySQL51Parser.g3:712:31: ( $usage)?
				if (stream_usage.HasNext)
				{
					DebugLocation(712, 31);
					adaptor.AddChild(root_0, stream_usage.NextNode());

				}
				stream_usage.Reset();

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("index_hint_rest", 36);
			LeaveRule("index_hint_rest", 36);
			LeaveRule_index_hint_rest();
		}
		DebugLocation(713, 1);
		} finally { DebugExitRule(GrammarFileName, "index_hint_rest"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "index_hint_rest"

	private sealed partial class exprList_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public exprList_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_exprList();
	partial void LeaveRule_exprList();

	// $ANTLR start "exprList"
	// MySQL51Parser.g3:716:1: exprList :e+= expr ( COMMA e+= expr )* -> ( $e)+ ;
	[GrammarRule("exprList")]
	private MySQL51Parser.exprList_return exprList()
	{
		EnterRule_exprList();
		EnterRule("exprList", 37);
		TraceIn("exprList", 37);
		MySQL51Parser.exprList_return retval = new MySQL51Parser.exprList_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken COMMA273 = default(IToken);
		List<object> list_e = null;
		MySQL51Parser.expr_return e = default(MySQL51Parser.expr_return);
		object COMMA273_tree = default(object);
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr");
		try { DebugEnterRule(GrammarFileName, "exprList");
		DebugLocation(716, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:717:2: (e+= expr ( COMMA e+= expr )* -> ( $e)+ )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:717:4: e+= expr ( COMMA e+= expr )*
			{
			DebugLocation(717, 5);
			PushFollow(Follow._expr_in_exprList6389);
			e=expr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_expr.Add(e.Tree);
			if (list_e==null) list_e=new List<object>();
			list_e.Add(e.Tree);

			DebugLocation(717, 12);
			// MySQL51Parser.g3:717:12: ( COMMA e+= expr )*
			try { DebugEnterSubRule(115);
			while (true)
			{
				int alt115=2;
				try { DebugEnterDecision(115, false);
				int LA115_0 = input.LA(1);

				if ((LA115_0==COMMA))
				{
					alt115 = 1;
				}


				} finally { DebugExitDecision(115); }
				switch ( alt115 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:717:13: COMMA e+= expr
					{
					DebugLocation(717, 13);
					COMMA273=(IToken)Match(input,COMMA,Follow._COMMA_in_exprList6392); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMA.Add(COMMA273);

					DebugLocation(717, 20);
					PushFollow(Follow._expr_in_exprList6396);
					e=expr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_expr.Add(e.Tree);
					if (list_e==null) list_e=new List<object>();
					list_e.Add(e.Tree);


					}
					break;

				default:
					goto loop115;
				}
			}

			loop115:
				;

			} finally { DebugExitSubRule(115); }



			{
			// AST REWRITE
			// elements: e
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: e
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);
			RewriteRuleSubtreeStream stream_e=new RewriteRuleSubtreeStream(adaptor,"token e",list_e);
			root_0 = (object)adaptor.Nil();
			// 717:29: -> ( $e)+
			{
				DebugLocation(717, 33);
				if (!(stream_e.HasNext))
				{
					throw new RewriteEarlyExitException();
				}
				while ( stream_e.HasNext )
				{
					DebugLocation(717, 33);
					adaptor.AddChild(root_0, stream_e.NextTree());

				}
				stream_e.Reset();

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("exprList", 37);
			LeaveRule("exprList", 37);
			LeaveRule_exprList();
		}
		DebugLocation(718, 1);
		} finally { DebugExitRule(GrammarFileName, "exprList"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "exprList"

	private sealed partial class parenExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public parenExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_parenExpr();
	partial void LeaveRule_parenExpr();

	// $ANTLR start "parenExpr"
	// MySQL51Parser.g3:720:1: parenExpr : LPAREN expr RPAREN -> ^( LPAREN expr ) ;
	[GrammarRule("parenExpr")]
	private MySQL51Parser.parenExpr_return parenExpr()
	{
		EnterRule_parenExpr();
		EnterRule("parenExpr", 38);
		TraceIn("parenExpr", 38);
		MySQL51Parser.parenExpr_return retval = new MySQL51Parser.parenExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken LPAREN274 = default(IToken);
		IToken RPAREN276 = default(IToken);
		MySQL51Parser.expr_return expr275 = default(MySQL51Parser.expr_return);

		object LPAREN274_tree = default(object);
		object RPAREN276_tree = default(object);
		RewriteRuleITokenStream stream_LPAREN=new RewriteRuleITokenStream(adaptor,"token LPAREN");
		RewriteRuleITokenStream stream_RPAREN=new RewriteRuleITokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr");
		try { DebugEnterRule(GrammarFileName, "parenExpr");
		DebugLocation(720, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:721:2: ( LPAREN expr RPAREN -> ^( LPAREN expr ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:721:4: LPAREN expr RPAREN
			{
			DebugLocation(721, 4);
			LPAREN274=(IToken)Match(input,LPAREN,Follow._LPAREN_in_parenExpr6415); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_LPAREN.Add(LPAREN274);

			DebugLocation(721, 11);
			PushFollow(Follow._expr_in_parenExpr6417);
			expr275=expr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_expr.Add(expr275.Tree);
			DebugLocation(721, 16);
			RPAREN276=(IToken)Match(input,RPAREN,Follow._RPAREN_in_parenExpr6419); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_RPAREN.Add(RPAREN276);



			{
			// AST REWRITE
			// elements: LPAREN, expr
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 721:23: -> ^( LPAREN expr )
			{
				DebugLocation(721, 26);
				// MySQL51Parser.g3:721:26: ^( LPAREN expr )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(721, 28);
				root_1 = (object)adaptor.BecomeRoot(stream_LPAREN.NextNode(), root_1);

				DebugLocation(721, 35);
				adaptor.AddChild(root_1, stream_expr.NextTree());

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("parenExpr", 38);
			LeaveRule("parenExpr", 38);
			LeaveRule_parenExpr();
		}
		DebugLocation(722, 1);
		} finally { DebugExitRule(GrammarFileName, "parenExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "parenExpr"

	private sealed partial class parenExprList_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public parenExprList_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_parenExprList();
	partial void LeaveRule_parenExprList();

	// $ANTLR start "parenExprList"
	// MySQL51Parser.g3:724:1: parenExprList : LPAREN exprList RPAREN -> ^( LPAREN exprList ) ;
	[GrammarRule("parenExprList")]
	private MySQL51Parser.parenExprList_return parenExprList()
	{
		EnterRule_parenExprList();
		EnterRule("parenExprList", 39);
		TraceIn("parenExprList", 39);
		MySQL51Parser.parenExprList_return retval = new MySQL51Parser.parenExprList_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken LPAREN277 = default(IToken);
		IToken RPAREN279 = default(IToken);
		MySQL51Parser.exprList_return exprList278 = default(MySQL51Parser.exprList_return);

		object LPAREN277_tree = default(object);
		object RPAREN279_tree = default(object);
		RewriteRuleITokenStream stream_LPAREN=new RewriteRuleITokenStream(adaptor,"token LPAREN");
		RewriteRuleITokenStream stream_RPAREN=new RewriteRuleITokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_exprList=new RewriteRuleSubtreeStream(adaptor,"rule exprList");
		try { DebugEnterRule(GrammarFileName, "parenExprList");
		DebugLocation(724, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:725:2: ( LPAREN exprList RPAREN -> ^( LPAREN exprList ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:725:4: LPAREN exprList RPAREN
			{
			DebugLocation(725, 4);
			LPAREN277=(IToken)Match(input,LPAREN,Follow._LPAREN_in_parenExprList6439); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_LPAREN.Add(LPAREN277);

			DebugLocation(725, 11);
			PushFollow(Follow._exprList_in_parenExprList6441);
			exprList278=exprList();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_exprList.Add(exprList278.Tree);
			DebugLocation(725, 20);
			RPAREN279=(IToken)Match(input,RPAREN,Follow._RPAREN_in_parenExprList6443); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_RPAREN.Add(RPAREN279);



			{
			// AST REWRITE
			// elements: LPAREN, exprList
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 725:27: -> ^( LPAREN exprList )
			{
				DebugLocation(725, 30);
				// MySQL51Parser.g3:725:30: ^( LPAREN exprList )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(725, 32);
				root_1 = (object)adaptor.BecomeRoot(stream_LPAREN.NextNode(), root_1);

				DebugLocation(725, 39);
				adaptor.AddChild(root_1, stream_exprList.NextTree());

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("parenExprList", 39);
			LeaveRule("parenExprList", 39);
			LeaveRule_parenExprList();
		}
		DebugLocation(726, 1);
		} finally { DebugExitRule(GrammarFileName, "parenExprList"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "parenExprList"

	private sealed partial class parenOptExprList_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public parenOptExprList_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_parenOptExprList();
	partial void LeaveRule_parenOptExprList();

	// $ANTLR start "parenOptExprList"
	// MySQL51Parser.g3:728:1: parenOptExprList : LPAREN (e+= exprList )? RPAREN -> ^( LPAREN ( $e)* ) ;
	[GrammarRule("parenOptExprList")]
	private MySQL51Parser.parenOptExprList_return parenOptExprList()
	{
		EnterRule_parenOptExprList();
		EnterRule("parenOptExprList", 40);
		TraceIn("parenOptExprList", 40);
		MySQL51Parser.parenOptExprList_return retval = new MySQL51Parser.parenOptExprList_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken LPAREN280 = default(IToken);
		IToken RPAREN281 = default(IToken);
		List<object> list_e = null;
		MySQL51Parser.exprList_return e = default(MySQL51Parser.exprList_return);
		object LPAREN280_tree = default(object);
		object RPAREN281_tree = default(object);
		RewriteRuleITokenStream stream_LPAREN=new RewriteRuleITokenStream(adaptor,"token LPAREN");
		RewriteRuleITokenStream stream_RPAREN=new RewriteRuleITokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_exprList=new RewriteRuleSubtreeStream(adaptor,"rule exprList");
		try { DebugEnterRule(GrammarFileName, "parenOptExprList");
		DebugLocation(728, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:729:2: ( LPAREN (e+= exprList )? RPAREN -> ^( LPAREN ( $e)* ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:729:4: LPAREN (e+= exprList )? RPAREN
			{
			DebugLocation(729, 4);
			LPAREN280=(IToken)Match(input,LPAREN,Follow._LPAREN_in_parenOptExprList6463); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_LPAREN.Add(LPAREN280);

			DebugLocation(729, 12);
			// MySQL51Parser.g3:729:12: (e+= exprList )?
			int alt116=2;
			try { DebugEnterSubRule(116);
			try { DebugEnterDecision(116, false);
			int LA116_0 = input.LA(1);

			if ((LA116_0==ACTION||(LA116_0>=ADDDATE && LA116_0<=ALGORITHM)||LA116_0==ANY||LA116_0==ASCII||(LA116_0>=AT && LA116_0<=BACKUP)||LA116_0==BEGIN||(LA116_0>=BINARY && LA116_0<=BIT)||LA116_0==BITWISE_INVERSION||(LA116_0>=BIT_AND && LA116_0<=BIT_XOR)||(LA116_0>=BLOCK && LA116_0<=BOOLEAN)||LA116_0==BTREE||(LA116_0>=BYTE && LA116_0<=CACHE)||LA116_0==CASCADED||(LA116_0>=CAST && LA116_0<=CHAIN)||(LA116_0>=CHANGED && LA116_0<=CHAR)||LA116_0==CHARSET||(LA116_0>=CHECKSUM && LA116_0<=COLLATION)||LA116_0==COLUMNS||LA116_0==COMMENT||(LA116_0>=COMMIT && LA116_0<=CONCURRENT)||(LA116_0>=CONNECTION && LA116_0<=CONSISTENT)||(LA116_0>=CONTAINS && LA116_0<=CONTEXT)||LA116_0==CONTRIBUTORS||(LA116_0>=COUNT && LA116_0<=CPU)||(LA116_0>=CUBE && LA116_0<=CURRENT_USER)||LA116_0==CURTIME||(LA116_0>=DATA && LA116_0<=DATABASE)||(LA116_0>=DATAFILE && LA116_0<=DATE_ADD)||LA116_0==DATE_SUB||LA116_0==DAY||LA116_0==DEALLOCATE||LA116_0==DEFINER||LA116_0==DELAY_KEY_WRITE||LA116_0==DES_KEY_FILE||(LA116_0>=DIRECTORY && LA116_0<=DISK)||LA116_0==DO||(LA116_0>=DUMPFILE && LA116_0<=DYNAMIC)||LA116_0==ENABLE||(LA116_0>=END && LA116_0<=ENUM)||(LA116_0>=ERRORS && LA116_0<=ESCAPE)||(LA116_0>=EVENT && LA116_0<=EXISTS)||LA116_0==EXPANSION||(LA116_0>=EXTENDED && LA116_0<=FAULTS)||(LA116_0>=FIELDS && LA116_0<=FIXED)||LA116_0==FLUSH||(LA116_0>=FOUND && LA116_0<=FRAC_SECOND)||LA116_0==FULL||(LA116_0>=FUNCTION && LA116_0<=GLOBAL_VARIABLE)||LA116_0==GRANTS||(LA116_0>=GROUP && LA116_0<=HASH)||(LA116_0>=HELP && LA116_0<=HEXA_VALUE)||(LA116_0>=HOST && LA116_0<=HOUR)||(LA116_0>=ID && LA116_0<=IF)||LA116_0==IMPORT||LA116_0==INDEXES||LA116_0==INITIAL_SIZE||LA116_0==INNOBASE||(LA116_0>=INSERT && LA116_0<=INSTALL)||LA116_0==INTERVAL||(LA116_0>=INVOKER && LA116_0<=IPC)||(LA116_0>=ISOLATION && LA116_0<=ISSUER)||LA116_0==KEY_BLOCK_SIZE||(LA116_0>=LABEL && LA116_0<=LAST)||(LA116_0>=LEAVES && LA116_0<=LEFT)||LA116_0==LESS||LA116_0==LEVEL||(LA116_0>=LINESTRING && LA116_0<=LIST)||LA116_0==LOCAL||(LA116_0>=LOCKS && LA116_0<=LOGFILE)||LA116_0==LOGS||(LA116_0>=LPAREN && LA116_0<=MASTER_SSL_KEY)||LA116_0==MASTER_USER||(LA116_0>=MAX && LA116_0<=MEDIUM)||(LA116_0>=MEMORY && LA116_0<=MID)||(LA116_0>=MIGRATE && LA116_0<=MINUTE)||(LA116_0>=MIN_ROWS && LA116_0<=MODE)||LA116_0==MODIFY||LA116_0==MONTH||(LA116_0>=MULTILINESTRING && LA116_0<=NATIONAL)||(LA116_0>=NCHAR && LA116_0<=NOT)||(LA116_0>=NOT_OP && LA116_0<=NO_WAIT)||LA116_0==NULL||LA116_0==NUMBER||(LA116_0>=NVARCHAR && LA116_0<=OLD_PASSWORD)||(LA116_0>=ONE && LA116_0<=OPEN)||LA116_0==OPTIONS||(LA116_0>=OWNER && LA116_0<=POSITION)||(LA116_0>=PREPARE && LA116_0<=PREV)||LA116_0==PRIVILEGES||(LA116_0>=PROCESS && LA116_0<=PROFILES)||(LA116_0>=QUARTER && LA116_0<=QUICK)||(LA116_0>=REBUILD && LA116_0<=REDUNDANT)||(LA116_0>=RELAY_LOG_FILE && LA116_0<=RELAY_THREAD)||(LA116_0>=RELOAD && LA116_0<=REMOVE)||(LA116_0>=REORGANIZE && LA116_0<=REPLICATION)||(LA116_0>=RESET && LA116_0<=RESTORE)||LA116_0==RESUME||LA116_0==RETURNS||LA116_0==RIGHT||(LA116_0>=ROLLBACK && LA116_0<=ROW_FORMAT)||(LA116_0>=RTREE && LA116_0<=SCHEDULE)||LA116_0==SECOND||LA116_0==SECURITY||(LA116_0>=SERIAL && LA116_0<=SESSION_VARIABLE)||LA116_0==SHARE||(LA116_0>=SHUTDOWN && LA116_0<=SLAVE)||(LA116_0>=SNAPSHOT && LA116_0<=SOCKET)||(LA116_0>=SONAME && LA116_0<=SOURCE)||(LA116_0>=SQL_BUFFER_RESULT && LA116_0<=SQL_CACHE)||LA116_0==SQL_NO_CACHE||LA116_0==SQL_THREAD||LA116_0==START||(LA116_0>=STARTS && LA116_0<=STORAGE)||(LA116_0>=STRING && LA116_0<=SYSTEM_USER)||(LA116_0>=TABLES && LA116_0<=TEMPTABLE)||(LA116_0>=TEXT && LA116_0<=THAN)||(LA116_0>=TIME && LA116_0<=TIMESTAMP_DIFF)||(LA116_0>=TRANSACTION && LA116_0<=TRANSACTIONAL)||(LA116_0>=TRIGGERS && LA116_0<=UNDEFINED)||(LA116_0>=UNDOFILE && LA116_0<=UNINSTALL)||LA116_0==UNKNOWN||LA116_0==UNTIL||LA116_0==UPGRADE||LA116_0==USER||LA116_0==USE_FRM||(LA116_0>=UTC_DATE && LA116_0<=VALUE)||LA116_0==VALUE_PLACEHOLDER||(LA116_0>=VARIABLES && LA116_0<=VARIANCE)||(LA116_0>=VAR_POP && LA116_0<=WEEK)||(LA116_0>=WORK && LA116_0<=WRAPPER)||(LA116_0>=X509 && LA116_0<=XA)||LA116_0==YEAR||LA116_0==CONCAT))
			{
				alt116 = 1;
			}
			} finally { DebugExitDecision(116); }
			switch (alt116)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:729:12: e+= exprList
				{
				DebugLocation(729, 12);
				PushFollow(Follow._exprList_in_parenOptExprList6467);
				e=exprList();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_exprList.Add(e.Tree);
				if (list_e==null) list_e=new List<object>();
				list_e.Add(e.Tree);


				}
				break;

			}
			} finally { DebugExitSubRule(116); }

			DebugLocation(729, 24);
			RPAREN281=(IToken)Match(input,RPAREN,Follow._RPAREN_in_parenOptExprList6470); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_RPAREN.Add(RPAREN281);



			{
			// AST REWRITE
			// elements: LPAREN, e
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: e
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);
			RewriteRuleSubtreeStream stream_e=new RewriteRuleSubtreeStream(adaptor,"token e",list_e);
			root_0 = (object)adaptor.Nil();
			// 729:31: -> ^( LPAREN ( $e)* )
			{
				DebugLocation(729, 34);
				// MySQL51Parser.g3:729:34: ^( LPAREN ( $e)* )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(729, 36);
				root_1 = (object)adaptor.BecomeRoot(stream_LPAREN.NextNode(), root_1);

				DebugLocation(729, 44);
				// MySQL51Parser.g3:729:44: ( $e)*
				while ( stream_e.HasNext )
				{
					DebugLocation(729, 44);
					adaptor.AddChild(root_1, stream_e.NextTree());

				}
				stream_e.Reset();

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("parenOptExprList", 40);
			LeaveRule("parenOptExprList", 40);
			LeaveRule_parenOptExprList();
		}
		DebugLocation(730, 1);
		} finally { DebugExitRule(GrammarFileName, "parenOptExprList"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "parenOptExprList"

	private sealed partial class expr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public expr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_expr();
	partial void LeaveRule_expr();

	// $ANTLR start "expr"
	// MySQL51Parser.g3:732:1: expr : lhs= assignOrExpr (op= ASSIGN rhs= expr )? ;
	[GrammarRule("expr")]
	private MySQL51Parser.expr_return expr()
	{
		EnterRule_expr();
		EnterRule("expr", 41);
		TraceIn("expr", 41);
		MySQL51Parser.expr_return retval = new MySQL51Parser.expr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken op = default(IToken);
		MySQL51Parser.assignOrExpr_return lhs = default(MySQL51Parser.assignOrExpr_return);
		MySQL51Parser.expr_return rhs = default(MySQL51Parser.expr_return);

		object op_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "expr");
		DebugLocation(732, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:733:2: (lhs= assignOrExpr (op= ASSIGN rhs= expr )? )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:733:4: lhs= assignOrExpr (op= ASSIGN rhs= expr )?
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(733, 7);
			PushFollow(Follow._assignOrExpr_in_expr6493);
			lhs=assignOrExpr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) adaptor.AddChild(root_0, lhs.Tree);
			DebugLocation(733, 21);
			// MySQL51Parser.g3:733:21: (op= ASSIGN rhs= expr )?
			int alt117=2;
			try { DebugEnterSubRule(117);
			try { DebugEnterDecision(117, false);
			int LA117_0 = input.LA(1);

			if ((LA117_0==ASSIGN))
			{
				alt117 = 1;
			}
			} finally { DebugExitDecision(117); }
			switch (alt117)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:733:22: op= ASSIGN rhs= expr
				{
				DebugLocation(733, 24);
				op=(IToken)Match(input,ASSIGN,Follow._ASSIGN_in_expr6498); if (state.failed) return retval;
				if (state.backtracking == 0) {
				op_tree = (object)adaptor.Create(op);
				root_0 = (object)adaptor.BecomeRoot(op_tree, root_0);
				}
				DebugLocation(733, 36);
				PushFollow(Follow._expr_in_expr6503);
				rhs=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, rhs.Tree);

				}
				break;

			}
			} finally { DebugExitSubRule(117); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("expr", 41);
			LeaveRule("expr", 41);
			LeaveRule_expr();
		}
		DebugLocation(734, 1);
		} finally { DebugExitRule(GrammarFileName, "expr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "expr"

	private sealed partial class assignOrExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public assignOrExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_assignOrExpr();
	partial void LeaveRule_assignOrExpr();

	// $ANTLR start "assignOrExpr"
	// MySQL51Parser.g3:736:1: assignOrExpr : lhs= assignXORExpr ( (op+= LOGICAL_OR |op+= OR ) rhs+= assignXORExpr )* ;
	[GrammarRule("assignOrExpr")]
	private MySQL51Parser.assignOrExpr_return assignOrExpr()
	{
		EnterRule_assignOrExpr();
		EnterRule("assignOrExpr", 42);
		TraceIn("assignOrExpr", 42);
		MySQL51Parser.assignOrExpr_return retval = new MySQL51Parser.assignOrExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken op = default(IToken);
		List<IToken> list_op = null;
		List<object> list_rhs = null;
		MySQL51Parser.assignXORExpr_return lhs = default(MySQL51Parser.assignXORExpr_return);
		MySQL51Parser.assignXORExpr_return rhs = default(MySQL51Parser.assignXORExpr_return);
		object op_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "assignOrExpr");
		DebugLocation(736, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:737:2: (lhs= assignXORExpr ( (op+= LOGICAL_OR |op+= OR ) rhs+= assignXORExpr )* )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:737:4: lhs= assignXORExpr ( (op+= LOGICAL_OR |op+= OR ) rhs+= assignXORExpr )*
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(737, 7);
			PushFollow(Follow._assignXORExpr_in_assignOrExpr6518);
			lhs=assignXORExpr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) adaptor.AddChild(root_0, lhs.Tree);
			DebugLocation(737, 22);
			// MySQL51Parser.g3:737:22: ( (op+= LOGICAL_OR |op+= OR ) rhs+= assignXORExpr )*
			try { DebugEnterSubRule(119);
			while (true)
			{
				int alt119=2;
				try { DebugEnterDecision(119, false);
				int LA119_0 = input.LA(1);

				if ((LA119_0==LOGICAL_OR||LA119_0==OR))
				{
					alt119 = 1;
				}


				} finally { DebugExitDecision(119); }
				switch ( alt119 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:737:23: (op+= LOGICAL_OR |op+= OR ) rhs+= assignXORExpr
					{
					DebugLocation(737, 23);
					// MySQL51Parser.g3:737:23: (op+= LOGICAL_OR |op+= OR )
					int alt118=2;
					try { DebugEnterSubRule(118);
					try { DebugEnterDecision(118, false);
					int LA118_0 = input.LA(1);

					if ((LA118_0==LOGICAL_OR))
					{
						alt118 = 1;
					}
					else if ((LA118_0==OR))
					{
						alt118 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 118, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					} finally { DebugExitDecision(118); }
					switch (alt118)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:737:24: op+= LOGICAL_OR
						{
						DebugLocation(737, 26);
						op=(IToken)Match(input,LOGICAL_OR,Follow._LOGICAL_OR_in_assignOrExpr6524); if (state.failed) return retval;
						if (state.backtracking == 0) {
						op_tree = (object)adaptor.Create(op);
						root_0 = (object)adaptor.BecomeRoot(op_tree, root_0);
						}
						if (list_op==null) list_op=new List<IToken>();
						list_op.Add(op);


						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:737:42: op+= OR
						{
						DebugLocation(737, 44);
						op=(IToken)Match(input,OR,Follow._OR_in_assignOrExpr6531); if (state.failed) return retval;
						if (state.backtracking == 0) {
						op_tree = (object)adaptor.Create(op);
						root_0 = (object)adaptor.BecomeRoot(op_tree, root_0);
						}
						if (list_op==null) list_op=new List<IToken>();
						list_op.Add(op);


						}
						break;

					}
					} finally { DebugExitSubRule(118); }

					DebugLocation(737, 54);
					PushFollow(Follow._assignXORExpr_in_assignOrExpr6537);
					rhs=assignXORExpr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, rhs.Tree);
					if (list_rhs==null) list_rhs=new List<object>();
					list_rhs.Add(rhs.Tree);


					}
					break;

				default:
					goto loop119;
				}
			}

			loop119:
				;

			} finally { DebugExitSubRule(119); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("assignOrExpr", 42);
			LeaveRule("assignOrExpr", 42);
			LeaveRule_assignOrExpr();
		}
		DebugLocation(738, 1);
		} finally { DebugExitRule(GrammarFileName, "assignOrExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "assignOrExpr"

	private sealed partial class assignXORExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public assignXORExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_assignXORExpr();
	partial void LeaveRule_assignXORExpr();

	// $ANTLR start "assignXORExpr"
	// MySQL51Parser.g3:740:1: assignXORExpr : lhs= assignAndExpr (op+= XOR rhs+= assignAndExpr )* ;
	[GrammarRule("assignXORExpr")]
	private MySQL51Parser.assignXORExpr_return assignXORExpr()
	{
		EnterRule_assignXORExpr();
		EnterRule("assignXORExpr", 43);
		TraceIn("assignXORExpr", 43);
		MySQL51Parser.assignXORExpr_return retval = new MySQL51Parser.assignXORExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken op = default(IToken);
		List<IToken> list_op = null;
		List<object> list_rhs = null;
		MySQL51Parser.assignAndExpr_return lhs = default(MySQL51Parser.assignAndExpr_return);
		MySQL51Parser.assignAndExpr_return rhs = default(MySQL51Parser.assignAndExpr_return);
		object op_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "assignXORExpr");
		DebugLocation(740, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:741:2: (lhs= assignAndExpr (op+= XOR rhs+= assignAndExpr )* )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:741:4: lhs= assignAndExpr (op+= XOR rhs+= assignAndExpr )*
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(741, 7);
			PushFollow(Follow._assignAndExpr_in_assignXORExpr6552);
			lhs=assignAndExpr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) adaptor.AddChild(root_0, lhs.Tree);
			DebugLocation(741, 22);
			// MySQL51Parser.g3:741:22: (op+= XOR rhs+= assignAndExpr )*
			try { DebugEnterSubRule(120);
			while (true)
			{
				int alt120=2;
				try { DebugEnterDecision(120, false);
				int LA120_0 = input.LA(1);

				if ((LA120_0==XOR))
				{
					alt120 = 1;
				}


				} finally { DebugExitDecision(120); }
				switch ( alt120 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:741:23: op+= XOR rhs+= assignAndExpr
					{
					DebugLocation(741, 25);
					op=(IToken)Match(input,XOR,Follow._XOR_in_assignXORExpr6557); if (state.failed) return retval;
					if (state.backtracking == 0) {
					op_tree = (object)adaptor.Create(op);
					root_0 = (object)adaptor.BecomeRoot(op_tree, root_0);
					}
					if (list_op==null) list_op=new List<IToken>();
					list_op.Add(op);

					DebugLocation(741, 35);
					PushFollow(Follow._assignAndExpr_in_assignXORExpr6562);
					rhs=assignAndExpr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, rhs.Tree);
					if (list_rhs==null) list_rhs=new List<object>();
					list_rhs.Add(rhs.Tree);


					}
					break;

				default:
					goto loop120;
				}
			}

			loop120:
				;

			} finally { DebugExitSubRule(120); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("assignXORExpr", 43);
			LeaveRule("assignXORExpr", 43);
			LeaveRule_assignXORExpr();
		}
		DebugLocation(742, 1);
		} finally { DebugExitRule(GrammarFileName, "assignXORExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "assignXORExpr"

	private sealed partial class assignAndExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public assignAndExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_assignAndExpr();
	partial void LeaveRule_assignAndExpr();

	// $ANTLR start "assignAndExpr"
	// MySQL51Parser.g3:744:1: assignAndExpr : lhs= assignNotExpr ( (op+= LOGICAL_AND |op+= AND ) rhs+= assignNotExpr )* ;
	[GrammarRule("assignAndExpr")]
	private MySQL51Parser.assignAndExpr_return assignAndExpr()
	{
		EnterRule_assignAndExpr();
		EnterRule("assignAndExpr", 44);
		TraceIn("assignAndExpr", 44);
		MySQL51Parser.assignAndExpr_return retval = new MySQL51Parser.assignAndExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken op = default(IToken);
		List<IToken> list_op = null;
		List<object> list_rhs = null;
		MySQL51Parser.assignNotExpr_return lhs = default(MySQL51Parser.assignNotExpr_return);
		MySQL51Parser.assignNotExpr_return rhs = default(MySQL51Parser.assignNotExpr_return);
		object op_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "assignAndExpr");
		DebugLocation(744, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:745:2: (lhs= assignNotExpr ( (op+= LOGICAL_AND |op+= AND ) rhs+= assignNotExpr )* )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:745:4: lhs= assignNotExpr ( (op+= LOGICAL_AND |op+= AND ) rhs+= assignNotExpr )*
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(745, 7);
			PushFollow(Follow._assignNotExpr_in_assignAndExpr6577);
			lhs=assignNotExpr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) adaptor.AddChild(root_0, lhs.Tree);
			DebugLocation(745, 22);
			// MySQL51Parser.g3:745:22: ( (op+= LOGICAL_AND |op+= AND ) rhs+= assignNotExpr )*
			try { DebugEnterSubRule(122);
			while (true)
			{
				int alt122=2;
				try { DebugEnterDecision(122, false);
				int LA122_0 = input.LA(1);

				if ((LA122_0==AND||LA122_0==LOGICAL_AND))
				{
					alt122 = 1;
				}


				} finally { DebugExitDecision(122); }
				switch ( alt122 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:745:23: (op+= LOGICAL_AND |op+= AND ) rhs+= assignNotExpr
					{
					DebugLocation(745, 23);
					// MySQL51Parser.g3:745:23: (op+= LOGICAL_AND |op+= AND )
					int alt121=2;
					try { DebugEnterSubRule(121);
					try { DebugEnterDecision(121, false);
					int LA121_0 = input.LA(1);

					if ((LA121_0==LOGICAL_AND))
					{
						alt121 = 1;
					}
					else if ((LA121_0==AND))
					{
						alt121 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 121, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					} finally { DebugExitDecision(121); }
					switch (alt121)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:745:25: op+= LOGICAL_AND
						{
						DebugLocation(745, 27);
						op=(IToken)Match(input,LOGICAL_AND,Follow._LOGICAL_AND_in_assignAndExpr6584); if (state.failed) return retval;
						if (state.backtracking == 0) {
						op_tree = (object)adaptor.Create(op);
						root_0 = (object)adaptor.BecomeRoot(op_tree, root_0);
						}
						if (list_op==null) list_op=new List<IToken>();
						list_op.Add(op);


						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:745:44: op+= AND
						{
						DebugLocation(745, 46);
						op=(IToken)Match(input,AND,Follow._AND_in_assignAndExpr6591); if (state.failed) return retval;
						if (state.backtracking == 0) {
						op_tree = (object)adaptor.Create(op);
						root_0 = (object)adaptor.BecomeRoot(op_tree, root_0);
						}
						if (list_op==null) list_op=new List<IToken>();
						list_op.Add(op);


						}
						break;

					}
					} finally { DebugExitSubRule(121); }

					DebugLocation(745, 58);
					PushFollow(Follow._assignNotExpr_in_assignAndExpr6598);
					rhs=assignNotExpr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, rhs.Tree);
					if (list_rhs==null) list_rhs=new List<object>();
					list_rhs.Add(rhs.Tree);


					}
					break;

				default:
					goto loop122;
				}
			}

			loop122:
				;

			} finally { DebugExitSubRule(122); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("assignAndExpr", 44);
			LeaveRule("assignAndExpr", 44);
			LeaveRule_assignAndExpr();
		}
		DebugLocation(746, 1);
		} finally { DebugExitRule(GrammarFileName, "assignAndExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "assignAndExpr"

	private sealed partial class assignNotExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public assignNotExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_assignNotExpr();
	partial void LeaveRule_assignNotExpr();

	// $ANTLR start "assignNotExpr"
	// MySQL51Parser.g3:748:1: assignNotExpr : (lhs= equalityExpr |op+= NOT rhs+= equalityExpr );
	[GrammarRule("assignNotExpr")]
	private MySQL51Parser.assignNotExpr_return assignNotExpr()
	{
		EnterRule_assignNotExpr();
		EnterRule("assignNotExpr", 45);
		TraceIn("assignNotExpr", 45);
		MySQL51Parser.assignNotExpr_return retval = new MySQL51Parser.assignNotExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken op = default(IToken);
		List<IToken> list_op = null;
		List<object> list_rhs = null;
		MySQL51Parser.equalityExpr_return lhs = default(MySQL51Parser.equalityExpr_return);
		MySQL51Parser.equalityExpr_return rhs = default(MySQL51Parser.equalityExpr_return);
		object op_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "assignNotExpr");
		DebugLocation(748, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:749:2: (lhs= equalityExpr |op+= NOT rhs+= equalityExpr )
			int alt123=2;
			try { DebugEnterDecision(123, false);
			int LA123_0 = input.LA(1);

			if ((LA123_0==ACTION||(LA123_0>=ADDDATE && LA123_0<=ALGORITHM)||LA123_0==ANY||LA123_0==ASCII||(LA123_0>=AT && LA123_0<=BACKUP)||LA123_0==BEGIN||(LA123_0>=BINARY && LA123_0<=BIT)||LA123_0==BITWISE_INVERSION||(LA123_0>=BIT_AND && LA123_0<=BIT_XOR)||(LA123_0>=BLOCK && LA123_0<=BOOLEAN)||LA123_0==BTREE||(LA123_0>=BYTE && LA123_0<=CACHE)||LA123_0==CASCADED||(LA123_0>=CAST && LA123_0<=CHAIN)||(LA123_0>=CHANGED && LA123_0<=CHAR)||LA123_0==CHARSET||(LA123_0>=CHECKSUM && LA123_0<=COLLATION)||LA123_0==COLUMNS||LA123_0==COMMENT||(LA123_0>=COMMIT && LA123_0<=CONCURRENT)||(LA123_0>=CONNECTION && LA123_0<=CONSISTENT)||(LA123_0>=CONTAINS && LA123_0<=CONTEXT)||LA123_0==CONTRIBUTORS||(LA123_0>=COUNT && LA123_0<=CPU)||(LA123_0>=CUBE && LA123_0<=CURRENT_USER)||LA123_0==CURTIME||(LA123_0>=DATA && LA123_0<=DATABASE)||(LA123_0>=DATAFILE && LA123_0<=DATE_ADD)||LA123_0==DATE_SUB||LA123_0==DAY||LA123_0==DEALLOCATE||LA123_0==DEFINER||LA123_0==DELAY_KEY_WRITE||LA123_0==DES_KEY_FILE||(LA123_0>=DIRECTORY && LA123_0<=DISK)||LA123_0==DO||(LA123_0>=DUMPFILE && LA123_0<=DYNAMIC)||LA123_0==ENABLE||(LA123_0>=END && LA123_0<=ENUM)||(LA123_0>=ERRORS && LA123_0<=ESCAPE)||(LA123_0>=EVENT && LA123_0<=EXISTS)||LA123_0==EXPANSION||(LA123_0>=EXTENDED && LA123_0<=FAULTS)||(LA123_0>=FIELDS && LA123_0<=FIXED)||LA123_0==FLUSH||(LA123_0>=FOUND && LA123_0<=FRAC_SECOND)||LA123_0==FULL||(LA123_0>=FUNCTION && LA123_0<=GLOBAL_VARIABLE)||LA123_0==GRANTS||(LA123_0>=GROUP && LA123_0<=HASH)||(LA123_0>=HELP && LA123_0<=HEXA_VALUE)||(LA123_0>=HOST && LA123_0<=HOUR)||(LA123_0>=ID && LA123_0<=IF)||LA123_0==IMPORT||LA123_0==INDEXES||LA123_0==INITIAL_SIZE||LA123_0==INNOBASE||(LA123_0>=INSERT && LA123_0<=INSTALL)||LA123_0==INTERVAL||(LA123_0>=INVOKER && LA123_0<=IPC)||(LA123_0>=ISOLATION && LA123_0<=ISSUER)||LA123_0==KEY_BLOCK_SIZE||(LA123_0>=LABEL && LA123_0<=LAST)||(LA123_0>=LEAVES && LA123_0<=LEFT)||LA123_0==LESS||LA123_0==LEVEL||(LA123_0>=LINESTRING && LA123_0<=LIST)||LA123_0==LOCAL||(LA123_0>=LOCKS && LA123_0<=LOGFILE)||LA123_0==LOGS||(LA123_0>=LPAREN && LA123_0<=MASTER_SSL_KEY)||LA123_0==MASTER_USER||(LA123_0>=MAX && LA123_0<=MEDIUM)||(LA123_0>=MEMORY && LA123_0<=MID)||(LA123_0>=MIGRATE && LA123_0<=MINUTE)||(LA123_0>=MIN_ROWS && LA123_0<=MODE)||LA123_0==MODIFY||LA123_0==MONTH||(LA123_0>=MULTILINESTRING && LA123_0<=NATIONAL)||(LA123_0>=NCHAR && LA123_0<=NONE)||(LA123_0>=NOT_OP && LA123_0<=NO_WAIT)||LA123_0==NULL||LA123_0==NUMBER||(LA123_0>=NVARCHAR && LA123_0<=OLD_PASSWORD)||(LA123_0>=ONE && LA123_0<=OPEN)||LA123_0==OPTIONS||(LA123_0>=OWNER && LA123_0<=POSITION)||(LA123_0>=PREPARE && LA123_0<=PREV)||LA123_0==PRIVILEGES||(LA123_0>=PROCESS && LA123_0<=PROFILES)||(LA123_0>=QUARTER && LA123_0<=QUICK)||(LA123_0>=REBUILD && LA123_0<=REDUNDANT)||(LA123_0>=RELAY_LOG_FILE && LA123_0<=RELAY_THREAD)||(LA123_0>=RELOAD && LA123_0<=REMOVE)||(LA123_0>=REORGANIZE && LA123_0<=REPLICATION)||(LA123_0>=RESET && LA123_0<=RESTORE)||LA123_0==RESUME||LA123_0==RETURNS||LA123_0==RIGHT||(LA123_0>=ROLLBACK && LA123_0<=ROW_FORMAT)||(LA123_0>=RTREE && LA123_0<=SCHEDULE)||LA123_0==SECOND||LA123_0==SECURITY||(LA123_0>=SERIAL && LA123_0<=SESSION_VARIABLE)||LA123_0==SHARE||(LA123_0>=SHUTDOWN && LA123_0<=SLAVE)||(LA123_0>=SNAPSHOT && LA123_0<=SOCKET)||(LA123_0>=SONAME && LA123_0<=SOURCE)||(LA123_0>=SQL_BUFFER_RESULT && LA123_0<=SQL_CACHE)||LA123_0==SQL_NO_CACHE||LA123_0==SQL_THREAD||LA123_0==START||(LA123_0>=STARTS && LA123_0<=STORAGE)||(LA123_0>=STRING && LA123_0<=SYSTEM_USER)||(LA123_0>=TABLES && LA123_0<=TEMPTABLE)||(LA123_0>=TEXT && LA123_0<=THAN)||(LA123_0>=TIME && LA123_0<=TIMESTAMP_DIFF)||(LA123_0>=TRANSACTION && LA123_0<=TRANSACTIONAL)||(LA123_0>=TRIGGERS && LA123_0<=UNDEFINED)||(LA123_0>=UNDOFILE && LA123_0<=UNINSTALL)||LA123_0==UNKNOWN||LA123_0==UNTIL||LA123_0==UPGRADE||LA123_0==USER||LA123_0==USE_FRM||(LA123_0>=UTC_DATE && LA123_0<=VALUE)||LA123_0==VALUE_PLACEHOLDER||(LA123_0>=VARIABLES && LA123_0<=VARIANCE)||(LA123_0>=VAR_POP && LA123_0<=WEEK)||(LA123_0>=WORK && LA123_0<=WRAPPER)||(LA123_0>=X509 && LA123_0<=XA)||LA123_0==YEAR||LA123_0==CONCAT))
			{
				alt123 = 1;
			}
			else if ((LA123_0==NOT))
			{
				alt123 = 2;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 123, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(123); }
			switch (alt123)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:749:4: lhs= equalityExpr
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(749, 7);
				PushFollow(Follow._equalityExpr_in_assignNotExpr6613);
				lhs=equalityExpr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, lhs.Tree);

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:750:4: op+= NOT rhs+= equalityExpr
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(750, 6);
				op=(IToken)Match(input,NOT,Follow._NOT_in_assignNotExpr6620); if (state.failed) return retval;
				if (state.backtracking == 0) {
				op_tree = (object)adaptor.Create(op);
				root_0 = (object)adaptor.BecomeRoot(op_tree, root_0);
				}
				if (list_op==null) list_op=new List<IToken>();
				list_op.Add(op);

				DebugLocation(750, 16);
				PushFollow(Follow._equalityExpr_in_assignNotExpr6625);
				rhs=equalityExpr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, rhs.Tree);
				if (list_rhs==null) list_rhs=new List<object>();
				list_rhs.Add(rhs.Tree);


				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("assignNotExpr", 45);
			LeaveRule("assignNotExpr", 45);
			LeaveRule_assignNotExpr();
		}
		DebugLocation(751, 1);
		} finally { DebugExitRule(GrammarFileName, "assignNotExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "assignNotExpr"

	private sealed partial class equalityExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public equalityExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_equalityExpr();
	partial void LeaveRule_equalityExpr();

	// $ANTLR start "equalityExpr"
	// MySQL51Parser.g3:753:1: equalityExpr : bitwiseOrExpr (op+= equalityOperator ( ( subselect_in_expr_rhs )=> subselect_in_expr_rhs | bitwiseOrExpr ) )* ;
	[GrammarRule("equalityExpr")]
	private MySQL51Parser.equalityExpr_return equalityExpr()
	{
		EnterRule_equalityExpr();
		EnterRule("equalityExpr", 46);
		TraceIn("equalityExpr", 46);
		MySQL51Parser.equalityExpr_return retval = new MySQL51Parser.equalityExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		List<object> list_op = null;
		MySQL51Parser.bitwiseOrExpr_return bitwiseOrExpr282 = default(MySQL51Parser.bitwiseOrExpr_return);
		MySQL51Parser.subselect_in_expr_rhs_return subselect_in_expr_rhs283 = default(MySQL51Parser.subselect_in_expr_rhs_return);
		MySQL51Parser.bitwiseOrExpr_return bitwiseOrExpr284 = default(MySQL51Parser.bitwiseOrExpr_return);
		MySQL51Parser.equalityOperator_return op = default(MySQL51Parser.equalityOperator_return);

		try { DebugEnterRule(GrammarFileName, "equalityExpr");
		DebugLocation(753, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:754:2: ( bitwiseOrExpr (op+= equalityOperator ( ( subselect_in_expr_rhs )=> subselect_in_expr_rhs | bitwiseOrExpr ) )* )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:754:4: bitwiseOrExpr (op+= equalityOperator ( ( subselect_in_expr_rhs )=> subselect_in_expr_rhs | bitwiseOrExpr ) )*
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(754, 4);
			PushFollow(Follow._bitwiseOrExpr_in_equalityExpr6636);
			bitwiseOrExpr282=bitwiseOrExpr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) adaptor.AddChild(root_0, bitwiseOrExpr282.Tree);
			DebugLocation(755, 3);
			// MySQL51Parser.g3:755:3: (op+= equalityOperator ( ( subselect_in_expr_rhs )=> subselect_in_expr_rhs | bitwiseOrExpr ) )*
			try { DebugEnterSubRule(125);
			while (true)
			{
				int alt125=2;
				try { DebugEnterDecision(125, false);
				int LA125_0 = input.LA(1);

				if ((LA125_0==BETWEEN||LA125_0==CASE||LA125_0==ELSE||LA125_0==EQUALS||(LA125_0>=GREATER_THAN && LA125_0<=GREATER_THAN_EQUAL)||(LA125_0>=LESS_THAN && LA125_0<=LESS_THAN_EQUAL)||LA125_0==NOT_EQUAL||LA125_0==NULL_SAFE_NOT_EQUAL||LA125_0==REGEXP||LA125_0==THEN||LA125_0==WHEN))
				{
					alt125 = 1;
				}


				} finally { DebugExitDecision(125); }
				switch ( alt125 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:755:4: op+= equalityOperator ( ( subselect_in_expr_rhs )=> subselect_in_expr_rhs | bitwiseOrExpr )
					{
					DebugLocation(755, 6);
					PushFollow(Follow._equalityOperator_in_equalityExpr6643);
					op=equalityOperator();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) root_0 = (object)adaptor.BecomeRoot(op.Tree, root_0);
					if (list_op==null) list_op=new List<object>();
					list_op.Add(op.Tree);

					DebugLocation(755, 26);
					// MySQL51Parser.g3:755:26: ( ( subselect_in_expr_rhs )=> subselect_in_expr_rhs | bitwiseOrExpr )
					int alt124=2;
					try { DebugEnterSubRule(124);
					try { DebugEnterDecision(124, false);
					try
					{
						alt124 = dfa124.Predict(input);
					}
					catch (NoViableAltException nvae)
					{
						DebugRecognitionException(nvae);
						throw;
					}
					} finally { DebugExitDecision(124); }
					switch (alt124)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:755:27: ( subselect_in_expr_rhs )=> subselect_in_expr_rhs
						{
						DebugLocation(755, 53);
						PushFollow(Follow._subselect_in_expr_rhs_in_equalityExpr6652);
						subselect_in_expr_rhs283=subselect_in_expr_rhs();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) adaptor.AddChild(root_0, subselect_in_expr_rhs283.Tree);

						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:755:77: bitwiseOrExpr
						{
						DebugLocation(755, 77);
						PushFollow(Follow._bitwiseOrExpr_in_equalityExpr6656);
						bitwiseOrExpr284=bitwiseOrExpr();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) adaptor.AddChild(root_0, bitwiseOrExpr284.Tree);

						}
						break;

					}
					} finally { DebugExitSubRule(124); }


					}
					break;

				default:
					goto loop125;
				}
			}

			loop125:
				;

			} finally { DebugExitSubRule(125); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("equalityExpr", 46);
			LeaveRule("equalityExpr", 46);
			LeaveRule_equalityExpr();
		}
		DebugLocation(756, 1);
		} finally { DebugExitRule(GrammarFileName, "equalityExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "equalityExpr"

	private sealed partial class subselect_in_expr_rhs_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public subselect_in_expr_rhs_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_subselect_in_expr_rhs();
	partial void LeaveRule_subselect_in_expr_rhs();

	// $ANTLR start "subselect_in_expr_rhs"
	// MySQL51Parser.g3:758:1: subselect_in_expr_rhs : (mod= ANY |mod= SOME |mod= ALL ) LPAREN select RPAREN -> ^( SUBSELECT $mod select ) ;
	[GrammarRule("subselect_in_expr_rhs")]
	private MySQL51Parser.subselect_in_expr_rhs_return subselect_in_expr_rhs()
	{
		EnterRule_subselect_in_expr_rhs();
		EnterRule("subselect_in_expr_rhs", 47);
		TraceIn("subselect_in_expr_rhs", 47);
		MySQL51Parser.subselect_in_expr_rhs_return retval = new MySQL51Parser.subselect_in_expr_rhs_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken mod = default(IToken);
		IToken LPAREN285 = default(IToken);
		IToken RPAREN287 = default(IToken);
		MySQL51Parser.select_return select286 = default(MySQL51Parser.select_return);

		object mod_tree = default(object);
		object LPAREN285_tree = default(object);
		object RPAREN287_tree = default(object);
		RewriteRuleITokenStream stream_ANY=new RewriteRuleITokenStream(adaptor,"token ANY");
		RewriteRuleITokenStream stream_SOME=new RewriteRuleITokenStream(adaptor,"token SOME");
		RewriteRuleITokenStream stream_ALL=new RewriteRuleITokenStream(adaptor,"token ALL");
		RewriteRuleITokenStream stream_LPAREN=new RewriteRuleITokenStream(adaptor,"token LPAREN");
		RewriteRuleITokenStream stream_RPAREN=new RewriteRuleITokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_select=new RewriteRuleSubtreeStream(adaptor,"rule select");
		try { DebugEnterRule(GrammarFileName, "subselect_in_expr_rhs");
		DebugLocation(758, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:759:2: ( (mod= ANY |mod= SOME |mod= ALL ) LPAREN select RPAREN -> ^( SUBSELECT $mod select ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:759:4: (mod= ANY |mod= SOME |mod= ALL ) LPAREN select RPAREN
			{
			DebugLocation(759, 4);
			// MySQL51Parser.g3:759:4: (mod= ANY |mod= SOME |mod= ALL )
			int alt126=3;
			try { DebugEnterSubRule(126);
			try { DebugEnterDecision(126, false);
			switch (input.LA(1))
			{
			case ANY:
				{
				alt126 = 1;
				}
				break;
			case SOME:
				{
				alt126 = 2;
				}
				break;
			case ALL:
				{
				alt126 = 3;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 126, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(126); }
			switch (alt126)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:759:5: mod= ANY
				{
				DebugLocation(759, 8);
				mod=(IToken)Match(input,ANY,Follow._ANY_in_subselect_in_expr_rhs6673); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_ANY.Add(mod);


				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:759:15: mod= SOME
				{
				DebugLocation(759, 18);
				mod=(IToken)Match(input,SOME,Follow._SOME_in_subselect_in_expr_rhs6679); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_SOME.Add(mod);


				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:759:26: mod= ALL
				{
				DebugLocation(759, 29);
				mod=(IToken)Match(input,ALL,Follow._ALL_in_subselect_in_expr_rhs6685); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_ALL.Add(mod);


				}
				break;

			}
			} finally { DebugExitSubRule(126); }

			DebugLocation(759, 35);
			LPAREN285=(IToken)Match(input,LPAREN,Follow._LPAREN_in_subselect_in_expr_rhs6688); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_LPAREN.Add(LPAREN285);

			DebugLocation(759, 42);
			PushFollow(Follow._select_in_subselect_in_expr_rhs6690);
			select286=select();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_select.Add(select286.Tree);
			DebugLocation(759, 49);
			RPAREN287=(IToken)Match(input,RPAREN,Follow._RPAREN_in_subselect_in_expr_rhs6692); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_RPAREN.Add(RPAREN287);



			{
			// AST REWRITE
			// elements: mod, select
			// token labels: mod
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleITokenStream stream_mod=new RewriteRuleITokenStream(adaptor,"token mod",mod);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 759:56: -> ^( SUBSELECT $mod select )
			{
				DebugLocation(759, 59);
				// MySQL51Parser.g3:759:59: ^( SUBSELECT $mod select )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(759, 61);
				root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(SUBSELECT, "SUBSELECT"), root_1);

				DebugLocation(759, 72);
				adaptor.AddChild(root_1, stream_mod.NextNode());
				DebugLocation(759, 76);
				adaptor.AddChild(root_1, stream_select.NextTree());

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("subselect_in_expr_rhs", 47);
			LeaveRule("subselect_in_expr_rhs", 47);
			LeaveRule_subselect_in_expr_rhs();
		}
		DebugLocation(760, 1);
		} finally { DebugExitRule(GrammarFileName, "subselect_in_expr_rhs"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "subselect_in_expr_rhs"

	private sealed partial class subselect_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public subselect_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_subselect();
	partial void LeaveRule_subselect();

	// $ANTLR start "subselect"
	// MySQL51Parser.g3:762:1: subselect : LPAREN select_inner RPAREN -> ^( SUBSELECT select_inner ) ;
	[GrammarRule("subselect")]
	private MySQL51Parser.subselect_return subselect()
	{
		EnterRule_subselect();
		EnterRule("subselect", 48);
		TraceIn("subselect", 48);
		MySQL51Parser.subselect_return retval = new MySQL51Parser.subselect_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken LPAREN288 = default(IToken);
		IToken RPAREN290 = default(IToken);
		MySQL51Parser.select_inner_return select_inner289 = default(MySQL51Parser.select_inner_return);

		object LPAREN288_tree = default(object);
		object RPAREN290_tree = default(object);
		RewriteRuleITokenStream stream_LPAREN=new RewriteRuleITokenStream(adaptor,"token LPAREN");
		RewriteRuleITokenStream stream_RPAREN=new RewriteRuleITokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_select_inner=new RewriteRuleSubtreeStream(adaptor,"rule select_inner");
		try { DebugEnterRule(GrammarFileName, "subselect");
		DebugLocation(762, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:763:2: ( LPAREN select_inner RPAREN -> ^( SUBSELECT select_inner ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:763:4: LPAREN select_inner RPAREN
			{
			DebugLocation(763, 4);
			LPAREN288=(IToken)Match(input,LPAREN,Follow._LPAREN_in_subselect6715); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_LPAREN.Add(LPAREN288);

			DebugLocation(763, 11);
			PushFollow(Follow._select_inner_in_subselect6717);
			select_inner289=select_inner();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_select_inner.Add(select_inner289.Tree);
			DebugLocation(763, 24);
			RPAREN290=(IToken)Match(input,RPAREN,Follow._RPAREN_in_subselect6719); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_RPAREN.Add(RPAREN290);



			{
			// AST REWRITE
			// elements: select_inner
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 763:31: -> ^( SUBSELECT select_inner )
			{
				DebugLocation(763, 34);
				// MySQL51Parser.g3:763:34: ^( SUBSELECT select_inner )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(763, 36);
				root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(SUBSELECT, "SUBSELECT"), root_1);

				DebugLocation(763, 46);
				adaptor.AddChild(root_1, stream_select_inner.NextTree());

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("subselect", 48);
			LeaveRule("subselect", 48);
			LeaveRule_subselect();
		}
		DebugLocation(764, 1);
		} finally { DebugExitRule(GrammarFileName, "subselect"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "subselect"

	private sealed partial class isOperator_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public isOperator_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_isOperator();
	partial void LeaveRule_isOperator();

	// $ANTLR start "isOperator"
	// MySQL51Parser.g3:766:1: isOperator : IS ( NOT )? (value2= NULL |value2= FALSE |value2= TRUE |value2= UNKNOWN ) -> ^( IS ( NOT )? $value2) ;
	[GrammarRule("isOperator")]
	private MySQL51Parser.isOperator_return isOperator()
	{
		EnterRule_isOperator();
		EnterRule("isOperator", 49);
		TraceIn("isOperator", 49);
		MySQL51Parser.isOperator_return retval = new MySQL51Parser.isOperator_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken value2 = default(IToken);
		IToken IS291 = default(IToken);
		IToken NOT292 = default(IToken);

		object value2_tree = default(object);
		object IS291_tree = default(object);
		object NOT292_tree = default(object);
		RewriteRuleITokenStream stream_IS=new RewriteRuleITokenStream(adaptor,"token IS");
		RewriteRuleITokenStream stream_NOT=new RewriteRuleITokenStream(adaptor,"token NOT");
		RewriteRuleITokenStream stream_NULL=new RewriteRuleITokenStream(adaptor,"token NULL");
		RewriteRuleITokenStream stream_FALSE=new RewriteRuleITokenStream(adaptor,"token FALSE");
		RewriteRuleITokenStream stream_TRUE=new RewriteRuleITokenStream(adaptor,"token TRUE");
		RewriteRuleITokenStream stream_UNKNOWN=new RewriteRuleITokenStream(adaptor,"token UNKNOWN");

		try { DebugEnterRule(GrammarFileName, "isOperator");
		DebugLocation(766, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:767:2: ( IS ( NOT )? (value2= NULL |value2= FALSE |value2= TRUE |value2= UNKNOWN ) -> ^( IS ( NOT )? $value2) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:767:4: IS ( NOT )? (value2= NULL |value2= FALSE |value2= TRUE |value2= UNKNOWN )
			{
			DebugLocation(767, 4);
			IS291=(IToken)Match(input,IS,Follow._IS_in_isOperator6738); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_IS.Add(IS291);

			DebugLocation(767, 7);
			// MySQL51Parser.g3:767:7: ( NOT )?
			int alt127=2;
			try { DebugEnterSubRule(127);
			try { DebugEnterDecision(127, false);
			int LA127_0 = input.LA(1);

			if ((LA127_0==NOT))
			{
				alt127 = 1;
			}
			} finally { DebugExitDecision(127); }
			switch (alt127)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:767:7: NOT
				{
				DebugLocation(767, 7);
				NOT292=(IToken)Match(input,NOT,Follow._NOT_in_isOperator6740); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_NOT.Add(NOT292);


				}
				break;

			}
			} finally { DebugExitSubRule(127); }

			DebugLocation(767, 12);
			// MySQL51Parser.g3:767:12: (value2= NULL |value2= FALSE |value2= TRUE |value2= UNKNOWN )
			int alt128=4;
			try { DebugEnterSubRule(128);
			try { DebugEnterDecision(128, false);
			switch (input.LA(1))
			{
			case NULL:
				{
				alt128 = 1;
				}
				break;
			case FALSE:
				{
				alt128 = 2;
				}
				break;
			case TRUE:
				{
				alt128 = 3;
				}
				break;
			case UNKNOWN:
				{
				alt128 = 4;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 128, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(128); }
			switch (alt128)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:767:13: value2= NULL
				{
				DebugLocation(767, 19);
				value2=(IToken)Match(input,NULL,Follow._NULL_in_isOperator6746); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_NULL.Add(value2);


				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:767:27: value2= FALSE
				{
				DebugLocation(767, 33);
				value2=(IToken)Match(input,FALSE,Follow._FALSE_in_isOperator6752); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_FALSE.Add(value2);


				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:767:42: value2= TRUE
				{
				DebugLocation(767, 48);
				value2=(IToken)Match(input,TRUE,Follow._TRUE_in_isOperator6758); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TRUE.Add(value2);


				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:767:56: value2= UNKNOWN
				{
				DebugLocation(767, 62);
				value2=(IToken)Match(input,UNKNOWN,Follow._UNKNOWN_in_isOperator6764); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_UNKNOWN.Add(value2);


				}
				break;

			}
			} finally { DebugExitSubRule(128); }



			{
			// AST REWRITE
			// elements: IS, NOT, value2
			// token labels: value2
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleITokenStream stream_value2=new RewriteRuleITokenStream(adaptor,"token value2",value2);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 767:72: -> ^( IS ( NOT )? $value2)
			{
				DebugLocation(767, 75);
				// MySQL51Parser.g3:767:75: ^( IS ( NOT )? $value2)
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(767, 77);
				root_1 = (object)adaptor.BecomeRoot(stream_IS.NextNode(), root_1);

				DebugLocation(767, 80);
				// MySQL51Parser.g3:767:80: ( NOT )?
				if (stream_NOT.HasNext)
				{
					DebugLocation(767, 80);
					adaptor.AddChild(root_1, stream_NOT.NextNode());

				}
				stream_NOT.Reset();
				DebugLocation(767, 86);
				adaptor.AddChild(root_1, stream_value2.NextNode());

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("isOperator", 49);
			LeaveRule("isOperator", 49);
			LeaveRule_isOperator();
		}
		DebugLocation(768, 1);
		} finally { DebugExitRule(GrammarFileName, "isOperator"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "isOperator"

	private sealed partial class equalityOperator_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public equalityOperator_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_equalityOperator();
	partial void LeaveRule_equalityOperator();

	// $ANTLR start "equalityOperator"
	// MySQL51Parser.g3:770:1: equalityOperator : (value= EQUALS |value= NOT_EQUAL |value= LESS_THAN |value= LESS_THAN_EQUAL |value= GREATER_THAN |value= GREATER_THAN_EQUAL |value= NULL_SAFE_NOT_EQUAL |value= REGEXP |value= BETWEEN |value= CASE |value= WHEN |value= THEN |value= ELSE ) ;
	[GrammarRule("equalityOperator")]
	private MySQL51Parser.equalityOperator_return equalityOperator()
	{
		EnterRule_equalityOperator();
		EnterRule("equalityOperator", 50);
		TraceIn("equalityOperator", 50);
		MySQL51Parser.equalityOperator_return retval = new MySQL51Parser.equalityOperator_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken value = default(IToken);

		object value_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "equalityOperator");
		DebugLocation(770, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:771:2: ( (value= EQUALS |value= NOT_EQUAL |value= LESS_THAN |value= LESS_THAN_EQUAL |value= GREATER_THAN |value= GREATER_THAN_EQUAL |value= NULL_SAFE_NOT_EQUAL |value= REGEXP |value= BETWEEN |value= CASE |value= WHEN |value= THEN |value= ELSE ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:771:4: (value= EQUALS |value= NOT_EQUAL |value= LESS_THAN |value= LESS_THAN_EQUAL |value= GREATER_THAN |value= GREATER_THAN_EQUAL |value= NULL_SAFE_NOT_EQUAL |value= REGEXP |value= BETWEEN |value= CASE |value= WHEN |value= THEN |value= ELSE )
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(771, 4);
			// MySQL51Parser.g3:771:4: (value= EQUALS |value= NOT_EQUAL |value= LESS_THAN |value= LESS_THAN_EQUAL |value= GREATER_THAN |value= GREATER_THAN_EQUAL |value= NULL_SAFE_NOT_EQUAL |value= REGEXP |value= BETWEEN |value= CASE |value= WHEN |value= THEN |value= ELSE )
			int alt129=13;
			try { DebugEnterSubRule(129);
			try { DebugEnterDecision(129, false);
			switch (input.LA(1))
			{
			case EQUALS:
				{
				alt129 = 1;
				}
				break;
			case NOT_EQUAL:
				{
				alt129 = 2;
				}
				break;
			case LESS_THAN:
				{
				alt129 = 3;
				}
				break;
			case LESS_THAN_EQUAL:
				{
				alt129 = 4;
				}
				break;
			case GREATER_THAN:
				{
				alt129 = 5;
				}
				break;
			case GREATER_THAN_EQUAL:
				{
				alt129 = 6;
				}
				break;
			case NULL_SAFE_NOT_EQUAL:
				{
				alt129 = 7;
				}
				break;
			case REGEXP:
				{
				alt129 = 8;
				}
				break;
			case BETWEEN:
				{
				alt129 = 9;
				}
				break;
			case CASE:
				{
				alt129 = 10;
				}
				break;
			case WHEN:
				{
				alt129 = 11;
				}
				break;
			case THEN:
				{
				alt129 = 12;
				}
				break;
			case ELSE:
				{
				alt129 = 13;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 129, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(129); }
			switch (alt129)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:771:6: value= EQUALS
				{
				DebugLocation(771, 11);
				value=(IToken)Match(input,EQUALS,Follow._EQUALS_in_equalityOperator6792); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:772:5: value= NOT_EQUAL
				{
				DebugLocation(772, 10);
				value=(IToken)Match(input,NOT_EQUAL,Follow._NOT_EQUAL_in_equalityOperator6800); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:773:5: value= LESS_THAN
				{
				DebugLocation(773, 10);
				value=(IToken)Match(input,LESS_THAN,Follow._LESS_THAN_in_equalityOperator6808); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:774:5: value= LESS_THAN_EQUAL
				{
				DebugLocation(774, 10);
				value=(IToken)Match(input,LESS_THAN_EQUAL,Follow._LESS_THAN_EQUAL_in_equalityOperator6816); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 5:
				DebugEnterAlt(5);
				// MySQL51Parser.g3:775:5: value= GREATER_THAN
				{
				DebugLocation(775, 10);
				value=(IToken)Match(input,GREATER_THAN,Follow._GREATER_THAN_in_equalityOperator6824); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 6:
				DebugEnterAlt(6);
				// MySQL51Parser.g3:776:6: value= GREATER_THAN_EQUAL
				{
				DebugLocation(776, 11);
				value=(IToken)Match(input,GREATER_THAN_EQUAL,Follow._GREATER_THAN_EQUAL_in_equalityOperator6837); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 7:
				DebugEnterAlt(7);
				// MySQL51Parser.g3:777:5: value= NULL_SAFE_NOT_EQUAL
				{
				DebugLocation(777, 10);
				value=(IToken)Match(input,NULL_SAFE_NOT_EQUAL,Follow._NULL_SAFE_NOT_EQUAL_in_equalityOperator6847); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 8:
				DebugEnterAlt(8);
				// MySQL51Parser.g3:778:6: value= REGEXP
				{
				DebugLocation(778, 11);
				value=(IToken)Match(input,REGEXP,Follow._REGEXP_in_equalityOperator6856); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 9:
				DebugEnterAlt(9);
				// MySQL51Parser.g3:779:5: value= BETWEEN
				{
				DebugLocation(779, 10);
				value=(IToken)Match(input,BETWEEN,Follow._BETWEEN_in_equalityOperator6864); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 10:
				DebugEnterAlt(10);
				// MySQL51Parser.g3:780:5: value= CASE
				{
				DebugLocation(780, 10);
				value=(IToken)Match(input,CASE,Follow._CASE_in_equalityOperator6872); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 11:
				DebugEnterAlt(11);
				// MySQL51Parser.g3:781:5: value= WHEN
				{
				DebugLocation(781, 10);
				value=(IToken)Match(input,WHEN,Follow._WHEN_in_equalityOperator6880); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 12:
				DebugEnterAlt(12);
				// MySQL51Parser.g3:782:5: value= THEN
				{
				DebugLocation(782, 10);
				value=(IToken)Match(input,THEN,Follow._THEN_in_equalityOperator6888); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 13:
				DebugEnterAlt(13);
				// MySQL51Parser.g3:783:5: value= ELSE
				{
				DebugLocation(783, 10);
				value=(IToken)Match(input,ELSE,Follow._ELSE_in_equalityOperator6896); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;

			}
			} finally { DebugExitSubRule(129); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("equalityOperator", 50);
			LeaveRule("equalityOperator", 50);
			LeaveRule_equalityOperator();
		}
		DebugLocation(785, 1);
		} finally { DebugExitRule(GrammarFileName, "equalityOperator"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "equalityOperator"

	private sealed partial class bitwiseOrExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public bitwiseOrExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_bitwiseOrExpr();
	partial void LeaveRule_bitwiseOrExpr();

	// $ANTLR start "bitwiseOrExpr"
	// MySQL51Parser.g3:787:1: bitwiseOrExpr : lhs= bitwiseAndExpr ( (op+= BITWISE_OR rhs+= bitwiseAndExpr )+ | ( ( NOT )? IN ( parenExprList | subselect ) ) | LIKE unaryExpr ( ESCAPE STRING )? | isOperator )? ;
	[GrammarRule("bitwiseOrExpr")]
	private MySQL51Parser.bitwiseOrExpr_return bitwiseOrExpr()
	{
		EnterRule_bitwiseOrExpr();
		EnterRule("bitwiseOrExpr", 51);
		TraceIn("bitwiseOrExpr", 51);
		MySQL51Parser.bitwiseOrExpr_return retval = new MySQL51Parser.bitwiseOrExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken NOT293 = default(IToken);
		IToken IN294 = default(IToken);
		IToken LIKE297 = default(IToken);
		IToken ESCAPE299 = default(IToken);
		IToken STRING300 = default(IToken);
		IToken op = default(IToken);
		List<IToken> list_op = null;
		List<object> list_rhs = null;
		MySQL51Parser.bitwiseAndExpr_return lhs = default(MySQL51Parser.bitwiseAndExpr_return);
		MySQL51Parser.parenExprList_return parenExprList295 = default(MySQL51Parser.parenExprList_return);
		MySQL51Parser.subselect_return subselect296 = default(MySQL51Parser.subselect_return);
		MySQL51Parser.unaryExpr_return unaryExpr298 = default(MySQL51Parser.unaryExpr_return);
		MySQL51Parser.isOperator_return isOperator301 = default(MySQL51Parser.isOperator_return);
		MySQL51Parser.bitwiseAndExpr_return rhs = default(MySQL51Parser.bitwiseAndExpr_return);
		object NOT293_tree = default(object);
		object IN294_tree = default(object);
		object LIKE297_tree = default(object);
		object ESCAPE299_tree = default(object);
		object STRING300_tree = default(object);
		object op_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "bitwiseOrExpr");
		DebugLocation(787, 2);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:788:3: (lhs= bitwiseAndExpr ( (op+= BITWISE_OR rhs+= bitwiseAndExpr )+ | ( ( NOT )? IN ( parenExprList | subselect ) ) | LIKE unaryExpr ( ESCAPE STRING )? | isOperator )? )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:788:5: lhs= bitwiseAndExpr ( (op+= BITWISE_OR rhs+= bitwiseAndExpr )+ | ( ( NOT )? IN ( parenExprList | subselect ) ) | LIKE unaryExpr ( ESCAPE STRING )? | isOperator )?
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(788, 8);
			PushFollow(Follow._bitwiseAndExpr_in_bitwiseOrExpr6914);
			lhs=bitwiseAndExpr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) adaptor.AddChild(root_0, lhs.Tree);
			DebugLocation(789, 5);
			// MySQL51Parser.g3:789:5: ( (op+= BITWISE_OR rhs+= bitwiseAndExpr )+ | ( ( NOT )? IN ( parenExprList | subselect ) ) | LIKE unaryExpr ( ESCAPE STRING )? | isOperator )?
			int alt134=5;
			try { DebugEnterSubRule(134);
			try { DebugEnterDecision(134, false);
			try
			{
				alt134 = dfa134.Predict(input);
			}
			catch (NoViableAltException nvae)
			{
				DebugRecognitionException(nvae);
				throw;
			}
			} finally { DebugExitDecision(134); }
			switch (alt134)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:789:7: (op+= BITWISE_OR rhs+= bitwiseAndExpr )+
				{
				DebugLocation(789, 7);
				// MySQL51Parser.g3:789:7: (op+= BITWISE_OR rhs+= bitwiseAndExpr )+
				int cnt130=0;
				try { DebugEnterSubRule(130);
				while (true)
				{
					int alt130=2;
					try { DebugEnterDecision(130, false);
					int LA130_0 = input.LA(1);

					if ((LA130_0==BITWISE_OR))
					{
						alt130 = 1;
					}


					} finally { DebugExitDecision(130); }
					switch (alt130)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:789:8: op+= BITWISE_OR rhs+= bitwiseAndExpr
						{
						DebugLocation(789, 10);
						op=(IToken)Match(input,BITWISE_OR,Follow._BITWISE_OR_in_bitwiseOrExpr6926); if (state.failed) return retval;
						if (state.backtracking == 0) {
						op_tree = (object)adaptor.Create(op);
						root_0 = (object)adaptor.BecomeRoot(op_tree, root_0);
						}
						if (list_op==null) list_op=new List<IToken>();
						list_op.Add(op);

						DebugLocation(789, 27);
						PushFollow(Follow._bitwiseAndExpr_in_bitwiseOrExpr6931);
						rhs=bitwiseAndExpr();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) adaptor.AddChild(root_0, rhs.Tree);
						if (list_rhs==null) list_rhs=new List<object>();
						list_rhs.Add(rhs.Tree);


						}
						break;

					default:
						if (cnt130 >= 1)
							goto loop130;

						if (state.backtracking>0) {state.failed=true; return retval;}
						EarlyExitException eee130 = new EarlyExitException( 130, input );
						DebugRecognitionException(eee130);
						throw eee130;
					}
					cnt130++;
				}
				loop130:
					;

				} finally { DebugExitSubRule(130); }


				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:790:7: ( ( NOT )? IN ( parenExprList | subselect ) )
				{
				DebugLocation(790, 7);
				// MySQL51Parser.g3:790:7: ( ( NOT )? IN ( parenExprList | subselect ) )
				DebugEnterAlt(1);
				// MySQL51Parser.g3:790:8: ( NOT )? IN ( parenExprList | subselect )
				{
				DebugLocation(790, 8);
				// MySQL51Parser.g3:790:8: ( NOT )?
				int alt131=2;
				try { DebugEnterSubRule(131);
				try { DebugEnterDecision(131, false);
				int LA131_0 = input.LA(1);

				if ((LA131_0==NOT))
				{
					alt131 = 1;
				}
				} finally { DebugExitDecision(131); }
				switch (alt131)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:790:9: NOT
					{
					DebugLocation(790, 12);
					NOT293=(IToken)Match(input,NOT,Follow._NOT_in_bitwiseOrExpr6943); if (state.failed) return retval;
					if (state.backtracking == 0) {
					NOT293_tree = (object)adaptor.Create(NOT293);
					root_0 = (object)adaptor.BecomeRoot(NOT293_tree, root_0);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(131); }

				DebugLocation(790, 18);
				IN294=(IToken)Match(input,IN,Follow._IN_in_bitwiseOrExpr6948); if (state.failed) return retval;
				if (state.backtracking == 0) {
				IN294_tree = (object)adaptor.Create(IN294);
				root_0 = (object)adaptor.BecomeRoot(IN294_tree, root_0);
				}
				DebugLocation(790, 20);
				// MySQL51Parser.g3:790:20: ( parenExprList | subselect )
				int alt132=2;
				try { DebugEnterSubRule(132);
				try { DebugEnterDecision(132, false);
				int LA132_0 = input.LA(1);

				if ((LA132_0==LPAREN))
				{
					int LA132_1 = input.LA(2);

					if ((LA132_1==ACTION||(LA132_1>=ADDDATE && LA132_1<=ALGORITHM)||LA132_1==ANY||LA132_1==ASCII||(LA132_1>=AT && LA132_1<=BACKUP)||LA132_1==BEGIN||(LA132_1>=BINARY && LA132_1<=BIT)||LA132_1==BITWISE_INVERSION||(LA132_1>=BIT_AND && LA132_1<=BIT_XOR)||(LA132_1>=BLOCK && LA132_1<=BOOLEAN)||LA132_1==BTREE||(LA132_1>=BYTE && LA132_1<=CACHE)||LA132_1==CASCADED||(LA132_1>=CAST && LA132_1<=CHAIN)||(LA132_1>=CHANGED && LA132_1<=CHAR)||LA132_1==CHARSET||(LA132_1>=CHECKSUM && LA132_1<=COLLATION)||LA132_1==COLUMNS||LA132_1==COMMENT||(LA132_1>=COMMIT && LA132_1<=CONCURRENT)||(LA132_1>=CONNECTION && LA132_1<=CONSISTENT)||(LA132_1>=CONTAINS && LA132_1<=CONTEXT)||LA132_1==CONTRIBUTORS||(LA132_1>=COUNT && LA132_1<=CPU)||(LA132_1>=CUBE && LA132_1<=CURRENT_USER)||LA132_1==CURTIME||(LA132_1>=DATA && LA132_1<=DATABASE)||(LA132_1>=DATAFILE && LA132_1<=DATE_ADD)||LA132_1==DATE_SUB||LA132_1==DAY||LA132_1==DEALLOCATE||LA132_1==DEFINER||LA132_1==DELAY_KEY_WRITE||LA132_1==DES_KEY_FILE||(LA132_1>=DIRECTORY && LA132_1<=DISK)||LA132_1==DO||(LA132_1>=DUMPFILE && LA132_1<=DYNAMIC)||LA132_1==ENABLE||(LA132_1>=END && LA132_1<=ENUM)||(LA132_1>=ERRORS && LA132_1<=ESCAPE)||(LA132_1>=EVENT && LA132_1<=EXISTS)||LA132_1==EXPANSION||(LA132_1>=EXTENDED && LA132_1<=FAULTS)||(LA132_1>=FIELDS && LA132_1<=FIXED)||LA132_1==FLUSH||(LA132_1>=FOUND && LA132_1<=FRAC_SECOND)||LA132_1==FULL||(LA132_1>=FUNCTION && LA132_1<=GLOBAL_VARIABLE)||LA132_1==GRANTS||(LA132_1>=GROUP && LA132_1<=HASH)||(LA132_1>=HELP && LA132_1<=HEXA_VALUE)||(LA132_1>=HOST && LA132_1<=HOUR)||(LA132_1>=ID && LA132_1<=IF)||LA132_1==IMPORT||LA132_1==INDEXES||LA132_1==INITIAL_SIZE||LA132_1==INNOBASE||(LA132_1>=INSERT && LA132_1<=INSTALL)||LA132_1==INTERVAL||(LA132_1>=INVOKER && LA132_1<=IPC)||(LA132_1>=ISOLATION && LA132_1<=ISSUER)||LA132_1==KEY_BLOCK_SIZE||(LA132_1>=LABEL && LA132_1<=LAST)||(LA132_1>=LEAVES && LA132_1<=LEFT)||LA132_1==LESS||LA132_1==LEVEL||(LA132_1>=LINESTRING && LA132_1<=LIST)||LA132_1==LOCAL||(LA132_1>=LOCKS && LA132_1<=LOGFILE)||LA132_1==LOGS||(LA132_1>=LPAREN && LA132_1<=MASTER_SSL_KEY)||LA132_1==MASTER_USER||(LA132_1>=MAX && LA132_1<=MEDIUM)||(LA132_1>=MEMORY && LA132_1<=MID)||(LA132_1>=MIGRATE && LA132_1<=MINUTE)||(LA132_1>=MIN_ROWS && LA132_1<=MODE)||LA132_1==MODIFY||LA132_1==MONTH||(LA132_1>=MULTILINESTRING && LA132_1<=NATIONAL)||(LA132_1>=NCHAR && LA132_1<=NOT)||(LA132_1>=NOT_OP && LA132_1<=NO_WAIT)||LA132_1==NULL||LA132_1==NUMBER||(LA132_1>=NVARCHAR && LA132_1<=OLD_PASSWORD)||(LA132_1>=ONE && LA132_1<=OPEN)||LA132_1==OPTIONS||(LA132_1>=OWNER && LA132_1<=POSITION)||(LA132_1>=PREPARE && LA132_1<=PREV)||LA132_1==PRIVILEGES||(LA132_1>=PROCESS && LA132_1<=PROFILES)||(LA132_1>=QUARTER && LA132_1<=QUICK)||(LA132_1>=REBUILD && LA132_1<=REDUNDANT)||(LA132_1>=RELAY_LOG_FILE && LA132_1<=RELAY_THREAD)||(LA132_1>=RELOAD && LA132_1<=REMOVE)||(LA132_1>=REORGANIZE && LA132_1<=REPLICATION)||(LA132_1>=RESET && LA132_1<=RESTORE)||LA132_1==RESUME||LA132_1==RETURNS||LA132_1==RIGHT||(LA132_1>=ROLLBACK && LA132_1<=ROW_FORMAT)||(LA132_1>=RTREE && LA132_1<=SCHEDULE)||LA132_1==SECOND||LA132_1==SECURITY||(LA132_1>=SERIAL && LA132_1<=SESSION_VARIABLE)||LA132_1==SHARE||(LA132_1>=SHUTDOWN && LA132_1<=SLAVE)||(LA132_1>=SNAPSHOT && LA132_1<=SOCKET)||(LA132_1>=SONAME && LA132_1<=SOURCE)||(LA132_1>=SQL_BUFFER_RESULT && LA132_1<=SQL_CACHE)||LA132_1==SQL_NO_CACHE||LA132_1==SQL_THREAD||LA132_1==START||(LA132_1>=STARTS && LA132_1<=STORAGE)||(LA132_1>=STRING && LA132_1<=SYSTEM_USER)||(LA132_1>=TABLES && LA132_1<=TEMPTABLE)||(LA132_1>=TEXT && LA132_1<=THAN)||(LA132_1>=TIME && LA132_1<=TIMESTAMP_DIFF)||(LA132_1>=TRANSACTION && LA132_1<=TRANSACTIONAL)||(LA132_1>=TRIGGERS && LA132_1<=UNDEFINED)||(LA132_1>=UNDOFILE && LA132_1<=UNINSTALL)||LA132_1==UNKNOWN||LA132_1==UNTIL||LA132_1==UPGRADE||LA132_1==USER||LA132_1==USE_FRM||(LA132_1>=UTC_DATE && LA132_1<=VALUE)||LA132_1==VALUE_PLACEHOLDER||(LA132_1>=VARIABLES && LA132_1<=VARIANCE)||(LA132_1>=VAR_POP && LA132_1<=WEEK)||(LA132_1>=WORK && LA132_1<=WRAPPER)||(LA132_1>=X509 && LA132_1<=XA)||LA132_1==YEAR||LA132_1==CONCAT))
					{
						alt132 = 1;
					}
					else if ((LA132_1==SELECT))
					{
						alt132 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 132, 1, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 132, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
				} finally { DebugExitDecision(132); }
				switch (alt132)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:790:21: parenExprList
					{
					DebugLocation(790, 21);
					PushFollow(Follow._parenExprList_in_bitwiseOrExpr6952);
					parenExprList295=parenExprList();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, parenExprList295.Tree);

					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:790:37: subselect
					{
					DebugLocation(790, 37);
					PushFollow(Follow._subselect_in_bitwiseOrExpr6956);
					subselect296=subselect();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, subselect296.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(132); }


				}


				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:791:7: LIKE unaryExpr ( ESCAPE STRING )?
				{
				DebugLocation(791, 11);
				LIKE297=(IToken)Match(input,LIKE,Follow._LIKE_in_bitwiseOrExpr6966); if (state.failed) return retval;
				if (state.backtracking == 0) {
				LIKE297_tree = (object)adaptor.Create(LIKE297);
				root_0 = (object)adaptor.BecomeRoot(LIKE297_tree, root_0);
				}
				DebugLocation(791, 13);
				PushFollow(Follow._unaryExpr_in_bitwiseOrExpr6969);
				unaryExpr298=unaryExpr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, unaryExpr298.Tree);
				DebugLocation(791, 23);
				// MySQL51Parser.g3:791:23: ( ESCAPE STRING )?
				int alt133=2;
				try { DebugEnterSubRule(133);
				try { DebugEnterDecision(133, false);
				int LA133_0 = input.LA(1);

				if ((LA133_0==ESCAPE))
				{
					int LA133_1 = input.LA(2);

					if ((LA133_1==STRING))
					{
						alt133 = 1;
					}
				}
				} finally { DebugExitDecision(133); }
				switch (alt133)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:791:24: ESCAPE STRING
					{
					DebugLocation(791, 24);
					ESCAPE299=(IToken)Match(input,ESCAPE,Follow._ESCAPE_in_bitwiseOrExpr6972); if (state.failed) return retval;
					if (state.backtracking == 0) {
					ESCAPE299_tree = (object)adaptor.Create(ESCAPE299);
					adaptor.AddChild(root_0, ESCAPE299_tree);
					}
					DebugLocation(791, 31);
					STRING300=(IToken)Match(input,STRING,Follow._STRING_in_bitwiseOrExpr6974); if (state.failed) return retval;
					if (state.backtracking == 0) {
					STRING300_tree = (object)adaptor.Create(STRING300);
					adaptor.AddChild(root_0, STRING300_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(133); }


				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:792:7: isOperator
				{
				DebugLocation(792, 17);
				PushFollow(Follow._isOperator_in_bitwiseOrExpr6986);
				isOperator301=isOperator();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) root_0 = (object)adaptor.BecomeRoot(isOperator301.Tree, root_0);

				}
				break;

			}
			} finally { DebugExitSubRule(134); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("bitwiseOrExpr", 51);
			LeaveRule("bitwiseOrExpr", 51);
			LeaveRule_bitwiseOrExpr();
		}
		DebugLocation(794, 2);
		} finally { DebugExitRule(GrammarFileName, "bitwiseOrExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "bitwiseOrExpr"

	private sealed partial class bitwiseAndExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public bitwiseAndExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_bitwiseAndExpr();
	partial void LeaveRule_bitwiseAndExpr();

	// $ANTLR start "bitwiseAndExpr"
	// MySQL51Parser.g3:796:1: bitwiseAndExpr : lhs= shiftExpr (op+= BITWISE_AND rhs+= shiftExpr )* ;
	[GrammarRule("bitwiseAndExpr")]
	private MySQL51Parser.bitwiseAndExpr_return bitwiseAndExpr()
	{
		EnterRule_bitwiseAndExpr();
		EnterRule("bitwiseAndExpr", 52);
		TraceIn("bitwiseAndExpr", 52);
		MySQL51Parser.bitwiseAndExpr_return retval = new MySQL51Parser.bitwiseAndExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken op = default(IToken);
		List<IToken> list_op = null;
		List<object> list_rhs = null;
		MySQL51Parser.shiftExpr_return lhs = default(MySQL51Parser.shiftExpr_return);
		MySQL51Parser.shiftExpr_return rhs = default(MySQL51Parser.shiftExpr_return);
		object op_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "bitwiseAndExpr");
		DebugLocation(796, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:797:2: (lhs= shiftExpr (op+= BITWISE_AND rhs+= shiftExpr )* )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:797:4: lhs= shiftExpr (op+= BITWISE_AND rhs+= shiftExpr )*
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(797, 7);
			PushFollow(Follow._shiftExpr_in_bitwiseAndExpr7008);
			lhs=shiftExpr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) adaptor.AddChild(root_0, lhs.Tree);
			DebugLocation(797, 18);
			// MySQL51Parser.g3:797:18: (op+= BITWISE_AND rhs+= shiftExpr )*
			try { DebugEnterSubRule(135);
			while (true)
			{
				int alt135=2;
				try { DebugEnterDecision(135, false);
				int LA135_0 = input.LA(1);

				if ((LA135_0==BITWISE_AND))
				{
					alt135 = 1;
				}


				} finally { DebugExitDecision(135); }
				switch ( alt135 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:797:19: op+= BITWISE_AND rhs+= shiftExpr
					{
					DebugLocation(797, 21);
					op=(IToken)Match(input,BITWISE_AND,Follow._BITWISE_AND_in_bitwiseAndExpr7013); if (state.failed) return retval;
					if (state.backtracking == 0) {
					op_tree = (object)adaptor.Create(op);
					root_0 = (object)adaptor.BecomeRoot(op_tree, root_0);
					}
					if (list_op==null) list_op=new List<IToken>();
					list_op.Add(op);

					DebugLocation(797, 39);
					PushFollow(Follow._shiftExpr_in_bitwiseAndExpr7018);
					rhs=shiftExpr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, rhs.Tree);
					if (list_rhs==null) list_rhs=new List<object>();
					list_rhs.Add(rhs.Tree);


					}
					break;

				default:
					goto loop135;
				}
			}

			loop135:
				;

			} finally { DebugExitSubRule(135); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("bitwiseAndExpr", 52);
			LeaveRule("bitwiseAndExpr", 52);
			LeaveRule_bitwiseAndExpr();
		}
		DebugLocation(798, 1);
		} finally { DebugExitRule(GrammarFileName, "bitwiseAndExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "bitwiseAndExpr"

	private sealed partial class shiftExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public shiftExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_shiftExpr();
	partial void LeaveRule_shiftExpr();

	// $ANTLR start "shiftExpr"
	// MySQL51Parser.g3:800:1: shiftExpr : lhs= additiveExpr ( (op+= LEFT_SHIFT |op+= RIGHT_SHIFT ) rhs+= additiveExpr )* ;
	[GrammarRule("shiftExpr")]
	private MySQL51Parser.shiftExpr_return shiftExpr()
	{
		EnterRule_shiftExpr();
		EnterRule("shiftExpr", 53);
		TraceIn("shiftExpr", 53);
		MySQL51Parser.shiftExpr_return retval = new MySQL51Parser.shiftExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken op = default(IToken);
		List<IToken> list_op = null;
		List<object> list_rhs = null;
		MySQL51Parser.additiveExpr_return lhs = default(MySQL51Parser.additiveExpr_return);
		MySQL51Parser.additiveExpr_return rhs = default(MySQL51Parser.additiveExpr_return);
		object op_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "shiftExpr");
		DebugLocation(800, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:801:2: (lhs= additiveExpr ( (op+= LEFT_SHIFT |op+= RIGHT_SHIFT ) rhs+= additiveExpr )* )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:801:4: lhs= additiveExpr ( (op+= LEFT_SHIFT |op+= RIGHT_SHIFT ) rhs+= additiveExpr )*
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(801, 7);
			PushFollow(Follow._additiveExpr_in_shiftExpr7033);
			lhs=additiveExpr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) adaptor.AddChild(root_0, lhs.Tree);
			DebugLocation(801, 21);
			// MySQL51Parser.g3:801:21: ( (op+= LEFT_SHIFT |op+= RIGHT_SHIFT ) rhs+= additiveExpr )*
			try { DebugEnterSubRule(137);
			while (true)
			{
				int alt137=2;
				try { DebugEnterDecision(137, false);
				int LA137_0 = input.LA(1);

				if ((LA137_0==LEFT_SHIFT||LA137_0==RIGHT_SHIFT))
				{
					alt137 = 1;
				}


				} finally { DebugExitDecision(137); }
				switch ( alt137 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:801:22: (op+= LEFT_SHIFT |op+= RIGHT_SHIFT ) rhs+= additiveExpr
					{
					DebugLocation(801, 22);
					// MySQL51Parser.g3:801:22: (op+= LEFT_SHIFT |op+= RIGHT_SHIFT )
					int alt136=2;
					try { DebugEnterSubRule(136);
					try { DebugEnterDecision(136, false);
					int LA136_0 = input.LA(1);

					if ((LA136_0==LEFT_SHIFT))
					{
						alt136 = 1;
					}
					else if ((LA136_0==RIGHT_SHIFT))
					{
						alt136 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 136, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					} finally { DebugExitDecision(136); }
					switch (alt136)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:801:23: op+= LEFT_SHIFT
						{
						DebugLocation(801, 25);
						op=(IToken)Match(input,LEFT_SHIFT,Follow._LEFT_SHIFT_in_shiftExpr7039); if (state.failed) return retval;
						if (state.backtracking == 0) {
						op_tree = (object)adaptor.Create(op);
						root_0 = (object)adaptor.BecomeRoot(op_tree, root_0);
						}
						if (list_op==null) list_op=new List<IToken>();
						list_op.Add(op);


						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:801:41: op+= RIGHT_SHIFT
						{
						DebugLocation(801, 43);
						op=(IToken)Match(input,RIGHT_SHIFT,Follow._RIGHT_SHIFT_in_shiftExpr7046); if (state.failed) return retval;
						if (state.backtracking == 0) {
						op_tree = (object)adaptor.Create(op);
						root_0 = (object)adaptor.BecomeRoot(op_tree, root_0);
						}
						if (list_op==null) list_op=new List<IToken>();
						list_op.Add(op);


						}
						break;

					}
					} finally { DebugExitSubRule(136); }

					DebugLocation(801, 62);
					PushFollow(Follow._additiveExpr_in_shiftExpr7052);
					rhs=additiveExpr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, rhs.Tree);
					if (list_rhs==null) list_rhs=new List<object>();
					list_rhs.Add(rhs.Tree);


					}
					break;

				default:
					goto loop137;
				}
			}

			loop137:
				;

			} finally { DebugExitSubRule(137); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("shiftExpr", 53);
			LeaveRule("shiftExpr", 53);
			LeaveRule_shiftExpr();
		}
		DebugLocation(802, 1);
		} finally { DebugExitRule(GrammarFileName, "shiftExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "shiftExpr"

	private sealed partial class additiveExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public additiveExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_additiveExpr();
	partial void LeaveRule_additiveExpr();

	// $ANTLR start "additiveExpr"
	// MySQL51Parser.g3:809:1: additiveExpr : lhs= multiplicativeExpr ( (op+= PLUS |op+= MINUS ) rhs+= multiplicativeExpr )* ;
	[GrammarRule("additiveExpr")]
	private MySQL51Parser.additiveExpr_return additiveExpr()
	{
		EnterRule_additiveExpr();
		EnterRule("additiveExpr", 54);
		TraceIn("additiveExpr", 54);
		MySQL51Parser.additiveExpr_return retval = new MySQL51Parser.additiveExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken op = default(IToken);
		List<IToken> list_op = null;
		List<object> list_rhs = null;
		MySQL51Parser.multiplicativeExpr_return lhs = default(MySQL51Parser.multiplicativeExpr_return);
		MySQL51Parser.multiplicativeExpr_return rhs = default(MySQL51Parser.multiplicativeExpr_return);
		object op_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "additiveExpr");
		DebugLocation(809, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:810:2: (lhs= multiplicativeExpr ( (op+= PLUS |op+= MINUS ) rhs+= multiplicativeExpr )* )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:810:4: lhs= multiplicativeExpr ( (op+= PLUS |op+= MINUS ) rhs+= multiplicativeExpr )*
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(810, 7);
			PushFollow(Follow._multiplicativeExpr_in_additiveExpr7069);
			lhs=multiplicativeExpr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) adaptor.AddChild(root_0, lhs.Tree);
			DebugLocation(810, 27);
			// MySQL51Parser.g3:810:27: ( (op+= PLUS |op+= MINUS ) rhs+= multiplicativeExpr )*
			try { DebugEnterSubRule(139);
			while (true)
			{
				int alt139=2;
				try { DebugEnterDecision(139, false);
				try
				{
					alt139 = dfa139.Predict(input);
				}
				catch (NoViableAltException nvae)
				{
					DebugRecognitionException(nvae);
					throw;
				}
				} finally { DebugExitDecision(139); }
				switch ( alt139 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:810:28: (op+= PLUS |op+= MINUS ) rhs+= multiplicativeExpr
					{
					DebugLocation(810, 28);
					// MySQL51Parser.g3:810:28: (op+= PLUS |op+= MINUS )
					int alt138=2;
					try { DebugEnterSubRule(138);
					try { DebugEnterDecision(138, false);
					int LA138_0 = input.LA(1);

					if ((LA138_0==PLUS))
					{
						alt138 = 1;
					}
					else if ((LA138_0==MINUS))
					{
						alt138 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 138, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					} finally { DebugExitDecision(138); }
					switch (alt138)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:810:29: op+= PLUS
						{
						DebugLocation(810, 31);
						op=(IToken)Match(input,PLUS,Follow._PLUS_in_additiveExpr7075); if (state.failed) return retval;
						if (state.backtracking == 0) {
						op_tree = (object)adaptor.Create(op);
						root_0 = (object)adaptor.BecomeRoot(op_tree, root_0);
						}
						if (list_op==null) list_op=new List<IToken>();
						list_op.Add(op);


						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:810:39: op+= MINUS
						{
						DebugLocation(810, 41);
						op=(IToken)Match(input,MINUS,Follow._MINUS_in_additiveExpr7080); if (state.failed) return retval;
						if (state.backtracking == 0) {
						op_tree = (object)adaptor.Create(op);
						root_0 = (object)adaptor.BecomeRoot(op_tree, root_0);
						}
						if (list_op==null) list_op=new List<IToken>();
						list_op.Add(op);


						}
						break;

					}
					} finally { DebugExitSubRule(138); }

					DebugLocation(810, 54);
					PushFollow(Follow._multiplicativeExpr_in_additiveExpr7086);
					rhs=multiplicativeExpr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, rhs.Tree);
					if (list_rhs==null) list_rhs=new List<object>();
					list_rhs.Add(rhs.Tree);


					}
					break;

				default:
					goto loop139;
				}
			}

			loop139:
				;

			} finally { DebugExitSubRule(139); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("additiveExpr", 54);
			LeaveRule("additiveExpr", 54);
			LeaveRule_additiveExpr();
		}
		DebugLocation(811, 1);
		} finally { DebugExitRule(GrammarFileName, "additiveExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "additiveExpr"

	private sealed partial class multOperator_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public multOperator_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_multOperator();
	partial void LeaveRule_multOperator();

	// $ANTLR start "multOperator"
	// MySQL51Parser.g3:813:1: multOperator : (value= MULT |value= DIVISION |value= DIV |value= MODULO );
	[GrammarRule("multOperator")]
	private MySQL51Parser.multOperator_return multOperator()
	{
		EnterRule_multOperator();
		EnterRule("multOperator", 55);
		TraceIn("multOperator", 55);
		MySQL51Parser.multOperator_return retval = new MySQL51Parser.multOperator_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken value = default(IToken);

		object value_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "multOperator");
		DebugLocation(813, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:814:2: (value= MULT |value= DIVISION |value= DIV |value= MODULO )
			int alt140=4;
			try { DebugEnterDecision(140, false);
			switch (input.LA(1))
			{
			case MULT:
				{
				alt140 = 1;
				}
				break;
			case DIVISION:
				{
				alt140 = 2;
				}
				break;
			case DIV:
				{
				alt140 = 3;
				}
				break;
			case MODULO:
				{
				alt140 = 4;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 140, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(140); }
			switch (alt140)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:814:4: value= MULT
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(814, 9);
				value=(IToken)Match(input,MULT,Follow._MULT_in_multOperator7101); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:815:4: value= DIVISION
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(815, 9);
				value=(IToken)Match(input,DIVISION,Follow._DIVISION_in_multOperator7108); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:816:4: value= DIV
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(816, 9);
				value=(IToken)Match(input,DIV,Follow._DIV_in_multOperator7115); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:817:4: value= MODULO
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(817, 9);
				value=(IToken)Match(input,MODULO,Follow._MODULO_in_multOperator7122); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("multOperator", 55);
			LeaveRule("multOperator", 55);
			LeaveRule_multOperator();
		}
		DebugLocation(818, 1);
		} finally { DebugExitRule(GrammarFileName, "multOperator"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "multOperator"

	private sealed partial class multiplicativeExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public multiplicativeExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_multiplicativeExpr();
	partial void LeaveRule_multiplicativeExpr();

	// $ANTLR start "multiplicativeExpr"
	// MySQL51Parser.g3:820:1: multiplicativeExpr : lhs= bitwiseXORExpr (op+= multOperator rhs+= bitwiseXORExpr )* ;
	[GrammarRule("multiplicativeExpr")]
	private MySQL51Parser.multiplicativeExpr_return multiplicativeExpr()
	{
		EnterRule_multiplicativeExpr();
		EnterRule("multiplicativeExpr", 56);
		TraceIn("multiplicativeExpr", 56);
		MySQL51Parser.multiplicativeExpr_return retval = new MySQL51Parser.multiplicativeExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		List<object> list_op = null;
		List<object> list_rhs = null;
		MySQL51Parser.bitwiseXORExpr_return lhs = default(MySQL51Parser.bitwiseXORExpr_return);
		MySQL51Parser.multOperator_return op = default(MySQL51Parser.multOperator_return);
		MySQL51Parser.bitwiseXORExpr_return rhs = default(MySQL51Parser.bitwiseXORExpr_return);

		try { DebugEnterRule(GrammarFileName, "multiplicativeExpr");
		DebugLocation(820, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:821:2: (lhs= bitwiseXORExpr (op+= multOperator rhs+= bitwiseXORExpr )* )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:821:4: lhs= bitwiseXORExpr (op+= multOperator rhs+= bitwiseXORExpr )*
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(821, 7);
			PushFollow(Follow._bitwiseXORExpr_in_multiplicativeExpr7135);
			lhs=bitwiseXORExpr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) adaptor.AddChild(root_0, lhs.Tree);
			DebugLocation(821, 23);
			// MySQL51Parser.g3:821:23: (op+= multOperator rhs+= bitwiseXORExpr )*
			try { DebugEnterSubRule(141);
			while (true)
			{
				int alt141=2;
				try { DebugEnterDecision(141, false);
				int LA141_0 = input.LA(1);

				if (((LA141_0>=DIV && LA141_0<=DIVISION)||LA141_0==MODULO||LA141_0==MULT))
				{
					alt141 = 1;
				}


				} finally { DebugExitDecision(141); }
				switch ( alt141 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:821:24: op+= multOperator rhs+= bitwiseXORExpr
					{
					DebugLocation(821, 26);
					PushFollow(Follow._multOperator_in_multiplicativeExpr7140);
					op=multOperator();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) root_0 = (object)adaptor.BecomeRoot(op.Tree, root_0);
					if (list_op==null) list_op=new List<object>();
					list_op.Add(op.Tree);

					DebugLocation(821, 45);
					PushFollow(Follow._bitwiseXORExpr_in_multiplicativeExpr7145);
					rhs=bitwiseXORExpr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, rhs.Tree);
					if (list_rhs==null) list_rhs=new List<object>();
					list_rhs.Add(rhs.Tree);


					}
					break;

				default:
					goto loop141;
				}
			}

			loop141:
				;

			} finally { DebugExitSubRule(141); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("multiplicativeExpr", 56);
			LeaveRule("multiplicativeExpr", 56);
			LeaveRule_multiplicativeExpr();
		}
		DebugLocation(822, 1);
		} finally { DebugExitRule(GrammarFileName, "multiplicativeExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "multiplicativeExpr"

	private sealed partial class bitwiseXORExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public bitwiseXORExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_bitwiseXORExpr();
	partial void LeaveRule_bitwiseXORExpr();

	// $ANTLR start "bitwiseXORExpr"
	// MySQL51Parser.g3:824:1: bitwiseXORExpr : lhs= unaryExpr (op+= BITWISE_XOR rhs+= unaryExpr )* ;
	[GrammarRule("bitwiseXORExpr")]
	private MySQL51Parser.bitwiseXORExpr_return bitwiseXORExpr()
	{
		EnterRule_bitwiseXORExpr();
		EnterRule("bitwiseXORExpr", 57);
		TraceIn("bitwiseXORExpr", 57);
		MySQL51Parser.bitwiseXORExpr_return retval = new MySQL51Parser.bitwiseXORExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken op = default(IToken);
		List<IToken> list_op = null;
		List<object> list_rhs = null;
		MySQL51Parser.unaryExpr_return lhs = default(MySQL51Parser.unaryExpr_return);
		MySQL51Parser.unaryExpr_return rhs = default(MySQL51Parser.unaryExpr_return);
		object op_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "bitwiseXORExpr");
		DebugLocation(824, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:825:2: (lhs= unaryExpr (op+= BITWISE_XOR rhs+= unaryExpr )* )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:825:4: lhs= unaryExpr (op+= BITWISE_XOR rhs+= unaryExpr )*
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(825, 7);
			PushFollow(Follow._unaryExpr_in_bitwiseXORExpr7160);
			lhs=unaryExpr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) adaptor.AddChild(root_0, lhs.Tree);
			DebugLocation(825, 18);
			// MySQL51Parser.g3:825:18: (op+= BITWISE_XOR rhs+= unaryExpr )*
			try { DebugEnterSubRule(142);
			while (true)
			{
				int alt142=2;
				try { DebugEnterDecision(142, false);
				int LA142_0 = input.LA(1);

				if ((LA142_0==BITWISE_XOR))
				{
					alt142 = 1;
				}


				} finally { DebugExitDecision(142); }
				switch ( alt142 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:825:19: op+= BITWISE_XOR rhs+= unaryExpr
					{
					DebugLocation(825, 21);
					op=(IToken)Match(input,BITWISE_XOR,Follow._BITWISE_XOR_in_bitwiseXORExpr7165); if (state.failed) return retval;
					if (state.backtracking == 0) {
					op_tree = (object)adaptor.Create(op);
					root_0 = (object)adaptor.BecomeRoot(op_tree, root_0);
					}
					if (list_op==null) list_op=new List<IToken>();
					list_op.Add(op);

					DebugLocation(825, 39);
					PushFollow(Follow._unaryExpr_in_bitwiseXORExpr7170);
					rhs=unaryExpr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, rhs.Tree);
					if (list_rhs==null) list_rhs=new List<object>();
					list_rhs.Add(rhs.Tree);


					}
					break;

				default:
					goto loop142;
				}
			}

			loop142:
				;

			} finally { DebugExitSubRule(142); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("bitwiseXORExpr", 57);
			LeaveRule("bitwiseXORExpr", 57);
			LeaveRule_bitwiseXORExpr();
		}
		DebugLocation(826, 1);
		} finally { DebugExitRule(GrammarFileName, "bitwiseXORExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "bitwiseXORExpr"

	private sealed partial class unaryExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public unaryExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_unaryExpr();
	partial void LeaveRule_unaryExpr();

	// $ANTLR start "unaryExpr"
	// MySQL51Parser.g3:828:1: unaryExpr : (op= MINUS lhs= unaryExpr -> ^( UNARY_MINUS[$op] $lhs) |op= PLUS lhs= unaryExpr -> ^( UNARY_PLUS[$op] $lhs) |op= BITWISE_INVERSION lhs= unaryExpr -> ^( BITWISE_INVERSION $lhs) |lhsUnaryNot= unaryNotExpr -> unaryNotExpr );
	[GrammarRule("unaryExpr")]
	private MySQL51Parser.unaryExpr_return unaryExpr()
	{
		EnterRule_unaryExpr();
		EnterRule("unaryExpr", 58);
		TraceIn("unaryExpr", 58);
		MySQL51Parser.unaryExpr_return retval = new MySQL51Parser.unaryExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken op = default(IToken);
		MySQL51Parser.unaryExpr_return lhs = default(MySQL51Parser.unaryExpr_return);
		MySQL51Parser.unaryNotExpr_return lhsUnaryNot = default(MySQL51Parser.unaryNotExpr_return);

		object op_tree = default(object);
		RewriteRuleITokenStream stream_MINUS=new RewriteRuleITokenStream(adaptor,"token MINUS");
		RewriteRuleITokenStream stream_PLUS=new RewriteRuleITokenStream(adaptor,"token PLUS");
		RewriteRuleITokenStream stream_BITWISE_INVERSION=new RewriteRuleITokenStream(adaptor,"token BITWISE_INVERSION");
		RewriteRuleSubtreeStream stream_unaryExpr=new RewriteRuleSubtreeStream(adaptor,"rule unaryExpr");
		RewriteRuleSubtreeStream stream_unaryNotExpr=new RewriteRuleSubtreeStream(adaptor,"rule unaryNotExpr");
		try { DebugEnterRule(GrammarFileName, "unaryExpr");
		DebugLocation(828, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:829:2: (op= MINUS lhs= unaryExpr -> ^( UNARY_MINUS[$op] $lhs) |op= PLUS lhs= unaryExpr -> ^( UNARY_PLUS[$op] $lhs) |op= BITWISE_INVERSION lhs= unaryExpr -> ^( BITWISE_INVERSION $lhs) |lhsUnaryNot= unaryNotExpr -> unaryNotExpr )
			int alt143=4;
			try { DebugEnterDecision(143, false);
			int LA143_0 = input.LA(1);

			if ((LA143_0==MINUS))
			{
				alt143 = 1;
			}
			else if ((LA143_0==PLUS))
			{
				alt143 = 2;
			}
			else if ((LA143_0==BITWISE_INVERSION))
			{
				alt143 = 3;
			}
			else if ((LA143_0==ACTION||(LA143_0>=ADDDATE && LA143_0<=ALGORITHM)||LA143_0==ANY||LA143_0==ASCII||(LA143_0>=AT && LA143_0<=BACKUP)||LA143_0==BEGIN||(LA143_0>=BINARY && LA143_0<=BIT)||(LA143_0>=BIT_AND && LA143_0<=BIT_XOR)||(LA143_0>=BLOCK && LA143_0<=BOOLEAN)||LA143_0==BTREE||(LA143_0>=BYTE && LA143_0<=CACHE)||LA143_0==CASCADED||(LA143_0>=CAST && LA143_0<=CHAIN)||(LA143_0>=CHANGED && LA143_0<=CHAR)||LA143_0==CHARSET||(LA143_0>=CHECKSUM && LA143_0<=COLLATION)||LA143_0==COLUMNS||LA143_0==COMMENT||(LA143_0>=COMMIT && LA143_0<=CONCURRENT)||(LA143_0>=CONNECTION && LA143_0<=CONSISTENT)||(LA143_0>=CONTAINS && LA143_0<=CONTEXT)||LA143_0==CONTRIBUTORS||(LA143_0>=COUNT && LA143_0<=CPU)||(LA143_0>=CUBE && LA143_0<=CURRENT_USER)||LA143_0==CURTIME||(LA143_0>=DATA && LA143_0<=DATABASE)||(LA143_0>=DATAFILE && LA143_0<=DATE_ADD)||LA143_0==DATE_SUB||LA143_0==DAY||LA143_0==DEALLOCATE||LA143_0==DEFINER||LA143_0==DELAY_KEY_WRITE||LA143_0==DES_KEY_FILE||(LA143_0>=DIRECTORY && LA143_0<=DISK)||LA143_0==DO||(LA143_0>=DUMPFILE && LA143_0<=DYNAMIC)||LA143_0==ENABLE||(LA143_0>=END && LA143_0<=ENUM)||(LA143_0>=ERRORS && LA143_0<=ESCAPE)||(LA143_0>=EVENT && LA143_0<=EXISTS)||LA143_0==EXPANSION||(LA143_0>=EXTENDED && LA143_0<=FAULTS)||(LA143_0>=FIELDS && LA143_0<=FIXED)||LA143_0==FLUSH||(LA143_0>=FOUND && LA143_0<=FRAC_SECOND)||LA143_0==FULL||(LA143_0>=FUNCTION && LA143_0<=GLOBAL_VARIABLE)||LA143_0==GRANTS||(LA143_0>=GROUP && LA143_0<=HASH)||(LA143_0>=HELP && LA143_0<=HEXA_VALUE)||(LA143_0>=HOST && LA143_0<=HOUR)||(LA143_0>=ID && LA143_0<=IF)||LA143_0==IMPORT||LA143_0==INDEXES||LA143_0==INITIAL_SIZE||LA143_0==INNOBASE||(LA143_0>=INSERT && LA143_0<=INSTALL)||LA143_0==INTERVAL||(LA143_0>=INVOKER && LA143_0<=IPC)||(LA143_0>=ISOLATION && LA143_0<=ISSUER)||LA143_0==KEY_BLOCK_SIZE||(LA143_0>=LABEL && LA143_0<=LAST)||(LA143_0>=LEAVES && LA143_0<=LEFT)||LA143_0==LESS||LA143_0==LEVEL||(LA143_0>=LINESTRING && LA143_0<=LIST)||LA143_0==LOCAL||(LA143_0>=LOCKS && LA143_0<=LOGFILE)||LA143_0==LOGS||(LA143_0>=LPAREN && LA143_0<=MASTER_SSL_KEY)||LA143_0==MASTER_USER||(LA143_0>=MAX && LA143_0<=MEDIUM)||(LA143_0>=MEMORY && LA143_0<=MID)||(LA143_0>=MIGRATE && LA143_0<=MIN)||LA143_0==MINUTE||(LA143_0>=MIN_ROWS && LA143_0<=MODE)||LA143_0==MODIFY||LA143_0==MONTH||(LA143_0>=MULTILINESTRING && LA143_0<=NATIONAL)||(LA143_0>=NCHAR && LA143_0<=NONE)||(LA143_0>=NOT_OP && LA143_0<=NO_WAIT)||LA143_0==NULL||LA143_0==NUMBER||(LA143_0>=NVARCHAR && LA143_0<=OLD_PASSWORD)||(LA143_0>=ONE && LA143_0<=OPEN)||LA143_0==OPTIONS||(LA143_0>=OWNER && LA143_0<=PLUGINS)||(LA143_0>=POINT && LA143_0<=POSITION)||(LA143_0>=PREPARE && LA143_0<=PREV)||LA143_0==PRIVILEGES||(LA143_0>=PROCESS && LA143_0<=PROFILES)||(LA143_0>=QUARTER && LA143_0<=QUICK)||(LA143_0>=REBUILD && LA143_0<=REDUNDANT)||(LA143_0>=RELAY_LOG_FILE && LA143_0<=RELAY_THREAD)||(LA143_0>=RELOAD && LA143_0<=REMOVE)||(LA143_0>=REORGANIZE && LA143_0<=REPLICATION)||(LA143_0>=RESET && LA143_0<=RESTORE)||LA143_0==RESUME||LA143_0==RETURNS||LA143_0==RIGHT||(LA143_0>=ROLLBACK && LA143_0<=ROW_FORMAT)||(LA143_0>=RTREE && LA143_0<=SCHEDULE)||LA143_0==SECOND||LA143_0==SECURITY||(LA143_0>=SERIAL && LA143_0<=SESSION_VARIABLE)||LA143_0==SHARE||(LA143_0>=SHUTDOWN && LA143_0<=SLAVE)||(LA143_0>=SNAPSHOT && LA143_0<=SOCKET)||(LA143_0>=SONAME && LA143_0<=SOURCE)||(LA143_0>=SQL_BUFFER_RESULT && LA143_0<=SQL_CACHE)||LA143_0==SQL_NO_CACHE||LA143_0==SQL_THREAD||LA143_0==START||(LA143_0>=STARTS && LA143_0<=STORAGE)||(LA143_0>=STRING && LA143_0<=SYSTEM_USER)||(LA143_0>=TABLES && LA143_0<=TEMPTABLE)||(LA143_0>=TEXT && LA143_0<=THAN)||(LA143_0>=TIME && LA143_0<=TIMESTAMP_DIFF)||(LA143_0>=TRANSACTION && LA143_0<=TRANSACTIONAL)||(LA143_0>=TRIGGERS && LA143_0<=UNDEFINED)||(LA143_0>=UNDOFILE && LA143_0<=UNINSTALL)||LA143_0==UNKNOWN||LA143_0==UNTIL||LA143_0==UPGRADE||LA143_0==USER||LA143_0==USE_FRM||(LA143_0>=UTC_DATE && LA143_0<=VALUE)||LA143_0==VALUE_PLACEHOLDER||(LA143_0>=VARIABLES && LA143_0<=VARIANCE)||(LA143_0>=VAR_POP && LA143_0<=WEEK)||(LA143_0>=WORK && LA143_0<=WRAPPER)||(LA143_0>=X509 && LA143_0<=XA)||LA143_0==YEAR||LA143_0==CONCAT))
			{
				alt143 = 4;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 143, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(143); }
			switch (alt143)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:829:4: op= MINUS lhs= unaryExpr
				{
				DebugLocation(829, 6);
				op=(IToken)Match(input,MINUS,Follow._MINUS_in_unaryExpr7185); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_MINUS.Add(op);

				DebugLocation(829, 16);
				PushFollow(Follow._unaryExpr_in_unaryExpr7189);
				lhs=unaryExpr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_unaryExpr.Add(lhs.Tree);


				{
				// AST REWRITE
				// elements: lhs
				// token labels: 
				// rule labels: lhs, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_lhs=new RewriteRuleSubtreeStream(adaptor,"rule lhs",lhs!=null?lhs.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 829:27: -> ^( UNARY_MINUS[$op] $lhs)
				{
					DebugLocation(829, 30);
					// MySQL51Parser.g3:829:30: ^( UNARY_MINUS[$op] $lhs)
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(829, 32);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(UNARY_MINUS, op), root_1);

					DebugLocation(829, 50);
					adaptor.AddChild(root_1, stream_lhs.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:830:4: op= PLUS lhs= unaryExpr
				{
				DebugLocation(830, 6);
				op=(IToken)Match(input,PLUS,Follow._PLUS_in_unaryExpr7206); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_PLUS.Add(op);

				DebugLocation(830, 15);
				PushFollow(Follow._unaryExpr_in_unaryExpr7210);
				lhs=unaryExpr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_unaryExpr.Add(lhs.Tree);


				{
				// AST REWRITE
				// elements: lhs
				// token labels: 
				// rule labels: lhs, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_lhs=new RewriteRuleSubtreeStream(adaptor,"rule lhs",lhs!=null?lhs.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 830:26: -> ^( UNARY_PLUS[$op] $lhs)
				{
					DebugLocation(830, 29);
					// MySQL51Parser.g3:830:29: ^( UNARY_PLUS[$op] $lhs)
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(830, 31);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(UNARY_PLUS, op), root_1);

					DebugLocation(830, 48);
					adaptor.AddChild(root_1, stream_lhs.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:831:4: op= BITWISE_INVERSION lhs= unaryExpr
				{
				DebugLocation(831, 6);
				op=(IToken)Match(input,BITWISE_INVERSION,Follow._BITWISE_INVERSION_in_unaryExpr7227); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_BITWISE_INVERSION.Add(op);

				DebugLocation(831, 28);
				PushFollow(Follow._unaryExpr_in_unaryExpr7231);
				lhs=unaryExpr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_unaryExpr.Add(lhs.Tree);


				{
				// AST REWRITE
				// elements: BITWISE_INVERSION, lhs
				// token labels: 
				// rule labels: lhs, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_lhs=new RewriteRuleSubtreeStream(adaptor,"rule lhs",lhs!=null?lhs.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 831:39: -> ^( BITWISE_INVERSION $lhs)
				{
					DebugLocation(831, 42);
					// MySQL51Parser.g3:831:42: ^( BITWISE_INVERSION $lhs)
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(831, 44);
					root_1 = (object)adaptor.BecomeRoot(stream_BITWISE_INVERSION.NextNode(), root_1);

					DebugLocation(831, 63);
					adaptor.AddChild(root_1, stream_lhs.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:832:4: lhsUnaryNot= unaryNotExpr
				{
				DebugLocation(832, 15);
				PushFollow(Follow._unaryNotExpr_in_unaryExpr7247);
				lhsUnaryNot=unaryNotExpr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_unaryNotExpr.Add(lhsUnaryNot.Tree);


				{
				// AST REWRITE
				// elements: unaryNotExpr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 832:29: -> unaryNotExpr
				{
					DebugLocation(832, 32);
					adaptor.AddChild(root_0, stream_unaryNotExpr.NextTree());

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("unaryExpr", 58);
			LeaveRule("unaryExpr", 58);
			LeaveRule_unaryExpr();
		}
		DebugLocation(833, 1);
		} finally { DebugExitRule(GrammarFileName, "unaryExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "unaryExpr"

	private sealed partial class unaryNotExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public unaryNotExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_unaryNotExpr();
	partial void LeaveRule_unaryNotExpr();

	// $ANTLR start "unaryNotExpr"
	// MySQL51Parser.g3:835:1: unaryNotExpr : (op= NOT_OP lhs= unaryNotExpr -> ^( NOT_OP $lhs) |lhsBin= binaryCollateExpr -> binaryCollateExpr );
	[GrammarRule("unaryNotExpr")]
	private MySQL51Parser.unaryNotExpr_return unaryNotExpr()
	{
		EnterRule_unaryNotExpr();
		EnterRule("unaryNotExpr", 59);
		TraceIn("unaryNotExpr", 59);
		MySQL51Parser.unaryNotExpr_return retval = new MySQL51Parser.unaryNotExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken op = default(IToken);
		MySQL51Parser.unaryNotExpr_return lhs = default(MySQL51Parser.unaryNotExpr_return);
		MySQL51Parser.binaryCollateExpr_return lhsBin = default(MySQL51Parser.binaryCollateExpr_return);

		object op_tree = default(object);
		RewriteRuleITokenStream stream_NOT_OP=new RewriteRuleITokenStream(adaptor,"token NOT_OP");
		RewriteRuleSubtreeStream stream_unaryNotExpr=new RewriteRuleSubtreeStream(adaptor,"rule unaryNotExpr");
		RewriteRuleSubtreeStream stream_binaryCollateExpr=new RewriteRuleSubtreeStream(adaptor,"rule binaryCollateExpr");
		try { DebugEnterRule(GrammarFileName, "unaryNotExpr");
		DebugLocation(835, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:836:2: (op= NOT_OP lhs= unaryNotExpr -> ^( NOT_OP $lhs) |lhsBin= binaryCollateExpr -> binaryCollateExpr )
			int alt144=2;
			try { DebugEnterDecision(144, false);
			int LA144_0 = input.LA(1);

			if ((LA144_0==NOT_OP))
			{
				alt144 = 1;
			}
			else if ((LA144_0==ACTION||(LA144_0>=ADDDATE && LA144_0<=ALGORITHM)||LA144_0==ANY||LA144_0==ASCII||(LA144_0>=AT && LA144_0<=BACKUP)||LA144_0==BEGIN||(LA144_0>=BINARY && LA144_0<=BIT)||(LA144_0>=BIT_AND && LA144_0<=BIT_XOR)||(LA144_0>=BLOCK && LA144_0<=BOOLEAN)||LA144_0==BTREE||(LA144_0>=BYTE && LA144_0<=CACHE)||LA144_0==CASCADED||(LA144_0>=CAST && LA144_0<=CHAIN)||(LA144_0>=CHANGED && LA144_0<=CHAR)||LA144_0==CHARSET||(LA144_0>=CHECKSUM && LA144_0<=COLLATION)||LA144_0==COLUMNS||LA144_0==COMMENT||(LA144_0>=COMMIT && LA144_0<=CONCURRENT)||(LA144_0>=CONNECTION && LA144_0<=CONSISTENT)||(LA144_0>=CONTAINS && LA144_0<=CONTEXT)||LA144_0==CONTRIBUTORS||(LA144_0>=COUNT && LA144_0<=CPU)||(LA144_0>=CUBE && LA144_0<=CURRENT_USER)||LA144_0==CURTIME||(LA144_0>=DATA && LA144_0<=DATABASE)||(LA144_0>=DATAFILE && LA144_0<=DATE_ADD)||LA144_0==DATE_SUB||LA144_0==DAY||LA144_0==DEALLOCATE||LA144_0==DEFINER||LA144_0==DELAY_KEY_WRITE||LA144_0==DES_KEY_FILE||(LA144_0>=DIRECTORY && LA144_0<=DISK)||LA144_0==DO||(LA144_0>=DUMPFILE && LA144_0<=DYNAMIC)||LA144_0==ENABLE||(LA144_0>=END && LA144_0<=ENUM)||(LA144_0>=ERRORS && LA144_0<=ESCAPE)||(LA144_0>=EVENT && LA144_0<=EXISTS)||LA144_0==EXPANSION||(LA144_0>=EXTENDED && LA144_0<=FAULTS)||(LA144_0>=FIELDS && LA144_0<=FIXED)||LA144_0==FLUSH||(LA144_0>=FOUND && LA144_0<=FRAC_SECOND)||LA144_0==FULL||(LA144_0>=FUNCTION && LA144_0<=GLOBAL_VARIABLE)||LA144_0==GRANTS||(LA144_0>=GROUP && LA144_0<=HASH)||(LA144_0>=HELP && LA144_0<=HEXA_VALUE)||(LA144_0>=HOST && LA144_0<=HOUR)||(LA144_0>=ID && LA144_0<=IF)||LA144_0==IMPORT||LA144_0==INDEXES||LA144_0==INITIAL_SIZE||LA144_0==INNOBASE||(LA144_0>=INSERT && LA144_0<=INSTALL)||LA144_0==INTERVAL||(LA144_0>=INVOKER && LA144_0<=IPC)||(LA144_0>=ISOLATION && LA144_0<=ISSUER)||LA144_0==KEY_BLOCK_SIZE||(LA144_0>=LABEL && LA144_0<=LAST)||(LA144_0>=LEAVES && LA144_0<=LEFT)||LA144_0==LESS||LA144_0==LEVEL||(LA144_0>=LINESTRING && LA144_0<=LIST)||LA144_0==LOCAL||(LA144_0>=LOCKS && LA144_0<=LOGFILE)||LA144_0==LOGS||(LA144_0>=LPAREN && LA144_0<=MASTER_SSL_KEY)||LA144_0==MASTER_USER||(LA144_0>=MAX && LA144_0<=MEDIUM)||(LA144_0>=MEMORY && LA144_0<=MID)||(LA144_0>=MIGRATE && LA144_0<=MIN)||LA144_0==MINUTE||(LA144_0>=MIN_ROWS && LA144_0<=MODE)||LA144_0==MODIFY||LA144_0==MONTH||(LA144_0>=MULTILINESTRING && LA144_0<=NATIONAL)||(LA144_0>=NCHAR && LA144_0<=NONE)||(LA144_0>=NOW && LA144_0<=NO_WAIT)||LA144_0==NULL||LA144_0==NUMBER||(LA144_0>=NVARCHAR && LA144_0<=OLD_PASSWORD)||(LA144_0>=ONE && LA144_0<=OPEN)||LA144_0==OPTIONS||(LA144_0>=OWNER && LA144_0<=PLUGINS)||(LA144_0>=POINT && LA144_0<=POSITION)||(LA144_0>=PREPARE && LA144_0<=PREV)||LA144_0==PRIVILEGES||(LA144_0>=PROCESS && LA144_0<=PROFILES)||(LA144_0>=QUARTER && LA144_0<=QUICK)||(LA144_0>=REBUILD && LA144_0<=REDUNDANT)||(LA144_0>=RELAY_LOG_FILE && LA144_0<=RELAY_THREAD)||(LA144_0>=RELOAD && LA144_0<=REMOVE)||(LA144_0>=REORGANIZE && LA144_0<=REPLICATION)||(LA144_0>=RESET && LA144_0<=RESTORE)||LA144_0==RESUME||LA144_0==RETURNS||LA144_0==RIGHT||(LA144_0>=ROLLBACK && LA144_0<=ROW_FORMAT)||(LA144_0>=RTREE && LA144_0<=SCHEDULE)||LA144_0==SECOND||LA144_0==SECURITY||(LA144_0>=SERIAL && LA144_0<=SESSION_VARIABLE)||LA144_0==SHARE||(LA144_0>=SHUTDOWN && LA144_0<=SLAVE)||(LA144_0>=SNAPSHOT && LA144_0<=SOCKET)||(LA144_0>=SONAME && LA144_0<=SOURCE)||(LA144_0>=SQL_BUFFER_RESULT && LA144_0<=SQL_CACHE)||LA144_0==SQL_NO_CACHE||LA144_0==SQL_THREAD||LA144_0==START||(LA144_0>=STARTS && LA144_0<=STORAGE)||(LA144_0>=STRING && LA144_0<=SYSTEM_USER)||(LA144_0>=TABLES && LA144_0<=TEMPTABLE)||(LA144_0>=TEXT && LA144_0<=THAN)||(LA144_0>=TIME && LA144_0<=TIMESTAMP_DIFF)||(LA144_0>=TRANSACTION && LA144_0<=TRANSACTIONAL)||(LA144_0>=TRIGGERS && LA144_0<=UNDEFINED)||(LA144_0>=UNDOFILE && LA144_0<=UNINSTALL)||LA144_0==UNKNOWN||LA144_0==UNTIL||LA144_0==UPGRADE||LA144_0==USER||LA144_0==USE_FRM||(LA144_0>=UTC_DATE && LA144_0<=VALUE)||LA144_0==VALUE_PLACEHOLDER||(LA144_0>=VARIABLES && LA144_0<=VARIANCE)||(LA144_0>=VAR_POP && LA144_0<=WEEK)||(LA144_0>=WORK && LA144_0<=WRAPPER)||(LA144_0>=X509 && LA144_0<=XA)||LA144_0==YEAR||LA144_0==CONCAT))
			{
				alt144 = 2;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 144, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(144); }
			switch (alt144)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:836:4: op= NOT_OP lhs= unaryNotExpr
				{
				DebugLocation(836, 6);
				op=(IToken)Match(input,NOT_OP,Follow._NOT_OP_in_unaryNotExpr7265); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_NOT_OP.Add(op);

				DebugLocation(836, 17);
				PushFollow(Follow._unaryNotExpr_in_unaryNotExpr7269);
				lhs=unaryNotExpr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_unaryNotExpr.Add(lhs.Tree);


				{
				// AST REWRITE
				// elements: NOT_OP, lhs
				// token labels: 
				// rule labels: lhs, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_lhs=new RewriteRuleSubtreeStream(adaptor,"rule lhs",lhs!=null?lhs.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 836:31: -> ^( NOT_OP $lhs)
				{
					DebugLocation(836, 34);
					// MySQL51Parser.g3:836:34: ^( NOT_OP $lhs)
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(836, 36);
					root_1 = (object)adaptor.BecomeRoot(stream_NOT_OP.NextNode(), root_1);

					DebugLocation(836, 44);
					adaptor.AddChild(root_1, stream_lhs.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:837:4: lhsBin= binaryCollateExpr
				{
				DebugLocation(837, 10);
				PushFollow(Follow._binaryCollateExpr_in_unaryNotExpr7285);
				lhsBin=binaryCollateExpr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_binaryCollateExpr.Add(lhsBin.Tree);


				{
				// AST REWRITE
				// elements: binaryCollateExpr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 837:29: -> binaryCollateExpr
				{
					DebugLocation(837, 32);
					adaptor.AddChild(root_0, stream_binaryCollateExpr.NextTree());

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("unaryNotExpr", 59);
			LeaveRule("unaryNotExpr", 59);
			LeaveRule_unaryNotExpr();
		}
		DebugLocation(838, 1);
		} finally { DebugExitRule(GrammarFileName, "unaryNotExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "unaryNotExpr"

	private sealed partial class binaryCollateExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public binaryCollateExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_binaryCollateExpr();
	partial void LeaveRule_binaryCollateExpr();

	// $ANTLR start "binaryCollateExpr"
	// MySQL51Parser.g3:840:1: binaryCollateExpr : (op= BINARY lhs= binaryCollateExpr -> ^( BINARY $lhs) |op= COLLATE lhs= binaryCollateExpr -> ^( COLLATE $lhs) | intervalExpr );
	[GrammarRule("binaryCollateExpr")]
	private MySQL51Parser.binaryCollateExpr_return binaryCollateExpr()
	{
		EnterRule_binaryCollateExpr();
		EnterRule("binaryCollateExpr", 60);
		TraceIn("binaryCollateExpr", 60);
		MySQL51Parser.binaryCollateExpr_return retval = new MySQL51Parser.binaryCollateExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken op = default(IToken);
		MySQL51Parser.binaryCollateExpr_return lhs = default(MySQL51Parser.binaryCollateExpr_return);
		MySQL51Parser.intervalExpr_return intervalExpr302 = default(MySQL51Parser.intervalExpr_return);

		object op_tree = default(object);
		RewriteRuleITokenStream stream_BINARY=new RewriteRuleITokenStream(adaptor,"token BINARY");
		RewriteRuleITokenStream stream_COLLATE=new RewriteRuleITokenStream(adaptor,"token COLLATE");
		RewriteRuleSubtreeStream stream_binaryCollateExpr=new RewriteRuleSubtreeStream(adaptor,"rule binaryCollateExpr");
		try { DebugEnterRule(GrammarFileName, "binaryCollateExpr");
		DebugLocation(840, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:841:2: (op= BINARY lhs= binaryCollateExpr -> ^( BINARY $lhs) |op= COLLATE lhs= binaryCollateExpr -> ^( COLLATE $lhs) | intervalExpr )
			int alt145=3;
			try { DebugEnterDecision(145, false);
			int LA145_0 = input.LA(1);

			if ((LA145_0==BINARY))
			{
				alt145 = 1;
			}
			else if ((LA145_0==COLLATE))
			{
				alt145 = 2;
			}
			else if ((LA145_0==ACTION||(LA145_0>=ADDDATE && LA145_0<=ALGORITHM)||LA145_0==ANY||LA145_0==ASCII||(LA145_0>=AT && LA145_0<=BACKUP)||LA145_0==BEGIN||(LA145_0>=BINARY_VALUE && LA145_0<=BIT)||(LA145_0>=BIT_AND && LA145_0<=BIT_XOR)||(LA145_0>=BLOCK && LA145_0<=BOOLEAN)||LA145_0==BTREE||(LA145_0>=BYTE && LA145_0<=CACHE)||LA145_0==CASCADED||(LA145_0>=CAST && LA145_0<=CHAIN)||(LA145_0>=CHANGED && LA145_0<=CHAR)||LA145_0==CHARSET||(LA145_0>=CHECKSUM && LA145_0<=CODE)||LA145_0==COLLATION||LA145_0==COLUMNS||LA145_0==COMMENT||(LA145_0>=COMMIT && LA145_0<=CONCURRENT)||(LA145_0>=CONNECTION && LA145_0<=CONSISTENT)||(LA145_0>=CONTAINS && LA145_0<=CONTEXT)||LA145_0==CONTRIBUTORS||(LA145_0>=COUNT && LA145_0<=CPU)||(LA145_0>=CUBE && LA145_0<=CURRENT_USER)||LA145_0==CURTIME||(LA145_0>=DATA && LA145_0<=DATABASE)||(LA145_0>=DATAFILE && LA145_0<=DATE_ADD)||LA145_0==DATE_SUB||LA145_0==DAY||LA145_0==DEALLOCATE||LA145_0==DEFINER||LA145_0==DELAY_KEY_WRITE||LA145_0==DES_KEY_FILE||(LA145_0>=DIRECTORY && LA145_0<=DISK)||LA145_0==DO||(LA145_0>=DUMPFILE && LA145_0<=DYNAMIC)||LA145_0==ENABLE||(LA145_0>=END && LA145_0<=ENUM)||(LA145_0>=ERRORS && LA145_0<=ESCAPE)||(LA145_0>=EVENT && LA145_0<=EXISTS)||LA145_0==EXPANSION||(LA145_0>=EXTENDED && LA145_0<=FAULTS)||(LA145_0>=FIELDS && LA145_0<=FIXED)||LA145_0==FLUSH||(LA145_0>=FOUND && LA145_0<=FRAC_SECOND)||LA145_0==FULL||(LA145_0>=FUNCTION && LA145_0<=GLOBAL_VARIABLE)||LA145_0==GRANTS||(LA145_0>=GROUP && LA145_0<=HASH)||(LA145_0>=HELP && LA145_0<=HEXA_VALUE)||(LA145_0>=HOST && LA145_0<=HOUR)||(LA145_0>=ID && LA145_0<=IF)||LA145_0==IMPORT||LA145_0==INDEXES||LA145_0==INITIAL_SIZE||LA145_0==INNOBASE||(LA145_0>=INSERT && LA145_0<=INSTALL)||LA145_0==INTERVAL||(LA145_0>=INVOKER && LA145_0<=IPC)||(LA145_0>=ISOLATION && LA145_0<=ISSUER)||LA145_0==KEY_BLOCK_SIZE||(LA145_0>=LABEL && LA145_0<=LAST)||(LA145_0>=LEAVES && LA145_0<=LEFT)||LA145_0==LESS||LA145_0==LEVEL||(LA145_0>=LINESTRING && LA145_0<=LIST)||LA145_0==LOCAL||(LA145_0>=LOCKS && LA145_0<=LOGFILE)||LA145_0==LOGS||(LA145_0>=LPAREN && LA145_0<=MASTER_SSL_KEY)||LA145_0==MASTER_USER||(LA145_0>=MAX && LA145_0<=MEDIUM)||(LA145_0>=MEMORY && LA145_0<=MID)||(LA145_0>=MIGRATE && LA145_0<=MIN)||LA145_0==MINUTE||(LA145_0>=MIN_ROWS && LA145_0<=MODE)||LA145_0==MODIFY||LA145_0==MONTH||(LA145_0>=MULTILINESTRING && LA145_0<=NATIONAL)||(LA145_0>=NCHAR && LA145_0<=NONE)||(LA145_0>=NOW && LA145_0<=NO_WAIT)||LA145_0==NULL||LA145_0==NUMBER||(LA145_0>=NVARCHAR && LA145_0<=OLD_PASSWORD)||(LA145_0>=ONE && LA145_0<=OPEN)||LA145_0==OPTIONS||(LA145_0>=OWNER && LA145_0<=PLUGINS)||(LA145_0>=POINT && LA145_0<=POSITION)||(LA145_0>=PREPARE && LA145_0<=PREV)||LA145_0==PRIVILEGES||(LA145_0>=PROCESS && LA145_0<=PROFILES)||(LA145_0>=QUARTER && LA145_0<=QUICK)||(LA145_0>=REBUILD && LA145_0<=REDUNDANT)||(LA145_0>=RELAY_LOG_FILE && LA145_0<=RELAY_THREAD)||(LA145_0>=RELOAD && LA145_0<=REMOVE)||(LA145_0>=REORGANIZE && LA145_0<=REPLICATION)||(LA145_0>=RESET && LA145_0<=RESTORE)||LA145_0==RESUME||LA145_0==RETURNS||LA145_0==RIGHT||(LA145_0>=ROLLBACK && LA145_0<=ROW_FORMAT)||(LA145_0>=RTREE && LA145_0<=SCHEDULE)||LA145_0==SECOND||LA145_0==SECURITY||(LA145_0>=SERIAL && LA145_0<=SESSION_VARIABLE)||LA145_0==SHARE||(LA145_0>=SHUTDOWN && LA145_0<=SLAVE)||(LA145_0>=SNAPSHOT && LA145_0<=SOCKET)||(LA145_0>=SONAME && LA145_0<=SOURCE)||(LA145_0>=SQL_BUFFER_RESULT && LA145_0<=SQL_CACHE)||LA145_0==SQL_NO_CACHE||LA145_0==SQL_THREAD||LA145_0==START||(LA145_0>=STARTS && LA145_0<=STORAGE)||(LA145_0>=STRING && LA145_0<=SYSTEM_USER)||(LA145_0>=TABLES && LA145_0<=TEMPTABLE)||(LA145_0>=TEXT && LA145_0<=THAN)||(LA145_0>=TIME && LA145_0<=TIMESTAMP_DIFF)||(LA145_0>=TRANSACTION && LA145_0<=TRANSACTIONAL)||(LA145_0>=TRIGGERS && LA145_0<=UNDEFINED)||(LA145_0>=UNDOFILE && LA145_0<=UNINSTALL)||LA145_0==UNKNOWN||LA145_0==UNTIL||LA145_0==UPGRADE||LA145_0==USER||LA145_0==USE_FRM||(LA145_0>=UTC_DATE && LA145_0<=VALUE)||LA145_0==VALUE_PLACEHOLDER||(LA145_0>=VARIABLES && LA145_0<=VARIANCE)||(LA145_0>=VAR_POP && LA145_0<=WEEK)||(LA145_0>=WORK && LA145_0<=WRAPPER)||(LA145_0>=X509 && LA145_0<=XA)||LA145_0==YEAR||LA145_0==CONCAT))
			{
				alt145 = 3;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 145, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(145); }
			switch (alt145)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:841:4: op= BINARY lhs= binaryCollateExpr
				{
				DebugLocation(841, 6);
				op=(IToken)Match(input,BINARY,Follow._BINARY_in_binaryCollateExpr7302); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_BINARY.Add(op);

				DebugLocation(841, 17);
				PushFollow(Follow._binaryCollateExpr_in_binaryCollateExpr7306);
				lhs=binaryCollateExpr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_binaryCollateExpr.Add(lhs.Tree);


				{
				// AST REWRITE
				// elements: BINARY, lhs
				// token labels: 
				// rule labels: lhs, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_lhs=new RewriteRuleSubtreeStream(adaptor,"rule lhs",lhs!=null?lhs.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 841:37: -> ^( BINARY $lhs)
				{
					DebugLocation(841, 40);
					// MySQL51Parser.g3:841:40: ^( BINARY $lhs)
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(841, 42);
					root_1 = (object)adaptor.BecomeRoot(stream_BINARY.NextNode(), root_1);

					DebugLocation(841, 50);
					adaptor.AddChild(root_1, stream_lhs.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:842:4: op= COLLATE lhs= binaryCollateExpr
				{
				DebugLocation(842, 6);
				op=(IToken)Match(input,COLLATE,Follow._COLLATE_in_binaryCollateExpr7323); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COLLATE.Add(op);

				DebugLocation(842, 18);
				PushFollow(Follow._binaryCollateExpr_in_binaryCollateExpr7327);
				lhs=binaryCollateExpr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_binaryCollateExpr.Add(lhs.Tree);


				{
				// AST REWRITE
				// elements: COLLATE, lhs
				// token labels: 
				// rule labels: lhs, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_lhs=new RewriteRuleSubtreeStream(adaptor,"rule lhs",lhs!=null?lhs.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 842:37: -> ^( COLLATE $lhs)
				{
					DebugLocation(842, 40);
					// MySQL51Parser.g3:842:40: ^( COLLATE $lhs)
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(842, 42);
					root_1 = (object)adaptor.BecomeRoot(stream_COLLATE.NextNode(), root_1);

					DebugLocation(842, 51);
					adaptor.AddChild(root_1, stream_lhs.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:843:4: intervalExpr
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(843, 4);
				PushFollow(Follow._intervalExpr_in_binaryCollateExpr7341);
				intervalExpr302=intervalExpr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, intervalExpr302.Tree);

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("binaryCollateExpr", 60);
			LeaveRule("binaryCollateExpr", 60);
			LeaveRule_binaryCollateExpr();
		}
		DebugLocation(844, 1);
		} finally { DebugExitRule(GrammarFileName, "binaryCollateExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "binaryCollateExpr"

	private sealed partial class intervalExpr_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public intervalExpr_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_intervalExpr();
	partial void LeaveRule_intervalExpr();

	// $ANTLR start "intervalExpr"
	// MySQL51Parser.g3:850:1: intervalExpr : ( ( INTERVAL ~ ( LPAREN ) )=> INTERVAL expr timeUnit {...}? -> ^( INTERVAL expr timeUnit ) |lhsPrim= primary -> primary );
	[GrammarRule("intervalExpr")]
	private MySQL51Parser.intervalExpr_return intervalExpr()
	{
		EnterRule_intervalExpr();
		EnterRule("intervalExpr", 61);
		TraceIn("intervalExpr", 61);
		MySQL51Parser.intervalExpr_return retval = new MySQL51Parser.intervalExpr_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken INTERVAL303 = default(IToken);
		MySQL51Parser.primary_return lhsPrim = default(MySQL51Parser.primary_return);
		MySQL51Parser.expr_return expr304 = default(MySQL51Parser.expr_return);
		MySQL51Parser.timeUnit_return timeUnit305 = default(MySQL51Parser.timeUnit_return);

		object INTERVAL303_tree = default(object);
		RewriteRuleITokenStream stream_INTERVAL=new RewriteRuleITokenStream(adaptor,"token INTERVAL");
		RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr");
		RewriteRuleSubtreeStream stream_timeUnit=new RewriteRuleSubtreeStream(adaptor,"rule timeUnit");
		RewriteRuleSubtreeStream stream_primary=new RewriteRuleSubtreeStream(adaptor,"rule primary");
		try { DebugEnterRule(GrammarFileName, "intervalExpr");
		DebugLocation(850, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:851:2: ( ( INTERVAL ~ ( LPAREN ) )=> INTERVAL expr timeUnit {...}? -> ^( INTERVAL expr timeUnit ) |lhsPrim= primary -> primary )
			int alt146=2;
			try { DebugEnterDecision(146, false);
			try
			{
				alt146 = dfa146.Predict(input);
			}
			catch (NoViableAltException nvae)
			{
				DebugRecognitionException(nvae);
				throw;
			}
			} finally { DebugExitDecision(146); }
			switch (alt146)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:851:4: ( INTERVAL ~ ( LPAREN ) )=> INTERVAL expr timeUnit {...}?
				{
				DebugLocation(851, 27);
				INTERVAL303=(IToken)Match(input,INTERVAL,Follow._INTERVAL_in_intervalExpr7364); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_INTERVAL.Add(INTERVAL303);

				DebugLocation(851, 36);
				PushFollow(Follow._expr_in_intervalExpr7366);
				expr304=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr304.Tree);
				DebugLocation(851, 41);
				PushFollow(Follow._timeUnit_in_intervalExpr7368);
				timeUnit305=timeUnit();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_timeUnit.Add(timeUnit305.Tree);
				DebugLocation(851, 50);
				if (!(EvalPredicate(input.LA(1) == PLUS || input.LA(1) == MINUS, "input.LA(1) == PLUS || input.LA(1) == MINUS")))
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					throw new FailedPredicateException(input, "intervalExpr", "input.LA(1) == PLUS || input.LA(1) == MINUS");
				}


				{
				// AST REWRITE
				// elements: INTERVAL, expr, timeUnit
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 851:97: -> ^( INTERVAL expr timeUnit )
				{
					DebugLocation(851, 100);
					// MySQL51Parser.g3:851:100: ^( INTERVAL expr timeUnit )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(851, 102);
					root_1 = (object)adaptor.BecomeRoot(stream_INTERVAL.NextNode(), root_1);

					DebugLocation(851, 111);
					adaptor.AddChild(root_1, stream_expr.NextTree());
					DebugLocation(851, 116);
					adaptor.AddChild(root_1, stream_timeUnit.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:852:4: lhsPrim= primary
				{
				DebugLocation(852, 11);
				PushFollow(Follow._primary_in_intervalExpr7387);
				lhsPrim=primary();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_primary.Add(lhsPrim.Tree);


				{
				// AST REWRITE
				// elements: primary
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 852:20: -> primary
				{
					DebugLocation(852, 23);
					adaptor.AddChild(root_0, stream_primary.NextTree());

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("intervalExpr", 61);
			LeaveRule("intervalExpr", 61);
			LeaveRule_intervalExpr();
		}
		DebugLocation(853, 1);
		} finally { DebugExitRule(GrammarFileName, "intervalExpr"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "intervalExpr"

	private sealed partial class primary_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public primary_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_primary();
	partial void LeaveRule_primary();

	// $ANTLR start "primary"
	// MySQL51Parser.g3:855:1: primary : (lhsParen= parenExpr -> parenExpr |lhsLit= literal -> literal | subselect -> subselect | EXISTS subselect -> ^( EXISTS subselect ) );
	[GrammarRule("primary")]
	private MySQL51Parser.primary_return primary()
	{
		EnterRule_primary();
		EnterRule("primary", 62);
		TraceIn("primary", 62);
		MySQL51Parser.primary_return retval = new MySQL51Parser.primary_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken EXISTS307 = default(IToken);
		MySQL51Parser.parenExpr_return lhsParen = default(MySQL51Parser.parenExpr_return);
		MySQL51Parser.literal_return lhsLit = default(MySQL51Parser.literal_return);
		MySQL51Parser.subselect_return subselect306 = default(MySQL51Parser.subselect_return);
		MySQL51Parser.subselect_return subselect308 = default(MySQL51Parser.subselect_return);

		object EXISTS307_tree = default(object);
		RewriteRuleITokenStream stream_EXISTS=new RewriteRuleITokenStream(adaptor,"token EXISTS");
		RewriteRuleSubtreeStream stream_parenExpr=new RewriteRuleSubtreeStream(adaptor,"rule parenExpr");
		RewriteRuleSubtreeStream stream_literal=new RewriteRuleSubtreeStream(adaptor,"rule literal");
		RewriteRuleSubtreeStream stream_subselect=new RewriteRuleSubtreeStream(adaptor,"rule subselect");
		try { DebugEnterRule(GrammarFileName, "primary");
		DebugLocation(855, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:856:2: (lhsParen= parenExpr -> parenExpr |lhsLit= literal -> literal | subselect -> subselect | EXISTS subselect -> ^( EXISTS subselect ) )
			int alt147=4;
			try { DebugEnterDecision(147, false);
			int LA147_0 = input.LA(1);

			if ((LA147_0==LPAREN))
			{
				int LA147_1 = input.LA(2);

				if ((LA147_1==ACTION||(LA147_1>=ADDDATE && LA147_1<=ALGORITHM)||LA147_1==ANY||LA147_1==ASCII||(LA147_1>=AT && LA147_1<=BACKUP)||LA147_1==BEGIN||(LA147_1>=BINARY && LA147_1<=BIT)||LA147_1==BITWISE_INVERSION||(LA147_1>=BIT_AND && LA147_1<=BIT_XOR)||(LA147_1>=BLOCK && LA147_1<=BOOLEAN)||LA147_1==BTREE||(LA147_1>=BYTE && LA147_1<=CACHE)||LA147_1==CASCADED||(LA147_1>=CAST && LA147_1<=CHAIN)||(LA147_1>=CHANGED && LA147_1<=CHAR)||LA147_1==CHARSET||(LA147_1>=CHECKSUM && LA147_1<=COLLATION)||LA147_1==COLUMNS||LA147_1==COMMENT||(LA147_1>=COMMIT && LA147_1<=CONCURRENT)||(LA147_1>=CONNECTION && LA147_1<=CONSISTENT)||(LA147_1>=CONTAINS && LA147_1<=CONTEXT)||LA147_1==CONTRIBUTORS||(LA147_1>=COUNT && LA147_1<=CPU)||(LA147_1>=CUBE && LA147_1<=CURRENT_USER)||LA147_1==CURTIME||(LA147_1>=DATA && LA147_1<=DATABASE)||(LA147_1>=DATAFILE && LA147_1<=DATE_ADD)||LA147_1==DATE_SUB||LA147_1==DAY||LA147_1==DEALLOCATE||LA147_1==DEFINER||LA147_1==DELAY_KEY_WRITE||LA147_1==DES_KEY_FILE||(LA147_1>=DIRECTORY && LA147_1<=DISK)||LA147_1==DO||(LA147_1>=DUMPFILE && LA147_1<=DYNAMIC)||LA147_1==ENABLE||(LA147_1>=END && LA147_1<=ENUM)||(LA147_1>=ERRORS && LA147_1<=ESCAPE)||(LA147_1>=EVENT && LA147_1<=EXISTS)||LA147_1==EXPANSION||(LA147_1>=EXTENDED && LA147_1<=FAULTS)||(LA147_1>=FIELDS && LA147_1<=FIXED)||LA147_1==FLUSH||(LA147_1>=FOUND && LA147_1<=FRAC_SECOND)||LA147_1==FULL||(LA147_1>=FUNCTION && LA147_1<=GLOBAL_VARIABLE)||LA147_1==GRANTS||(LA147_1>=GROUP && LA147_1<=HASH)||(LA147_1>=HELP && LA147_1<=HEXA_VALUE)||(LA147_1>=HOST && LA147_1<=HOUR)||(LA147_1>=ID && LA147_1<=IF)||LA147_1==IMPORT||LA147_1==INDEXES||LA147_1==INITIAL_SIZE||LA147_1==INNOBASE||(LA147_1>=INSERT && LA147_1<=INSTALL)||LA147_1==INTERVAL||(LA147_1>=INVOKER && LA147_1<=IPC)||(LA147_1>=ISOLATION && LA147_1<=ISSUER)||LA147_1==KEY_BLOCK_SIZE||(LA147_1>=LABEL && LA147_1<=LAST)||(LA147_1>=LEAVES && LA147_1<=LEFT)||LA147_1==LESS||LA147_1==LEVEL||(LA147_1>=LINESTRING && LA147_1<=LIST)||LA147_1==LOCAL||(LA147_1>=LOCKS && LA147_1<=LOGFILE)||LA147_1==LOGS||(LA147_1>=LPAREN && LA147_1<=MASTER_SSL_KEY)||LA147_1==MASTER_USER||(LA147_1>=MAX && LA147_1<=MEDIUM)||(LA147_1>=MEMORY && LA147_1<=MID)||(LA147_1>=MIGRATE && LA147_1<=MINUTE)||(LA147_1>=MIN_ROWS && LA147_1<=MODE)||LA147_1==MODIFY||LA147_1==MONTH||(LA147_1>=MULTILINESTRING && LA147_1<=NATIONAL)||(LA147_1>=NCHAR && LA147_1<=NOT)||(LA147_1>=NOT_OP && LA147_1<=NO_WAIT)||LA147_1==NULL||LA147_1==NUMBER||(LA147_1>=NVARCHAR && LA147_1<=OLD_PASSWORD)||(LA147_1>=ONE && LA147_1<=OPEN)||LA147_1==OPTIONS||(LA147_1>=OWNER && LA147_1<=POSITION)||(LA147_1>=PREPARE && LA147_1<=PREV)||LA147_1==PRIVILEGES||(LA147_1>=PROCESS && LA147_1<=PROFILES)||(LA147_1>=QUARTER && LA147_1<=QUICK)||(LA147_1>=REBUILD && LA147_1<=REDUNDANT)||(LA147_1>=RELAY_LOG_FILE && LA147_1<=RELAY_THREAD)||(LA147_1>=RELOAD && LA147_1<=REMOVE)||(LA147_1>=REORGANIZE && LA147_1<=REPLICATION)||(LA147_1>=RESET && LA147_1<=RESTORE)||LA147_1==RESUME||LA147_1==RETURNS||LA147_1==RIGHT||(LA147_1>=ROLLBACK && LA147_1<=ROW_FORMAT)||(LA147_1>=RTREE && LA147_1<=SCHEDULE)||LA147_1==SECOND||LA147_1==SECURITY||(LA147_1>=SERIAL && LA147_1<=SESSION_VARIABLE)||LA147_1==SHARE||(LA147_1>=SHUTDOWN && LA147_1<=SLAVE)||(LA147_1>=SNAPSHOT && LA147_1<=SOCKET)||(LA147_1>=SONAME && LA147_1<=SOURCE)||(LA147_1>=SQL_BUFFER_RESULT && LA147_1<=SQL_CACHE)||LA147_1==SQL_NO_CACHE||LA147_1==SQL_THREAD||LA147_1==START||(LA147_1>=STARTS && LA147_1<=STORAGE)||(LA147_1>=STRING && LA147_1<=SYSTEM_USER)||(LA147_1>=TABLES && LA147_1<=TEMPTABLE)||(LA147_1>=TEXT && LA147_1<=THAN)||(LA147_1>=TIME && LA147_1<=TIMESTAMP_DIFF)||(LA147_1>=TRANSACTION && LA147_1<=TRANSACTIONAL)||(LA147_1>=TRIGGERS && LA147_1<=UNDEFINED)||(LA147_1>=UNDOFILE && LA147_1<=UNINSTALL)||LA147_1==UNKNOWN||LA147_1==UNTIL||LA147_1==UPGRADE||LA147_1==USER||LA147_1==USE_FRM||(LA147_1>=UTC_DATE && LA147_1<=VALUE)||LA147_1==VALUE_PLACEHOLDER||(LA147_1>=VARIABLES && LA147_1<=VARIANCE)||(LA147_1>=VAR_POP && LA147_1<=WEEK)||(LA147_1>=WORK && LA147_1<=WRAPPER)||(LA147_1>=X509 && LA147_1<=XA)||LA147_1==YEAR||LA147_1==CONCAT))
				{
					alt147 = 1;
				}
				else if ((LA147_1==SELECT))
				{
					alt147 = 3;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 147, 1, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}
			else if ((LA147_0==ACTION||(LA147_0>=ADDDATE && LA147_0<=ALGORITHM)||LA147_0==ANY||LA147_0==ASCII||(LA147_0>=AT && LA147_0<=BACKUP)||LA147_0==BEGIN||(LA147_0>=BINARY_VALUE && LA147_0<=BIT)||(LA147_0>=BIT_AND && LA147_0<=BIT_XOR)||(LA147_0>=BLOCK && LA147_0<=BOOLEAN)||LA147_0==BTREE||(LA147_0>=BYTE && LA147_0<=CACHE)||LA147_0==CASCADED||(LA147_0>=CAST && LA147_0<=CHAIN)||(LA147_0>=CHANGED && LA147_0<=CHAR)||LA147_0==CHARSET||(LA147_0>=CHECKSUM && LA147_0<=CODE)||LA147_0==COLLATION||LA147_0==COLUMNS||LA147_0==COMMENT||(LA147_0>=COMMIT && LA147_0<=CONCURRENT)||(LA147_0>=CONNECTION && LA147_0<=CONSISTENT)||(LA147_0>=CONTAINS && LA147_0<=CONTEXT)||LA147_0==CONTRIBUTORS||(LA147_0>=COUNT && LA147_0<=CPU)||(LA147_0>=CUBE && LA147_0<=CURRENT_USER)||LA147_0==CURTIME||(LA147_0>=DATA && LA147_0<=DATABASE)||(LA147_0>=DATAFILE && LA147_0<=DATE_ADD)||LA147_0==DATE_SUB||LA147_0==DAY||LA147_0==DEALLOCATE||LA147_0==DEFINER||LA147_0==DELAY_KEY_WRITE||LA147_0==DES_KEY_FILE||(LA147_0>=DIRECTORY && LA147_0<=DISK)||LA147_0==DO||(LA147_0>=DUMPFILE && LA147_0<=DYNAMIC)||LA147_0==ENABLE||(LA147_0>=END && LA147_0<=ENUM)||(LA147_0>=ERRORS && LA147_0<=ESCAPE)||(LA147_0>=EVENT && LA147_0<=EXECUTE)||LA147_0==EXPANSION||(LA147_0>=EXTENDED && LA147_0<=FAULTS)||(LA147_0>=FIELDS && LA147_0<=FIXED)||LA147_0==FLUSH||(LA147_0>=FOUND && LA147_0<=FRAC_SECOND)||LA147_0==FULL||(LA147_0>=FUNCTION && LA147_0<=GLOBAL_VARIABLE)||LA147_0==GRANTS||(LA147_0>=GROUP && LA147_0<=HASH)||(LA147_0>=HELP && LA147_0<=HEXA_VALUE)||(LA147_0>=HOST && LA147_0<=HOUR)||(LA147_0>=ID && LA147_0<=IF)||LA147_0==IMPORT||LA147_0==INDEXES||LA147_0==INITIAL_SIZE||LA147_0==INNOBASE||(LA147_0>=INSERT && LA147_0<=INSTALL)||LA147_0==INTERVAL||(LA147_0>=INVOKER && LA147_0<=IPC)||(LA147_0>=ISOLATION && LA147_0<=ISSUER)||LA147_0==KEY_BLOCK_SIZE||(LA147_0>=LABEL && LA147_0<=LAST)||(LA147_0>=LEAVES && LA147_0<=LEFT)||LA147_0==LESS||LA147_0==LEVEL||(LA147_0>=LINESTRING && LA147_0<=LIST)||LA147_0==LOCAL||(LA147_0>=LOCKS && LA147_0<=LOGFILE)||LA147_0==LOGS||(LA147_0>=MASTER && LA147_0<=MASTER_SSL_KEY)||LA147_0==MASTER_USER||(LA147_0>=MAX && LA147_0<=MEDIUM)||(LA147_0>=MEMORY && LA147_0<=MID)||(LA147_0>=MIGRATE && LA147_0<=MIN)||LA147_0==MINUTE||(LA147_0>=MIN_ROWS && LA147_0<=MODE)||LA147_0==MODIFY||LA147_0==MONTH||(LA147_0>=MULTILINESTRING && LA147_0<=NATIONAL)||(LA147_0>=NCHAR && LA147_0<=NONE)||(LA147_0>=NOW && LA147_0<=NO_WAIT)||LA147_0==NULL||LA147_0==NUMBER||(LA147_0>=NVARCHAR && LA147_0<=OLD_PASSWORD)||(LA147_0>=ONE && LA147_0<=OPEN)||LA147_0==OPTIONS||(LA147_0>=OWNER && LA147_0<=PLUGINS)||(LA147_0>=POINT && LA147_0<=POSITION)||(LA147_0>=PREPARE && LA147_0<=PREV)||LA147_0==PRIVILEGES||(LA147_0>=PROCESS && LA147_0<=PROFILES)||(LA147_0>=QUARTER && LA147_0<=QUICK)||(LA147_0>=REBUILD && LA147_0<=REDUNDANT)||(LA147_0>=RELAY_LOG_FILE && LA147_0<=RELAY_THREAD)||(LA147_0>=RELOAD && LA147_0<=REMOVE)||(LA147_0>=REORGANIZE && LA147_0<=REPLICATION)||(LA147_0>=RESET && LA147_0<=RESTORE)||LA147_0==RESUME||LA147_0==RETURNS||LA147_0==RIGHT||(LA147_0>=ROLLBACK && LA147_0<=ROW_FORMAT)||(LA147_0>=RTREE && LA147_0<=SCHEDULE)||LA147_0==SECOND||LA147_0==SECURITY||(LA147_0>=SERIAL && LA147_0<=SESSION_VARIABLE)||LA147_0==SHARE||(LA147_0>=SHUTDOWN && LA147_0<=SLAVE)||(LA147_0>=SNAPSHOT && LA147_0<=SOCKET)||(LA147_0>=SONAME && LA147_0<=SOURCE)||(LA147_0>=SQL_BUFFER_RESULT && LA147_0<=SQL_CACHE)||LA147_0==SQL_NO_CACHE||LA147_0==SQL_THREAD||LA147_0==START||(LA147_0>=STARTS && LA147_0<=STORAGE)||(LA147_0>=STRING && LA147_0<=SYSTEM_USER)||(LA147_0>=TABLES && LA147_0<=TEMPTABLE)||(LA147_0>=TEXT && LA147_0<=THAN)||(LA147_0>=TIME && LA147_0<=TIMESTAMP_DIFF)||(LA147_0>=TRANSACTION && LA147_0<=TRANSACTIONAL)||(LA147_0>=TRIGGERS && LA147_0<=UNDEFINED)||(LA147_0>=UNDOFILE && LA147_0<=UNINSTALL)||LA147_0==UNKNOWN||LA147_0==UNTIL||LA147_0==UPGRADE||LA147_0==USER||LA147_0==USE_FRM||(LA147_0>=UTC_DATE && LA147_0<=VALUE)||LA147_0==VALUE_PLACEHOLDER||(LA147_0>=VARIABLES && LA147_0<=VARIANCE)||(LA147_0>=VAR_POP && LA147_0<=WEEK)||(LA147_0>=WORK && LA147_0<=WRAPPER)||(LA147_0>=X509 && LA147_0<=XA)||LA147_0==YEAR||LA147_0==CONCAT))
			{
				alt147 = 2;
			}
			else if ((LA147_0==EXISTS))
			{
				alt147 = 4;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 147, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(147); }
			switch (alt147)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:856:4: lhsParen= parenExpr
				{
				DebugLocation(856, 12);
				PushFollow(Follow._parenExpr_in_primary7405);
				lhsParen=parenExpr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_parenExpr.Add(lhsParen.Tree);


				{
				// AST REWRITE
				// elements: parenExpr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 856:23: -> parenExpr
				{
					DebugLocation(856, 26);
					adaptor.AddChild(root_0, stream_parenExpr.NextTree());

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:857:4: lhsLit= literal
				{
				DebugLocation(857, 10);
				PushFollow(Follow._literal_in_primary7416);
				lhsLit=literal();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_literal.Add(lhsLit.Tree);


				{
				// AST REWRITE
				// elements: literal
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 857:19: -> literal
				{
					DebugLocation(857, 22);
					adaptor.AddChild(root_0, stream_literal.NextTree());

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:858:4: subselect
				{
				DebugLocation(858, 4);
				PushFollow(Follow._subselect_in_primary7425);
				subselect306=subselect();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_subselect.Add(subselect306.Tree);


				{
				// AST REWRITE
				// elements: subselect
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 858:14: -> subselect
				{
					DebugLocation(858, 17);
					adaptor.AddChild(root_0, stream_subselect.NextTree());

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:859:4: EXISTS subselect
				{
				DebugLocation(859, 4);
				EXISTS307=(IToken)Match(input,EXISTS,Follow._EXISTS_in_primary7434); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_EXISTS.Add(EXISTS307);

				DebugLocation(859, 11);
				PushFollow(Follow._subselect_in_primary7436);
				subselect308=subselect();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_subselect.Add(subselect308.Tree);


				{
				// AST REWRITE
				// elements: EXISTS, subselect
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 859:21: -> ^( EXISTS subselect )
				{
					DebugLocation(859, 24);
					// MySQL51Parser.g3:859:24: ^( EXISTS subselect )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(859, 26);
					root_1 = (object)adaptor.BecomeRoot(stream_EXISTS.NextNode(), root_1);

					DebugLocation(859, 33);
					adaptor.AddChild(root_1, stream_subselect.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("primary", 62);
			LeaveRule("primary", 62);
			LeaveRule_primary();
		}
		DebugLocation(861, 1);
		} finally { DebugExitRule(GrammarFileName, "primary"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "primary"

	private sealed partial class literal_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public literal_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_literal();
	partial void LeaveRule_literal();

	// $ANTLR start "literal"
	// MySQL51Parser.g3:863:1: literal : (value= STRING |value= NUMBER |value= GLOBAL_VARIABLE |value= SESSION_VARIABLE |value= VALUE_PLACEHOLDER |value= BINARY_VALUE |value= HEXA_VALUE |value= NULL |value= TRUE |value= FALSE | ( functionCall )=> functionCall | field_name );
	[GrammarRule("literal")]
	private MySQL51Parser.literal_return literal()
	{
		EnterRule_literal();
		EnterRule("literal", 63);
		TraceIn("literal", 63);
		MySQL51Parser.literal_return retval = new MySQL51Parser.literal_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken value = default(IToken);
		MySQL51Parser.functionCall_return functionCall309 = default(MySQL51Parser.functionCall_return);
		MySQL51Parser.field_name_return field_name310 = default(MySQL51Parser.field_name_return);

		object value_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "literal");
		DebugLocation(863, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:864:2: (value= STRING |value= NUMBER |value= GLOBAL_VARIABLE |value= SESSION_VARIABLE |value= VALUE_PLACEHOLDER |value= BINARY_VALUE |value= HEXA_VALUE |value= NULL |value= TRUE |value= FALSE | ( functionCall )=> functionCall | field_name )
			int alt148=12;
			try { DebugEnterDecision(148, false);
			try
			{
				alt148 = dfa148.Predict(input);
			}
			catch (NoViableAltException nvae)
			{
				DebugRecognitionException(nvae);
				throw;
			}
			} finally { DebugExitDecision(148); }
			switch (alt148)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:864:4: value= STRING
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(864, 9);
				value=(IToken)Match(input,STRING,Follow._STRING_in_literal7459); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:865:4: value= NUMBER
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(865, 9);
				value=(IToken)Match(input,NUMBER,Follow._NUMBER_in_literal7466); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:866:4: value= GLOBAL_VARIABLE
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(866, 9);
				value=(IToken)Match(input,GLOBAL_VARIABLE,Follow._GLOBAL_VARIABLE_in_literal7473); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:867:4: value= SESSION_VARIABLE
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(867, 9);
				value=(IToken)Match(input,SESSION_VARIABLE,Follow._SESSION_VARIABLE_in_literal7480); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 5:
				DebugEnterAlt(5);
				// MySQL51Parser.g3:868:4: value= VALUE_PLACEHOLDER
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(868, 9);
				value=(IToken)Match(input,VALUE_PLACEHOLDER,Follow._VALUE_PLACEHOLDER_in_literal7487); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 6:
				DebugEnterAlt(6);
				// MySQL51Parser.g3:869:4: value= BINARY_VALUE
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(869, 9);
				value=(IToken)Match(input,BINARY_VALUE,Follow._BINARY_VALUE_in_literal7494); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 7:
				DebugEnterAlt(7);
				// MySQL51Parser.g3:870:4: value= HEXA_VALUE
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(870, 9);
				value=(IToken)Match(input,HEXA_VALUE,Follow._HEXA_VALUE_in_literal7501); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 8:
				DebugEnterAlt(8);
				// MySQL51Parser.g3:871:4: value= NULL
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(871, 9);
				value=(IToken)Match(input,NULL,Follow._NULL_in_literal7508); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 9:
				DebugEnterAlt(9);
				// MySQL51Parser.g3:872:4: value= TRUE
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(872, 9);
				value=(IToken)Match(input,TRUE,Follow._TRUE_in_literal7515); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 10:
				DebugEnterAlt(10);
				// MySQL51Parser.g3:873:4: value= FALSE
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(873, 9);
				value=(IToken)Match(input,FALSE,Follow._FALSE_in_literal7522); if (state.failed) return retval;
				if (state.backtracking == 0) {
				value_tree = (object)adaptor.Create(value);
				adaptor.AddChild(root_0, value_tree);
				}

				}
				break;
			case 11:
				DebugEnterAlt(11);
				// MySQL51Parser.g3:874:4: ( functionCall )=> functionCall
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(874, 20);
				PushFollow(Follow._functionCall_in_literal7531);
				functionCall309=functionCall();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, functionCall309.Tree);

				}
				break;
			case 12:
				DebugEnterAlt(12);
				// MySQL51Parser.g3:875:4: field_name
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(875, 4);
				PushFollow(Follow._field_name_in_literal7536);
				field_name310=field_name();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, field_name310.Tree);

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("literal", 63);
			LeaveRule("literal", 63);
			LeaveRule_literal();
		}
		DebugLocation(876, 1);
		} finally { DebugExitRule(GrammarFileName, "literal"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "literal"

	private sealed partial class cast_data_type_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public cast_data_type_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_cast_data_type();
	partial void LeaveRule_cast_data_type();

	// $ANTLR start "cast_data_type"
	// MySQL51Parser.g3:879:1: cast_data_type : ( BINARY ( LPAREN NUMBER RPAREN )? | CHAR ( LPAREN NUMBER RPAREN )? | DATE | DATETIME | TIME | DECIMAL ( LPAREN num1= NUMBER COMMA num2= NUMBER RPAREN )? | SIGNED ( INTEGER )? | UNSIGNED ( INTEGER )? );
	[GrammarRule("cast_data_type")]
	private MySQL51Parser.cast_data_type_return cast_data_type()
	{
		EnterRule_cast_data_type();
		EnterRule("cast_data_type", 64);
		TraceIn("cast_data_type", 64);
		MySQL51Parser.cast_data_type_return retval = new MySQL51Parser.cast_data_type_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken num1 = default(IToken);
		IToken num2 = default(IToken);
		IToken BINARY311 = default(IToken);
		IToken LPAREN312 = default(IToken);
		IToken NUMBER313 = default(IToken);
		IToken RPAREN314 = default(IToken);
		IToken CHAR315 = default(IToken);
		IToken LPAREN316 = default(IToken);
		IToken NUMBER317 = default(IToken);
		IToken RPAREN318 = default(IToken);
		IToken DATE319 = default(IToken);
		IToken DATETIME320 = default(IToken);
		IToken TIME321 = default(IToken);
		IToken DECIMAL322 = default(IToken);
		IToken LPAREN323 = default(IToken);
		IToken COMMA324 = default(IToken);
		IToken RPAREN325 = default(IToken);
		IToken SIGNED326 = default(IToken);
		IToken INTEGER327 = default(IToken);
		IToken UNSIGNED328 = default(IToken);
		IToken INTEGER329 = default(IToken);

		object num1_tree = default(object);
		object num2_tree = default(object);
		object BINARY311_tree = default(object);
		object LPAREN312_tree = default(object);
		object NUMBER313_tree = default(object);
		object RPAREN314_tree = default(object);
		object CHAR315_tree = default(object);
		object LPAREN316_tree = default(object);
		object NUMBER317_tree = default(object);
		object RPAREN318_tree = default(object);
		object DATE319_tree = default(object);
		object DATETIME320_tree = default(object);
		object TIME321_tree = default(object);
		object DECIMAL322_tree = default(object);
		object LPAREN323_tree = default(object);
		object COMMA324_tree = default(object);
		object RPAREN325_tree = default(object);
		object SIGNED326_tree = default(object);
		object INTEGER327_tree = default(object);
		object UNSIGNED328_tree = default(object);
		object INTEGER329_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "cast_data_type");
		DebugLocation(879, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:880:2: ( BINARY ( LPAREN NUMBER RPAREN )? | CHAR ( LPAREN NUMBER RPAREN )? | DATE | DATETIME | TIME | DECIMAL ( LPAREN num1= NUMBER COMMA num2= NUMBER RPAREN )? | SIGNED ( INTEGER )? | UNSIGNED ( INTEGER )? )
			int alt154=8;
			try { DebugEnterDecision(154, false);
			switch (input.LA(1))
			{
			case BINARY:
				{
				alt154 = 1;
				}
				break;
			case CHAR:
				{
				alt154 = 2;
				}
				break;
			case DATE:
				{
				alt154 = 3;
				}
				break;
			case DATETIME:
				{
				alt154 = 4;
				}
				break;
			case TIME:
				{
				alt154 = 5;
				}
				break;
			case DECIMAL:
				{
				alt154 = 6;
				}
				break;
			case SIGNED:
				{
				alt154 = 7;
				}
				break;
			case UNSIGNED:
				{
				alt154 = 8;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 154, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(154); }
			switch (alt154)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:880:4: BINARY ( LPAREN NUMBER RPAREN )?
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(880, 4);
				BINARY311=(IToken)Match(input,BINARY,Follow._BINARY_in_cast_data_type7548); if (state.failed) return retval;
				if (state.backtracking == 0) {
				BINARY311_tree = (object)adaptor.Create(BINARY311);
				adaptor.AddChild(root_0, BINARY311_tree);
				}
				DebugLocation(880, 11);
				// MySQL51Parser.g3:880:11: ( LPAREN NUMBER RPAREN )?
				int alt149=2;
				try { DebugEnterSubRule(149);
				try { DebugEnterDecision(149, false);
				int LA149_0 = input.LA(1);

				if ((LA149_0==LPAREN))
				{
					alt149 = 1;
				}
				} finally { DebugExitDecision(149); }
				switch (alt149)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:880:12: LPAREN NUMBER RPAREN
					{
					DebugLocation(880, 12);
					LPAREN312=(IToken)Match(input,LPAREN,Follow._LPAREN_in_cast_data_type7551); if (state.failed) return retval;
					if (state.backtracking == 0) {
					LPAREN312_tree = (object)adaptor.Create(LPAREN312);
					adaptor.AddChild(root_0, LPAREN312_tree);
					}
					DebugLocation(880, 19);
					NUMBER313=(IToken)Match(input,NUMBER,Follow._NUMBER_in_cast_data_type7553); if (state.failed) return retval;
					if (state.backtracking == 0) {
					NUMBER313_tree = (object)adaptor.Create(NUMBER313);
					adaptor.AddChild(root_0, NUMBER313_tree);
					}
					DebugLocation(880, 26);
					RPAREN314=(IToken)Match(input,RPAREN,Follow._RPAREN_in_cast_data_type7555); if (state.failed) return retval;
					if (state.backtracking == 0) {
					RPAREN314_tree = (object)adaptor.Create(RPAREN314);
					adaptor.AddChild(root_0, RPAREN314_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(149); }


				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:881:4: CHAR ( LPAREN NUMBER RPAREN )?
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(881, 4);
				CHAR315=(IToken)Match(input,CHAR,Follow._CHAR_in_cast_data_type7562); if (state.failed) return retval;
				if (state.backtracking == 0) {
				CHAR315_tree = (object)adaptor.Create(CHAR315);
				adaptor.AddChild(root_0, CHAR315_tree);
				}
				DebugLocation(881, 9);
				// MySQL51Parser.g3:881:9: ( LPAREN NUMBER RPAREN )?
				int alt150=2;
				try { DebugEnterSubRule(150);
				try { DebugEnterDecision(150, false);
				int LA150_0 = input.LA(1);

				if ((LA150_0==LPAREN))
				{
					alt150 = 1;
				}
				} finally { DebugExitDecision(150); }
				switch (alt150)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:881:10: LPAREN NUMBER RPAREN
					{
					DebugLocation(881, 10);
					LPAREN316=(IToken)Match(input,LPAREN,Follow._LPAREN_in_cast_data_type7565); if (state.failed) return retval;
					if (state.backtracking == 0) {
					LPAREN316_tree = (object)adaptor.Create(LPAREN316);
					adaptor.AddChild(root_0, LPAREN316_tree);
					}
					DebugLocation(881, 17);
					NUMBER317=(IToken)Match(input,NUMBER,Follow._NUMBER_in_cast_data_type7567); if (state.failed) return retval;
					if (state.backtracking == 0) {
					NUMBER317_tree = (object)adaptor.Create(NUMBER317);
					adaptor.AddChild(root_0, NUMBER317_tree);
					}
					DebugLocation(881, 24);
					RPAREN318=(IToken)Match(input,RPAREN,Follow._RPAREN_in_cast_data_type7569); if (state.failed) return retval;
					if (state.backtracking == 0) {
					RPAREN318_tree = (object)adaptor.Create(RPAREN318);
					adaptor.AddChild(root_0, RPAREN318_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(150); }


				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:882:4: DATE
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(882, 4);
				DATE319=(IToken)Match(input,DATE,Follow._DATE_in_cast_data_type7576); if (state.failed) return retval;
				if (state.backtracking == 0) {
				DATE319_tree = (object)adaptor.Create(DATE319);
				adaptor.AddChild(root_0, DATE319_tree);
				}

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:883:4: DATETIME
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(883, 4);
				DATETIME320=(IToken)Match(input,DATETIME,Follow._DATETIME_in_cast_data_type7581); if (state.failed) return retval;
				if (state.backtracking == 0) {
				DATETIME320_tree = (object)adaptor.Create(DATETIME320);
				adaptor.AddChild(root_0, DATETIME320_tree);
				}

				}
				break;
			case 5:
				DebugEnterAlt(5);
				// MySQL51Parser.g3:884:4: TIME
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(884, 4);
				TIME321=(IToken)Match(input,TIME,Follow._TIME_in_cast_data_type7586); if (state.failed) return retval;
				if (state.backtracking == 0) {
				TIME321_tree = (object)adaptor.Create(TIME321);
				adaptor.AddChild(root_0, TIME321_tree);
				}

				}
				break;
			case 6:
				DebugEnterAlt(6);
				// MySQL51Parser.g3:885:4: DECIMAL ( LPAREN num1= NUMBER COMMA num2= NUMBER RPAREN )?
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(885, 4);
				DECIMAL322=(IToken)Match(input,DECIMAL,Follow._DECIMAL_in_cast_data_type7591); if (state.failed) return retval;
				if (state.backtracking == 0) {
				DECIMAL322_tree = (object)adaptor.Create(DECIMAL322);
				adaptor.AddChild(root_0, DECIMAL322_tree);
				}
				DebugLocation(885, 12);
				// MySQL51Parser.g3:885:12: ( LPAREN num1= NUMBER COMMA num2= NUMBER RPAREN )?
				int alt151=2;
				try { DebugEnterSubRule(151);
				try { DebugEnterDecision(151, false);
				int LA151_0 = input.LA(1);

				if ((LA151_0==LPAREN))
				{
					alt151 = 1;
				}
				} finally { DebugExitDecision(151); }
				switch (alt151)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:885:13: LPAREN num1= NUMBER COMMA num2= NUMBER RPAREN
					{
					DebugLocation(885, 13);
					LPAREN323=(IToken)Match(input,LPAREN,Follow._LPAREN_in_cast_data_type7594); if (state.failed) return retval;
					if (state.backtracking == 0) {
					LPAREN323_tree = (object)adaptor.Create(LPAREN323);
					adaptor.AddChild(root_0, LPAREN323_tree);
					}
					DebugLocation(885, 24);
					num1=(IToken)Match(input,NUMBER,Follow._NUMBER_in_cast_data_type7598); if (state.failed) return retval;
					if (state.backtracking == 0) {
					num1_tree = (object)adaptor.Create(num1);
					adaptor.AddChild(root_0, num1_tree);
					}
					DebugLocation(885, 32);
					COMMA324=(IToken)Match(input,COMMA,Follow._COMMA_in_cast_data_type7600); if (state.failed) return retval;
					if (state.backtracking == 0) {
					COMMA324_tree = (object)adaptor.Create(COMMA324);
					adaptor.AddChild(root_0, COMMA324_tree);
					}
					DebugLocation(885, 42);
					num2=(IToken)Match(input,NUMBER,Follow._NUMBER_in_cast_data_type7604); if (state.failed) return retval;
					if (state.backtracking == 0) {
					num2_tree = (object)adaptor.Create(num2);
					adaptor.AddChild(root_0, num2_tree);
					}
					DebugLocation(885, 50);
					RPAREN325=(IToken)Match(input,RPAREN,Follow._RPAREN_in_cast_data_type7606); if (state.failed) return retval;
					if (state.backtracking == 0) {
					RPAREN325_tree = (object)adaptor.Create(RPAREN325);
					adaptor.AddChild(root_0, RPAREN325_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(151); }


				}
				break;
			case 7:
				DebugEnterAlt(7);
				// MySQL51Parser.g3:886:4: SIGNED ( INTEGER )?
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(886, 4);
				SIGNED326=(IToken)Match(input,SIGNED,Follow._SIGNED_in_cast_data_type7613); if (state.failed) return retval;
				if (state.backtracking == 0) {
				SIGNED326_tree = (object)adaptor.Create(SIGNED326);
				adaptor.AddChild(root_0, SIGNED326_tree);
				}
				DebugLocation(886, 11);
				// MySQL51Parser.g3:886:11: ( INTEGER )?
				int alt152=2;
				try { DebugEnterSubRule(152);
				try { DebugEnterDecision(152, false);
				int LA152_0 = input.LA(1);

				if ((LA152_0==INTEGER))
				{
					alt152 = 1;
				}
				} finally { DebugExitDecision(152); }
				switch (alt152)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:886:11: INTEGER
					{
					DebugLocation(886, 11);
					INTEGER327=(IToken)Match(input,INTEGER,Follow._INTEGER_in_cast_data_type7615); if (state.failed) return retval;
					if (state.backtracking == 0) {
					INTEGER327_tree = (object)adaptor.Create(INTEGER327);
					adaptor.AddChild(root_0, INTEGER327_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(152); }


				}
				break;
			case 8:
				DebugEnterAlt(8);
				// MySQL51Parser.g3:887:4: UNSIGNED ( INTEGER )?
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(887, 4);
				UNSIGNED328=(IToken)Match(input,UNSIGNED,Follow._UNSIGNED_in_cast_data_type7621); if (state.failed) return retval;
				if (state.backtracking == 0) {
				UNSIGNED328_tree = (object)adaptor.Create(UNSIGNED328);
				adaptor.AddChild(root_0, UNSIGNED328_tree);
				}
				DebugLocation(887, 13);
				// MySQL51Parser.g3:887:13: ( INTEGER )?
				int alt153=2;
				try { DebugEnterSubRule(153);
				try { DebugEnterDecision(153, false);
				int LA153_0 = input.LA(1);

				if ((LA153_0==INTEGER))
				{
					alt153 = 1;
				}
				} finally { DebugExitDecision(153); }
				switch (alt153)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:887:13: INTEGER
					{
					DebugLocation(887, 13);
					INTEGER329=(IToken)Match(input,INTEGER,Follow._INTEGER_in_cast_data_type7623); if (state.failed) return retval;
					if (state.backtracking == 0) {
					INTEGER329_tree = (object)adaptor.Create(INTEGER329);
					adaptor.AddChild(root_0, INTEGER329_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(153); }


				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("cast_data_type", 64);
			LeaveRule("cast_data_type", 64);
			LeaveRule_cast_data_type();
		}
		DebugLocation(888, 1);
		} finally { DebugExitRule(GrammarFileName, "cast_data_type"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "cast_data_type"

	private sealed partial class timeUnit_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public timeUnit_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_timeUnit();
	partial void LeaveRule_timeUnit();

	// $ANTLR start "timeUnit"
	// MySQL51Parser.g3:890:1: timeUnit : ( MICROSECOND | SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR | SECOND_MICROSECOND | MINUTE_MICROSECOND | MINUTE_SECOND | HOUR_MICROSECOND | HOUR_SECOND | HOUR_MINUTE | DAY_MICROSECOND | DAY_SECOND | DAY_MINUTE | DAY_HOUR | YEAR_MONTH );
	[GrammarRule("timeUnit")]
	private MySQL51Parser.timeUnit_return timeUnit()
	{
		EnterRule_timeUnit();
		EnterRule("timeUnit", 65);
		TraceIn("timeUnit", 65);
		MySQL51Parser.timeUnit_return retval = new MySQL51Parser.timeUnit_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken set330 = default(IToken);

		object set330_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "timeUnit");
		DebugLocation(890, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:891:2: ( MICROSECOND | SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR | SECOND_MICROSECOND | MINUTE_MICROSECOND | MINUTE_SECOND | HOUR_MICROSECOND | HOUR_SECOND | HOUR_MINUTE | DAY_MICROSECOND | DAY_SECOND | DAY_MINUTE | DAY_HOUR | YEAR_MONTH )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(891, 2);
			set330=(IToken)input.LT(1);
			if ((input.LA(1)>=DAY && input.LA(1)<=DAY_SECOND)||(input.LA(1)>=HOUR && input.LA(1)<=HOUR_SECOND)||input.LA(1)==MICROSECOND||(input.LA(1)>=MINUTE && input.LA(1)<=MINUTE_SECOND)||input.LA(1)==MONTH||input.LA(1)==QUARTER||(input.LA(1)>=SECOND && input.LA(1)<=SECOND_MICROSECOND)||input.LA(1)==WEEK||(input.LA(1)>=YEAR && input.LA(1)<=YEAR_MONTH))
			{
				input.Consume();
				if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set330));
				state.errorRecovery=false;state.failed=false;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				DebugRecognitionException(mse);
				throw mse;
			}


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("timeUnit", 65);
			LeaveRule("timeUnit", 65);
			LeaveRule_timeUnit();
		}
		DebugLocation(911, 1);
		} finally { DebugExitRule(GrammarFileName, "timeUnit"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "timeUnit"

	private sealed partial class timestampUnit_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public timestampUnit_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_timestampUnit();
	partial void LeaveRule_timestampUnit();

	// $ANTLR start "timestampUnit"
	// MySQL51Parser.g3:914:1: timestampUnit : ( FRAC_SECOND | MICROSECOND | SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR );
	[GrammarRule("timestampUnit")]
	private MySQL51Parser.timestampUnit_return timestampUnit()
	{
		EnterRule_timestampUnit();
		EnterRule("timestampUnit", 66);
		TraceIn("timestampUnit", 66);
		MySQL51Parser.timestampUnit_return retval = new MySQL51Parser.timestampUnit_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken set331 = default(IToken);

		object set331_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "timestampUnit");
		DebugLocation(914, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:915:2: ( FRAC_SECOND | MICROSECOND | SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(915, 2);
			set331=(IToken)input.LT(1);
			if (input.LA(1)==DAY||input.LA(1)==FRAC_SECOND||input.LA(1)==HOUR||input.LA(1)==MICROSECOND||input.LA(1)==MINUTE||input.LA(1)==MONTH||input.LA(1)==QUARTER||input.LA(1)==SECOND||input.LA(1)==WEEK||input.LA(1)==YEAR)
			{
				input.Consume();
				if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set331));
				state.errorRecovery=false;state.failed=false;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				DebugRecognitionException(mse);
				throw mse;
			}


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("timestampUnit", 66);
			LeaveRule("timestampUnit", 66);
			LeaveRule_timestampUnit();
		}
		DebugLocation(924, 1);
		} finally { DebugExitRule(GrammarFileName, "timestampUnit"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "timestampUnit"

	private sealed partial class where_condition_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public where_condition_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_where_condition();
	partial void LeaveRule_where_condition();

	// $ANTLR start "where_condition"
	// MySQL51Parser.g3:926:1: where_condition : expr ;
	[GrammarRule("where_condition")]
	private MySQL51Parser.where_condition_return where_condition()
	{
		EnterRule_where_condition();
		EnterRule("where_condition", 67);
		TraceIn("where_condition", 67);
		MySQL51Parser.where_condition_return retval = new MySQL51Parser.where_condition_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		MySQL51Parser.expr_return expr332 = default(MySQL51Parser.expr_return);


		try { DebugEnterRule(GrammarFileName, "where_condition");
		DebugLocation(926, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:927:2: ( expr )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:927:4: expr
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(927, 4);
			PushFollow(Follow._expr_in_where_condition7800);
			expr332=expr();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) adaptor.AddChild(root_0, expr332.Tree);

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("where_condition", 67);
			LeaveRule("where_condition", 67);
			LeaveRule_where_condition();
		}
		DebugLocation(928, 1);
		} finally { DebugExitRule(GrammarFileName, "where_condition"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "where_condition"

	private sealed partial class transaction_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public transaction_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_transaction();
	partial void LeaveRule_transaction();

	// $ANTLR start "transaction"
	// MySQL51Parser.g3:933:1: transaction : ( ( BEGIN ( WORK )? -> ^( BEGIN ( WORK )? ) | START TRANSACTION ( WITH CONSISTENT SNAPSHOT )? -> ^( START ( SNAPSHOT )? ) ) | COMMIT ( WORK )? ( AND ( NO )? CHAIN )? ( ( NO )? RELEASE )? -> ^( COMMIT ( ^( CHAIN ( NO )? ) )? ( ^( RELEASE ( NO )? ) )? ) | ROLLBACK ( WORK )? ( AND ( NO )? CHAIN )? ( ( NO )? RELEASE )? -> ^( ROLLBACK ( ^( CHAIN ( NO )? ) )? ( ^( RELEASE ( NO )? ) )? ) | SET (txnScope= GLOBAL |txnScope= SESSION )? TRANSACTION ISOLATION LEVEL ( READ UNCOMMITTED -> ^( ISOLATION UNCOMMITTED $txnScope) | READ COMMITTED -> ^( ISOLATION COMMITTED $txnScope) | REPEATABLE READ -> ^( ISOLATION REPEATABLE $txnScope) | SERIALIZABLE -> ^( ISOLATION SERIALIZABLE $txnScope) ) | savepoint | lockTables );
	[GrammarRule("transaction")]
	private MySQL51Parser.transaction_return transaction()
	{
		EnterRule_transaction();
		EnterRule("transaction", 68);
		TraceIn("transaction", 68);
		MySQL51Parser.transaction_return retval = new MySQL51Parser.transaction_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken txnScope = default(IToken);
		IToken BEGIN333 = default(IToken);
		IToken WORK334 = default(IToken);
		IToken START335 = default(IToken);
		IToken TRANSACTION336 = default(IToken);
		IToken WITH337 = default(IToken);
		IToken CONSISTENT338 = default(IToken);
		IToken SNAPSHOT339 = default(IToken);
		IToken COMMIT340 = default(IToken);
		IToken WORK341 = default(IToken);
		IToken AND342 = default(IToken);
		IToken NO343 = default(IToken);
		IToken CHAIN344 = default(IToken);
		IToken NO345 = default(IToken);
		IToken RELEASE346 = default(IToken);
		IToken ROLLBACK347 = default(IToken);
		IToken WORK348 = default(IToken);
		IToken AND349 = default(IToken);
		IToken NO350 = default(IToken);
		IToken CHAIN351 = default(IToken);
		IToken NO352 = default(IToken);
		IToken RELEASE353 = default(IToken);
		IToken SET354 = default(IToken);
		IToken TRANSACTION355 = default(IToken);
		IToken ISOLATION356 = default(IToken);
		IToken LEVEL357 = default(IToken);
		IToken READ358 = default(IToken);
		IToken UNCOMMITTED359 = default(IToken);
		IToken READ360 = default(IToken);
		IToken COMMITTED361 = default(IToken);
		IToken REPEATABLE362 = default(IToken);
		IToken READ363 = default(IToken);
		IToken SERIALIZABLE364 = default(IToken);
		MySQL51Parser.savepoint_return savepoint365 = default(MySQL51Parser.savepoint_return);
		MySQL51Parser.lockTables_return lockTables366 = default(MySQL51Parser.lockTables_return);

		object txnScope_tree = default(object);
		object BEGIN333_tree = default(object);
		object WORK334_tree = default(object);
		object START335_tree = default(object);
		object TRANSACTION336_tree = default(object);
		object WITH337_tree = default(object);
		object CONSISTENT338_tree = default(object);
		object SNAPSHOT339_tree = default(object);
		object COMMIT340_tree = default(object);
		object WORK341_tree = default(object);
		object AND342_tree = default(object);
		object NO343_tree = default(object);
		object CHAIN344_tree = default(object);
		object NO345_tree = default(object);
		object RELEASE346_tree = default(object);
		object ROLLBACK347_tree = default(object);
		object WORK348_tree = default(object);
		object AND349_tree = default(object);
		object NO350_tree = default(object);
		object CHAIN351_tree = default(object);
		object NO352_tree = default(object);
		object RELEASE353_tree = default(object);
		object SET354_tree = default(object);
		object TRANSACTION355_tree = default(object);
		object ISOLATION356_tree = default(object);
		object LEVEL357_tree = default(object);
		object READ358_tree = default(object);
		object UNCOMMITTED359_tree = default(object);
		object READ360_tree = default(object);
		object COMMITTED361_tree = default(object);
		object REPEATABLE362_tree = default(object);
		object READ363_tree = default(object);
		object SERIALIZABLE364_tree = default(object);
		RewriteRuleITokenStream stream_BEGIN=new RewriteRuleITokenStream(adaptor,"token BEGIN");
		RewriteRuleITokenStream stream_WORK=new RewriteRuleITokenStream(adaptor,"token WORK");
		RewriteRuleITokenStream stream_START=new RewriteRuleITokenStream(adaptor,"token START");
		RewriteRuleITokenStream stream_TRANSACTION=new RewriteRuleITokenStream(adaptor,"token TRANSACTION");
		RewriteRuleITokenStream stream_WITH=new RewriteRuleITokenStream(adaptor,"token WITH");
		RewriteRuleITokenStream stream_CONSISTENT=new RewriteRuleITokenStream(adaptor,"token CONSISTENT");
		RewriteRuleITokenStream stream_SNAPSHOT=new RewriteRuleITokenStream(adaptor,"token SNAPSHOT");
		RewriteRuleITokenStream stream_COMMIT=new RewriteRuleITokenStream(adaptor,"token COMMIT");
		RewriteRuleITokenStream stream_AND=new RewriteRuleITokenStream(adaptor,"token AND");
		RewriteRuleITokenStream stream_NO=new RewriteRuleITokenStream(adaptor,"token NO");
		RewriteRuleITokenStream stream_CHAIN=new RewriteRuleITokenStream(adaptor,"token CHAIN");
		RewriteRuleITokenStream stream_RELEASE=new RewriteRuleITokenStream(adaptor,"token RELEASE");
		RewriteRuleITokenStream stream_ROLLBACK=new RewriteRuleITokenStream(adaptor,"token ROLLBACK");
		RewriteRuleITokenStream stream_SET=new RewriteRuleITokenStream(adaptor,"token SET");
		RewriteRuleITokenStream stream_GLOBAL=new RewriteRuleITokenStream(adaptor,"token GLOBAL");
		RewriteRuleITokenStream stream_SESSION=new RewriteRuleITokenStream(adaptor,"token SESSION");
		RewriteRuleITokenStream stream_ISOLATION=new RewriteRuleITokenStream(adaptor,"token ISOLATION");
		RewriteRuleITokenStream stream_LEVEL=new RewriteRuleITokenStream(adaptor,"token LEVEL");
		RewriteRuleITokenStream stream_READ=new RewriteRuleITokenStream(adaptor,"token READ");
		RewriteRuleITokenStream stream_UNCOMMITTED=new RewriteRuleITokenStream(adaptor,"token UNCOMMITTED");
		RewriteRuleITokenStream stream_COMMITTED=new RewriteRuleITokenStream(adaptor,"token COMMITTED");
		RewriteRuleITokenStream stream_REPEATABLE=new RewriteRuleITokenStream(adaptor,"token REPEATABLE");
		RewriteRuleITokenStream stream_SERIALIZABLE=new RewriteRuleITokenStream(adaptor,"token SERIALIZABLE");

		try { DebugEnterRule(GrammarFileName, "transaction");
		DebugLocation(933, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:935:2: ( ( BEGIN ( WORK )? -> ^( BEGIN ( WORK )? ) | START TRANSACTION ( WITH CONSISTENT SNAPSHOT )? -> ^( START ( SNAPSHOT )? ) ) | COMMIT ( WORK )? ( AND ( NO )? CHAIN )? ( ( NO )? RELEASE )? -> ^( COMMIT ( ^( CHAIN ( NO )? ) )? ( ^( RELEASE ( NO )? ) )? ) | ROLLBACK ( WORK )? ( AND ( NO )? CHAIN )? ( ( NO )? RELEASE )? -> ^( ROLLBACK ( ^( CHAIN ( NO )? ) )? ( ^( RELEASE ( NO )? ) )? ) | SET (txnScope= GLOBAL |txnScope= SESSION )? TRANSACTION ISOLATION LEVEL ( READ UNCOMMITTED -> ^( ISOLATION UNCOMMITTED $txnScope) | READ COMMITTED -> ^( ISOLATION COMMITTED $txnScope) | REPEATABLE READ -> ^( ISOLATION REPEATABLE $txnScope) | SERIALIZABLE -> ^( ISOLATION SERIALIZABLE $txnScope) ) | savepoint | lockTables )
			int alt170=6;
			try { DebugEnterDecision(170, false);
			switch (input.LA(1))
			{
			case BEGIN:
			case START:
				{
				alt170 = 1;
				}
				break;
			case COMMIT:
				{
				alt170 = 2;
				}
				break;
			case ROLLBACK:
				{
				switch (input.LA(2))
				{
				case WORK:
					{
					int LA170_7 = input.LA(3);

					if ((LA170_7==EOF||LA170_7==AND||LA170_7==NO||LA170_7==RELEASE||LA170_7==SEMI))
					{
						alt170 = 3;
					}
					else if ((LA170_7==TO))
					{
						alt170 = 5;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 170, 7, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					}
					break;
				case EOF:
				case AND:
				case NO:
				case RELEASE:
				case SEMI:
					{
					alt170 = 3;
					}
					break;
				case TO:
					{
					alt170 = 5;
					}
					break;
				default:
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 170, 3, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
				}

				}
				break;
			case SET:
				{
				alt170 = 4;
				}
				break;
			case RELEASE:
			case SAVEPOINT:
				{
				alt170 = 5;
				}
				break;
			case LOCK:
			case UNLOCK:
				{
				alt170 = 6;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 170, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(170); }
			switch (alt170)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:935:4: ( BEGIN ( WORK )? -> ^( BEGIN ( WORK )? ) | START TRANSACTION ( WITH CONSISTENT SNAPSHOT )? -> ^( START ( SNAPSHOT )? ) )
				{
				DebugLocation(935, 4);
				// MySQL51Parser.g3:935:4: ( BEGIN ( WORK )? -> ^( BEGIN ( WORK )? ) | START TRANSACTION ( WITH CONSISTENT SNAPSHOT )? -> ^( START ( SNAPSHOT )? ) )
				int alt157=2;
				try { DebugEnterSubRule(157);
				try { DebugEnterDecision(157, false);
				int LA157_0 = input.LA(1);

				if ((LA157_0==BEGIN))
				{
					alt157 = 1;
				}
				else if ((LA157_0==START))
				{
					alt157 = 2;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 157, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
				} finally { DebugExitDecision(157); }
				switch (alt157)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:935:6: BEGIN ( WORK )?
					{
					DebugLocation(935, 6);
					BEGIN333=(IToken)Match(input,BEGIN,Follow._BEGIN_in_transaction7819); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_BEGIN.Add(BEGIN333);

					DebugLocation(935, 13);
					// MySQL51Parser.g3:935:13: ( WORK )?
					int alt155=2;
					try { DebugEnterSubRule(155);
					try { DebugEnterDecision(155, false);
					int LA155_0 = input.LA(1);

					if ((LA155_0==WORK))
					{
						alt155 = 1;
					}
					} finally { DebugExitDecision(155); }
					switch (alt155)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:935:13: WORK
						{
						DebugLocation(935, 13);
						WORK334=(IToken)Match(input,WORK,Follow._WORK_in_transaction7822); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_WORK.Add(WORK334);


						}
						break;

					}
					} finally { DebugExitSubRule(155); }



					{
					// AST REWRITE
					// elements: BEGIN, WORK
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 935:28: -> ^( BEGIN ( WORK )? )
					{
						DebugLocation(935, 31);
						// MySQL51Parser.g3:935:31: ^( BEGIN ( WORK )? )
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(935, 33);
						root_1 = (object)adaptor.BecomeRoot(stream_BEGIN.NextNode(), root_1);

						DebugLocation(935, 39);
						// MySQL51Parser.g3:935:39: ( WORK )?
						if (stream_WORK.HasNext)
						{
							DebugLocation(935, 39);
							adaptor.AddChild(root_1, stream_WORK.NextNode());

						}
						stream_WORK.Reset();

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:936:5: START TRANSACTION ( WITH CONSISTENT SNAPSHOT )?
					{
					DebugLocation(936, 5);
					START335=(IToken)Match(input,START,Follow._START_in_transaction7847); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_START.Add(START335);

					DebugLocation(936, 11);
					TRANSACTION336=(IToken)Match(input,TRANSACTION,Follow._TRANSACTION_in_transaction7849); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_TRANSACTION.Add(TRANSACTION336);

					DebugLocation(936, 23);
					// MySQL51Parser.g3:936:23: ( WITH CONSISTENT SNAPSHOT )?
					int alt156=2;
					try { DebugEnterSubRule(156);
					try { DebugEnterDecision(156, false);
					int LA156_0 = input.LA(1);

					if ((LA156_0==WITH))
					{
						alt156 = 1;
					}
					} finally { DebugExitDecision(156); }
					switch (alt156)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:936:24: WITH CONSISTENT SNAPSHOT
						{
						DebugLocation(936, 24);
						WITH337=(IToken)Match(input,WITH,Follow._WITH_in_transaction7852); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_WITH.Add(WITH337);

						DebugLocation(936, 29);
						CONSISTENT338=(IToken)Match(input,CONSISTENT,Follow._CONSISTENT_in_transaction7854); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_CONSISTENT.Add(CONSISTENT338);

						DebugLocation(936, 40);
						SNAPSHOT339=(IToken)Match(input,SNAPSHOT,Follow._SNAPSHOT_in_transaction7856); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_SNAPSHOT.Add(SNAPSHOT339);


						}
						break;

					}
					} finally { DebugExitSubRule(156); }



					{
					// AST REWRITE
					// elements: START, SNAPSHOT
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 936:52: -> ^( START ( SNAPSHOT )? )
					{
						DebugLocation(936, 55);
						// MySQL51Parser.g3:936:55: ^( START ( SNAPSHOT )? )
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(936, 57);
						root_1 = (object)adaptor.BecomeRoot(stream_START.NextNode(), root_1);

						DebugLocation(936, 63);
						// MySQL51Parser.g3:936:63: ( SNAPSHOT )?
						if (stream_SNAPSHOT.HasNext)
						{
							DebugLocation(936, 63);
							adaptor.AddChild(root_1, stream_SNAPSHOT.NextNode());

						}
						stream_SNAPSHOT.Reset();

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;

				}
				} finally { DebugExitSubRule(157); }


				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:938:4: COMMIT ( WORK )? ( AND ( NO )? CHAIN )? ( ( NO )? RELEASE )?
				{
				DebugLocation(938, 4);
				COMMIT340=(IToken)Match(input,COMMIT,Follow._COMMIT_in_transaction7877); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMIT.Add(COMMIT340);

				DebugLocation(938, 11);
				// MySQL51Parser.g3:938:11: ( WORK )?
				int alt158=2;
				try { DebugEnterSubRule(158);
				try { DebugEnterDecision(158, false);
				int LA158_0 = input.LA(1);

				if ((LA158_0==WORK))
				{
					alt158 = 1;
				}
				} finally { DebugExitDecision(158); }
				switch (alt158)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:938:11: WORK
					{
					DebugLocation(938, 11);
					WORK341=(IToken)Match(input,WORK,Follow._WORK_in_transaction7879); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_WORK.Add(WORK341);


					}
					break;

				}
				} finally { DebugExitSubRule(158); }

				DebugLocation(939, 3);
				// MySQL51Parser.g3:939:3: ( AND ( NO )? CHAIN )?
				int alt160=2;
				try { DebugEnterSubRule(160);
				try { DebugEnterDecision(160, false);
				int LA160_0 = input.LA(1);

				if ((LA160_0==AND))
				{
					alt160 = 1;
				}
				} finally { DebugExitDecision(160); }
				switch (alt160)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:939:4: AND ( NO )? CHAIN
					{
					DebugLocation(939, 4);
					AND342=(IToken)Match(input,AND,Follow._AND_in_transaction7885); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_AND.Add(AND342);

					DebugLocation(939, 8);
					// MySQL51Parser.g3:939:8: ( NO )?
					int alt159=2;
					try { DebugEnterSubRule(159);
					try { DebugEnterDecision(159, false);
					int LA159_0 = input.LA(1);

					if ((LA159_0==NO))
					{
						alt159 = 1;
					}
					} finally { DebugExitDecision(159); }
					switch (alt159)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:939:8: NO
						{
						DebugLocation(939, 8);
						NO343=(IToken)Match(input,NO,Follow._NO_in_transaction7887); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_NO.Add(NO343);


						}
						break;

					}
					} finally { DebugExitSubRule(159); }

					DebugLocation(939, 12);
					CHAIN344=(IToken)Match(input,CHAIN,Follow._CHAIN_in_transaction7890); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_CHAIN.Add(CHAIN344);


					}
					break;

				}
				} finally { DebugExitSubRule(160); }

				DebugLocation(940, 3);
				// MySQL51Parser.g3:940:3: ( ( NO )? RELEASE )?
				int alt162=2;
				try { DebugEnterSubRule(162);
				try { DebugEnterDecision(162, false);
				int LA162_0 = input.LA(1);

				if ((LA162_0==NO||LA162_0==RELEASE))
				{
					alt162 = 1;
				}
				} finally { DebugExitDecision(162); }
				switch (alt162)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:940:4: ( NO )? RELEASE
					{
					DebugLocation(940, 4);
					// MySQL51Parser.g3:940:4: ( NO )?
					int alt161=2;
					try { DebugEnterSubRule(161);
					try { DebugEnterDecision(161, false);
					int LA161_0 = input.LA(1);

					if ((LA161_0==NO))
					{
						alt161 = 1;
					}
					} finally { DebugExitDecision(161); }
					switch (alt161)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:940:4: NO
						{
						DebugLocation(940, 4);
						NO345=(IToken)Match(input,NO,Follow._NO_in_transaction7897); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_NO.Add(NO345);


						}
						break;

					}
					} finally { DebugExitSubRule(161); }

					DebugLocation(940, 8);
					RELEASE346=(IToken)Match(input,RELEASE,Follow._RELEASE_in_transaction7900); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_RELEASE.Add(RELEASE346);


					}
					break;

				}
				} finally { DebugExitSubRule(162); }



				{
				// AST REWRITE
				// elements: COMMIT, CHAIN, NO, RELEASE, NO
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 940:28: -> ^( COMMIT ( ^( CHAIN ( NO )? ) )? ( ^( RELEASE ( NO )? ) )? )
				{
					DebugLocation(940, 31);
					// MySQL51Parser.g3:940:31: ^( COMMIT ( ^( CHAIN ( NO )? ) )? ( ^( RELEASE ( NO )? ) )? )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(940, 33);
					root_1 = (object)adaptor.BecomeRoot(stream_COMMIT.NextNode(), root_1);

					DebugLocation(940, 40);
					// MySQL51Parser.g3:940:40: ( ^( CHAIN ( NO )? ) )?
					if (stream_CHAIN.HasNext||stream_NO.HasNext)
					{
						DebugLocation(940, 40);
						// MySQL51Parser.g3:940:40: ^( CHAIN ( NO )? )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(940, 42);
						root_2 = (object)adaptor.BecomeRoot(stream_CHAIN.NextNode(), root_2);

						DebugLocation(940, 48);
						// MySQL51Parser.g3:940:48: ( NO )?
						if (stream_NO.HasNext)
						{
							DebugLocation(940, 48);
							adaptor.AddChild(root_2, stream_NO.NextNode());

						}
						stream_NO.Reset();

						adaptor.AddChild(root_1, root_2);
						}

					}
					stream_CHAIN.Reset();
					stream_NO.Reset();
					DebugLocation(940, 54);
					// MySQL51Parser.g3:940:54: ( ^( RELEASE ( NO )? ) )?
					if (stream_RELEASE.HasNext||stream_NO.HasNext)
					{
						DebugLocation(940, 54);
						// MySQL51Parser.g3:940:54: ^( RELEASE ( NO )? )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(940, 56);
						root_2 = (object)adaptor.BecomeRoot(stream_RELEASE.NextNode(), root_2);

						DebugLocation(940, 64);
						// MySQL51Parser.g3:940:64: ( NO )?
						if (stream_NO.HasNext)
						{
							DebugLocation(940, 64);
							adaptor.AddChild(root_2, stream_NO.NextNode());

						}
						stream_NO.Reset();

						adaptor.AddChild(root_1, root_2);
						}

					}
					stream_RELEASE.Reset();
					stream_NO.Reset();

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:941:4: ROLLBACK ( WORK )? ( AND ( NO )? CHAIN )? ( ( NO )? RELEASE )?
				{
				DebugLocation(941, 4);
				ROLLBACK347=(IToken)Match(input,ROLLBACK,Follow._ROLLBACK_in_transaction7939); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_ROLLBACK.Add(ROLLBACK347);

				DebugLocation(941, 13);
				// MySQL51Parser.g3:941:13: ( WORK )?
				int alt163=2;
				try { DebugEnterSubRule(163);
				try { DebugEnterDecision(163, false);
				int LA163_0 = input.LA(1);

				if ((LA163_0==WORK))
				{
					alt163 = 1;
				}
				} finally { DebugExitDecision(163); }
				switch (alt163)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:941:13: WORK
					{
					DebugLocation(941, 13);
					WORK348=(IToken)Match(input,WORK,Follow._WORK_in_transaction7941); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_WORK.Add(WORK348);


					}
					break;

				}
				} finally { DebugExitSubRule(163); }

				DebugLocation(942, 3);
				// MySQL51Parser.g3:942:3: ( AND ( NO )? CHAIN )?
				int alt165=2;
				try { DebugEnterSubRule(165);
				try { DebugEnterDecision(165, false);
				int LA165_0 = input.LA(1);

				if ((LA165_0==AND))
				{
					alt165 = 1;
				}
				} finally { DebugExitDecision(165); }
				switch (alt165)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:942:4: AND ( NO )? CHAIN
					{
					DebugLocation(942, 4);
					AND349=(IToken)Match(input,AND,Follow._AND_in_transaction7947); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_AND.Add(AND349);

					DebugLocation(942, 8);
					// MySQL51Parser.g3:942:8: ( NO )?
					int alt164=2;
					try { DebugEnterSubRule(164);
					try { DebugEnterDecision(164, false);
					int LA164_0 = input.LA(1);

					if ((LA164_0==NO))
					{
						alt164 = 1;
					}
					} finally { DebugExitDecision(164); }
					switch (alt164)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:942:8: NO
						{
						DebugLocation(942, 8);
						NO350=(IToken)Match(input,NO,Follow._NO_in_transaction7949); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_NO.Add(NO350);


						}
						break;

					}
					} finally { DebugExitSubRule(164); }

					DebugLocation(942, 12);
					CHAIN351=(IToken)Match(input,CHAIN,Follow._CHAIN_in_transaction7952); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_CHAIN.Add(CHAIN351);


					}
					break;

				}
				} finally { DebugExitSubRule(165); }

				DebugLocation(943, 3);
				// MySQL51Parser.g3:943:3: ( ( NO )? RELEASE )?
				int alt167=2;
				try { DebugEnterSubRule(167);
				try { DebugEnterDecision(167, false);
				int LA167_0 = input.LA(1);

				if ((LA167_0==NO||LA167_0==RELEASE))
				{
					alt167 = 1;
				}
				} finally { DebugExitDecision(167); }
				switch (alt167)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:943:4: ( NO )? RELEASE
					{
					DebugLocation(943, 4);
					// MySQL51Parser.g3:943:4: ( NO )?
					int alt166=2;
					try { DebugEnterSubRule(166);
					try { DebugEnterDecision(166, false);
					int LA166_0 = input.LA(1);

					if ((LA166_0==NO))
					{
						alt166 = 1;
					}
					} finally { DebugExitDecision(166); }
					switch (alt166)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:943:4: NO
						{
						DebugLocation(943, 4);
						NO352=(IToken)Match(input,NO,Follow._NO_in_transaction7959); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_NO.Add(NO352);


						}
						break;

					}
					} finally { DebugExitSubRule(166); }

					DebugLocation(943, 8);
					RELEASE353=(IToken)Match(input,RELEASE,Follow._RELEASE_in_transaction7962); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_RELEASE.Add(RELEASE353);


					}
					break;

				}
				} finally { DebugExitSubRule(167); }



				{
				// AST REWRITE
				// elements: ROLLBACK, CHAIN, NO, RELEASE, NO
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 943:28: -> ^( ROLLBACK ( ^( CHAIN ( NO )? ) )? ( ^( RELEASE ( NO )? ) )? )
				{
					DebugLocation(943, 31);
					// MySQL51Parser.g3:943:31: ^( ROLLBACK ( ^( CHAIN ( NO )? ) )? ( ^( RELEASE ( NO )? ) )? )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(943, 33);
					root_1 = (object)adaptor.BecomeRoot(stream_ROLLBACK.NextNode(), root_1);

					DebugLocation(943, 42);
					// MySQL51Parser.g3:943:42: ( ^( CHAIN ( NO )? ) )?
					if (stream_CHAIN.HasNext||stream_NO.HasNext)
					{
						DebugLocation(943, 42);
						// MySQL51Parser.g3:943:42: ^( CHAIN ( NO )? )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(943, 44);
						root_2 = (object)adaptor.BecomeRoot(stream_CHAIN.NextNode(), root_2);

						DebugLocation(943, 50);
						// MySQL51Parser.g3:943:50: ( NO )?
						if (stream_NO.HasNext)
						{
							DebugLocation(943, 50);
							adaptor.AddChild(root_2, stream_NO.NextNode());

						}
						stream_NO.Reset();

						adaptor.AddChild(root_1, root_2);
						}

					}
					stream_CHAIN.Reset();
					stream_NO.Reset();
					DebugLocation(943, 56);
					// MySQL51Parser.g3:943:56: ( ^( RELEASE ( NO )? ) )?
					if (stream_RELEASE.HasNext||stream_NO.HasNext)
					{
						DebugLocation(943, 56);
						// MySQL51Parser.g3:943:56: ^( RELEASE ( NO )? )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(943, 58);
						root_2 = (object)adaptor.BecomeRoot(stream_RELEASE.NextNode(), root_2);

						DebugLocation(943, 66);
						// MySQL51Parser.g3:943:66: ( NO )?
						if (stream_NO.HasNext)
						{
							DebugLocation(943, 66);
							adaptor.AddChild(root_2, stream_NO.NextNode());

						}
						stream_NO.Reset();

						adaptor.AddChild(root_1, root_2);
						}

					}
					stream_RELEASE.Reset();
					stream_NO.Reset();

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:946:4: SET (txnScope= GLOBAL |txnScope= SESSION )? TRANSACTION ISOLATION LEVEL ( READ UNCOMMITTED -> ^( ISOLATION UNCOMMITTED $txnScope) | READ COMMITTED -> ^( ISOLATION COMMITTED $txnScope) | REPEATABLE READ -> ^( ISOLATION REPEATABLE $txnScope) | SERIALIZABLE -> ^( ISOLATION SERIALIZABLE $txnScope) )
				{
				DebugLocation(946, 4);
				SET354=(IToken)Match(input,SET,Follow._SET_in_transaction8004); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_SET.Add(SET354);

				DebugLocation(947, 3);
				// MySQL51Parser.g3:947:3: (txnScope= GLOBAL |txnScope= SESSION )?
				int alt168=3;
				try { DebugEnterSubRule(168);
				try { DebugEnterDecision(168, false);
				int LA168_0 = input.LA(1);

				if ((LA168_0==GLOBAL))
				{
					alt168 = 1;
				}
				else if ((LA168_0==SESSION))
				{
					alt168 = 2;
				}
				} finally { DebugExitDecision(168); }
				switch (alt168)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:947:5: txnScope= GLOBAL
					{
					DebugLocation(947, 13);
					txnScope=(IToken)Match(input,GLOBAL,Follow._GLOBAL_in_transaction8013); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_GLOBAL.Add(txnScope);


					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:948:5: txnScope= SESSION
					{
					DebugLocation(948, 13);
					txnScope=(IToken)Match(input,SESSION,Follow._SESSION_in_transaction8022); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SESSION.Add(txnScope);


					}
					break;

				}
				} finally { DebugExitSubRule(168); }

				DebugLocation(950, 3);
				TRANSACTION355=(IToken)Match(input,TRANSACTION,Follow._TRANSACTION_in_transaction8032); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TRANSACTION.Add(TRANSACTION355);

				DebugLocation(950, 15);
				ISOLATION356=(IToken)Match(input,ISOLATION,Follow._ISOLATION_in_transaction8034); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_ISOLATION.Add(ISOLATION356);

				DebugLocation(950, 25);
				LEVEL357=(IToken)Match(input,LEVEL,Follow._LEVEL_in_transaction8036); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LEVEL.Add(LEVEL357);

				DebugLocation(951, 3);
				// MySQL51Parser.g3:951:3: ( READ UNCOMMITTED -> ^( ISOLATION UNCOMMITTED $txnScope) | READ COMMITTED -> ^( ISOLATION COMMITTED $txnScope) | REPEATABLE READ -> ^( ISOLATION REPEATABLE $txnScope) | SERIALIZABLE -> ^( ISOLATION SERIALIZABLE $txnScope) )
				int alt169=4;
				try { DebugEnterSubRule(169);
				try { DebugEnterDecision(169, false);
				switch (input.LA(1))
				{
				case READ:
					{
					int LA169_1 = input.LA(2);

					if ((LA169_1==UNCOMMITTED))
					{
						alt169 = 1;
					}
					else if ((LA169_1==COMMITTED))
					{
						alt169 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 169, 1, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					}
					break;
				case REPEATABLE:
					{
					alt169 = 3;
					}
					break;
				case SERIALIZABLE:
					{
					alt169 = 4;
					}
					break;
				default:
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 169, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
				}

				} finally { DebugExitDecision(169); }
				switch (alt169)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:951:5: READ UNCOMMITTED
					{
					DebugLocation(951, 5);
					READ358=(IToken)Match(input,READ,Follow._READ_in_transaction8042); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_READ.Add(READ358);

					DebugLocation(951, 10);
					UNCOMMITTED359=(IToken)Match(input,UNCOMMITTED,Follow._UNCOMMITTED_in_transaction8044); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_UNCOMMITTED.Add(UNCOMMITTED359);



					{
					// AST REWRITE
					// elements: ISOLATION, UNCOMMITTED, txnScope
					// token labels: txnScope
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleITokenStream stream_txnScope=new RewriteRuleITokenStream(adaptor,"token txnScope",txnScope);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 951:24: -> ^( ISOLATION UNCOMMITTED $txnScope)
					{
						DebugLocation(951, 27);
						// MySQL51Parser.g3:951:27: ^( ISOLATION UNCOMMITTED $txnScope)
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(951, 29);
						root_1 = (object)adaptor.BecomeRoot(stream_ISOLATION.NextNode(), root_1);

						DebugLocation(951, 39);
						adaptor.AddChild(root_1, stream_UNCOMMITTED.NextNode());
						DebugLocation(951, 52);
						adaptor.AddChild(root_1, stream_txnScope.NextNode());

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:952:5: READ COMMITTED
					{
					DebugLocation(952, 5);
					READ360=(IToken)Match(input,READ,Follow._READ_in_transaction8063); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_READ.Add(READ360);

					DebugLocation(952, 10);
					COMMITTED361=(IToken)Match(input,COMMITTED,Follow._COMMITTED_in_transaction8065); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMITTED.Add(COMMITTED361);



					{
					// AST REWRITE
					// elements: ISOLATION, COMMITTED, txnScope
					// token labels: txnScope
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleITokenStream stream_txnScope=new RewriteRuleITokenStream(adaptor,"token txnScope",txnScope);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 952:23: -> ^( ISOLATION COMMITTED $txnScope)
					{
						DebugLocation(952, 26);
						// MySQL51Parser.g3:952:26: ^( ISOLATION COMMITTED $txnScope)
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(952, 28);
						root_1 = (object)adaptor.BecomeRoot(stream_ISOLATION.NextNode(), root_1);

						DebugLocation(952, 38);
						adaptor.AddChild(root_1, stream_COMMITTED.NextNode());
						DebugLocation(952, 49);
						adaptor.AddChild(root_1, stream_txnScope.NextNode());

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;
				case 3:
					DebugEnterAlt(3);
					// MySQL51Parser.g3:953:5: REPEATABLE READ
					{
					DebugLocation(953, 5);
					REPEATABLE362=(IToken)Match(input,REPEATABLE,Follow._REPEATABLE_in_transaction8086); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_REPEATABLE.Add(REPEATABLE362);

					DebugLocation(953, 16);
					READ363=(IToken)Match(input,READ,Follow._READ_in_transaction8088); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_READ.Add(READ363);



					{
					// AST REWRITE
					// elements: ISOLATION, REPEATABLE, txnScope
					// token labels: txnScope
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleITokenStream stream_txnScope=new RewriteRuleITokenStream(adaptor,"token txnScope",txnScope);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 953:24: -> ^( ISOLATION REPEATABLE $txnScope)
					{
						DebugLocation(953, 27);
						// MySQL51Parser.g3:953:27: ^( ISOLATION REPEATABLE $txnScope)
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(953, 29);
						root_1 = (object)adaptor.BecomeRoot(stream_ISOLATION.NextNode(), root_1);

						DebugLocation(953, 39);
						adaptor.AddChild(root_1, stream_REPEATABLE.NextNode());
						DebugLocation(953, 51);
						adaptor.AddChild(root_1, stream_txnScope.NextNode());

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;
				case 4:
					DebugEnterAlt(4);
					// MySQL51Parser.g3:954:5: SERIALIZABLE
					{
					DebugLocation(954, 5);
					SERIALIZABLE364=(IToken)Match(input,SERIALIZABLE,Follow._SERIALIZABLE_in_transaction8108); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SERIALIZABLE.Add(SERIALIZABLE364);



					{
					// AST REWRITE
					// elements: ISOLATION, SERIALIZABLE, txnScope
					// token labels: txnScope
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleITokenStream stream_txnScope=new RewriteRuleITokenStream(adaptor,"token txnScope",txnScope);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 954:21: -> ^( ISOLATION SERIALIZABLE $txnScope)
					{
						DebugLocation(954, 24);
						// MySQL51Parser.g3:954:24: ^( ISOLATION SERIALIZABLE $txnScope)
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(954, 26);
						root_1 = (object)adaptor.BecomeRoot(stream_ISOLATION.NextNode(), root_1);

						DebugLocation(954, 36);
						adaptor.AddChild(root_1, stream_SERIALIZABLE.NextNode());
						DebugLocation(954, 50);
						adaptor.AddChild(root_1, stream_txnScope.NextNode());

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;

				}
				} finally { DebugExitSubRule(169); }


				}
				break;
			case 5:
				DebugEnterAlt(5);
				// MySQL51Parser.g3:956:4: savepoint
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(956, 4);
				PushFollow(Follow._savepoint_in_transaction8132);
				savepoint365=savepoint();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, savepoint365.Tree);

				}
				break;
			case 6:
				DebugEnterAlt(6);
				// MySQL51Parser.g3:957:4: lockTables
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(957, 4);
				PushFollow(Follow._lockTables_in_transaction8137);
				lockTables366=lockTables();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, lockTables366.Tree);

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("transaction", 68);
			LeaveRule("transaction", 68);
			LeaveRule_transaction();
		}
		DebugLocation(959, 1);
		} finally { DebugExitRule(GrammarFileName, "transaction"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "transaction"

	private sealed partial class savepoint_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public savepoint_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_savepoint();
	partial void LeaveRule_savepoint();

	// $ANTLR start "savepoint"
	// MySQL51Parser.g3:962:1: savepoint : ( ( RELEASE )? SAVEPOINT ident -> ^( SAVEPOINT ident ( RELEASE )? ) | ROLLBACK ( WORK )? TO ( SAVEPOINT )? ident -> ^( ROLLBACK_POINT ident ) );
	[GrammarRule("savepoint")]
	private MySQL51Parser.savepoint_return savepoint()
	{
		EnterRule_savepoint();
		EnterRule("savepoint", 69);
		TraceIn("savepoint", 69);
		MySQL51Parser.savepoint_return retval = new MySQL51Parser.savepoint_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken RELEASE367 = default(IToken);
		IToken SAVEPOINT368 = default(IToken);
		IToken ROLLBACK370 = default(IToken);
		IToken WORK371 = default(IToken);
		IToken TO372 = default(IToken);
		IToken SAVEPOINT373 = default(IToken);
		MySQL51Parser.ident_return ident369 = default(MySQL51Parser.ident_return);
		MySQL51Parser.ident_return ident374 = default(MySQL51Parser.ident_return);

		object RELEASE367_tree = default(object);
		object SAVEPOINT368_tree = default(object);
		object ROLLBACK370_tree = default(object);
		object WORK371_tree = default(object);
		object TO372_tree = default(object);
		object SAVEPOINT373_tree = default(object);
		RewriteRuleITokenStream stream_RELEASE=new RewriteRuleITokenStream(adaptor,"token RELEASE");
		RewriteRuleITokenStream stream_SAVEPOINT=new RewriteRuleITokenStream(adaptor,"token SAVEPOINT");
		RewriteRuleITokenStream stream_ROLLBACK=new RewriteRuleITokenStream(adaptor,"token ROLLBACK");
		RewriteRuleITokenStream stream_WORK=new RewriteRuleITokenStream(adaptor,"token WORK");
		RewriteRuleITokenStream stream_TO=new RewriteRuleITokenStream(adaptor,"token TO");
		RewriteRuleSubtreeStream stream_ident=new RewriteRuleSubtreeStream(adaptor,"rule ident");
		try { DebugEnterRule(GrammarFileName, "savepoint");
		DebugLocation(962, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:963:2: ( ( RELEASE )? SAVEPOINT ident -> ^( SAVEPOINT ident ( RELEASE )? ) | ROLLBACK ( WORK )? TO ( SAVEPOINT )? ident -> ^( ROLLBACK_POINT ident ) )
			int alt174=2;
			try { DebugEnterDecision(174, false);
			int LA174_0 = input.LA(1);

			if ((LA174_0==RELEASE||LA174_0==SAVEPOINT))
			{
				alt174 = 1;
			}
			else if ((LA174_0==ROLLBACK))
			{
				alt174 = 2;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 174, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(174); }
			switch (alt174)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:963:4: ( RELEASE )? SAVEPOINT ident
				{
				DebugLocation(963, 4);
				// MySQL51Parser.g3:963:4: ( RELEASE )?
				int alt171=2;
				try { DebugEnterSubRule(171);
				try { DebugEnterDecision(171, false);
				int LA171_0 = input.LA(1);

				if ((LA171_0==RELEASE))
				{
					alt171 = 1;
				}
				} finally { DebugExitDecision(171); }
				switch (alt171)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:963:4: RELEASE
					{
					DebugLocation(963, 4);
					RELEASE367=(IToken)Match(input,RELEASE,Follow._RELEASE_in_savepoint8151); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_RELEASE.Add(RELEASE367);


					}
					break;

				}
				} finally { DebugExitSubRule(171); }

				DebugLocation(963, 13);
				SAVEPOINT368=(IToken)Match(input,SAVEPOINT,Follow._SAVEPOINT_in_savepoint8154); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_SAVEPOINT.Add(SAVEPOINT368);

				DebugLocation(963, 23);
				PushFollow(Follow._ident_in_savepoint8156);
				ident369=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(ident369.Tree);


				{
				// AST REWRITE
				// elements: SAVEPOINT, ident, RELEASE
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 963:32: -> ^( SAVEPOINT ident ( RELEASE )? )
				{
					DebugLocation(963, 35);
					// MySQL51Parser.g3:963:35: ^( SAVEPOINT ident ( RELEASE )? )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(963, 37);
					root_1 = (object)adaptor.BecomeRoot(stream_SAVEPOINT.NextNode(), root_1);

					DebugLocation(963, 47);
					adaptor.AddChild(root_1, stream_ident.NextTree());
					DebugLocation(963, 53);
					// MySQL51Parser.g3:963:53: ( RELEASE )?
					if (stream_RELEASE.HasNext)
					{
						DebugLocation(963, 53);
						adaptor.AddChild(root_1, stream_RELEASE.NextNode());

					}
					stream_RELEASE.Reset();

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:964:4: ROLLBACK ( WORK )? TO ( SAVEPOINT )? ident
				{
				DebugLocation(964, 4);
				ROLLBACK370=(IToken)Match(input,ROLLBACK,Follow._ROLLBACK_in_savepoint8175); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_ROLLBACK.Add(ROLLBACK370);

				DebugLocation(964, 13);
				// MySQL51Parser.g3:964:13: ( WORK )?
				int alt172=2;
				try { DebugEnterSubRule(172);
				try { DebugEnterDecision(172, false);
				int LA172_0 = input.LA(1);

				if ((LA172_0==WORK))
				{
					alt172 = 1;
				}
				} finally { DebugExitDecision(172); }
				switch (alt172)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:964:13: WORK
					{
					DebugLocation(964, 13);
					WORK371=(IToken)Match(input,WORK,Follow._WORK_in_savepoint8177); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_WORK.Add(WORK371);


					}
					break;

				}
				} finally { DebugExitSubRule(172); }

				DebugLocation(964, 19);
				TO372=(IToken)Match(input,TO,Follow._TO_in_savepoint8180); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TO.Add(TO372);

				DebugLocation(964, 22);
				// MySQL51Parser.g3:964:22: ( SAVEPOINT )?
				int alt173=2;
				try { DebugEnterSubRule(173);
				try { DebugEnterDecision(173, false);
				int LA173_0 = input.LA(1);

				if ((LA173_0==SAVEPOINT))
				{
					int LA173_1 = input.LA(2);

					if ((LA173_1==ACTION||(LA173_1>=ADDDATE && LA173_1<=ALGORITHM)||LA173_1==ANY||LA173_1==ASCII||(LA173_1>=AT && LA173_1<=BACKUP)||LA173_1==BEGIN||(LA173_1>=BINLOG && LA173_1<=BIT)||(LA173_1>=BLOCK && LA173_1<=BOOLEAN)||LA173_1==BTREE||(LA173_1>=BYTE && LA173_1<=CACHE)||LA173_1==CASCADED||LA173_1==CHAIN||LA173_1==CHANGED||LA173_1==CHARSET||(LA173_1>=CHECKSUM && LA173_1<=CODE)||LA173_1==COLLATION||LA173_1==COLUMNS||LA173_1==COMMENT||(LA173_1>=COMMIT && LA173_1<=CONCURRENT)||(LA173_1>=CONNECTION && LA173_1<=CONSISTENT)||(LA173_1>=CONTAINS && LA173_1<=CONTEXT)||LA173_1==CONTRIBUTORS||LA173_1==CPU||LA173_1==CUBE||LA173_1==DATA||(LA173_1>=DATAFILE && LA173_1<=DATETIME)||LA173_1==DAY||LA173_1==DEALLOCATE||LA173_1==DEFINER||LA173_1==DELAY_KEY_WRITE||LA173_1==DES_KEY_FILE||(LA173_1>=DIRECTORY && LA173_1<=DISK)||LA173_1==DO||(LA173_1>=DUMPFILE && LA173_1<=DYNAMIC)||LA173_1==ENABLE||(LA173_1>=END && LA173_1<=ENUM)||(LA173_1>=ERRORS && LA173_1<=ESCAPE)||(LA173_1>=EVENT && LA173_1<=EXECUTE)||LA173_1==EXPANSION||(LA173_1>=EXTENDED && LA173_1<=EXTENT_SIZE)||(LA173_1>=FAST && LA173_1<=FAULTS)||(LA173_1>=FIELDS && LA173_1<=FIXED)||LA173_1==FLUSH||(LA173_1>=FOUND && LA173_1<=FRAC_SECOND)||LA173_1==FULL||(LA173_1>=FUNCTION && LA173_1<=GLOBAL)||LA173_1==GRANTS||LA173_1==GROUP||(LA173_1>=HANDLER && LA173_1<=HASH)||LA173_1==HELP||(LA173_1>=HOST && LA173_1<=HOUR)||(LA173_1>=ID && LA173_1<=IDENTIFIED)||LA173_1==IMPORT||LA173_1==INDEXES||LA173_1==INITIAL_SIZE||LA173_1==INNOBASE||(LA173_1>=INSERT_METHOD && LA173_1<=INSTALL)||(LA173_1>=INVOKER && LA173_1<=IPC)||(LA173_1>=ISOLATION && LA173_1<=ISSUER)||LA173_1==KEY_BLOCK_SIZE||(LA173_1>=LABEL && LA173_1<=LAST)||LA173_1==LEAVES||LA173_1==LESS||LA173_1==LEVEL||(LA173_1>=LINESTRING && LA173_1<=LIST)||LA173_1==LOCAL||(LA173_1>=LOCKS && LA173_1<=LOGFILE)||LA173_1==LOGS||(LA173_1>=MASTER && LA173_1<=MASTER_SSL_KEY)||LA173_1==MASTER_USER||(LA173_1>=MAX_CONNECTIONS_PER_HOUR && LA173_1<=MEDIUM)||(LA173_1>=MEMORY && LA173_1<=MICROSECOND)||LA173_1==MIGRATE||LA173_1==MINUTE||LA173_1==MIN_ROWS||LA173_1==MODE||LA173_1==MODIFY||LA173_1==MONTH||(LA173_1>=MULTILINESTRING && LA173_1<=NATIONAL)||(LA173_1>=NCHAR && LA173_1<=NONE)||LA173_1==NO_WAIT||(LA173_1>=NVARCHAR && LA173_1<=OLD_PASSWORD)||(LA173_1>=ONE && LA173_1<=OPEN)||LA173_1==OPTIONS||(LA173_1>=OWNER && LA173_1<=PLUGINS)||(LA173_1>=POINT && LA173_1<=PORT)||(LA173_1>=PREPARE && LA173_1<=PREV)||LA173_1==PRIVILEGES||(LA173_1>=PROCESS && LA173_1<=PROFILES)||(LA173_1>=QUARTER && LA173_1<=QUICK)||(LA173_1>=REBUILD && LA173_1<=REDUNDANT)||(LA173_1>=RELAY_LOG_FILE && LA173_1<=RELAY_THREAD)||(LA173_1>=RELOAD && LA173_1<=REMOVE)||(LA173_1>=REORGANIZE && LA173_1<=REPAIR)||LA173_1==REPEATABLE||LA173_1==REPLICATION||(LA173_1>=RESET && LA173_1<=RESTORE)||LA173_1==RESUME||LA173_1==RETURNS||(LA173_1>=ROLLBACK && LA173_1<=ROW_FORMAT)||(LA173_1>=RTREE && LA173_1<=SCHEDULE)||LA173_1==SECOND||LA173_1==SECURITY||(LA173_1>=SERIAL && LA173_1<=SESSION)||LA173_1==SHARE||(LA173_1>=SHUTDOWN && LA173_1<=SLAVE)||(LA173_1>=SNAPSHOT && LA173_1<=SOCKET)||(LA173_1>=SONAME && LA173_1<=SOURCE)||(LA173_1>=SQL_BUFFER_RESULT && LA173_1<=SQL_CACHE)||LA173_1==SQL_NO_CACHE||LA173_1==SQL_THREAD||LA173_1==START||(LA173_1>=STARTS && LA173_1<=STATUS)||(LA173_1>=STOP && LA173_1<=STORAGE)||(LA173_1>=STRING_KEYWORD && LA173_1<=SUBPARTITIONS)||(LA173_1>=SUPER && LA173_1<=SWITCHES)||(LA173_1>=TABLES && LA173_1<=TEMPTABLE)||(LA173_1>=TEXT && LA173_1<=THAN)||(LA173_1>=TIME && LA173_1<=TIMESTAMP_DIFF)||(LA173_1>=TRANSACTION && LA173_1<=TRANSACTIONAL)||LA173_1==TRIGGERS||(LA173_1>=TRUNCATE && LA173_1<=UNDEFINED)||(LA173_1>=UNDOFILE && LA173_1<=UNINSTALL)||LA173_1==UNKNOWN||LA173_1==UNTIL||LA173_1==UPGRADE||LA173_1==USER||LA173_1==USE_FRM||LA173_1==VALUE||LA173_1==VARIABLES||(LA173_1>=VIEW && LA173_1<=WEEK)||(LA173_1>=WORK && LA173_1<=WRAPPER)||(LA173_1>=X509 && LA173_1<=XA)||LA173_1==YEAR))
					{
						alt173 = 1;
					}
				}
				} finally { DebugExitDecision(173); }
				switch (alt173)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:964:22: SAVEPOINT
					{
					DebugLocation(964, 22);
					SAVEPOINT373=(IToken)Match(input,SAVEPOINT,Follow._SAVEPOINT_in_savepoint8182); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SAVEPOINT.Add(SAVEPOINT373);


					}
					break;

				}
				} finally { DebugExitSubRule(173); }

				DebugLocation(964, 33);
				PushFollow(Follow._ident_in_savepoint8185);
				ident374=ident();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_ident.Add(ident374.Tree);


				{
				// AST REWRITE
				// elements: ident
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 964:40: -> ^( ROLLBACK_POINT ident )
				{
					DebugLocation(964, 43);
					// MySQL51Parser.g3:964:43: ^( ROLLBACK_POINT ident )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(964, 45);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(ROLLBACK_POINT, "ROLLBACK_POINT"), root_1);

					DebugLocation(964, 60);
					adaptor.AddChild(root_1, stream_ident.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("savepoint", 69);
			LeaveRule("savepoint", 69);
			LeaveRule_savepoint();
		}
		DebugLocation(965, 1);
		} finally { DebugExitRule(GrammarFileName, "savepoint"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "savepoint"

	private sealed partial class insert_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public insert_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_insert();
	partial void LeaveRule_insert();

	// $ANTLR start "insert"
	// MySQL51Parser.g3:971:1: insert : INSERT (opt= LOW_PRIORITY |opt= DELAYED |opt= HIGH_PRIORITY )? ( IGNORE )? ( INTO )? table= simple_table_ref_no_alias ( insert_columns | set_columns | select ) ( on_dup_key )? -> ^( INSERT ( IGNORE )? ( INTO )? ( $opt)? ^( TABLE $table) ( insert_columns )? ( set_columns )? ( select )? ( on_dup_key )? ) ;
	[GrammarRule("insert")]
	private MySQL51Parser.insert_return insert()
	{
		EnterRule_insert();
		EnterRule("insert", 70);
		TraceIn("insert", 70);
		MySQL51Parser.insert_return retval = new MySQL51Parser.insert_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken opt = default(IToken);
		IToken INSERT375 = default(IToken);
		IToken IGNORE376 = default(IToken);
		IToken INTO377 = default(IToken);
		MySQL51Parser.simple_table_ref_no_alias_return table = default(MySQL51Parser.simple_table_ref_no_alias_return);
		MySQL51Parser.insert_columns_return insert_columns378 = default(MySQL51Parser.insert_columns_return);
		MySQL51Parser.set_columns_return set_columns379 = default(MySQL51Parser.set_columns_return);
		MySQL51Parser.select_return select380 = default(MySQL51Parser.select_return);
		MySQL51Parser.on_dup_key_return on_dup_key381 = default(MySQL51Parser.on_dup_key_return);

		object opt_tree = default(object);
		object INSERT375_tree = default(object);
		object IGNORE376_tree = default(object);
		object INTO377_tree = default(object);
		RewriteRuleITokenStream stream_INSERT=new RewriteRuleITokenStream(adaptor,"token INSERT");
		RewriteRuleITokenStream stream_LOW_PRIORITY=new RewriteRuleITokenStream(adaptor,"token LOW_PRIORITY");
		RewriteRuleITokenStream stream_DELAYED=new RewriteRuleITokenStream(adaptor,"token DELAYED");
		RewriteRuleITokenStream stream_HIGH_PRIORITY=new RewriteRuleITokenStream(adaptor,"token HIGH_PRIORITY");
		RewriteRuleITokenStream stream_IGNORE=new RewriteRuleITokenStream(adaptor,"token IGNORE");
		RewriteRuleITokenStream stream_INTO=new RewriteRuleITokenStream(adaptor,"token INTO");
		RewriteRuleSubtreeStream stream_simple_table_ref_no_alias=new RewriteRuleSubtreeStream(adaptor,"rule simple_table_ref_no_alias");
		RewriteRuleSubtreeStream stream_insert_columns=new RewriteRuleSubtreeStream(adaptor,"rule insert_columns");
		RewriteRuleSubtreeStream stream_set_columns=new RewriteRuleSubtreeStream(adaptor,"rule set_columns");
		RewriteRuleSubtreeStream stream_select=new RewriteRuleSubtreeStream(adaptor,"rule select");
		RewriteRuleSubtreeStream stream_on_dup_key=new RewriteRuleSubtreeStream(adaptor,"rule on_dup_key");
		try { DebugEnterRule(GrammarFileName, "insert");
		DebugLocation(971, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:972:2: ( INSERT (opt= LOW_PRIORITY |opt= DELAYED |opt= HIGH_PRIORITY )? ( IGNORE )? ( INTO )? table= simple_table_ref_no_alias ( insert_columns | set_columns | select ) ( on_dup_key )? -> ^( INSERT ( IGNORE )? ( INTO )? ( $opt)? ^( TABLE $table) ( insert_columns )? ( set_columns )? ( select )? ( on_dup_key )? ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:972:4: INSERT (opt= LOW_PRIORITY |opt= DELAYED |opt= HIGH_PRIORITY )? ( IGNORE )? ( INTO )? table= simple_table_ref_no_alias ( insert_columns | set_columns | select ) ( on_dup_key )?
			{
			DebugLocation(972, 4);
			INSERT375=(IToken)Match(input,INSERT,Follow._INSERT_in_insert8209); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_INSERT.Add(INSERT375);

			DebugLocation(972, 11);
			// MySQL51Parser.g3:972:11: (opt= LOW_PRIORITY |opt= DELAYED |opt= HIGH_PRIORITY )?
			int alt175=4;
			try { DebugEnterSubRule(175);
			try { DebugEnterDecision(175, false);
			switch (input.LA(1))
			{
			case LOW_PRIORITY:
				{
				alt175 = 1;
				}
				break;
			case DELAYED:
				{
				alt175 = 2;
				}
				break;
			case HIGH_PRIORITY:
				{
				alt175 = 3;
				}
				break;
			}

			} finally { DebugExitDecision(175); }
			switch (alt175)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:972:12: opt= LOW_PRIORITY
				{
				DebugLocation(972, 15);
				opt=(IToken)Match(input,LOW_PRIORITY,Follow._LOW_PRIORITY_in_insert8214); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LOW_PRIORITY.Add(opt);


				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:972:31: opt= DELAYED
				{
				DebugLocation(972, 34);
				opt=(IToken)Match(input,DELAYED,Follow._DELAYED_in_insert8220); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_DELAYED.Add(opt);


				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:972:45: opt= HIGH_PRIORITY
				{
				DebugLocation(972, 48);
				opt=(IToken)Match(input,HIGH_PRIORITY,Follow._HIGH_PRIORITY_in_insert8226); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_HIGH_PRIORITY.Add(opt);


				}
				break;

			}
			} finally { DebugExitSubRule(175); }

			DebugLocation(973, 3);
			// MySQL51Parser.g3:973:3: ( IGNORE )?
			int alt176=2;
			try { DebugEnterSubRule(176);
			try { DebugEnterDecision(176, false);
			int LA176_0 = input.LA(1);

			if ((LA176_0==IGNORE))
			{
				alt176 = 1;
			}
			} finally { DebugExitDecision(176); }
			switch (alt176)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:973:3: IGNORE
				{
				DebugLocation(973, 3);
				IGNORE376=(IToken)Match(input,IGNORE,Follow._IGNORE_in_insert8232); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_IGNORE.Add(IGNORE376);


				}
				break;

			}
			} finally { DebugExitSubRule(176); }

			DebugLocation(973, 11);
			// MySQL51Parser.g3:973:11: ( INTO )?
			int alt177=2;
			try { DebugEnterSubRule(177);
			try { DebugEnterDecision(177, false);
			int LA177_0 = input.LA(1);

			if ((LA177_0==INTO))
			{
				alt177 = 1;
			}
			} finally { DebugExitDecision(177); }
			switch (alt177)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:973:11: INTO
				{
				DebugLocation(973, 11);
				INTO377=(IToken)Match(input,INTO,Follow._INTO_in_insert8235); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_INTO.Add(INTO377);


				}
				break;

			}
			} finally { DebugExitSubRule(177); }

			DebugLocation(974, 8);
			PushFollow(Follow._simple_table_ref_no_alias_in_insert8242);
			table=simple_table_ref_no_alias();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_simple_table_ref_no_alias.Add(table.Tree);
			DebugLocation(975, 3);
			// MySQL51Parser.g3:975:3: ( insert_columns | set_columns | select )
			int alt178=3;
			try { DebugEnterSubRule(178);
			try { DebugEnterDecision(178, false);
			switch (input.LA(1))
			{
			case LPAREN:
				{
				int LA178_1 = input.LA(2);

				if ((LA178_1==ACTION||(LA178_1>=ADDDATE && LA178_1<=ALGORITHM)||LA178_1==ANY||LA178_1==ASCII||(LA178_1>=AT && LA178_1<=BACKUP)||LA178_1==BEGIN||(LA178_1>=BINLOG && LA178_1<=BIT)||(LA178_1>=BLOCK && LA178_1<=BOOLEAN)||LA178_1==BTREE||(LA178_1>=BYTE && LA178_1<=CACHE)||LA178_1==CASCADED||LA178_1==CHAIN||LA178_1==CHANGED||LA178_1==CHARSET||(LA178_1>=CHECKSUM && LA178_1<=CODE)||LA178_1==COLLATION||LA178_1==COLUMNS||LA178_1==COMMENT||(LA178_1>=COMMIT && LA178_1<=CONCURRENT)||(LA178_1>=CONNECTION && LA178_1<=CONSISTENT)||(LA178_1>=CONTAINS && LA178_1<=CONTEXT)||LA178_1==CONTRIBUTORS||LA178_1==CPU||LA178_1==CUBE||LA178_1==DATA||(LA178_1>=DATAFILE && LA178_1<=DATETIME)||LA178_1==DAY||LA178_1==DEALLOCATE||LA178_1==DEFINER||LA178_1==DELAY_KEY_WRITE||LA178_1==DES_KEY_FILE||(LA178_1>=DIRECTORY && LA178_1<=DISK)||LA178_1==DO||(LA178_1>=DUMPFILE && LA178_1<=DYNAMIC)||LA178_1==ENABLE||(LA178_1>=END && LA178_1<=ENUM)||(LA178_1>=ERRORS && LA178_1<=ESCAPE)||(LA178_1>=EVENT && LA178_1<=EXECUTE)||LA178_1==EXPANSION||(LA178_1>=EXTENDED && LA178_1<=EXTENT_SIZE)||(LA178_1>=FAST && LA178_1<=FAULTS)||(LA178_1>=FIELDS && LA178_1<=FIXED)||LA178_1==FLUSH||(LA178_1>=FOUND && LA178_1<=FRAC_SECOND)||LA178_1==FULL||(LA178_1>=FUNCTION && LA178_1<=GLOBAL)||LA178_1==GRANTS||LA178_1==GROUP||(LA178_1>=HANDLER && LA178_1<=HASH)||LA178_1==HELP||(LA178_1>=HOST && LA178_1<=HOUR)||(LA178_1>=ID && LA178_1<=IDENTIFIED)||LA178_1==IMPORT||LA178_1==INDEXES||LA178_1==INITIAL_SIZE||LA178_1==INNOBASE||(LA178_1>=INSERT_METHOD && LA178_1<=INSTALL)||(LA178_1>=INVOKER && LA178_1<=IPC)||(LA178_1>=ISOLATION && LA178_1<=ISSUER)||LA178_1==KEY_BLOCK_SIZE||(LA178_1>=LABEL && LA178_1<=LAST)||LA178_1==LEAVES||LA178_1==LESS||LA178_1==LEVEL||(LA178_1>=LINESTRING && LA178_1<=LIST)||LA178_1==LOCAL||(LA178_1>=LOCKS && LA178_1<=LOGFILE)||LA178_1==LOGS||(LA178_1>=MASTER && LA178_1<=MASTER_SSL_KEY)||LA178_1==MASTER_USER||(LA178_1>=MAX_CONNECTIONS_PER_HOUR && LA178_1<=MEDIUM)||(LA178_1>=MEMORY && LA178_1<=MICROSECOND)||LA178_1==MIGRATE||LA178_1==MINUTE||LA178_1==MIN_ROWS||LA178_1==MODE||LA178_1==MODIFY||LA178_1==MONTH||(LA178_1>=MULTILINESTRING && LA178_1<=NATIONAL)||(LA178_1>=NCHAR && LA178_1<=NONE)||LA178_1==NO_WAIT||(LA178_1>=NVARCHAR && LA178_1<=OLD_PASSWORD)||(LA178_1>=ONE && LA178_1<=OPEN)||LA178_1==OPTIONS||(LA178_1>=OWNER && LA178_1<=PLUGINS)||(LA178_1>=POINT && LA178_1<=PORT)||(LA178_1>=PREPARE && LA178_1<=PREV)||LA178_1==PRIVILEGES||(LA178_1>=PROCESS && LA178_1<=PROFILES)||(LA178_1>=QUARTER && LA178_1<=QUICK)||(LA178_1>=REBUILD && LA178_1<=REDUNDANT)||(LA178_1>=RELAY_LOG_FILE && LA178_1<=RELAY_THREAD)||(LA178_1>=RELOAD && LA178_1<=REMOVE)||(LA178_1>=REORGANIZE && LA178_1<=REPAIR)||LA178_1==REPEATABLE||LA178_1==REPLICATION||(LA178_1>=RESET && LA178_1<=RESTORE)||LA178_1==RESUME||LA178_1==RETURNS||(LA178_1>=ROLLBACK && LA178_1<=SCHEDULE)||LA178_1==SECOND||LA178_1==SECURITY||(LA178_1>=SERIAL && LA178_1<=SESSION)||LA178_1==SHARE||(LA178_1>=SHUTDOWN && LA178_1<=SLAVE)||(LA178_1>=SNAPSHOT && LA178_1<=SOCKET)||(LA178_1>=SONAME && LA178_1<=SOURCE)||(LA178_1>=SQL_BUFFER_RESULT && LA178_1<=SQL_CACHE)||LA178_1==SQL_NO_CACHE||LA178_1==SQL_THREAD||LA178_1==START||(LA178_1>=STARTS && LA178_1<=STATUS)||(LA178_1>=STOP && LA178_1<=STORAGE)||(LA178_1>=STRING_KEYWORD && LA178_1<=SUBPARTITIONS)||(LA178_1>=SUPER && LA178_1<=SWITCHES)||(LA178_1>=TABLES && LA178_1<=TEMPTABLE)||(LA178_1>=TEXT && LA178_1<=THAN)||(LA178_1>=TIME && LA178_1<=TIMESTAMP_DIFF)||(LA178_1>=TRANSACTION && LA178_1<=TRANSACTIONAL)||LA178_1==TRIGGERS||(LA178_1>=TRUNCATE && LA178_1<=UNDEFINED)||(LA178_1>=UNDOFILE && LA178_1<=UNINSTALL)||LA178_1==UNKNOWN||LA178_1==UNTIL||LA178_1==UPGRADE||LA178_1==USER||LA178_1==USE_FRM||LA178_1==VALUE||LA178_1==VARIABLES||(LA178_1>=VIEW && LA178_1<=WEEK)||(LA178_1>=WORK && LA178_1<=WRAPPER)||(LA178_1>=X509 && LA178_1<=XA)||LA178_1==YEAR))
				{
					alt178 = 1;
				}
				else if ((LA178_1==LPAREN||LA178_1==SELECT))
				{
					alt178 = 3;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 178, 1, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
				}
				break;
			case VALUE:
			case VALUES:
				{
				alt178 = 1;
				}
				break;
			case SET:
				{
				alt178 = 2;
				}
				break;
			case SELECT:
				{
				alt178 = 3;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 178, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(178); }
			switch (alt178)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:975:5: insert_columns
				{
				DebugLocation(975, 5);
				PushFollow(Follow._insert_columns_in_insert8248);
				insert_columns378=insert_columns();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_insert_columns.Add(insert_columns378.Tree);

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:976:5: set_columns
				{
				DebugLocation(976, 5);
				PushFollow(Follow._set_columns_in_insert8254);
				set_columns379=set_columns();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_set_columns.Add(set_columns379.Tree);

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:977:5: select
				{
				DebugLocation(977, 5);
				PushFollow(Follow._select_in_insert8260);
				select380=select();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_select.Add(select380.Tree);

				}
				break;

			}
			} finally { DebugExitSubRule(178); }

			DebugLocation(979, 3);
			// MySQL51Parser.g3:979:3: ( on_dup_key )?
			int alt179=2;
			try { DebugEnterSubRule(179);
			try { DebugEnterDecision(179, false);
			int LA179_0 = input.LA(1);

			if ((LA179_0==ON))
			{
				alt179 = 1;
			}
			} finally { DebugExitDecision(179); }
			switch (alt179)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:979:3: on_dup_key
				{
				DebugLocation(979, 3);
				PushFollow(Follow._on_dup_key_in_insert8268);
				on_dup_key381=on_dup_key();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_on_dup_key.Add(on_dup_key381.Tree);

				}
				break;

			}
			} finally { DebugExitSubRule(179); }



			{
			// AST REWRITE
			// elements: INSERT, IGNORE, INTO, opt, table, insert_columns, set_columns, select, on_dup_key
			// token labels: opt
			// rule labels: table, retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleITokenStream stream_opt=new RewriteRuleITokenStream(adaptor,"token opt",opt);
			RewriteRuleSubtreeStream stream_table=new RewriteRuleSubtreeStream(adaptor,"rule table",table!=null?table.Tree:null);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 980:3: -> ^( INSERT ( IGNORE )? ( INTO )? ( $opt)? ^( TABLE $table) ( insert_columns )? ( set_columns )? ( select )? ( on_dup_key )? )
			{
				DebugLocation(980, 6);
				// MySQL51Parser.g3:980:6: ^( INSERT ( IGNORE )? ( INTO )? ( $opt)? ^( TABLE $table) ( insert_columns )? ( set_columns )? ( select )? ( on_dup_key )? )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(980, 8);
				root_1 = (object)adaptor.BecomeRoot(stream_INSERT.NextNode(), root_1);

				DebugLocation(980, 15);
				// MySQL51Parser.g3:980:15: ( IGNORE )?
				if (stream_IGNORE.HasNext)
				{
					DebugLocation(980, 15);
					adaptor.AddChild(root_1, stream_IGNORE.NextNode());

				}
				stream_IGNORE.Reset();
				DebugLocation(980, 23);
				// MySQL51Parser.g3:980:23: ( INTO )?
				if (stream_INTO.HasNext)
				{
					DebugLocation(980, 23);
					adaptor.AddChild(root_1, stream_INTO.NextNode());

				}
				stream_INTO.Reset();
				DebugLocation(980, 30);
				// MySQL51Parser.g3:980:30: ( $opt)?
				if (stream_opt.HasNext)
				{
					DebugLocation(980, 30);
					adaptor.AddChild(root_1, stream_opt.NextNode());

				}
				stream_opt.Reset();
				DebugLocation(980, 35);
				// MySQL51Parser.g3:980:35: ^( TABLE $table)
				{
				object root_2 = (object)adaptor.Nil();
				DebugLocation(980, 37);
				root_2 = (object)adaptor.BecomeRoot((object)adaptor.Create(TABLE, "TABLE"), root_2);

				DebugLocation(980, 44);
				adaptor.AddChild(root_2, stream_table.NextTree());

				adaptor.AddChild(root_1, root_2);
				}
				DebugLocation(982, 4);
				// MySQL51Parser.g3:982:4: ( insert_columns )?
				if (stream_insert_columns.HasNext)
				{
					DebugLocation(982, 4);
					adaptor.AddChild(root_1, stream_insert_columns.NextTree());

				}
				stream_insert_columns.Reset();
				DebugLocation(983, 4);
				// MySQL51Parser.g3:983:4: ( set_columns )?
				if (stream_set_columns.HasNext)
				{
					DebugLocation(983, 4);
					adaptor.AddChild(root_1, stream_set_columns.NextTree());

				}
				stream_set_columns.Reset();
				DebugLocation(984, 4);
				// MySQL51Parser.g3:984:4: ( select )?
				if (stream_select.HasNext)
				{
					DebugLocation(984, 4);
					adaptor.AddChild(root_1, stream_select.NextTree());

				}
				stream_select.Reset();
				DebugLocation(985, 4);
				// MySQL51Parser.g3:985:4: ( on_dup_key )?
				if (stream_on_dup_key.HasNext)
				{
					DebugLocation(985, 4);
					adaptor.AddChild(root_1, stream_on_dup_key.NextTree());

				}
				stream_on_dup_key.Reset();

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("insert", 70);
			LeaveRule("insert", 70);
			LeaveRule_insert();
		}
		DebugLocation(986, 1);
		} finally { DebugExitRule(GrammarFileName, "insert"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "insert"

	private sealed partial class insert_columns_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public insert_columns_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_insert_columns();
	partial void LeaveRule_insert_columns();

	// $ANTLR start "insert_columns"
	// MySQL51Parser.g3:988:1: insert_columns : ( LPAREN ( column_name_list )? RPAREN )? ( VALUE | VALUES ) LPAREN val+= insert_default_or_expression ( COMMA val+= insert_default_or_expression )* RPAREN -> ^( INSERT_VALUES ( column_name_list )? ^( VALUES[] ( $val)+ ) ) ;
	[GrammarRule("insert_columns")]
	private MySQL51Parser.insert_columns_return insert_columns()
	{
		EnterRule_insert_columns();
		EnterRule("insert_columns", 71);
		TraceIn("insert_columns", 71);
		MySQL51Parser.insert_columns_return retval = new MySQL51Parser.insert_columns_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken LPAREN382 = default(IToken);
		IToken RPAREN384 = default(IToken);
		IToken VALUE385 = default(IToken);
		IToken VALUES386 = default(IToken);
		IToken LPAREN387 = default(IToken);
		IToken COMMA388 = default(IToken);
		IToken RPAREN389 = default(IToken);
		List<object> list_val = null;
		MySQL51Parser.column_name_list_return column_name_list383 = default(MySQL51Parser.column_name_list_return);
		MySQL51Parser.insert_default_or_expression_return val = default(MySQL51Parser.insert_default_or_expression_return);
		object LPAREN382_tree = default(object);
		object RPAREN384_tree = default(object);
		object VALUE385_tree = default(object);
		object VALUES386_tree = default(object);
		object LPAREN387_tree = default(object);
		object COMMA388_tree = default(object);
		object RPAREN389_tree = default(object);
		RewriteRuleITokenStream stream_LPAREN=new RewriteRuleITokenStream(adaptor,"token LPAREN");
		RewriteRuleITokenStream stream_RPAREN=new RewriteRuleITokenStream(adaptor,"token RPAREN");
		RewriteRuleITokenStream stream_VALUE=new RewriteRuleITokenStream(adaptor,"token VALUE");
		RewriteRuleITokenStream stream_VALUES=new RewriteRuleITokenStream(adaptor,"token VALUES");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_column_name_list=new RewriteRuleSubtreeStream(adaptor,"rule column_name_list");
		RewriteRuleSubtreeStream stream_insert_default_or_expression=new RewriteRuleSubtreeStream(adaptor,"rule insert_default_or_expression");
		try { DebugEnterRule(GrammarFileName, "insert_columns");
		DebugLocation(988, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:989:2: ( ( LPAREN ( column_name_list )? RPAREN )? ( VALUE | VALUES ) LPAREN val+= insert_default_or_expression ( COMMA val+= insert_default_or_expression )* RPAREN -> ^( INSERT_VALUES ( column_name_list )? ^( VALUES[] ( $val)+ ) ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:989:4: ( LPAREN ( column_name_list )? RPAREN )? ( VALUE | VALUES ) LPAREN val+= insert_default_or_expression ( COMMA val+= insert_default_or_expression )* RPAREN
			{
			DebugLocation(989, 4);
			// MySQL51Parser.g3:989:4: ( LPAREN ( column_name_list )? RPAREN )?
			int alt181=2;
			try { DebugEnterSubRule(181);
			try { DebugEnterDecision(181, false);
			int LA181_0 = input.LA(1);

			if ((LA181_0==LPAREN))
			{
				alt181 = 1;
			}
			} finally { DebugExitDecision(181); }
			switch (alt181)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:989:5: LPAREN ( column_name_list )? RPAREN
				{
				DebugLocation(989, 5);
				LPAREN382=(IToken)Match(input,LPAREN,Follow._LPAREN_in_insert_columns8335); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN382);

				DebugLocation(989, 12);
				// MySQL51Parser.g3:989:12: ( column_name_list )?
				int alt180=2;
				try { DebugEnterSubRule(180);
				try { DebugEnterDecision(180, false);
				int LA180_0 = input.LA(1);

				if ((LA180_0==ACTION||(LA180_0>=ADDDATE && LA180_0<=ALGORITHM)||LA180_0==ANY||LA180_0==ASCII||(LA180_0>=AT && LA180_0<=BACKUP)||LA180_0==BEGIN||(LA180_0>=BINLOG && LA180_0<=BIT)||(LA180_0>=BLOCK && LA180_0<=BOOLEAN)||LA180_0==BTREE||(LA180_0>=BYTE && LA180_0<=CACHE)||LA180_0==CASCADED||LA180_0==CHAIN||LA180_0==CHANGED||LA180_0==CHARSET||(LA180_0>=CHECKSUM && LA180_0<=CODE)||LA180_0==COLLATION||LA180_0==COLUMNS||LA180_0==COMMENT||(LA180_0>=COMMIT && LA180_0<=CONCURRENT)||(LA180_0>=CONNECTION && LA180_0<=CONSISTENT)||(LA180_0>=CONTAINS && LA180_0<=CONTEXT)||LA180_0==CONTRIBUTORS||LA180_0==CPU||LA180_0==CUBE||LA180_0==DATA||(LA180_0>=DATAFILE && LA180_0<=DATETIME)||LA180_0==DAY||LA180_0==DEALLOCATE||LA180_0==DEFINER||LA180_0==DELAY_KEY_WRITE||LA180_0==DES_KEY_FILE||(LA180_0>=DIRECTORY && LA180_0<=DISK)||LA180_0==DO||(LA180_0>=DUMPFILE && LA180_0<=DYNAMIC)||LA180_0==ENABLE||(LA180_0>=END && LA180_0<=ENUM)||(LA180_0>=ERRORS && LA180_0<=ESCAPE)||(LA180_0>=EVENT && LA180_0<=EXECUTE)||LA180_0==EXPANSION||(LA180_0>=EXTENDED && LA180_0<=EXTENT_SIZE)||(LA180_0>=FAST && LA180_0<=FAULTS)||(LA180_0>=FIELDS && LA180_0<=FIXED)||LA180_0==FLUSH||(LA180_0>=FOUND && LA180_0<=FRAC_SECOND)||LA180_0==FULL||(LA180_0>=FUNCTION && LA180_0<=GLOBAL)||LA180_0==GRANTS||LA180_0==GROUP||(LA180_0>=HANDLER && LA180_0<=HASH)||LA180_0==HELP||(LA180_0>=HOST && LA180_0<=HOUR)||(LA180_0>=ID && LA180_0<=IDENTIFIED)||LA180_0==IMPORT||LA180_0==INDEXES||LA180_0==INITIAL_SIZE||LA180_0==INNOBASE||(LA180_0>=INSERT_METHOD && LA180_0<=INSTALL)||(LA180_0>=INVOKER && LA180_0<=IPC)||(LA180_0>=ISOLATION && LA180_0<=ISSUER)||LA180_0==KEY_BLOCK_SIZE||(LA180_0>=LABEL && LA180_0<=LAST)||LA180_0==LEAVES||LA180_0==LESS||LA180_0==LEVEL||(LA180_0>=LINESTRING && LA180_0<=LIST)||LA180_0==LOCAL||(LA180_0>=LOCKS && LA180_0<=LOGFILE)||LA180_0==LOGS||(LA180_0>=MASTER && LA180_0<=MASTER_SSL_KEY)||LA180_0==MASTER_USER||(LA180_0>=MAX_CONNECTIONS_PER_HOUR && LA180_0<=MEDIUM)||(LA180_0>=MEMORY && LA180_0<=MICROSECOND)||LA180_0==MIGRATE||LA180_0==MINUTE||LA180_0==MIN_ROWS||LA180_0==MODE||LA180_0==MODIFY||LA180_0==MONTH||(LA180_0>=MULTILINESTRING && LA180_0<=NATIONAL)||(LA180_0>=NCHAR && LA180_0<=NONE)||LA180_0==NO_WAIT||(LA180_0>=NVARCHAR && LA180_0<=OLD_PASSWORD)||(LA180_0>=ONE && LA180_0<=OPEN)||LA180_0==OPTIONS||(LA180_0>=OWNER && LA180_0<=PLUGINS)||(LA180_0>=POINT && LA180_0<=PORT)||(LA180_0>=PREPARE && LA180_0<=PREV)||LA180_0==PRIVILEGES||(LA180_0>=PROCESS && LA180_0<=PROFILES)||(LA180_0>=QUARTER && LA180_0<=QUICK)||(LA180_0>=REBUILD && LA180_0<=REDUNDANT)||(LA180_0>=RELAY_LOG_FILE && LA180_0<=RELAY_THREAD)||(LA180_0>=RELOAD && LA180_0<=REMOVE)||(LA180_0>=REORGANIZE && LA180_0<=REPAIR)||LA180_0==REPEATABLE||LA180_0==REPLICATION||(LA180_0>=RESET && LA180_0<=RESTORE)||LA180_0==RESUME||LA180_0==RETURNS||(LA180_0>=ROLLBACK && LA180_0<=ROW_FORMAT)||(LA180_0>=RTREE && LA180_0<=SCHEDULE)||LA180_0==SECOND||LA180_0==SECURITY||(LA180_0>=SERIAL && LA180_0<=SESSION)||LA180_0==SHARE||(LA180_0>=SHUTDOWN && LA180_0<=SLAVE)||(LA180_0>=SNAPSHOT && LA180_0<=SOCKET)||(LA180_0>=SONAME && LA180_0<=SOURCE)||(LA180_0>=SQL_BUFFER_RESULT && LA180_0<=SQL_CACHE)||LA180_0==SQL_NO_CACHE||LA180_0==SQL_THREAD||LA180_0==START||(LA180_0>=STARTS && LA180_0<=STATUS)||(LA180_0>=STOP && LA180_0<=STORAGE)||(LA180_0>=STRING_KEYWORD && LA180_0<=SUBPARTITIONS)||(LA180_0>=SUPER && LA180_0<=SWITCHES)||(LA180_0>=TABLES && LA180_0<=TEMPTABLE)||(LA180_0>=TEXT && LA180_0<=THAN)||(LA180_0>=TIME && LA180_0<=TIMESTAMP_DIFF)||(LA180_0>=TRANSACTION && LA180_0<=TRANSACTIONAL)||LA180_0==TRIGGERS||(LA180_0>=TRUNCATE && LA180_0<=UNDEFINED)||(LA180_0>=UNDOFILE && LA180_0<=UNINSTALL)||LA180_0==UNKNOWN||LA180_0==UNTIL||LA180_0==UPGRADE||LA180_0==USER||LA180_0==USE_FRM||LA180_0==VALUE||LA180_0==VARIABLES||(LA180_0>=VIEW && LA180_0<=WEEK)||(LA180_0>=WORK && LA180_0<=WRAPPER)||(LA180_0>=X509 && LA180_0<=XA)||LA180_0==YEAR))
				{
					alt180 = 1;
				}
				} finally { DebugExitDecision(180); }
				switch (alt180)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:989:12: column_name_list
					{
					DebugLocation(989, 12);
					PushFollow(Follow._column_name_list_in_insert_columns8337);
					column_name_list383=column_name_list();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_column_name_list.Add(column_name_list383.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(180); }

				DebugLocation(989, 30);
				RPAREN384=(IToken)Match(input,RPAREN,Follow._RPAREN_in_insert_columns8340); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN384);


				}
				break;

			}
			} finally { DebugExitSubRule(181); }

			DebugLocation(990, 3);
			// MySQL51Parser.g3:990:3: ( VALUE | VALUES )
			int alt182=2;
			try { DebugEnterSubRule(182);
			try { DebugEnterDecision(182, false);
			int LA182_0 = input.LA(1);

			if ((LA182_0==VALUE))
			{
				alt182 = 1;
			}
			else if ((LA182_0==VALUES))
			{
				alt182 = 2;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 182, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(182); }
			switch (alt182)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:990:4: VALUE
				{
				DebugLocation(990, 4);
				VALUE385=(IToken)Match(input,VALUE,Follow._VALUE_in_insert_columns8347); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_VALUE.Add(VALUE385);


				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:990:10: VALUES
				{
				DebugLocation(990, 10);
				VALUES386=(IToken)Match(input,VALUES,Follow._VALUES_in_insert_columns8349); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_VALUES.Add(VALUES386);


				}
				break;

			}
			} finally { DebugExitSubRule(182); }

			DebugLocation(990, 18);
			LPAREN387=(IToken)Match(input,LPAREN,Follow._LPAREN_in_insert_columns8352); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_LPAREN.Add(LPAREN387);

			DebugLocation(990, 28);
			PushFollow(Follow._insert_default_or_expression_in_insert_columns8356);
			val=insert_default_or_expression();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_insert_default_or_expression.Add(val.Tree);
			if (list_val==null) list_val=new List<object>();
			list_val.Add(val.Tree);

			DebugLocation(990, 59);
			// MySQL51Parser.g3:990:59: ( COMMA val+= insert_default_or_expression )*
			try { DebugEnterSubRule(183);
			while (true)
			{
				int alt183=2;
				try { DebugEnterDecision(183, false);
				int LA183_0 = input.LA(1);

				if ((LA183_0==COMMA))
				{
					alt183 = 1;
				}


				} finally { DebugExitDecision(183); }
				switch ( alt183 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:990:60: COMMA val+= insert_default_or_expression
					{
					DebugLocation(990, 60);
					COMMA388=(IToken)Match(input,COMMA,Follow._COMMA_in_insert_columns8359); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMA.Add(COMMA388);

					DebugLocation(990, 69);
					PushFollow(Follow._insert_default_or_expression_in_insert_columns8363);
					val=insert_default_or_expression();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_insert_default_or_expression.Add(val.Tree);
					if (list_val==null) list_val=new List<object>();
					list_val.Add(val.Tree);


					}
					break;

				default:
					goto loop183;
				}
			}

			loop183:
				;

			} finally { DebugExitSubRule(183); }

			DebugLocation(990, 102);
			RPAREN389=(IToken)Match(input,RPAREN,Follow._RPAREN_in_insert_columns8367); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_RPAREN.Add(RPAREN389);



			{
			// AST REWRITE
			// elements: column_name_list, VALUES, val
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: val
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);
			RewriteRuleSubtreeStream stream_val=new RewriteRuleSubtreeStream(adaptor,"token val",list_val);
			root_0 = (object)adaptor.Nil();
			// 991:4: -> ^( INSERT_VALUES ( column_name_list )? ^( VALUES[] ( $val)+ ) )
			{
				DebugLocation(991, 7);
				// MySQL51Parser.g3:991:7: ^( INSERT_VALUES ( column_name_list )? ^( VALUES[] ( $val)+ ) )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(991, 9);
				root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(INSERT_VALUES, "INSERT_VALUES"), root_1);

				DebugLocation(991, 23);
				// MySQL51Parser.g3:991:23: ( column_name_list )?
				if (stream_column_name_list.HasNext)
				{
					DebugLocation(991, 23);
					adaptor.AddChild(root_1, stream_column_name_list.NextTree());

				}
				stream_column_name_list.Reset();
				DebugLocation(991, 41);
				// MySQL51Parser.g3:991:41: ^( VALUES[] ( $val)+ )
				{
				object root_2 = (object)adaptor.Nil();
				DebugLocation(991, 43);
				root_2 = (object)adaptor.BecomeRoot((object)adaptor.Create(VALUES, "VALUES"), root_2);

				DebugLocation(991, 53);
				if (!(stream_val.HasNext))
				{
					throw new RewriteEarlyExitException();
				}
				while ( stream_val.HasNext )
				{
					DebugLocation(991, 53);
					adaptor.AddChild(root_2, stream_val.NextTree());

				}
				stream_val.Reset();

				adaptor.AddChild(root_1, root_2);
				}

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("insert_columns", 71);
			LeaveRule("insert_columns", 71);
			LeaveRule_insert_columns();
		}
		DebugLocation(992, 1);
		} finally { DebugExitRule(GrammarFileName, "insert_columns"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "insert_columns"

	private sealed partial class insert_default_or_expression_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public insert_default_or_expression_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_insert_default_or_expression();
	partial void LeaveRule_insert_default_or_expression();

	// $ANTLR start "insert_default_or_expression"
	// MySQL51Parser.g3:994:1: insert_default_or_expression : ( DEFAULT | expr );
	[GrammarRule("insert_default_or_expression")]
	private MySQL51Parser.insert_default_or_expression_return insert_default_or_expression()
	{
		EnterRule_insert_default_or_expression();
		EnterRule("insert_default_or_expression", 72);
		TraceIn("insert_default_or_expression", 72);
		MySQL51Parser.insert_default_or_expression_return retval = new MySQL51Parser.insert_default_or_expression_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken DEFAULT390 = default(IToken);
		MySQL51Parser.expr_return expr391 = default(MySQL51Parser.expr_return);

		object DEFAULT390_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "insert_default_or_expression");
		DebugLocation(994, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:995:2: ( DEFAULT | expr )
			int alt184=2;
			try { DebugEnterDecision(184, false);
			int LA184_0 = input.LA(1);

			if ((LA184_0==DEFAULT))
			{
				alt184 = 1;
			}
			else if ((LA184_0==ACTION||(LA184_0>=ADDDATE && LA184_0<=ALGORITHM)||LA184_0==ANY||LA184_0==ASCII||(LA184_0>=AT && LA184_0<=BACKUP)||LA184_0==BEGIN||(LA184_0>=BINARY && LA184_0<=BIT)||LA184_0==BITWISE_INVERSION||(LA184_0>=BIT_AND && LA184_0<=BIT_XOR)||(LA184_0>=BLOCK && LA184_0<=BOOLEAN)||LA184_0==BTREE||(LA184_0>=BYTE && LA184_0<=CACHE)||LA184_0==CASCADED||(LA184_0>=CAST && LA184_0<=CHAIN)||(LA184_0>=CHANGED && LA184_0<=CHAR)||LA184_0==CHARSET||(LA184_0>=CHECKSUM && LA184_0<=COLLATION)||LA184_0==COLUMNS||LA184_0==COMMENT||(LA184_0>=COMMIT && LA184_0<=CONCURRENT)||(LA184_0>=CONNECTION && LA184_0<=CONSISTENT)||(LA184_0>=CONTAINS && LA184_0<=CONTEXT)||LA184_0==CONTRIBUTORS||(LA184_0>=COUNT && LA184_0<=CPU)||(LA184_0>=CUBE && LA184_0<=CURRENT_USER)||LA184_0==CURTIME||(LA184_0>=DATA && LA184_0<=DATABASE)||(LA184_0>=DATAFILE && LA184_0<=DATE_ADD)||LA184_0==DATE_SUB||LA184_0==DAY||LA184_0==DEALLOCATE||LA184_0==DEFINER||LA184_0==DELAY_KEY_WRITE||LA184_0==DES_KEY_FILE||(LA184_0>=DIRECTORY && LA184_0<=DISK)||LA184_0==DO||(LA184_0>=DUMPFILE && LA184_0<=DYNAMIC)||LA184_0==ENABLE||(LA184_0>=END && LA184_0<=ENUM)||(LA184_0>=ERRORS && LA184_0<=ESCAPE)||(LA184_0>=EVENT && LA184_0<=EXISTS)||LA184_0==EXPANSION||(LA184_0>=EXTENDED && LA184_0<=FAULTS)||(LA184_0>=FIELDS && LA184_0<=FIXED)||LA184_0==FLUSH||(LA184_0>=FOUND && LA184_0<=FRAC_SECOND)||LA184_0==FULL||(LA184_0>=FUNCTION && LA184_0<=GLOBAL_VARIABLE)||LA184_0==GRANTS||(LA184_0>=GROUP && LA184_0<=HASH)||(LA184_0>=HELP && LA184_0<=HEXA_VALUE)||(LA184_0>=HOST && LA184_0<=HOUR)||(LA184_0>=ID && LA184_0<=IF)||LA184_0==IMPORT||LA184_0==INDEXES||LA184_0==INITIAL_SIZE||LA184_0==INNOBASE||(LA184_0>=INSERT && LA184_0<=INSTALL)||LA184_0==INTERVAL||(LA184_0>=INVOKER && LA184_0<=IPC)||(LA184_0>=ISOLATION && LA184_0<=ISSUER)||LA184_0==KEY_BLOCK_SIZE||(LA184_0>=LABEL && LA184_0<=LAST)||(LA184_0>=LEAVES && LA184_0<=LEFT)||LA184_0==LESS||LA184_0==LEVEL||(LA184_0>=LINESTRING && LA184_0<=LIST)||LA184_0==LOCAL||(LA184_0>=LOCKS && LA184_0<=LOGFILE)||LA184_0==LOGS||(LA184_0>=LPAREN && LA184_0<=MASTER_SSL_KEY)||LA184_0==MASTER_USER||(LA184_0>=MAX && LA184_0<=MEDIUM)||(LA184_0>=MEMORY && LA184_0<=MID)||(LA184_0>=MIGRATE && LA184_0<=MINUTE)||(LA184_0>=MIN_ROWS && LA184_0<=MODE)||LA184_0==MODIFY||LA184_0==MONTH||(LA184_0>=MULTILINESTRING && LA184_0<=NATIONAL)||(LA184_0>=NCHAR && LA184_0<=NOT)||(LA184_0>=NOT_OP && LA184_0<=NO_WAIT)||LA184_0==NULL||LA184_0==NUMBER||(LA184_0>=NVARCHAR && LA184_0<=OLD_PASSWORD)||(LA184_0>=ONE && LA184_0<=OPEN)||LA184_0==OPTIONS||(LA184_0>=OWNER && LA184_0<=POSITION)||(LA184_0>=PREPARE && LA184_0<=PREV)||LA184_0==PRIVILEGES||(LA184_0>=PROCESS && LA184_0<=PROFILES)||(LA184_0>=QUARTER && LA184_0<=QUICK)||(LA184_0>=REBUILD && LA184_0<=REDUNDANT)||(LA184_0>=RELAY_LOG_FILE && LA184_0<=RELAY_THREAD)||(LA184_0>=RELOAD && LA184_0<=REMOVE)||(LA184_0>=REORGANIZE && LA184_0<=REPLICATION)||(LA184_0>=RESET && LA184_0<=RESTORE)||LA184_0==RESUME||LA184_0==RETURNS||LA184_0==RIGHT||(LA184_0>=ROLLBACK && LA184_0<=ROW_FORMAT)||(LA184_0>=RTREE && LA184_0<=SCHEDULE)||LA184_0==SECOND||LA184_0==SECURITY||(LA184_0>=SERIAL && LA184_0<=SESSION_VARIABLE)||LA184_0==SHARE||(LA184_0>=SHUTDOWN && LA184_0<=SLAVE)||(LA184_0>=SNAPSHOT && LA184_0<=SOCKET)||(LA184_0>=SONAME && LA184_0<=SOURCE)||(LA184_0>=SQL_BUFFER_RESULT && LA184_0<=SQL_CACHE)||LA184_0==SQL_NO_CACHE||LA184_0==SQL_THREAD||LA184_0==START||(LA184_0>=STARTS && LA184_0<=STORAGE)||(LA184_0>=STRING && LA184_0<=SYSTEM_USER)||(LA184_0>=TABLES && LA184_0<=TEMPTABLE)||(LA184_0>=TEXT && LA184_0<=THAN)||(LA184_0>=TIME && LA184_0<=TIMESTAMP_DIFF)||(LA184_0>=TRANSACTION && LA184_0<=TRANSACTIONAL)||(LA184_0>=TRIGGERS && LA184_0<=UNDEFINED)||(LA184_0>=UNDOFILE && LA184_0<=UNINSTALL)||LA184_0==UNKNOWN||LA184_0==UNTIL||LA184_0==UPGRADE||LA184_0==USER||LA184_0==USE_FRM||(LA184_0>=UTC_DATE && LA184_0<=VALUE)||LA184_0==VALUE_PLACEHOLDER||(LA184_0>=VARIABLES && LA184_0<=VARIANCE)||(LA184_0>=VAR_POP && LA184_0<=WEEK)||(LA184_0>=WORK && LA184_0<=WRAPPER)||(LA184_0>=X509 && LA184_0<=XA)||LA184_0==YEAR||LA184_0==CONCAT))
			{
				alt184 = 2;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 184, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(184); }
			switch (alt184)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:995:4: DEFAULT
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(995, 4);
				DEFAULT390=(IToken)Match(input,DEFAULT,Follow._DEFAULT_in_insert_default_or_expression8399); if (state.failed) return retval;
				if (state.backtracking == 0) {
				DEFAULT390_tree = (object)adaptor.Create(DEFAULT390);
				adaptor.AddChild(root_0, DEFAULT390_tree);
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:996:4: expr
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(996, 4);
				PushFollow(Follow._expr_in_insert_default_or_expression8404);
				expr391=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, expr391.Tree);

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("insert_default_or_expression", 72);
			LeaveRule("insert_default_or_expression", 72);
			LeaveRule_insert_default_or_expression();
		}
		DebugLocation(997, 1);
		} finally { DebugExitRule(GrammarFileName, "insert_default_or_expression"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "insert_default_or_expression"

	private sealed partial class set_columns_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public set_columns_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_set_columns();
	partial void LeaveRule_set_columns();

	// $ANTLR start "set_columns"
	// MySQL51Parser.g3:999:1: set_columns : SET column_assignment ( COMMA column_assignment )* -> ^( SET ( column_assignment )+ ) ;
	[GrammarRule("set_columns")]
	private MySQL51Parser.set_columns_return set_columns()
	{
		EnterRule_set_columns();
		EnterRule("set_columns", 73);
		TraceIn("set_columns", 73);
		MySQL51Parser.set_columns_return retval = new MySQL51Parser.set_columns_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken SET392 = default(IToken);
		IToken COMMA394 = default(IToken);
		MySQL51Parser.column_assignment_return column_assignment393 = default(MySQL51Parser.column_assignment_return);
		MySQL51Parser.column_assignment_return column_assignment395 = default(MySQL51Parser.column_assignment_return);

		object SET392_tree = default(object);
		object COMMA394_tree = default(object);
		RewriteRuleITokenStream stream_SET=new RewriteRuleITokenStream(adaptor,"token SET");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_column_assignment=new RewriteRuleSubtreeStream(adaptor,"rule column_assignment");
		try { DebugEnterRule(GrammarFileName, "set_columns");
		DebugLocation(999, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1000:2: ( SET column_assignment ( COMMA column_assignment )* -> ^( SET ( column_assignment )+ ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:1000:4: SET column_assignment ( COMMA column_assignment )*
			{
			DebugLocation(1000, 4);
			SET392=(IToken)Match(input,SET,Follow._SET_in_set_columns8416); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_SET.Add(SET392);

			DebugLocation(1000, 8);
			PushFollow(Follow._column_assignment_in_set_columns8418);
			column_assignment393=column_assignment();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_column_assignment.Add(column_assignment393.Tree);
			DebugLocation(1000, 26);
			// MySQL51Parser.g3:1000:26: ( COMMA column_assignment )*
			try { DebugEnterSubRule(185);
			while (true)
			{
				int alt185=2;
				try { DebugEnterDecision(185, false);
				int LA185_0 = input.LA(1);

				if ((LA185_0==COMMA))
				{
					alt185 = 1;
				}


				} finally { DebugExitDecision(185); }
				switch ( alt185 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1000:27: COMMA column_assignment
					{
					DebugLocation(1000, 27);
					COMMA394=(IToken)Match(input,COMMA,Follow._COMMA_in_set_columns8421); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMA.Add(COMMA394);

					DebugLocation(1000, 33);
					PushFollow(Follow._column_assignment_in_set_columns8423);
					column_assignment395=column_assignment();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_column_assignment.Add(column_assignment395.Tree);

					}
					break;

				default:
					goto loop185;
				}
			}

			loop185:
				;

			} finally { DebugExitSubRule(185); }



			{
			// AST REWRITE
			// elements: SET, column_assignment
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 1000:53: -> ^( SET ( column_assignment )+ )
			{
				DebugLocation(1000, 56);
				// MySQL51Parser.g3:1000:56: ^( SET ( column_assignment )+ )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(1000, 58);
				root_1 = (object)adaptor.BecomeRoot(stream_SET.NextNode(), root_1);

				DebugLocation(1000, 62);
				if (!(stream_column_assignment.HasNext))
				{
					throw new RewriteEarlyExitException();
				}
				while ( stream_column_assignment.HasNext )
				{
					DebugLocation(1000, 62);
					adaptor.AddChild(root_1, stream_column_assignment.NextTree());

				}
				stream_column_assignment.Reset();

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("set_columns", 73);
			LeaveRule("set_columns", 73);
			LeaveRule_set_columns();
		}
		DebugLocation(1001, 1);
		} finally { DebugExitRule(GrammarFileName, "set_columns"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "set_columns"

	private sealed partial class on_dup_key_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public on_dup_key_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_on_dup_key();
	partial void LeaveRule_on_dup_key();

	// $ANTLR start "on_dup_key"
	// MySQL51Parser.g3:1003:1: on_dup_key : ON DUPLICATE KEY UPDATE column_assignment ( COMMA column_assignment )* -> ^( DUPLICATE ( column_assignment )+ ) ;
	[GrammarRule("on_dup_key")]
	private MySQL51Parser.on_dup_key_return on_dup_key()
	{
		EnterRule_on_dup_key();
		EnterRule("on_dup_key", 74);
		TraceIn("on_dup_key", 74);
		MySQL51Parser.on_dup_key_return retval = new MySQL51Parser.on_dup_key_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken ON396 = default(IToken);
		IToken DUPLICATE397 = default(IToken);
		IToken KEY398 = default(IToken);
		IToken UPDATE399 = default(IToken);
		IToken COMMA401 = default(IToken);
		MySQL51Parser.column_assignment_return column_assignment400 = default(MySQL51Parser.column_assignment_return);
		MySQL51Parser.column_assignment_return column_assignment402 = default(MySQL51Parser.column_assignment_return);

		object ON396_tree = default(object);
		object DUPLICATE397_tree = default(object);
		object KEY398_tree = default(object);
		object UPDATE399_tree = default(object);
		object COMMA401_tree = default(object);
		RewriteRuleITokenStream stream_ON=new RewriteRuleITokenStream(adaptor,"token ON");
		RewriteRuleITokenStream stream_DUPLICATE=new RewriteRuleITokenStream(adaptor,"token DUPLICATE");
		RewriteRuleITokenStream stream_KEY=new RewriteRuleITokenStream(adaptor,"token KEY");
		RewriteRuleITokenStream stream_UPDATE=new RewriteRuleITokenStream(adaptor,"token UPDATE");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_column_assignment=new RewriteRuleSubtreeStream(adaptor,"rule column_assignment");
		try { DebugEnterRule(GrammarFileName, "on_dup_key");
		DebugLocation(1003, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1004:2: ( ON DUPLICATE KEY UPDATE column_assignment ( COMMA column_assignment )* -> ^( DUPLICATE ( column_assignment )+ ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:1004:4: ON DUPLICATE KEY UPDATE column_assignment ( COMMA column_assignment )*
			{
			DebugLocation(1004, 4);
			ON396=(IToken)Match(input,ON,Follow._ON_in_on_dup_key8445); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_ON.Add(ON396);

			DebugLocation(1004, 7);
			DUPLICATE397=(IToken)Match(input,DUPLICATE,Follow._DUPLICATE_in_on_dup_key8447); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_DUPLICATE.Add(DUPLICATE397);

			DebugLocation(1004, 17);
			KEY398=(IToken)Match(input,KEY,Follow._KEY_in_on_dup_key8449); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_KEY.Add(KEY398);

			DebugLocation(1004, 21);
			UPDATE399=(IToken)Match(input,UPDATE,Follow._UPDATE_in_on_dup_key8451); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_UPDATE.Add(UPDATE399);

			DebugLocation(1005, 3);
			PushFollow(Follow._column_assignment_in_on_dup_key8455);
			column_assignment400=column_assignment();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_column_assignment.Add(column_assignment400.Tree);
			DebugLocation(1005, 21);
			// MySQL51Parser.g3:1005:21: ( COMMA column_assignment )*
			try { DebugEnterSubRule(186);
			while (true)
			{
				int alt186=2;
				try { DebugEnterDecision(186, false);
				int LA186_0 = input.LA(1);

				if ((LA186_0==COMMA))
				{
					alt186 = 1;
				}


				} finally { DebugExitDecision(186); }
				switch ( alt186 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1005:22: COMMA column_assignment
					{
					DebugLocation(1005, 22);
					COMMA401=(IToken)Match(input,COMMA,Follow._COMMA_in_on_dup_key8458); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMA.Add(COMMA401);

					DebugLocation(1005, 28);
					PushFollow(Follow._column_assignment_in_on_dup_key8460);
					column_assignment402=column_assignment();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_column_assignment.Add(column_assignment402.Tree);

					}
					break;

				default:
					goto loop186;
				}
			}

			loop186:
				;

			} finally { DebugExitSubRule(186); }



			{
			// AST REWRITE
			// elements: DUPLICATE, column_assignment
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 1005:48: -> ^( DUPLICATE ( column_assignment )+ )
			{
				DebugLocation(1005, 51);
				// MySQL51Parser.g3:1005:51: ^( DUPLICATE ( column_assignment )+ )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(1005, 53);
				root_1 = (object)adaptor.BecomeRoot(stream_DUPLICATE.NextNode(), root_1);

				DebugLocation(1005, 63);
				if (!(stream_column_assignment.HasNext))
				{
					throw new RewriteEarlyExitException();
				}
				while ( stream_column_assignment.HasNext )
				{
					DebugLocation(1005, 63);
					adaptor.AddChild(root_1, stream_column_assignment.NextTree());

				}
				stream_column_assignment.Reset();

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("on_dup_key", 74);
			LeaveRule("on_dup_key", 74);
			LeaveRule_on_dup_key();
		}
		DebugLocation(1006, 1);
		} finally { DebugExitRule(GrammarFileName, "on_dup_key"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "on_dup_key"

	private sealed partial class column_assignment_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public column_assignment_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_column_assignment();
	partial void LeaveRule_column_assignment();

	// $ANTLR start "column_assignment"
	// MySQL51Parser.g3:1008:1: column_assignment : field_name EQUALS ( DEFAULT -> ^( EQUALS field_name DEFAULT ) | expr -> ^( EQUALS field_name expr ) ) ;
	[GrammarRule("column_assignment")]
	private MySQL51Parser.column_assignment_return column_assignment()
	{
		EnterRule_column_assignment();
		EnterRule("column_assignment", 75);
		TraceIn("column_assignment", 75);
		MySQL51Parser.column_assignment_return retval = new MySQL51Parser.column_assignment_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken EQUALS404 = default(IToken);
		IToken DEFAULT405 = default(IToken);
		MySQL51Parser.field_name_return field_name403 = default(MySQL51Parser.field_name_return);
		MySQL51Parser.expr_return expr406 = default(MySQL51Parser.expr_return);

		object EQUALS404_tree = default(object);
		object DEFAULT405_tree = default(object);
		RewriteRuleITokenStream stream_EQUALS=new RewriteRuleITokenStream(adaptor,"token EQUALS");
		RewriteRuleITokenStream stream_DEFAULT=new RewriteRuleITokenStream(adaptor,"token DEFAULT");
		RewriteRuleSubtreeStream stream_field_name=new RewriteRuleSubtreeStream(adaptor,"rule field_name");
		RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr");
		try { DebugEnterRule(GrammarFileName, "column_assignment");
		DebugLocation(1008, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1009:2: ( field_name EQUALS ( DEFAULT -> ^( EQUALS field_name DEFAULT ) | expr -> ^( EQUALS field_name expr ) ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:1009:4: field_name EQUALS ( DEFAULT -> ^( EQUALS field_name DEFAULT ) | expr -> ^( EQUALS field_name expr ) )
			{
			DebugLocation(1009, 4);
			PushFollow(Follow._field_name_in_column_assignment8482);
			field_name403=field_name();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_field_name.Add(field_name403.Tree);
			DebugLocation(1009, 15);
			EQUALS404=(IToken)Match(input,EQUALS,Follow._EQUALS_in_column_assignment8484); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_EQUALS.Add(EQUALS404);

			DebugLocation(1010, 3);
			// MySQL51Parser.g3:1010:3: ( DEFAULT -> ^( EQUALS field_name DEFAULT ) | expr -> ^( EQUALS field_name expr ) )
			int alt187=2;
			try { DebugEnterSubRule(187);
			try { DebugEnterDecision(187, false);
			int LA187_0 = input.LA(1);

			if ((LA187_0==DEFAULT))
			{
				alt187 = 1;
			}
			else if ((LA187_0==ACTION||(LA187_0>=ADDDATE && LA187_0<=ALGORITHM)||LA187_0==ANY||LA187_0==ASCII||(LA187_0>=AT && LA187_0<=BACKUP)||LA187_0==BEGIN||(LA187_0>=BINARY && LA187_0<=BIT)||LA187_0==BITWISE_INVERSION||(LA187_0>=BIT_AND && LA187_0<=BIT_XOR)||(LA187_0>=BLOCK && LA187_0<=BOOLEAN)||LA187_0==BTREE||(LA187_0>=BYTE && LA187_0<=CACHE)||LA187_0==CASCADED||(LA187_0>=CAST && LA187_0<=CHAIN)||(LA187_0>=CHANGED && LA187_0<=CHAR)||LA187_0==CHARSET||(LA187_0>=CHECKSUM && LA187_0<=COLLATION)||LA187_0==COLUMNS||LA187_0==COMMENT||(LA187_0>=COMMIT && LA187_0<=CONCURRENT)||(LA187_0>=CONNECTION && LA187_0<=CONSISTENT)||(LA187_0>=CONTAINS && LA187_0<=CONTEXT)||LA187_0==CONTRIBUTORS||(LA187_0>=COUNT && LA187_0<=CPU)||(LA187_0>=CUBE && LA187_0<=CURRENT_USER)||LA187_0==CURTIME||(LA187_0>=DATA && LA187_0<=DATABASE)||(LA187_0>=DATAFILE && LA187_0<=DATE_ADD)||LA187_0==DATE_SUB||LA187_0==DAY||LA187_0==DEALLOCATE||LA187_0==DEFINER||LA187_0==DELAY_KEY_WRITE||LA187_0==DES_KEY_FILE||(LA187_0>=DIRECTORY && LA187_0<=DISK)||LA187_0==DO||(LA187_0>=DUMPFILE && LA187_0<=DYNAMIC)||LA187_0==ENABLE||(LA187_0>=END && LA187_0<=ENUM)||(LA187_0>=ERRORS && LA187_0<=ESCAPE)||(LA187_0>=EVENT && LA187_0<=EXISTS)||LA187_0==EXPANSION||(LA187_0>=EXTENDED && LA187_0<=FAULTS)||(LA187_0>=FIELDS && LA187_0<=FIXED)||LA187_0==FLUSH||(LA187_0>=FOUND && LA187_0<=FRAC_SECOND)||LA187_0==FULL||(LA187_0>=FUNCTION && LA187_0<=GLOBAL_VARIABLE)||LA187_0==GRANTS||(LA187_0>=GROUP && LA187_0<=HASH)||(LA187_0>=HELP && LA187_0<=HEXA_VALUE)||(LA187_0>=HOST && LA187_0<=HOUR)||(LA187_0>=ID && LA187_0<=IF)||LA187_0==IMPORT||LA187_0==INDEXES||LA187_0==INITIAL_SIZE||LA187_0==INNOBASE||(LA187_0>=INSERT && LA187_0<=INSTALL)||LA187_0==INTERVAL||(LA187_0>=INVOKER && LA187_0<=IPC)||(LA187_0>=ISOLATION && LA187_0<=ISSUER)||LA187_0==KEY_BLOCK_SIZE||(LA187_0>=LABEL && LA187_0<=LAST)||(LA187_0>=LEAVES && LA187_0<=LEFT)||LA187_0==LESS||LA187_0==LEVEL||(LA187_0>=LINESTRING && LA187_0<=LIST)||LA187_0==LOCAL||(LA187_0>=LOCKS && LA187_0<=LOGFILE)||LA187_0==LOGS||(LA187_0>=LPAREN && LA187_0<=MASTER_SSL_KEY)||LA187_0==MASTER_USER||(LA187_0>=MAX && LA187_0<=MEDIUM)||(LA187_0>=MEMORY && LA187_0<=MID)||(LA187_0>=MIGRATE && LA187_0<=MINUTE)||(LA187_0>=MIN_ROWS && LA187_0<=MODE)||LA187_0==MODIFY||LA187_0==MONTH||(LA187_0>=MULTILINESTRING && LA187_0<=NATIONAL)||(LA187_0>=NCHAR && LA187_0<=NOT)||(LA187_0>=NOT_OP && LA187_0<=NO_WAIT)||LA187_0==NULL||LA187_0==NUMBER||(LA187_0>=NVARCHAR && LA187_0<=OLD_PASSWORD)||(LA187_0>=ONE && LA187_0<=OPEN)||LA187_0==OPTIONS||(LA187_0>=OWNER && LA187_0<=POSITION)||(LA187_0>=PREPARE && LA187_0<=PREV)||LA187_0==PRIVILEGES||(LA187_0>=PROCESS && LA187_0<=PROFILES)||(LA187_0>=QUARTER && LA187_0<=QUICK)||(LA187_0>=REBUILD && LA187_0<=REDUNDANT)||(LA187_0>=RELAY_LOG_FILE && LA187_0<=RELAY_THREAD)||(LA187_0>=RELOAD && LA187_0<=REMOVE)||(LA187_0>=REORGANIZE && LA187_0<=REPLICATION)||(LA187_0>=RESET && LA187_0<=RESTORE)||LA187_0==RESUME||LA187_0==RETURNS||LA187_0==RIGHT||(LA187_0>=ROLLBACK && LA187_0<=ROW_FORMAT)||(LA187_0>=RTREE && LA187_0<=SCHEDULE)||LA187_0==SECOND||LA187_0==SECURITY||(LA187_0>=SERIAL && LA187_0<=SESSION_VARIABLE)||LA187_0==SHARE||(LA187_0>=SHUTDOWN && LA187_0<=SLAVE)||(LA187_0>=SNAPSHOT && LA187_0<=SOCKET)||(LA187_0>=SONAME && LA187_0<=SOURCE)||(LA187_0>=SQL_BUFFER_RESULT && LA187_0<=SQL_CACHE)||LA187_0==SQL_NO_CACHE||LA187_0==SQL_THREAD||LA187_0==START||(LA187_0>=STARTS && LA187_0<=STORAGE)||(LA187_0>=STRING && LA187_0<=SYSTEM_USER)||(LA187_0>=TABLES && LA187_0<=TEMPTABLE)||(LA187_0>=TEXT && LA187_0<=THAN)||(LA187_0>=TIME && LA187_0<=TIMESTAMP_DIFF)||(LA187_0>=TRANSACTION && LA187_0<=TRANSACTIONAL)||(LA187_0>=TRIGGERS && LA187_0<=UNDEFINED)||(LA187_0>=UNDOFILE && LA187_0<=UNINSTALL)||LA187_0==UNKNOWN||LA187_0==UNTIL||LA187_0==UPGRADE||LA187_0==USER||LA187_0==USE_FRM||(LA187_0>=UTC_DATE && LA187_0<=VALUE)||LA187_0==VALUE_PLACEHOLDER||(LA187_0>=VARIABLES && LA187_0<=VARIANCE)||(LA187_0>=VAR_POP && LA187_0<=WEEK)||(LA187_0>=WORK && LA187_0<=WRAPPER)||(LA187_0>=X509 && LA187_0<=XA)||LA187_0==YEAR||LA187_0==CONCAT))
			{
				alt187 = 2;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 187, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(187); }
			switch (alt187)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1010:5: DEFAULT
				{
				DebugLocation(1010, 5);
				DEFAULT405=(IToken)Match(input,DEFAULT,Follow._DEFAULT_in_column_assignment8491); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_DEFAULT.Add(DEFAULT405);



				{
				// AST REWRITE
				// elements: EQUALS, field_name, DEFAULT
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1010:15: -> ^( EQUALS field_name DEFAULT )
				{
					DebugLocation(1010, 18);
					// MySQL51Parser.g3:1010:18: ^( EQUALS field_name DEFAULT )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1010, 20);
					root_1 = (object)adaptor.BecomeRoot(stream_EQUALS.NextNode(), root_1);

					DebugLocation(1010, 27);
					adaptor.AddChild(root_1, stream_field_name.NextTree());
					DebugLocation(1010, 38);
					adaptor.AddChild(root_1, stream_DEFAULT.NextNode());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:1011:5: expr
				{
				DebugLocation(1011, 5);
				PushFollow(Follow._expr_in_column_assignment8509);
				expr406=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr406.Tree);


				{
				// AST REWRITE
				// elements: EQUALS, field_name, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1011:12: -> ^( EQUALS field_name expr )
				{
					DebugLocation(1011, 15);
					// MySQL51Parser.g3:1011:15: ^( EQUALS field_name expr )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1011, 17);
					root_1 = (object)adaptor.BecomeRoot(stream_EQUALS.NextNode(), root_1);

					DebugLocation(1011, 24);
					adaptor.AddChild(root_1, stream_field_name.NextTree());
					DebugLocation(1011, 35);
					adaptor.AddChild(root_1, stream_expr.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			} finally { DebugExitSubRule(187); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("column_assignment", 75);
			LeaveRule("column_assignment", 75);
			LeaveRule_column_assignment();
		}
		DebugLocation(1013, 1);
		} finally { DebugExitRule(GrammarFileName, "column_assignment"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "column_assignment"

	private sealed partial class column_name_list_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public column_name_list_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_column_name_list();
	partial void LeaveRule_column_name_list();

	// $ANTLR start "column_name_list"
	// MySQL51Parser.g3:1015:1: column_name_list : field_name ( COMMA field_name )* -> ^( COLUMNS ( field_name )+ ) ;
	[GrammarRule("column_name_list")]
	private MySQL51Parser.column_name_list_return column_name_list()
	{
		EnterRule_column_name_list();
		EnterRule("column_name_list", 76);
		TraceIn("column_name_list", 76);
		MySQL51Parser.column_name_list_return retval = new MySQL51Parser.column_name_list_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken COMMA408 = default(IToken);
		MySQL51Parser.field_name_return field_name407 = default(MySQL51Parser.field_name_return);
		MySQL51Parser.field_name_return field_name409 = default(MySQL51Parser.field_name_return);

		object COMMA408_tree = default(object);
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_field_name=new RewriteRuleSubtreeStream(adaptor,"rule field_name");
		try { DebugEnterRule(GrammarFileName, "column_name_list");
		DebugLocation(1015, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1016:2: ( field_name ( COMMA field_name )* -> ^( COLUMNS ( field_name )+ ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:1016:4: field_name ( COMMA field_name )*
			{
			DebugLocation(1016, 4);
			PushFollow(Follow._field_name_in_column_name_list8537);
			field_name407=field_name();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_field_name.Add(field_name407.Tree);
			DebugLocation(1016, 15);
			// MySQL51Parser.g3:1016:15: ( COMMA field_name )*
			try { DebugEnterSubRule(188);
			while (true)
			{
				int alt188=2;
				try { DebugEnterDecision(188, false);
				int LA188_0 = input.LA(1);

				if ((LA188_0==COMMA))
				{
					alt188 = 1;
				}


				} finally { DebugExitDecision(188); }
				switch ( alt188 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1016:16: COMMA field_name
					{
					DebugLocation(1016, 16);
					COMMA408=(IToken)Match(input,COMMA,Follow._COMMA_in_column_name_list8540); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMA.Add(COMMA408);

					DebugLocation(1016, 22);
					PushFollow(Follow._field_name_in_column_name_list8542);
					field_name409=field_name();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_field_name.Add(field_name409.Tree);

					}
					break;

				default:
					goto loop188;
				}
			}

			loop188:
				;

			} finally { DebugExitSubRule(188); }



			{
			// AST REWRITE
			// elements: field_name
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 1016:35: -> ^( COLUMNS ( field_name )+ )
			{
				DebugLocation(1016, 38);
				// MySQL51Parser.g3:1016:38: ^( COLUMNS ( field_name )+ )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(1016, 40);
				root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(COLUMNS, "COLUMNS"), root_1);

				DebugLocation(1016, 48);
				if (!(stream_field_name.HasNext))
				{
					throw new RewriteEarlyExitException();
				}
				while ( stream_field_name.HasNext )
				{
					DebugLocation(1016, 48);
					adaptor.AddChild(root_1, stream_field_name.NextTree());

				}
				stream_field_name.Reset();

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("column_name_list", 76);
			LeaveRule("column_name_list", 76);
			LeaveRule_column_name_list();
		}
		DebugLocation(1017, 1);
		} finally { DebugExitRule(GrammarFileName, "column_name_list"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "column_name_list"

	private sealed partial class update_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public update_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_update();
	partial void LeaveRule_update();

	// $ANTLR start "update"
	// MySQL51Parser.g3:1022:1: update : UPDATE ( LOW_PRIORITY )? ( IGNORE )? table= table_references set= set_columns ( WHERE where_condition )? ({...}? => ( order_by )? ( LIMIT NUMBER )? )? -> ^( UPDATE ( LOW_PRIORITY )? ( IGNORE )? $table $set ( ^( WHERE where_condition ) )? ( order_by )? ( ^( LIMIT NUMBER ) )? ) ;
	[GrammarRule("update")]
	private MySQL51Parser.update_return update()
	{
		EnterRule_update();
		EnterRule("update", 77);
		TraceIn("update", 77);
		MySQL51Parser.update_return retval = new MySQL51Parser.update_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken UPDATE410 = default(IToken);
		IToken LOW_PRIORITY411 = default(IToken);
		IToken IGNORE412 = default(IToken);
		IToken WHERE413 = default(IToken);
		IToken LIMIT416 = default(IToken);
		IToken NUMBER417 = default(IToken);
		MySQL51Parser.table_references_return table = default(MySQL51Parser.table_references_return);
		MySQL51Parser.set_columns_return set = default(MySQL51Parser.set_columns_return);
		MySQL51Parser.where_condition_return where_condition414 = default(MySQL51Parser.where_condition_return);
		MySQL51Parser.order_by_return order_by415 = default(MySQL51Parser.order_by_return);

		object UPDATE410_tree = default(object);
		object LOW_PRIORITY411_tree = default(object);
		object IGNORE412_tree = default(object);
		object WHERE413_tree = default(object);
		object LIMIT416_tree = default(object);
		object NUMBER417_tree = default(object);
		RewriteRuleITokenStream stream_UPDATE=new RewriteRuleITokenStream(adaptor,"token UPDATE");
		RewriteRuleITokenStream stream_LOW_PRIORITY=new RewriteRuleITokenStream(adaptor,"token LOW_PRIORITY");
		RewriteRuleITokenStream stream_IGNORE=new RewriteRuleITokenStream(adaptor,"token IGNORE");
		RewriteRuleITokenStream stream_WHERE=new RewriteRuleITokenStream(adaptor,"token WHERE");
		RewriteRuleITokenStream stream_LIMIT=new RewriteRuleITokenStream(adaptor,"token LIMIT");
		RewriteRuleITokenStream stream_NUMBER=new RewriteRuleITokenStream(adaptor,"token NUMBER");
		RewriteRuleSubtreeStream stream_table_references=new RewriteRuleSubtreeStream(adaptor,"rule table_references");
		RewriteRuleSubtreeStream stream_set_columns=new RewriteRuleSubtreeStream(adaptor,"rule set_columns");
		RewriteRuleSubtreeStream stream_where_condition=new RewriteRuleSubtreeStream(adaptor,"rule where_condition");
		RewriteRuleSubtreeStream stream_order_by=new RewriteRuleSubtreeStream(adaptor,"rule order_by");
		try { DebugEnterRule(GrammarFileName, "update");
		DebugLocation(1022, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1023:2: ( UPDATE ( LOW_PRIORITY )? ( IGNORE )? table= table_references set= set_columns ( WHERE where_condition )? ({...}? => ( order_by )? ( LIMIT NUMBER )? )? -> ^( UPDATE ( LOW_PRIORITY )? ( IGNORE )? $table $set ( ^( WHERE where_condition ) )? ( order_by )? ( ^( LIMIT NUMBER ) )? ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:1023:4: UPDATE ( LOW_PRIORITY )? ( IGNORE )? table= table_references set= set_columns ( WHERE where_condition )? ({...}? => ( order_by )? ( LIMIT NUMBER )? )?
			{
			DebugLocation(1023, 4);
			UPDATE410=(IToken)Match(input,UPDATE,Follow._UPDATE_in_update8567); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_UPDATE.Add(UPDATE410);

			DebugLocation(1023, 11);
			// MySQL51Parser.g3:1023:11: ( LOW_PRIORITY )?
			int alt189=2;
			try { DebugEnterSubRule(189);
			try { DebugEnterDecision(189, false);
			int LA189_0 = input.LA(1);

			if ((LA189_0==LOW_PRIORITY))
			{
				alt189 = 1;
			}
			} finally { DebugExitDecision(189); }
			switch (alt189)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1023:11: LOW_PRIORITY
				{
				DebugLocation(1023, 11);
				LOW_PRIORITY411=(IToken)Match(input,LOW_PRIORITY,Follow._LOW_PRIORITY_in_update8569); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LOW_PRIORITY.Add(LOW_PRIORITY411);


				}
				break;

			}
			} finally { DebugExitSubRule(189); }

			DebugLocation(1023, 25);
			// MySQL51Parser.g3:1023:25: ( IGNORE )?
			int alt190=2;
			try { DebugEnterSubRule(190);
			try { DebugEnterDecision(190, false);
			int LA190_0 = input.LA(1);

			if ((LA190_0==IGNORE))
			{
				alt190 = 1;
			}
			} finally { DebugExitDecision(190); }
			switch (alt190)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1023:25: IGNORE
				{
				DebugLocation(1023, 25);
				IGNORE412=(IToken)Match(input,IGNORE,Follow._IGNORE_in_update8572); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_IGNORE.Add(IGNORE412);


				}
				break;

			}
			} finally { DebugExitSubRule(190); }

			DebugLocation(1024, 8);
			PushFollow(Follow._table_references_in_update8579);
			table=table_references();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_table_references.Add(table.Tree);
			DebugLocation(1025, 6);
			PushFollow(Follow._set_columns_in_update8588);
			set=set_columns();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_set_columns.Add(set.Tree);
			DebugLocation(1026, 3);
			// MySQL51Parser.g3:1026:3: ( WHERE where_condition )?
			int alt191=2;
			try { DebugEnterSubRule(191);
			try { DebugEnterDecision(191, false);
			int LA191_0 = input.LA(1);

			if ((LA191_0==WHERE))
			{
				alt191 = 1;
			}
			} finally { DebugExitDecision(191); }
			switch (alt191)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1026:4: WHERE where_condition
				{
				DebugLocation(1026, 4);
				WHERE413=(IToken)Match(input,WHERE,Follow._WHERE_in_update8593); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_WHERE.Add(WHERE413);

				DebugLocation(1026, 10);
				PushFollow(Follow._where_condition_in_update8595);
				where_condition414=where_condition();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_where_condition.Add(where_condition414.Tree);

				}
				break;

			}
			} finally { DebugExitSubRule(191); }

			DebugLocation(1028, 3);
			// MySQL51Parser.g3:1028:3: ({...}? => ( order_by )? ( LIMIT NUMBER )? )?
			int alt194=2;
			try { DebugEnterSubRule(194);
			try { DebugEnterDecision(194, false);
			int LA194_0 = input.LA(1);

			if ((LA194_0==LIMIT||LA194_0==ORDER) && (EvalPredicate((table!=null?table.table_count:default(int))==1, "$table.table_count==1")))
			{
				alt194 = 1;
			}
			else if ((LA194_0==SEMI))
			{
				int LA194_2 = input.LA(2);

				if ((EvalPredicate((table!=null?table.table_count:default(int))==1, "$table.table_count==1")))
				{
					alt194 = 1;
				}
			}
			else if ((LA194_0==EOF))
			{
				int LA194_3 = input.LA(2);

				if ((EvalPredicate((table!=null?table.table_count:default(int))==1, "$table.table_count==1")))
				{
					alt194 = 1;
				}
			}
			} finally { DebugExitDecision(194); }
			switch (alt194)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1028:4: {...}? => ( order_by )? ( LIMIT NUMBER )?
				{
				DebugLocation(1028, 4);
				if (!(EvalPredicate((table!=null?table.table_count:default(int))==1, "$table.table_count==1")))
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					throw new FailedPredicateException(input, "update", "$table.table_count==1");
				}
				DebugLocation(1029, 4);
				// MySQL51Parser.g3:1029:4: ( order_by )?
				int alt192=2;
				try { DebugEnterSubRule(192);
				try { DebugEnterDecision(192, false);
				int LA192_0 = input.LA(1);

				if ((LA192_0==ORDER))
				{
					alt192 = 1;
				}
				} finally { DebugExitDecision(192); }
				switch (alt192)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1029:4: order_by
					{
					DebugLocation(1029, 4);
					PushFollow(Follow._order_by_in_update8613);
					order_by415=order_by();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_order_by.Add(order_by415.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(192); }

				DebugLocation(1030, 4);
				// MySQL51Parser.g3:1030:4: ( LIMIT NUMBER )?
				int alt193=2;
				try { DebugEnterSubRule(193);
				try { DebugEnterDecision(193, false);
				int LA193_0 = input.LA(1);

				if ((LA193_0==LIMIT))
				{
					alt193 = 1;
				}
				} finally { DebugExitDecision(193); }
				switch (alt193)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1030:5: LIMIT NUMBER
					{
					DebugLocation(1030, 5);
					LIMIT416=(IToken)Match(input,LIMIT,Follow._LIMIT_in_update8620); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_LIMIT.Add(LIMIT416);

					DebugLocation(1030, 11);
					NUMBER417=(IToken)Match(input,NUMBER,Follow._NUMBER_in_update8622); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_NUMBER.Add(NUMBER417);


					}
					break;

				}
				} finally { DebugExitSubRule(193); }


				}
				break;

			}
			} finally { DebugExitSubRule(194); }



			{
			// AST REWRITE
			// elements: UPDATE, LOW_PRIORITY, IGNORE, table, set, WHERE, where_condition, order_by, LIMIT, NUMBER
			// token labels: 
			// rule labels: table, set, retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_table=new RewriteRuleSubtreeStream(adaptor,"rule table",table!=null?table.Tree:null);
			RewriteRuleSubtreeStream stream_set=new RewriteRuleSubtreeStream(adaptor,"rule set",set!=null?set.Tree:null);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 1032:3: -> ^( UPDATE ( LOW_PRIORITY )? ( IGNORE )? $table $set ( ^( WHERE where_condition ) )? ( order_by )? ( ^( LIMIT NUMBER ) )? )
			{
				DebugLocation(1032, 6);
				// MySQL51Parser.g3:1032:6: ^( UPDATE ( LOW_PRIORITY )? ( IGNORE )? $table $set ( ^( WHERE where_condition ) )? ( order_by )? ( ^( LIMIT NUMBER ) )? )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(1032, 8);
				root_1 = (object)adaptor.BecomeRoot(stream_UPDATE.NextNode(), root_1);

				DebugLocation(1032, 15);
				// MySQL51Parser.g3:1032:15: ( LOW_PRIORITY )?
				if (stream_LOW_PRIORITY.HasNext)
				{
					DebugLocation(1032, 15);
					adaptor.AddChild(root_1, stream_LOW_PRIORITY.NextNode());

				}
				stream_LOW_PRIORITY.Reset();
				DebugLocation(1032, 29);
				// MySQL51Parser.g3:1032:29: ( IGNORE )?
				if (stream_IGNORE.HasNext)
				{
					DebugLocation(1032, 29);
					adaptor.AddChild(root_1, stream_IGNORE.NextNode());

				}
				stream_IGNORE.Reset();
				DebugLocation(1032, 38);
				adaptor.AddChild(root_1, stream_table.NextTree());
				DebugLocation(1032, 45);
				adaptor.AddChild(root_1, stream_set.NextTree());
				DebugLocation(1032, 49);
				// MySQL51Parser.g3:1032:49: ( ^( WHERE where_condition ) )?
				if (stream_WHERE.HasNext||stream_where_condition.HasNext)
				{
					DebugLocation(1032, 49);
					// MySQL51Parser.g3:1032:49: ^( WHERE where_condition )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1032, 51);
					root_2 = (object)adaptor.BecomeRoot(stream_WHERE.NextNode(), root_2);

					DebugLocation(1032, 57);
					adaptor.AddChild(root_2, stream_where_condition.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

				}
				stream_WHERE.Reset();
				stream_where_condition.Reset();
				DebugLocation(1032, 75);
				// MySQL51Parser.g3:1032:75: ( order_by )?
				if (stream_order_by.HasNext)
				{
					DebugLocation(1032, 75);
					adaptor.AddChild(root_1, stream_order_by.NextTree());

				}
				stream_order_by.Reset();
				DebugLocation(1032, 85);
				// MySQL51Parser.g3:1032:85: ( ^( LIMIT NUMBER ) )?
				if (stream_LIMIT.HasNext||stream_NUMBER.HasNext)
				{
					DebugLocation(1032, 85);
					// MySQL51Parser.g3:1032:85: ^( LIMIT NUMBER )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1032, 87);
					root_2 = (object)adaptor.BecomeRoot(stream_LIMIT.NextNode(), root_2);

					DebugLocation(1032, 93);
					adaptor.AddChild(root_2, stream_NUMBER.NextNode());

					adaptor.AddChild(root_1, root_2);
					}

				}
				stream_LIMIT.Reset();
				stream_NUMBER.Reset();

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("update", 77);
			LeaveRule("update", 77);
			LeaveRule_update();
		}
		DebugLocation(1033, 1);
		} finally { DebugExitRule(GrammarFileName, "update"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "update"

	private sealed partial class delete_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public delete_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_delete();
	partial void LeaveRule_delete();

	// $ANTLR start "delete"
	// MySQL51Parser.g3:1043:1: delete : DELETE ( options {k=1; } :opts+= LOW_PRIORITY |opts+= QUICK |opts+= IGNORE )* ( FROM t+= simple_table_ref_no_alias ( DOT MULT )? ( COMMA t+= simple_table_ref_no_alias ( DOT MULT )? )* ( USING tr= table_references )? ( WHERE where_condition )? ({...}? => ( order_by )? ( LIMIT NUMBER )? )? -> {multiTableDelete}? ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ( ^( TABLE $t) )+ ^( USING $tr) ( ^( WHERE where_condition ) )? ) -> ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ^( TABLE $t) ( ^( WHERE where_condition ) )? ( order_by )? ( ^( LIMIT NUMBER ) )? ) |t+= simple_table_ref_no_alias ( DOT MULT )? ( COMMA t+= simple_table_ref_no_alias ( DOT MULT )? )* FROM tr= table_references ( WHERE where_condition )? -> ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ( ^( TABLE $t) )+ ^( FROM $tr) ( ^( WHERE where_condition ) )? ) ) ;
	[GrammarRule("delete")]
	private MySQL51Parser.delete_return delete()
	{
		EnterRule_delete();
		EnterRule("delete", 78);
		TraceIn("delete", 78);
		MySQL51Parser.delete_return retval = new MySQL51Parser.delete_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken DELETE418 = default(IToken);
		IToken FROM419 = default(IToken);
		IToken DOT420 = default(IToken);
		IToken MULT421 = default(IToken);
		IToken COMMA422 = default(IToken);
		IToken DOT423 = default(IToken);
		IToken MULT424 = default(IToken);
		IToken USING425 = default(IToken);
		IToken WHERE426 = default(IToken);
		IToken LIMIT429 = default(IToken);
		IToken NUMBER430 = default(IToken);
		IToken DOT431 = default(IToken);
		IToken MULT432 = default(IToken);
		IToken COMMA433 = default(IToken);
		IToken DOT434 = default(IToken);
		IToken MULT435 = default(IToken);
		IToken FROM436 = default(IToken);
		IToken WHERE437 = default(IToken);
		IToken opts = default(IToken);
		List<IToken> list_opts = null;
		List<object> list_t = null;
		MySQL51Parser.table_references_return tr = default(MySQL51Parser.table_references_return);
		MySQL51Parser.where_condition_return where_condition427 = default(MySQL51Parser.where_condition_return);
		MySQL51Parser.order_by_return order_by428 = default(MySQL51Parser.order_by_return);
		MySQL51Parser.where_condition_return where_condition438 = default(MySQL51Parser.where_condition_return);
		MySQL51Parser.simple_table_ref_no_alias_return t = default(MySQL51Parser.simple_table_ref_no_alias_return);
		object DELETE418_tree = default(object);
		object FROM419_tree = default(object);
		object DOT420_tree = default(object);
		object MULT421_tree = default(object);
		object COMMA422_tree = default(object);
		object DOT423_tree = default(object);
		object MULT424_tree = default(object);
		object USING425_tree = default(object);
		object WHERE426_tree = default(object);
		object LIMIT429_tree = default(object);
		object NUMBER430_tree = default(object);
		object DOT431_tree = default(object);
		object MULT432_tree = default(object);
		object COMMA433_tree = default(object);
		object DOT434_tree = default(object);
		object MULT435_tree = default(object);
		object FROM436_tree = default(object);
		object WHERE437_tree = default(object);
		object opts_tree = default(object);
		RewriteRuleITokenStream stream_DELETE=new RewriteRuleITokenStream(adaptor,"token DELETE");
		RewriteRuleITokenStream stream_LOW_PRIORITY=new RewriteRuleITokenStream(adaptor,"token LOW_PRIORITY");
		RewriteRuleITokenStream stream_QUICK=new RewriteRuleITokenStream(adaptor,"token QUICK");
		RewriteRuleITokenStream stream_IGNORE=new RewriteRuleITokenStream(adaptor,"token IGNORE");
		RewriteRuleITokenStream stream_FROM=new RewriteRuleITokenStream(adaptor,"token FROM");
		RewriteRuleITokenStream stream_DOT=new RewriteRuleITokenStream(adaptor,"token DOT");
		RewriteRuleITokenStream stream_MULT=new RewriteRuleITokenStream(adaptor,"token MULT");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleITokenStream stream_USING=new RewriteRuleITokenStream(adaptor,"token USING");
		RewriteRuleITokenStream stream_WHERE=new RewriteRuleITokenStream(adaptor,"token WHERE");
		RewriteRuleITokenStream stream_LIMIT=new RewriteRuleITokenStream(adaptor,"token LIMIT");
		RewriteRuleITokenStream stream_NUMBER=new RewriteRuleITokenStream(adaptor,"token NUMBER");
		RewriteRuleSubtreeStream stream_simple_table_ref_no_alias=new RewriteRuleSubtreeStream(adaptor,"rule simple_table_ref_no_alias");
		RewriteRuleSubtreeStream stream_table_references=new RewriteRuleSubtreeStream(adaptor,"rule table_references");
		RewriteRuleSubtreeStream stream_where_condition=new RewriteRuleSubtreeStream(adaptor,"rule where_condition");
		RewriteRuleSubtreeStream stream_order_by=new RewriteRuleSubtreeStream(adaptor,"rule order_by");

		bool multiTableDelete = false;

		try { DebugEnterRule(GrammarFileName, "delete");
		DebugLocation(1043, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1047:2: ( DELETE ( options {k=1; } :opts+= LOW_PRIORITY |opts+= QUICK |opts+= IGNORE )* ( FROM t+= simple_table_ref_no_alias ( DOT MULT )? ( COMMA t+= simple_table_ref_no_alias ( DOT MULT )? )* ( USING tr= table_references )? ( WHERE where_condition )? ({...}? => ( order_by )? ( LIMIT NUMBER )? )? -> {multiTableDelete}? ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ( ^( TABLE $t) )+ ^( USING $tr) ( ^( WHERE where_condition ) )? ) -> ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ^( TABLE $t) ( ^( WHERE where_condition ) )? ( order_by )? ( ^( LIMIT NUMBER ) )? ) |t+= simple_table_ref_no_alias ( DOT MULT )? ( COMMA t+= simple_table_ref_no_alias ( DOT MULT )? )* FROM tr= table_references ( WHERE where_condition )? -> ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ( ^( TABLE $t) )+ ^( FROM $tr) ( ^( WHERE where_condition ) )? ) ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:1047:4: DELETE ( options {k=1; } :opts+= LOW_PRIORITY |opts+= QUICK |opts+= IGNORE )* ( FROM t+= simple_table_ref_no_alias ( DOT MULT )? ( COMMA t+= simple_table_ref_no_alias ( DOT MULT )? )* ( USING tr= table_references )? ( WHERE where_condition )? ({...}? => ( order_by )? ( LIMIT NUMBER )? )? -> {multiTableDelete}? ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ( ^( TABLE $t) )+ ^( USING $tr) ( ^( WHERE where_condition ) )? ) -> ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ^( TABLE $t) ( ^( WHERE where_condition ) )? ( order_by )? ( ^( LIMIT NUMBER ) )? ) |t+= simple_table_ref_no_alias ( DOT MULT )? ( COMMA t+= simple_table_ref_no_alias ( DOT MULT )? )* FROM tr= table_references ( WHERE where_condition )? -> ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ( ^( TABLE $t) )+ ^( FROM $tr) ( ^( WHERE where_condition ) )? ) )
			{
			DebugLocation(1047, 4);
			DELETE418=(IToken)Match(input,DELETE,Follow._DELETE_in_delete8690); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_DELETE.Add(DELETE418);

			DebugLocation(1048, 3);
			// MySQL51Parser.g3:1048:3: ( options {k=1; } :opts+= LOW_PRIORITY |opts+= QUICK |opts+= IGNORE )*
			try { DebugEnterSubRule(195);
			while (true)
			{
				int alt195=4;
				try { DebugEnterDecision(195, false);
				try
				{
					alt195 = dfa195.Predict(input);
				}
				catch (NoViableAltException nvae)
				{
					DebugRecognitionException(nvae);
					throw;
				}
				} finally { DebugExitDecision(195); }
				switch ( alt195 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1048:19: opts+= LOW_PRIORITY
					{
					DebugLocation(1048, 23);
					opts=(IToken)Match(input,LOW_PRIORITY,Follow._LOW_PRIORITY_in_delete8705); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_LOW_PRIORITY.Add(opts);

					if (list_opts==null) list_opts=new List<IToken>();
					list_opts.Add(opts);


					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:1048:40: opts+= QUICK
					{
					DebugLocation(1048, 44);
					opts=(IToken)Match(input,QUICK,Follow._QUICK_in_delete8711); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_QUICK.Add(opts);

					if (list_opts==null) list_opts=new List<IToken>();
					list_opts.Add(opts);


					}
					break;
				case 3:
					DebugEnterAlt(3);
					// MySQL51Parser.g3:1048:54: opts+= IGNORE
					{
					DebugLocation(1048, 58);
					opts=(IToken)Match(input,IGNORE,Follow._IGNORE_in_delete8717); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_IGNORE.Add(opts);

					if (list_opts==null) list_opts=new List<IToken>();
					list_opts.Add(opts);


					}
					break;

				default:
					goto loop195;
				}
			}

			loop195:
				;

			} finally { DebugExitSubRule(195); }

			DebugLocation(1049, 3);
			// MySQL51Parser.g3:1049:3: ( FROM t+= simple_table_ref_no_alias ( DOT MULT )? ( COMMA t+= simple_table_ref_no_alias ( DOT MULT )? )* ( USING tr= table_references )? ( WHERE where_condition )? ({...}? => ( order_by )? ( LIMIT NUMBER )? )? -> {multiTableDelete}? ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ( ^( TABLE $t) )+ ^( USING $tr) ( ^( WHERE where_condition ) )? ) -> ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ^( TABLE $t) ( ^( WHERE where_condition ) )? ( order_by )? ( ^( LIMIT NUMBER ) )? ) |t+= simple_table_ref_no_alias ( DOT MULT )? ( COMMA t+= simple_table_ref_no_alias ( DOT MULT )? )* FROM tr= table_references ( WHERE where_condition )? -> ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ( ^( TABLE $t) )+ ^( FROM $tr) ( ^( WHERE where_condition ) )? ) )
			int alt208=2;
			try { DebugEnterSubRule(208);
			try { DebugEnterDecision(208, false);
			int LA208_0 = input.LA(1);

			if ((LA208_0==FROM))
			{
				alt208 = 1;
			}
			else if ((LA208_0==ACTION||(LA208_0>=ADDDATE && LA208_0<=ALGORITHM)||LA208_0==ANY||LA208_0==ASCII||(LA208_0>=AT && LA208_0<=BACKUP)||LA208_0==BEGIN||(LA208_0>=BINLOG && LA208_0<=BIT)||(LA208_0>=BLOCK && LA208_0<=BOOLEAN)||LA208_0==BTREE||(LA208_0>=BYTE && LA208_0<=CACHE)||LA208_0==CASCADED||LA208_0==CHAIN||LA208_0==CHANGED||LA208_0==CHARSET||(LA208_0>=CHECKSUM && LA208_0<=CODE)||LA208_0==COLLATION||LA208_0==COLUMNS||LA208_0==COMMENT||(LA208_0>=COMMIT && LA208_0<=CONCURRENT)||(LA208_0>=CONNECTION && LA208_0<=CONSISTENT)||(LA208_0>=CONTAINS && LA208_0<=CONTEXT)||LA208_0==CONTRIBUTORS||LA208_0==CPU||LA208_0==CUBE||LA208_0==DATA||(LA208_0>=DATAFILE && LA208_0<=DATETIME)||LA208_0==DAY||LA208_0==DEALLOCATE||LA208_0==DEFINER||LA208_0==DELAY_KEY_WRITE||LA208_0==DES_KEY_FILE||(LA208_0>=DIRECTORY && LA208_0<=DISK)||LA208_0==DO||(LA208_0>=DUMPFILE && LA208_0<=DYNAMIC)||LA208_0==ENABLE||(LA208_0>=END && LA208_0<=ENUM)||(LA208_0>=ERRORS && LA208_0<=ESCAPE)||(LA208_0>=EVENT && LA208_0<=EXECUTE)||LA208_0==EXPANSION||(LA208_0>=EXTENDED && LA208_0<=EXTENT_SIZE)||(LA208_0>=FAST && LA208_0<=FAULTS)||(LA208_0>=FIELDS && LA208_0<=FIXED)||LA208_0==FLUSH||(LA208_0>=FOUND && LA208_0<=FRAC_SECOND)||LA208_0==FULL||(LA208_0>=FUNCTION && LA208_0<=GLOBAL)||LA208_0==GRANTS||LA208_0==GROUP||(LA208_0>=HANDLER && LA208_0<=HASH)||LA208_0==HELP||(LA208_0>=HOST && LA208_0<=HOUR)||(LA208_0>=ID && LA208_0<=IDENTIFIED)||LA208_0==IMPORT||LA208_0==INDEXES||LA208_0==INITIAL_SIZE||LA208_0==INNOBASE||(LA208_0>=INSERT_METHOD && LA208_0<=INSTALL)||(LA208_0>=INVOKER && LA208_0<=IPC)||(LA208_0>=ISOLATION && LA208_0<=ISSUER)||LA208_0==KEY_BLOCK_SIZE||(LA208_0>=LABEL && LA208_0<=LAST)||LA208_0==LEAVES||LA208_0==LESS||LA208_0==LEVEL||(LA208_0>=LINESTRING && LA208_0<=LIST)||LA208_0==LOCAL||(LA208_0>=LOCKS && LA208_0<=LOGFILE)||LA208_0==LOGS||(LA208_0>=MASTER && LA208_0<=MASTER_SSL_KEY)||LA208_0==MASTER_USER||(LA208_0>=MAX_CONNECTIONS_PER_HOUR && LA208_0<=MEDIUM)||(LA208_0>=MEMORY && LA208_0<=MICROSECOND)||LA208_0==MIGRATE||LA208_0==MINUTE||LA208_0==MIN_ROWS||LA208_0==MODE||LA208_0==MODIFY||LA208_0==MONTH||(LA208_0>=MULTILINESTRING && LA208_0<=NATIONAL)||(LA208_0>=NCHAR && LA208_0<=NONE)||LA208_0==NO_WAIT||(LA208_0>=NVARCHAR && LA208_0<=OLD_PASSWORD)||(LA208_0>=ONE && LA208_0<=OPEN)||LA208_0==OPTIONS||(LA208_0>=OWNER && LA208_0<=PLUGINS)||(LA208_0>=POINT && LA208_0<=PORT)||(LA208_0>=PREPARE && LA208_0<=PREV)||LA208_0==PRIVILEGES||(LA208_0>=PROCESS && LA208_0<=PROFILES)||(LA208_0>=QUARTER && LA208_0<=QUICK)||(LA208_0>=REBUILD && LA208_0<=REDUNDANT)||(LA208_0>=RELAY_LOG_FILE && LA208_0<=RELAY_THREAD)||(LA208_0>=RELOAD && LA208_0<=REMOVE)||(LA208_0>=REORGANIZE && LA208_0<=REPAIR)||LA208_0==REPEATABLE||LA208_0==REPLICATION||(LA208_0>=RESET && LA208_0<=RESTORE)||LA208_0==RESUME||LA208_0==RETURNS||(LA208_0>=ROLLBACK && LA208_0<=ROW_FORMAT)||(LA208_0>=RTREE && LA208_0<=SCHEDULE)||LA208_0==SECOND||LA208_0==SECURITY||(LA208_0>=SERIAL && LA208_0<=SESSION)||LA208_0==SHARE||(LA208_0>=SHUTDOWN && LA208_0<=SLAVE)||(LA208_0>=SNAPSHOT && LA208_0<=SOCKET)||(LA208_0>=SONAME && LA208_0<=SOURCE)||(LA208_0>=SQL_BUFFER_RESULT && LA208_0<=SQL_CACHE)||LA208_0==SQL_NO_CACHE||LA208_0==SQL_THREAD||LA208_0==START||(LA208_0>=STARTS && LA208_0<=STATUS)||(LA208_0>=STOP && LA208_0<=STORAGE)||(LA208_0>=STRING_KEYWORD && LA208_0<=SUBPARTITIONS)||(LA208_0>=SUPER && LA208_0<=SWITCHES)||(LA208_0>=TABLES && LA208_0<=TEMPTABLE)||(LA208_0>=TEXT && LA208_0<=THAN)||(LA208_0>=TIME && LA208_0<=TIMESTAMP_DIFF)||(LA208_0>=TRANSACTION && LA208_0<=TRANSACTIONAL)||LA208_0==TRIGGERS||(LA208_0>=TRUNCATE && LA208_0<=UNDEFINED)||(LA208_0>=UNDOFILE && LA208_0<=UNINSTALL)||LA208_0==UNKNOWN||LA208_0==UNTIL||LA208_0==UPGRADE||LA208_0==USER||LA208_0==USE_FRM||LA208_0==VALUE||LA208_0==VARIABLES||(LA208_0>=VIEW && LA208_0<=WEEK)||(LA208_0>=WORK && LA208_0<=WRAPPER)||(LA208_0>=X509 && LA208_0<=XA)||LA208_0==YEAR))
			{
				alt208 = 2;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 208, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(208); }
			switch (alt208)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1049:5: FROM t+= simple_table_ref_no_alias ( DOT MULT )? ( COMMA t+= simple_table_ref_no_alias ( DOT MULT )? )* ( USING tr= table_references )? ( WHERE where_condition )? ({...}? => ( order_by )? ( LIMIT NUMBER )? )?
				{
				DebugLocation(1049, 5);
				FROM419=(IToken)Match(input,FROM,Follow._FROM_in_delete8727); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_FROM.Add(FROM419);

				DebugLocation(1050, 5);
				PushFollow(Follow._simple_table_ref_no_alias_in_delete8735);
				t=simple_table_ref_no_alias();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_simple_table_ref_no_alias.Add(t.Tree);
				if (list_t==null) list_t=new List<object>();
				list_t.Add(t.Tree);

				DebugLocation(1050, 33);
				// MySQL51Parser.g3:1050:33: ( DOT MULT )?
				int alt196=2;
				try { DebugEnterSubRule(196);
				try { DebugEnterDecision(196, false);
				int LA196_0 = input.LA(1);

				if ((LA196_0==DOT))
				{
					alt196 = 1;
				}
				} finally { DebugExitDecision(196); }
				switch (alt196)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1050:34: DOT MULT
					{
					DebugLocation(1050, 34);
					DOT420=(IToken)Match(input,DOT,Follow._DOT_in_delete8738); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_DOT.Add(DOT420);

					DebugLocation(1050, 38);
					MULT421=(IToken)Match(input,MULT,Follow._MULT_in_delete8740); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_MULT.Add(MULT421);

					DebugLocation(1050, 43);
					if (state.backtracking == 0)
					{
						multiTableDelete = true;
					}

					}
					break;

				}
				} finally { DebugExitSubRule(196); }

				DebugLocation(1050, 73);
				// MySQL51Parser.g3:1050:73: ( COMMA t+= simple_table_ref_no_alias ( DOT MULT )? )*
				try { DebugEnterSubRule(198);
				while (true)
				{
					int alt198=2;
					try { DebugEnterDecision(198, false);
					int LA198_0 = input.LA(1);

					if ((LA198_0==COMMA))
					{
						alt198 = 1;
					}


					} finally { DebugExitDecision(198); }
					switch ( alt198 )
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:1050:74: COMMA t+= simple_table_ref_no_alias ( DOT MULT )?
						{
						DebugLocation(1050, 74);
						COMMA422=(IToken)Match(input,COMMA,Follow._COMMA_in_delete8748); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_COMMA.Add(COMMA422);

						DebugLocation(1050, 81);
						PushFollow(Follow._simple_table_ref_no_alias_in_delete8752);
						t=simple_table_ref_no_alias();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_simple_table_ref_no_alias.Add(t.Tree);
						if (list_t==null) list_t=new List<object>();
						list_t.Add(t.Tree);

						DebugLocation(1050, 109);
						// MySQL51Parser.g3:1050:109: ( DOT MULT )?
						int alt197=2;
						try { DebugEnterSubRule(197);
						try { DebugEnterDecision(197, false);
						int LA197_0 = input.LA(1);

						if ((LA197_0==DOT))
						{
							alt197 = 1;
						}
						} finally { DebugExitDecision(197); }
						switch (alt197)
						{
						case 1:
							DebugEnterAlt(1);
							// MySQL51Parser.g3:1050:110: DOT MULT
							{
							DebugLocation(1050, 110);
							DOT423=(IToken)Match(input,DOT,Follow._DOT_in_delete8755); if (state.failed) return retval; 
							if (state.backtracking == 0) stream_DOT.Add(DOT423);

							DebugLocation(1050, 114);
							MULT424=(IToken)Match(input,MULT,Follow._MULT_in_delete8757); if (state.failed) return retval; 
							if (state.backtracking == 0) stream_MULT.Add(MULT424);


							}
							break;

						}
						} finally { DebugExitSubRule(197); }

						DebugLocation(1050, 121);
						if (state.backtracking == 0)
						{
							multiTableDelete = true;
						}

						}
						break;

					default:
						goto loop198;
					}
				}

				loop198:
					;

				} finally { DebugExitSubRule(198); }

				DebugLocation(1051, 4);
				// MySQL51Parser.g3:1051:4: ( USING tr= table_references )?
				int alt199=2;
				try { DebugEnterSubRule(199);
				try { DebugEnterDecision(199, false);
				int LA199_0 = input.LA(1);

				if ((LA199_0==USING))
				{
					alt199 = 1;
				}
				} finally { DebugExitDecision(199); }
				switch (alt199)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1051:5: USING tr= table_references
					{
					DebugLocation(1051, 5);
					USING425=(IToken)Match(input,USING,Follow._USING_in_delete8770); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_USING.Add(USING425);

					DebugLocation(1051, 13);
					PushFollow(Follow._table_references_in_delete8774);
					tr=table_references();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_table_references.Add(tr.Tree);
					DebugLocation(1051, 31);
					if (state.backtracking == 0)
					{
						multiTableDelete = true;
					}

					}
					break;

				}
				} finally { DebugExitSubRule(199); }

				DebugLocation(1052, 4);
				// MySQL51Parser.g3:1052:4: ( WHERE where_condition )?
				int alt200=2;
				try { DebugEnterSubRule(200);
				try { DebugEnterDecision(200, false);
				int LA200_0 = input.LA(1);

				if ((LA200_0==WHERE))
				{
					alt200 = 1;
				}
				} finally { DebugExitDecision(200); }
				switch (alt200)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1052:5: WHERE where_condition
					{
					DebugLocation(1052, 5);
					WHERE426=(IToken)Match(input,WHERE,Follow._WHERE_in_delete8784); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_WHERE.Add(WHERE426);

					DebugLocation(1052, 11);
					PushFollow(Follow._where_condition_in_delete8786);
					where_condition427=where_condition();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_where_condition.Add(where_condition427.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(200); }

				DebugLocation(1053, 4);
				// MySQL51Parser.g3:1053:4: ({...}? => ( order_by )? ( LIMIT NUMBER )? )?
				int alt203=2;
				try { DebugEnterSubRule(203);
				try { DebugEnterDecision(203, false);
				int LA203_0 = input.LA(1);

				if ((LA203_0==LIMIT||LA203_0==ORDER) && (EvalPredicate(multiTableDelete == false, "multiTableDelete == false")))
				{
					alt203 = 1;
				}
				else if ((LA203_0==SEMI))
				{
					int LA203_2 = input.LA(2);

					if ((EvalPredicate(multiTableDelete == false, "multiTableDelete == false")))
					{
						alt203 = 1;
					}
				}
				else if ((LA203_0==EOF))
				{
					int LA203_3 = input.LA(2);

					if ((EvalPredicate(multiTableDelete == false, "multiTableDelete == false")))
					{
						alt203 = 1;
					}
				}
				} finally { DebugExitDecision(203); }
				switch (alt203)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1053:5: {...}? => ( order_by )? ( LIMIT NUMBER )?
					{
					DebugLocation(1053, 5);
					if (!(EvalPredicate(multiTableDelete == false, "multiTableDelete == false")))
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						throw new FailedPredicateException(input, "delete", "multiTableDelete == false");
					}
					DebugLocation(1054, 5);
					// MySQL51Parser.g3:1054:5: ( order_by )?
					int alt201=2;
					try { DebugEnterSubRule(201);
					try { DebugEnterDecision(201, false);
					int LA201_0 = input.LA(1);

					if ((LA201_0==ORDER))
					{
						alt201 = 1;
					}
					} finally { DebugExitDecision(201); }
					switch (alt201)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:1054:5: order_by
						{
						DebugLocation(1054, 5);
						PushFollow(Follow._order_by_in_delete8801);
						order_by428=order_by();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_order_by.Add(order_by428.Tree);

						}
						break;

					}
					} finally { DebugExitSubRule(201); }

					DebugLocation(1055, 5);
					// MySQL51Parser.g3:1055:5: ( LIMIT NUMBER )?
					int alt202=2;
					try { DebugEnterSubRule(202);
					try { DebugEnterDecision(202, false);
					int LA202_0 = input.LA(1);

					if ((LA202_0==LIMIT))
					{
						alt202 = 1;
					}
					} finally { DebugExitDecision(202); }
					switch (alt202)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:1055:6: LIMIT NUMBER
						{
						DebugLocation(1055, 6);
						LIMIT429=(IToken)Match(input,LIMIT,Follow._LIMIT_in_delete8809); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_LIMIT.Add(LIMIT429);

						DebugLocation(1055, 12);
						NUMBER430=(IToken)Match(input,NUMBER,Follow._NUMBER_in_delete8811); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_NUMBER.Add(NUMBER430);


						}
						break;

					}
					} finally { DebugExitSubRule(202); }


					}
					break;

				}
				} finally { DebugExitSubRule(203); }



				{
				// AST REWRITE
				// elements: DELETE, opts, t, USING, tr, WHERE, where_condition, DELETE, opts, t, WHERE, where_condition, order_by, LIMIT, NUMBER
				// token labels: 
				// rule labels: tr, retval
				// token list labels: opts
				// rule list labels: t
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleITokenStream stream_opts=new RewriteRuleITokenStream(adaptor,"token opts", list_opts);
				RewriteRuleSubtreeStream stream_tr=new RewriteRuleSubtreeStream(adaptor,"rule tr",tr!=null?tr.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);
				RewriteRuleSubtreeStream stream_t=new RewriteRuleSubtreeStream(adaptor,"token t",list_t);
				root_0 = (object)adaptor.Nil();
				// 1057:9: -> {multiTableDelete}? ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ( ^( TABLE $t) )+ ^( USING $tr) ( ^( WHERE where_condition ) )? )
				if (multiTableDelete)
				{
					DebugLocation(1057, 32);
					// MySQL51Parser.g3:1057:32: ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ( ^( TABLE $t) )+ ^( USING $tr) ( ^( WHERE where_condition ) )? )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1057, 34);
					root_1 = (object)adaptor.BecomeRoot(stream_DELETE.NextNode(), root_1);

					DebugLocation(1057, 41);
					// MySQL51Parser.g3:1057:41: ( ^( OPTIONS ( $opts)+ ) )?
					if (stream_opts.HasNext)
					{
						DebugLocation(1057, 41);
						// MySQL51Parser.g3:1057:41: ^( OPTIONS ( $opts)+ )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1057, 43);
						root_2 = (object)adaptor.BecomeRoot((object)adaptor.Create(OPTIONS, "OPTIONS"), root_2);

						DebugLocation(1057, 52);
						if (!(stream_opts.HasNext))
						{
							throw new RewriteEarlyExitException();
						}
						while ( stream_opts.HasNext )
						{
							DebugLocation(1057, 52);
							adaptor.AddChild(root_2, stream_opts.NextNode());

						}
						stream_opts.Reset();

						adaptor.AddChild(root_1, root_2);
						}

					}
					stream_opts.Reset();
					DebugLocation(1057, 60);
					if (!(stream_t.HasNext))
					{
						throw new RewriteEarlyExitException();
					}
					while ( stream_t.HasNext )
					{
						DebugLocation(1057, 60);
						// MySQL51Parser.g3:1057:60: ^( TABLE $t)
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1057, 62);
						root_2 = (object)adaptor.BecomeRoot((object)adaptor.Create(TABLE, "TABLE"), root_2);

						DebugLocation(1057, 69);
						adaptor.AddChild(root_2, stream_t.NextTree());

						adaptor.AddChild(root_1, root_2);
						}

					}
					stream_t.Reset();
					DebugLocation(1057, 73);
					// MySQL51Parser.g3:1057:73: ^( USING $tr)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1057, 75);
					root_2 = (object)adaptor.BecomeRoot(stream_USING.NextNode(), root_2);

					DebugLocation(1057, 82);
					adaptor.AddChild(root_2, stream_tr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}
					DebugLocation(1057, 86);
					// MySQL51Parser.g3:1057:86: ( ^( WHERE where_condition ) )?
					if (stream_WHERE.HasNext||stream_where_condition.HasNext)
					{
						DebugLocation(1057, 86);
						// MySQL51Parser.g3:1057:86: ^( WHERE where_condition )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1057, 88);
						root_2 = (object)adaptor.BecomeRoot(stream_WHERE.NextNode(), root_2);

						DebugLocation(1057, 94);
						adaptor.AddChild(root_2, stream_where_condition.NextTree());

						adaptor.AddChild(root_1, root_2);
						}

					}
					stream_WHERE.Reset();
					stream_where_condition.Reset();

					adaptor.AddChild(root_0, root_1);
					}

				}
				else // 1058:16: -> ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ^( TABLE $t) ( ^( WHERE where_condition ) )? ( order_by )? ( ^( LIMIT NUMBER ) )? )
				{
					DebugLocation(1058, 19);
					// MySQL51Parser.g3:1058:19: ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ^( TABLE $t) ( ^( WHERE where_condition ) )? ( order_by )? ( ^( LIMIT NUMBER ) )? )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1058, 21);
					root_1 = (object)adaptor.BecomeRoot(stream_DELETE.NextNode(), root_1);

					DebugLocation(1058, 28);
					// MySQL51Parser.g3:1058:28: ( ^( OPTIONS ( $opts)+ ) )?
					if (stream_opts.HasNext)
					{
						DebugLocation(1058, 28);
						// MySQL51Parser.g3:1058:28: ^( OPTIONS ( $opts)+ )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1058, 30);
						root_2 = (object)adaptor.BecomeRoot((object)adaptor.Create(OPTIONS, "OPTIONS"), root_2);

						DebugLocation(1058, 39);
						if (!(stream_opts.HasNext))
						{
							throw new RewriteEarlyExitException();
						}
						while ( stream_opts.HasNext )
						{
							DebugLocation(1058, 39);
							adaptor.AddChild(root_2, stream_opts.NextNode());

						}
						stream_opts.Reset();

						adaptor.AddChild(root_1, root_2);
						}

					}
					stream_opts.Reset();
					DebugLocation(1058, 47);
					// MySQL51Parser.g3:1058:47: ^( TABLE $t)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1058, 49);
					root_2 = (object)adaptor.BecomeRoot((object)adaptor.Create(TABLE, "TABLE"), root_2);

					DebugLocation(1058, 56);
					adaptor.AddChild(root_2, stream_t.NextTree());

					adaptor.AddChild(root_1, root_2);
					}
					DebugLocation(1058, 59);
					// MySQL51Parser.g3:1058:59: ( ^( WHERE where_condition ) )?
					if (stream_WHERE.HasNext||stream_where_condition.HasNext)
					{
						DebugLocation(1058, 59);
						// MySQL51Parser.g3:1058:59: ^( WHERE where_condition )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1058, 61);
						root_2 = (object)adaptor.BecomeRoot(stream_WHERE.NextNode(), root_2);

						DebugLocation(1058, 67);
						adaptor.AddChild(root_2, stream_where_condition.NextTree());

						adaptor.AddChild(root_1, root_2);
						}

					}
					stream_WHERE.Reset();
					stream_where_condition.Reset();
					DebugLocation(1058, 85);
					// MySQL51Parser.g3:1058:85: ( order_by )?
					if (stream_order_by.HasNext)
					{
						DebugLocation(1058, 85);
						adaptor.AddChild(root_1, stream_order_by.NextTree());

					}
					stream_order_by.Reset();
					DebugLocation(1058, 95);
					// MySQL51Parser.g3:1058:95: ( ^( LIMIT NUMBER ) )?
					if (stream_LIMIT.HasNext||stream_NUMBER.HasNext)
					{
						DebugLocation(1058, 95);
						// MySQL51Parser.g3:1058:95: ^( LIMIT NUMBER )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1058, 97);
						root_2 = (object)adaptor.BecomeRoot(stream_LIMIT.NextNode(), root_2);

						DebugLocation(1058, 103);
						adaptor.AddChild(root_2, stream_NUMBER.NextNode());

						adaptor.AddChild(root_1, root_2);
						}

					}
					stream_LIMIT.Reset();
					stream_NUMBER.Reset();

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:1060:5: t+= simple_table_ref_no_alias ( DOT MULT )? ( COMMA t+= simple_table_ref_no_alias ( DOT MULT )? )* FROM tr= table_references ( WHERE where_condition )?
				{
				DebugLocation(1060, 6);
				PushFollow(Follow._simple_table_ref_no_alias_in_delete8938);
				t=simple_table_ref_no_alias();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_simple_table_ref_no_alias.Add(t.Tree);
				if (list_t==null) list_t=new List<object>();
				list_t.Add(t.Tree);

				DebugLocation(1060, 34);
				// MySQL51Parser.g3:1060:34: ( DOT MULT )?
				int alt204=2;
				try { DebugEnterSubRule(204);
				try { DebugEnterDecision(204, false);
				int LA204_0 = input.LA(1);

				if ((LA204_0==DOT))
				{
					alt204 = 1;
				}
				} finally { DebugExitDecision(204); }
				switch (alt204)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1060:35: DOT MULT
					{
					DebugLocation(1060, 35);
					DOT431=(IToken)Match(input,DOT,Follow._DOT_in_delete8941); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_DOT.Add(DOT431);

					DebugLocation(1060, 39);
					MULT432=(IToken)Match(input,MULT,Follow._MULT_in_delete8943); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_MULT.Add(MULT432);


					}
					break;

				}
				} finally { DebugExitSubRule(204); }

				DebugLocation(1060, 46);
				// MySQL51Parser.g3:1060:46: ( COMMA t+= simple_table_ref_no_alias ( DOT MULT )? )*
				try { DebugEnterSubRule(206);
				while (true)
				{
					int alt206=2;
					try { DebugEnterDecision(206, false);
					int LA206_0 = input.LA(1);

					if ((LA206_0==COMMA))
					{
						alt206 = 1;
					}


					} finally { DebugExitDecision(206); }
					switch ( alt206 )
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:1060:47: COMMA t+= simple_table_ref_no_alias ( DOT MULT )?
						{
						DebugLocation(1060, 47);
						COMMA433=(IToken)Match(input,COMMA,Follow._COMMA_in_delete8948); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_COMMA.Add(COMMA433);

						DebugLocation(1060, 54);
						PushFollow(Follow._simple_table_ref_no_alias_in_delete8952);
						t=simple_table_ref_no_alias();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_simple_table_ref_no_alias.Add(t.Tree);
						if (list_t==null) list_t=new List<object>();
						list_t.Add(t.Tree);

						DebugLocation(1060, 82);
						// MySQL51Parser.g3:1060:82: ( DOT MULT )?
						int alt205=2;
						try { DebugEnterSubRule(205);
						try { DebugEnterDecision(205, false);
						int LA205_0 = input.LA(1);

						if ((LA205_0==DOT))
						{
							alt205 = 1;
						}
						} finally { DebugExitDecision(205); }
						switch (alt205)
						{
						case 1:
							DebugEnterAlt(1);
							// MySQL51Parser.g3:1060:83: DOT MULT
							{
							DebugLocation(1060, 83);
							DOT434=(IToken)Match(input,DOT,Follow._DOT_in_delete8955); if (state.failed) return retval; 
							if (state.backtracking == 0) stream_DOT.Add(DOT434);

							DebugLocation(1060, 87);
							MULT435=(IToken)Match(input,MULT,Follow._MULT_in_delete8957); if (state.failed) return retval; 
							if (state.backtracking == 0) stream_MULT.Add(MULT435);


							}
							break;

						}
						} finally { DebugExitSubRule(205); }


						}
						break;

					default:
						goto loop206;
					}
				}

				loop206:
					;

				} finally { DebugExitSubRule(206); }

				DebugLocation(1061, 4);
				FROM436=(IToken)Match(input,FROM,Follow._FROM_in_delete8966); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_FROM.Add(FROM436);

				DebugLocation(1061, 11);
				PushFollow(Follow._table_references_in_delete8970);
				tr=table_references();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_table_references.Add(tr.Tree);
				DebugLocation(1062, 4);
				// MySQL51Parser.g3:1062:4: ( WHERE where_condition )?
				int alt207=2;
				try { DebugEnterSubRule(207);
				try { DebugEnterDecision(207, false);
				int LA207_0 = input.LA(1);

				if ((LA207_0==WHERE))
				{
					alt207 = 1;
				}
				} finally { DebugExitDecision(207); }
				switch (alt207)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1062:5: WHERE where_condition
					{
					DebugLocation(1062, 5);
					WHERE437=(IToken)Match(input,WHERE,Follow._WHERE_in_delete8976); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_WHERE.Add(WHERE437);

					DebugLocation(1062, 11);
					PushFollow(Follow._where_condition_in_delete8978);
					where_condition438=where_condition();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_where_condition.Add(where_condition438.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(207); }



				{
				// AST REWRITE
				// elements: DELETE, opts, t, FROM, tr, WHERE, where_condition
				// token labels: 
				// rule labels: tr, retval
				// token list labels: opts
				// rule list labels: t
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleITokenStream stream_opts=new RewriteRuleITokenStream(adaptor,"token opts", list_opts);
				RewriteRuleSubtreeStream stream_tr=new RewriteRuleSubtreeStream(adaptor,"rule tr",tr!=null?tr.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);
				RewriteRuleSubtreeStream stream_t=new RewriteRuleSubtreeStream(adaptor,"token t",list_t);
				root_0 = (object)adaptor.Nil();
				// 1062:31: -> ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ( ^( TABLE $t) )+ ^( FROM $tr) ( ^( WHERE where_condition ) )? )
				{
					DebugLocation(1062, 34);
					// MySQL51Parser.g3:1062:34: ^( DELETE ( ^( OPTIONS ( $opts)+ ) )? ( ^( TABLE $t) )+ ^( FROM $tr) ( ^( WHERE where_condition ) )? )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1062, 36);
					root_1 = (object)adaptor.BecomeRoot(stream_DELETE.NextNode(), root_1);

					DebugLocation(1062, 43);
					// MySQL51Parser.g3:1062:43: ( ^( OPTIONS ( $opts)+ ) )?
					if (stream_opts.HasNext)
					{
						DebugLocation(1062, 43);
						// MySQL51Parser.g3:1062:43: ^( OPTIONS ( $opts)+ )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1062, 45);
						root_2 = (object)adaptor.BecomeRoot((object)adaptor.Create(OPTIONS, "OPTIONS"), root_2);

						DebugLocation(1062, 54);
						if (!(stream_opts.HasNext))
						{
							throw new RewriteEarlyExitException();
						}
						while ( stream_opts.HasNext )
						{
							DebugLocation(1062, 54);
							adaptor.AddChild(root_2, stream_opts.NextNode());

						}
						stream_opts.Reset();

						adaptor.AddChild(root_1, root_2);
						}

					}
					stream_opts.Reset();
					DebugLocation(1062, 62);
					if (!(stream_t.HasNext))
					{
						throw new RewriteEarlyExitException();
					}
					while ( stream_t.HasNext )
					{
						DebugLocation(1062, 62);
						// MySQL51Parser.g3:1062:62: ^( TABLE $t)
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1062, 64);
						root_2 = (object)adaptor.BecomeRoot((object)adaptor.Create(TABLE, "TABLE"), root_2);

						DebugLocation(1062, 71);
						adaptor.AddChild(root_2, stream_t.NextTree());

						adaptor.AddChild(root_1, root_2);
						}

					}
					stream_t.Reset();
					DebugLocation(1062, 75);
					// MySQL51Parser.g3:1062:75: ^( FROM $tr)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1062, 77);
					root_2 = (object)adaptor.BecomeRoot(stream_FROM.NextNode(), root_2);

					DebugLocation(1062, 83);
					adaptor.AddChild(root_2, stream_tr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}
					DebugLocation(1062, 87);
					// MySQL51Parser.g3:1062:87: ( ^( WHERE where_condition ) )?
					if (stream_WHERE.HasNext||stream_where_condition.HasNext)
					{
						DebugLocation(1062, 87);
						// MySQL51Parser.g3:1062:87: ^( WHERE where_condition )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1062, 89);
						root_2 = (object)adaptor.BecomeRoot(stream_WHERE.NextNode(), root_2);

						DebugLocation(1062, 95);
						adaptor.AddChild(root_2, stream_where_condition.NextTree());

						adaptor.AddChild(root_1, root_2);
						}

					}
					stream_WHERE.Reset();
					stream_where_condition.Reset();

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			} finally { DebugExitSubRule(208); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("delete", 78);
			LeaveRule("delete", 78);
			LeaveRule_delete();
		}
		DebugLocation(1064, 1);
		} finally { DebugExitRule(GrammarFileName, "delete"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "delete"

	private sealed partial class lockTables_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public lockTables_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_lockTables();
	partial void LeaveRule_lockTables();

	// $ANTLR start "lockTables"
	// MySQL51Parser.g3:1070:1: lockTables : ( LOCK TABLES tables+= lock_table_ref ( COMMA tables+= lock_table_ref )* -> ^( LOCK $tables) | UNLOCK TABLES -> ^( UNLOCK TABLES ) );
	[GrammarRule("lockTables")]
	private MySQL51Parser.lockTables_return lockTables()
	{
		EnterRule_lockTables();
		EnterRule("lockTables", 79);
		TraceIn("lockTables", 79);
		MySQL51Parser.lockTables_return retval = new MySQL51Parser.lockTables_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken LOCK439 = default(IToken);
		IToken TABLES440 = default(IToken);
		IToken COMMA441 = default(IToken);
		IToken UNLOCK442 = default(IToken);
		IToken TABLES443 = default(IToken);
		List<object> list_tables = null;
		MySQL51Parser.lock_table_ref_return tables = default(MySQL51Parser.lock_table_ref_return);
		object LOCK439_tree = default(object);
		object TABLES440_tree = default(object);
		object COMMA441_tree = default(object);
		object UNLOCK442_tree = default(object);
		object TABLES443_tree = default(object);
		RewriteRuleITokenStream stream_LOCK=new RewriteRuleITokenStream(adaptor,"token LOCK");
		RewriteRuleITokenStream stream_TABLES=new RewriteRuleITokenStream(adaptor,"token TABLES");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleITokenStream stream_UNLOCK=new RewriteRuleITokenStream(adaptor,"token UNLOCK");
		RewriteRuleSubtreeStream stream_lock_table_ref=new RewriteRuleSubtreeStream(adaptor,"rule lock_table_ref");
		try { DebugEnterRule(GrammarFileName, "lockTables");
		DebugLocation(1070, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1071:2: ( LOCK TABLES tables+= lock_table_ref ( COMMA tables+= lock_table_ref )* -> ^( LOCK $tables) | UNLOCK TABLES -> ^( UNLOCK TABLES ) )
			int alt210=2;
			try { DebugEnterDecision(210, false);
			int LA210_0 = input.LA(1);

			if ((LA210_0==LOCK))
			{
				alt210 = 1;
			}
			else if ((LA210_0==UNLOCK))
			{
				alt210 = 2;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 210, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(210); }
			switch (alt210)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1071:4: LOCK TABLES tables+= lock_table_ref ( COMMA tables+= lock_table_ref )*
				{
				DebugLocation(1071, 4);
				LOCK439=(IToken)Match(input,LOCK,Follow._LOCK_in_lockTables9038); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LOCK.Add(LOCK439);

				DebugLocation(1071, 9);
				TABLES440=(IToken)Match(input,TABLES,Follow._TABLES_in_lockTables9040); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TABLES.Add(TABLES440);

				DebugLocation(1071, 22);
				PushFollow(Follow._lock_table_ref_in_lockTables9044);
				tables=lock_table_ref();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_lock_table_ref.Add(tables.Tree);
				if (list_tables==null) list_tables=new List<object>();
				list_tables.Add(tables.Tree);

				DebugLocation(1071, 39);
				// MySQL51Parser.g3:1071:39: ( COMMA tables+= lock_table_ref )*
				try { DebugEnterSubRule(209);
				while (true)
				{
					int alt209=2;
					try { DebugEnterDecision(209, false);
					int LA209_0 = input.LA(1);

					if ((LA209_0==COMMA))
					{
						alt209 = 1;
					}


					} finally { DebugExitDecision(209); }
					switch ( alt209 )
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:1071:40: COMMA tables+= lock_table_ref
						{
						DebugLocation(1071, 40);
						COMMA441=(IToken)Match(input,COMMA,Follow._COMMA_in_lockTables9047); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_COMMA.Add(COMMA441);

						DebugLocation(1071, 52);
						PushFollow(Follow._lock_table_ref_in_lockTables9051);
						tables=lock_table_ref();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_lock_table_ref.Add(tables.Tree);
						if (list_tables==null) list_tables=new List<object>();
						list_tables.Add(tables.Tree);


						}
						break;

					default:
						goto loop209;
					}
				}

				loop209:
					;

				} finally { DebugExitSubRule(209); }



				{
				// AST REWRITE
				// elements: LOCK, tables
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: tables
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);
				RewriteRuleSubtreeStream stream_tables=new RewriteRuleSubtreeStream(adaptor,"token tables",list_tables);
				root_0 = (object)adaptor.Nil();
				// 1071:71: -> ^( LOCK $tables)
				{
					DebugLocation(1071, 74);
					// MySQL51Parser.g3:1071:74: ^( LOCK $tables)
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1071, 76);
					root_1 = (object)adaptor.BecomeRoot(stream_LOCK.NextNode(), root_1);

					DebugLocation(1071, 82);
					adaptor.AddChild(root_1, stream_tables.NextTree());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:1072:4: UNLOCK TABLES
				{
				DebugLocation(1072, 4);
				UNLOCK442=(IToken)Match(input,UNLOCK,Follow._UNLOCK_in_lockTables9067); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_UNLOCK.Add(UNLOCK442);

				DebugLocation(1072, 11);
				TABLES443=(IToken)Match(input,TABLES,Follow._TABLES_in_lockTables9069); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TABLES.Add(TABLES443);



				{
				// AST REWRITE
				// elements: UNLOCK, TABLES
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1072:31: -> ^( UNLOCK TABLES )
				{
					DebugLocation(1072, 34);
					// MySQL51Parser.g3:1072:34: ^( UNLOCK TABLES )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1072, 36);
					root_1 = (object)adaptor.BecomeRoot(stream_UNLOCK.NextNode(), root_1);

					DebugLocation(1072, 43);
					adaptor.AddChild(root_1, stream_TABLES.NextNode());

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("lockTables", 79);
			LeaveRule("lockTables", 79);
			LeaveRule_lockTables();
		}
		DebugLocation(1073, 1);
		} finally { DebugExitRule(GrammarFileName, "lockTables"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "lockTables"

	private sealed partial class lock_table_ref_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public lock_table_ref_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_lock_table_ref();
	partial void LeaveRule_lock_table_ref();

	// $ANTLR start "lock_table_ref"
	// MySQL51Parser.g3:1075:1: lock_table_ref : simple_table_ref_alias ( READ ( LOCAL )? -> ^( READ simple_table_ref_alias ( LOCAL )? ) | ( LOW_PRIORITY )? WRITE -> ^( WRITE simple_table_ref_alias ( LOW_PRIORITY )? ) ) ;
	[GrammarRule("lock_table_ref")]
	private MySQL51Parser.lock_table_ref_return lock_table_ref()
	{
		EnterRule_lock_table_ref();
		EnterRule("lock_table_ref", 80);
		TraceIn("lock_table_ref", 80);
		MySQL51Parser.lock_table_ref_return retval = new MySQL51Parser.lock_table_ref_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken READ445 = default(IToken);
		IToken LOCAL446 = default(IToken);
		IToken LOW_PRIORITY447 = default(IToken);
		IToken WRITE448 = default(IToken);
		MySQL51Parser.simple_table_ref_alias_return simple_table_ref_alias444 = default(MySQL51Parser.simple_table_ref_alias_return);

		object READ445_tree = default(object);
		object LOCAL446_tree = default(object);
		object LOW_PRIORITY447_tree = default(object);
		object WRITE448_tree = default(object);
		RewriteRuleITokenStream stream_READ=new RewriteRuleITokenStream(adaptor,"token READ");
		RewriteRuleITokenStream stream_LOCAL=new RewriteRuleITokenStream(adaptor,"token LOCAL");
		RewriteRuleITokenStream stream_LOW_PRIORITY=new RewriteRuleITokenStream(adaptor,"token LOW_PRIORITY");
		RewriteRuleITokenStream stream_WRITE=new RewriteRuleITokenStream(adaptor,"token WRITE");
		RewriteRuleSubtreeStream stream_simple_table_ref_alias=new RewriteRuleSubtreeStream(adaptor,"rule simple_table_ref_alias");
		try { DebugEnterRule(GrammarFileName, "lock_table_ref");
		DebugLocation(1075, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1076:2: ( simple_table_ref_alias ( READ ( LOCAL )? -> ^( READ simple_table_ref_alias ( LOCAL )? ) | ( LOW_PRIORITY )? WRITE -> ^( WRITE simple_table_ref_alias ( LOW_PRIORITY )? ) ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:1076:4: simple_table_ref_alias ( READ ( LOCAL )? -> ^( READ simple_table_ref_alias ( LOCAL )? ) | ( LOW_PRIORITY )? WRITE -> ^( WRITE simple_table_ref_alias ( LOW_PRIORITY )? ) )
			{
			DebugLocation(1076, 4);
			PushFollow(Follow._simple_table_ref_alias_in_lock_table_ref9101);
			simple_table_ref_alias444=simple_table_ref_alias();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_simple_table_ref_alias.Add(simple_table_ref_alias444.Tree);
			DebugLocation(1077, 3);
			// MySQL51Parser.g3:1077:3: ( READ ( LOCAL )? -> ^( READ simple_table_ref_alias ( LOCAL )? ) | ( LOW_PRIORITY )? WRITE -> ^( WRITE simple_table_ref_alias ( LOW_PRIORITY )? ) )
			int alt213=2;
			try { DebugEnterSubRule(213);
			try { DebugEnterDecision(213, false);
			int LA213_0 = input.LA(1);

			if ((LA213_0==READ))
			{
				alt213 = 1;
			}
			else if ((LA213_0==LOW_PRIORITY||LA213_0==WRITE))
			{
				alt213 = 2;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae = new NoViableAltException("", 213, 0, input);
				DebugRecognitionException(nvae);
				throw nvae;
			}
			} finally { DebugExitDecision(213); }
			switch (alt213)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1077:5: READ ( LOCAL )?
				{
				DebugLocation(1077, 5);
				READ445=(IToken)Match(input,READ,Follow._READ_in_lock_table_ref9107); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_READ.Add(READ445);

				DebugLocation(1077, 11);
				// MySQL51Parser.g3:1077:11: ( LOCAL )?
				int alt211=2;
				try { DebugEnterSubRule(211);
				try { DebugEnterDecision(211, false);
				int LA211_0 = input.LA(1);

				if ((LA211_0==LOCAL))
				{
					alt211 = 1;
				}
				} finally { DebugExitDecision(211); }
				switch (alt211)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1077:12: LOCAL
					{
					DebugLocation(1077, 12);
					LOCAL446=(IToken)Match(input,LOCAL,Follow._LOCAL_in_lock_table_ref9111); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_LOCAL.Add(LOCAL446);


					}
					break;

				}
				} finally { DebugExitSubRule(211); }



				{
				// AST REWRITE
				// elements: READ, simple_table_ref_alias, LOCAL
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1077:25: -> ^( READ simple_table_ref_alias ( LOCAL )? )
				{
					DebugLocation(1077, 28);
					// MySQL51Parser.g3:1077:28: ^( READ simple_table_ref_alias ( LOCAL )? )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1077, 30);
					root_1 = (object)adaptor.BecomeRoot(stream_READ.NextNode(), root_1);

					DebugLocation(1077, 35);
					adaptor.AddChild(root_1, stream_simple_table_ref_alias.NextTree());
					DebugLocation(1077, 58);
					// MySQL51Parser.g3:1077:58: ( LOCAL )?
					if (stream_LOCAL.HasNext)
					{
						DebugLocation(1077, 58);
						adaptor.AddChild(root_1, stream_LOCAL.NextNode());

					}
					stream_LOCAL.Reset();

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:1078:5: ( LOW_PRIORITY )? WRITE
				{
				DebugLocation(1078, 5);
				// MySQL51Parser.g3:1078:5: ( LOW_PRIORITY )?
				int alt212=2;
				try { DebugEnterSubRule(212);
				try { DebugEnterDecision(212, false);
				int LA212_0 = input.LA(1);

				if ((LA212_0==LOW_PRIORITY))
				{
					alt212 = 1;
				}
				} finally { DebugExitDecision(212); }
				switch (alt212)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1078:6: LOW_PRIORITY
					{
					DebugLocation(1078, 6);
					LOW_PRIORITY447=(IToken)Match(input,LOW_PRIORITY,Follow._LOW_PRIORITY_in_lock_table_ref9136); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_LOW_PRIORITY.Add(LOW_PRIORITY447);


					}
					break;

				}
				} finally { DebugExitSubRule(212); }

				DebugLocation(1078, 22);
				WRITE448=(IToken)Match(input,WRITE,Follow._WRITE_in_lock_table_ref9141); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_WRITE.Add(WRITE448);



				{
				// AST REWRITE
				// elements: WRITE, simple_table_ref_alias, LOW_PRIORITY
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1078:31: -> ^( WRITE simple_table_ref_alias ( LOW_PRIORITY )? )
				{
					DebugLocation(1078, 34);
					// MySQL51Parser.g3:1078:34: ^( WRITE simple_table_ref_alias ( LOW_PRIORITY )? )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1078, 36);
					root_1 = (object)adaptor.BecomeRoot(stream_WRITE.NextNode(), root_1);

					DebugLocation(1078, 42);
					adaptor.AddChild(root_1, stream_simple_table_ref_alias.NextTree());
					DebugLocation(1078, 65);
					// MySQL51Parser.g3:1078:65: ( LOW_PRIORITY )?
					if (stream_LOW_PRIORITY.HasNext)
					{
						DebugLocation(1078, 65);
						adaptor.AddChild(root_1, stream_LOW_PRIORITY.NextNode());

					}
					stream_LOW_PRIORITY.Reset();

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			} finally { DebugExitSubRule(213); }


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("lock_table_ref", 80);
			LeaveRule("lock_table_ref", 80);
			LeaveRule_lock_table_ref();
		}
		DebugLocation(1080, 1);
		} finally { DebugExitRule(GrammarFileName, "lock_table_ref"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "lock_table_ref"

	private sealed partial class create_table_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public create_table_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_create_table();
	partial void LeaveRule_create_table();

	// $ANTLR start "create_table"
	// MySQL51Parser.g3:1090:1: create_table : CREATE ( TEMPORARY )? TABLE ( IF NOT EXISTS )? tableName= simple_table_ref_no_alias LPAREN create+= create_definition ( COMMA create+= create_definition )* RPAREN -> ^( CREATE_TABLE ( TEMPORARY )? ( EXISTS )? simple_table_ref_no_alias ^( DEFINITIONS ( $create)+ ) ) ;
	[GrammarRule("create_table")]
	private MySQL51Parser.create_table_return create_table()
	{
		EnterRule_create_table();
		EnterRule("create_table", 81);
		TraceIn("create_table", 81);
		MySQL51Parser.create_table_return retval = new MySQL51Parser.create_table_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken CREATE449 = default(IToken);
		IToken TEMPORARY450 = default(IToken);
		IToken TABLE451 = default(IToken);
		IToken IF452 = default(IToken);
		IToken NOT453 = default(IToken);
		IToken EXISTS454 = default(IToken);
		IToken LPAREN455 = default(IToken);
		IToken COMMA456 = default(IToken);
		IToken RPAREN457 = default(IToken);
		List<object> list_create = null;
		MySQL51Parser.simple_table_ref_no_alias_return tableName = default(MySQL51Parser.simple_table_ref_no_alias_return);
		MySQL51Parser.create_definition_return create = default(MySQL51Parser.create_definition_return);
		object CREATE449_tree = default(object);
		object TEMPORARY450_tree = default(object);
		object TABLE451_tree = default(object);
		object IF452_tree = default(object);
		object NOT453_tree = default(object);
		object EXISTS454_tree = default(object);
		object LPAREN455_tree = default(object);
		object COMMA456_tree = default(object);
		object RPAREN457_tree = default(object);
		RewriteRuleITokenStream stream_CREATE=new RewriteRuleITokenStream(adaptor,"token CREATE");
		RewriteRuleITokenStream stream_TEMPORARY=new RewriteRuleITokenStream(adaptor,"token TEMPORARY");
		RewriteRuleITokenStream stream_TABLE=new RewriteRuleITokenStream(adaptor,"token TABLE");
		RewriteRuleITokenStream stream_IF=new RewriteRuleITokenStream(adaptor,"token IF");
		RewriteRuleITokenStream stream_NOT=new RewriteRuleITokenStream(adaptor,"token NOT");
		RewriteRuleITokenStream stream_EXISTS=new RewriteRuleITokenStream(adaptor,"token EXISTS");
		RewriteRuleITokenStream stream_LPAREN=new RewriteRuleITokenStream(adaptor,"token LPAREN");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleITokenStream stream_RPAREN=new RewriteRuleITokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_simple_table_ref_no_alias=new RewriteRuleSubtreeStream(adaptor,"rule simple_table_ref_no_alias");
		RewriteRuleSubtreeStream stream_create_definition=new RewriteRuleSubtreeStream(adaptor,"rule create_definition");
		try { DebugEnterRule(GrammarFileName, "create_table");
		DebugLocation(1090, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1091:2: ( CREATE ( TEMPORARY )? TABLE ( IF NOT EXISTS )? tableName= simple_table_ref_no_alias LPAREN create+= create_definition ( COMMA create+= create_definition )* RPAREN -> ^( CREATE_TABLE ( TEMPORARY )? ( EXISTS )? simple_table_ref_no_alias ^( DEFINITIONS ( $create)+ ) ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:1091:4: CREATE ( TEMPORARY )? TABLE ( IF NOT EXISTS )? tableName= simple_table_ref_no_alias LPAREN create+= create_definition ( COMMA create+= create_definition )* RPAREN
			{
			DebugLocation(1091, 4);
			CREATE449=(IToken)Match(input,CREATE,Follow._CREATE_in_create_table9178); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_CREATE.Add(CREATE449);

			DebugLocation(1091, 11);
			// MySQL51Parser.g3:1091:11: ( TEMPORARY )?
			int alt214=2;
			try { DebugEnterSubRule(214);
			try { DebugEnterDecision(214, false);
			int LA214_0 = input.LA(1);

			if ((LA214_0==TEMPORARY))
			{
				alt214 = 1;
			}
			} finally { DebugExitDecision(214); }
			switch (alt214)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1091:12: TEMPORARY
				{
				DebugLocation(1091, 12);
				TEMPORARY450=(IToken)Match(input,TEMPORARY,Follow._TEMPORARY_in_create_table9181); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TEMPORARY.Add(TEMPORARY450);


				}
				break;

			}
			} finally { DebugExitSubRule(214); }

			DebugLocation(1091, 25);
			TABLE451=(IToken)Match(input,TABLE,Follow._TABLE_in_create_table9186); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_TABLE.Add(TABLE451);

			DebugLocation(1092, 3);
			// MySQL51Parser.g3:1092:3: ( IF NOT EXISTS )?
			int alt215=2;
			try { DebugEnterSubRule(215);
			try { DebugEnterDecision(215, false);
			int LA215_0 = input.LA(1);

			if ((LA215_0==IF))
			{
				alt215 = 1;
			}
			} finally { DebugExitDecision(215); }
			switch (alt215)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1092:4: IF NOT EXISTS
				{
				DebugLocation(1092, 4);
				IF452=(IToken)Match(input,IF,Follow._IF_in_create_table9191); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_IF.Add(IF452);

				DebugLocation(1092, 7);
				NOT453=(IToken)Match(input,NOT,Follow._NOT_in_create_table9193); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_NOT.Add(NOT453);

				DebugLocation(1092, 11);
				EXISTS454=(IToken)Match(input,EXISTS,Follow._EXISTS_in_create_table9195); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_EXISTS.Add(EXISTS454);


				}
				break;

			}
			} finally { DebugExitSubRule(215); }

			DebugLocation(1093, 12);
			PushFollow(Follow._simple_table_ref_no_alias_in_create_table9204);
			tableName=simple_table_ref_no_alias();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_simple_table_ref_no_alias.Add(tableName.Tree);
			DebugLocation(1094, 3);
			LPAREN455=(IToken)Match(input,LPAREN,Follow._LPAREN_in_create_table9208); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_LPAREN.Add(LPAREN455);

			DebugLocation(1094, 16);
			PushFollow(Follow._create_definition_in_create_table9212);
			create=create_definition();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_create_definition.Add(create.Tree);
			if (list_create==null) list_create=new List<object>();
			list_create.Add(create.Tree);

			DebugLocation(1094, 36);
			// MySQL51Parser.g3:1094:36: ( COMMA create+= create_definition )*
			try { DebugEnterSubRule(216);
			while (true)
			{
				int alt216=2;
				try { DebugEnterDecision(216, false);
				int LA216_0 = input.LA(1);

				if ((LA216_0==COMMA))
				{
					alt216 = 1;
				}


				} finally { DebugExitDecision(216); }
				switch ( alt216 )
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1094:37: COMMA create+= create_definition
					{
					DebugLocation(1094, 37);
					COMMA456=(IToken)Match(input,COMMA,Follow._COMMA_in_create_table9215); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMA.Add(COMMA456);

					DebugLocation(1094, 49);
					PushFollow(Follow._create_definition_in_create_table9219);
					create=create_definition();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_create_definition.Add(create.Tree);
					if (list_create==null) list_create=new List<object>();
					list_create.Add(create.Tree);


					}
					break;

				default:
					goto loop216;
				}
			}

			loop216:
				;

			} finally { DebugExitSubRule(216); }

			DebugLocation(1094, 71);
			RPAREN457=(IToken)Match(input,RPAREN,Follow._RPAREN_in_create_table9223); if (state.failed) return retval; 
			if (state.backtracking == 0) stream_RPAREN.Add(RPAREN457);



			{
			// AST REWRITE
			// elements: TEMPORARY, EXISTS, simple_table_ref_no_alias, create
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: create
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);
			RewriteRuleSubtreeStream stream_create=new RewriteRuleSubtreeStream(adaptor,"token create",list_create);
			root_0 = (object)adaptor.Nil();
			// 1095:3: -> ^( CREATE_TABLE ( TEMPORARY )? ( EXISTS )? simple_table_ref_no_alias ^( DEFINITIONS ( $create)+ ) )
			{
				DebugLocation(1095, 6);
				// MySQL51Parser.g3:1095:6: ^( CREATE_TABLE ( TEMPORARY )? ( EXISTS )? simple_table_ref_no_alias ^( DEFINITIONS ( $create)+ ) )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(1095, 8);
				root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(CREATE_TABLE, "CREATE_TABLE"), root_1);

				DebugLocation(1096, 5);
				// MySQL51Parser.g3:1096:5: ( TEMPORARY )?
				if (stream_TEMPORARY.HasNext)
				{
					DebugLocation(1096, 5);
					adaptor.AddChild(root_1, stream_TEMPORARY.NextNode());

				}
				stream_TEMPORARY.Reset();
				DebugLocation(1097, 5);
				// MySQL51Parser.g3:1097:5: ( EXISTS )?
				if (stream_EXISTS.HasNext)
				{
					DebugLocation(1097, 5);
					adaptor.AddChild(root_1, stream_EXISTS.NextNode());

				}
				stream_EXISTS.Reset();
				DebugLocation(1098, 5);
				adaptor.AddChild(root_1, stream_simple_table_ref_no_alias.NextTree());
				DebugLocation(1099, 5);
				// MySQL51Parser.g3:1099:5: ^( DEFINITIONS ( $create)+ )
				{
				object root_2 = (object)adaptor.Nil();
				DebugLocation(1099, 7);
				root_2 = (object)adaptor.BecomeRoot((object)adaptor.Create(DEFINITIONS, "DEFINITIONS"), root_2);

				DebugLocation(1099, 20);
				if (!(stream_create.HasNext))
				{
					throw new RewriteEarlyExitException();
				}
				while ( stream_create.HasNext )
				{
					DebugLocation(1099, 20);
					adaptor.AddChild(root_2, stream_create.NextTree());

				}
				stream_create.Reset();

				adaptor.AddChild(root_1, root_2);
				}

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("create_table", 81);
			LeaveRule("create_table", 81);
			LeaveRule_create_table();
		}
		DebugLocation(1101, 1);
		} finally { DebugExitRule(GrammarFileName, "create_table"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "create_table"

	private sealed partial class create_definition_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public create_definition_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_create_definition();
	partial void LeaveRule_create_definition();

	// $ANTLR start "create_definition"
	// MySQL51Parser.g3:1103:1: create_definition : colName= ident column_definition -> ^( DEFINITION $colName column_definition ) ;
	[GrammarRule("create_definition")]
	private MySQL51Parser.create_definition_return create_definition()
	{
		EnterRule_create_definition();
		EnterRule("create_definition", 82);
		TraceIn("create_definition", 82);
		MySQL51Parser.create_definition_return retval = new MySQL51Parser.create_definition_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		MySQL51Parser.ident_return colName = default(MySQL51Parser.ident_return);
		MySQL51Parser.column_definition_return column_definition458 = default(MySQL51Parser.column_definition_return);

		RewriteRuleSubtreeStream stream_ident=new RewriteRuleSubtreeStream(adaptor,"rule ident");
		RewriteRuleSubtreeStream stream_column_definition=new RewriteRuleSubtreeStream(adaptor,"rule column_definition");
		try { DebugEnterRule(GrammarFileName, "create_definition");
		DebugLocation(1103, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1104:2: (colName= ident column_definition -> ^( DEFINITION $colName column_definition ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:1104:4: colName= ident column_definition
			{
			DebugLocation(1104, 11);
			PushFollow(Follow._ident_in_create_definition9280);
			colName=ident();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_ident.Add(colName.Tree);
			DebugLocation(1104, 18);
			PushFollow(Follow._column_definition_in_create_definition9282);
			column_definition458=column_definition();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_column_definition.Add(column_definition458.Tree);


			{
			// AST REWRITE
			// elements: colName, column_definition
			// token labels: 
			// rule labels: colName, retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleSubtreeStream stream_colName=new RewriteRuleSubtreeStream(adaptor,"rule colName",colName!=null?colName.Tree:null);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 1104:36: -> ^( DEFINITION $colName column_definition )
			{
				DebugLocation(1104, 39);
				// MySQL51Parser.g3:1104:39: ^( DEFINITION $colName column_definition )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(1104, 41);
				root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(DEFINITION, "DEFINITION"), root_1);

				DebugLocation(1104, 53);
				adaptor.AddChild(root_1, stream_colName.NextTree());
				DebugLocation(1104, 61);
				adaptor.AddChild(root_1, stream_column_definition.NextTree());

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("create_definition", 82);
			LeaveRule("create_definition", 82);
			LeaveRule_create_definition();
		}
		DebugLocation(1105, 1);
		} finally { DebugExitRule(GrammarFileName, "create_definition"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "create_definition"

	private sealed partial class column_definition_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public column_definition_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_column_definition();
	partial void LeaveRule_column_definition();

	// $ANTLR start "column_definition"
	// MySQL51Parser.g3:1109:1: column_definition : data_type (notSym= NOT NULL |nullSym= NULL )? ( DEFAULT literal )? (autoInc= AUTO_INCREMENT )? ( UNIQUE (uniqueKey= KEY )? | ( PRIMARY )? generalKey= KEY )? ( COMMENT STRING )? ( reference_definition )? -> ^( TYPE data_type ( $notSym)? ( $nullSym)? ( ^( DEFAULT literal ) )? ( $autoInc)? ( UNIQUE )? ( PRIMARY )? ( KEY )? ) ;
	[GrammarRule("column_definition")]
	private MySQL51Parser.column_definition_return column_definition()
	{
		EnterRule_column_definition();
		EnterRule("column_definition", 83);
		TraceIn("column_definition", 83);
		MySQL51Parser.column_definition_return retval = new MySQL51Parser.column_definition_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken notSym = default(IToken);
		IToken nullSym = default(IToken);
		IToken autoInc = default(IToken);
		IToken uniqueKey = default(IToken);
		IToken generalKey = default(IToken);
		IToken NULL460 = default(IToken);
		IToken DEFAULT461 = default(IToken);
		IToken UNIQUE463 = default(IToken);
		IToken PRIMARY464 = default(IToken);
		IToken COMMENT465 = default(IToken);
		IToken STRING466 = default(IToken);
		MySQL51Parser.data_type_return data_type459 = default(MySQL51Parser.data_type_return);
		MySQL51Parser.literal_return literal462 = default(MySQL51Parser.literal_return);
		MySQL51Parser.reference_definition_return reference_definition467 = default(MySQL51Parser.reference_definition_return);

		object notSym_tree = default(object);
		object nullSym_tree = default(object);
		object autoInc_tree = default(object);
		object uniqueKey_tree = default(object);
		object generalKey_tree = default(object);
		object NULL460_tree = default(object);
		object DEFAULT461_tree = default(object);
		object UNIQUE463_tree = default(object);
		object PRIMARY464_tree = default(object);
		object COMMENT465_tree = default(object);
		object STRING466_tree = default(object);
		RewriteRuleITokenStream stream_NOT=new RewriteRuleITokenStream(adaptor,"token NOT");
		RewriteRuleITokenStream stream_NULL=new RewriteRuleITokenStream(adaptor,"token NULL");
		RewriteRuleITokenStream stream_DEFAULT=new RewriteRuleITokenStream(adaptor,"token DEFAULT");
		RewriteRuleITokenStream stream_AUTO_INCREMENT=new RewriteRuleITokenStream(adaptor,"token AUTO_INCREMENT");
		RewriteRuleITokenStream stream_UNIQUE=new RewriteRuleITokenStream(adaptor,"token UNIQUE");
		RewriteRuleITokenStream stream_KEY=new RewriteRuleITokenStream(adaptor,"token KEY");
		RewriteRuleITokenStream stream_PRIMARY=new RewriteRuleITokenStream(adaptor,"token PRIMARY");
		RewriteRuleITokenStream stream_COMMENT=new RewriteRuleITokenStream(adaptor,"token COMMENT");
		RewriteRuleITokenStream stream_STRING=new RewriteRuleITokenStream(adaptor,"token STRING");
		RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
		RewriteRuleSubtreeStream stream_literal=new RewriteRuleSubtreeStream(adaptor,"rule literal");
		RewriteRuleSubtreeStream stream_reference_definition=new RewriteRuleSubtreeStream(adaptor,"rule reference_definition");
		try { DebugEnterRule(GrammarFileName, "column_definition");
		DebugLocation(1109, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1111:2: ( data_type (notSym= NOT NULL |nullSym= NULL )? ( DEFAULT literal )? (autoInc= AUTO_INCREMENT )? ( UNIQUE (uniqueKey= KEY )? | ( PRIMARY )? generalKey= KEY )? ( COMMENT STRING )? ( reference_definition )? -> ^( TYPE data_type ( $notSym)? ( $nullSym)? ( ^( DEFAULT literal ) )? ( $autoInc)? ( UNIQUE )? ( PRIMARY )? ( KEY )? ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:1111:4: data_type (notSym= NOT NULL |nullSym= NULL )? ( DEFAULT literal )? (autoInc= AUTO_INCREMENT )? ( UNIQUE (uniqueKey= KEY )? | ( PRIMARY )? generalKey= KEY )? ( COMMENT STRING )? ( reference_definition )?
			{
			DebugLocation(1111, 4);
			PushFollow(Follow._data_type_in_column_definition9308);
			data_type459=data_type();
			PopFollow();
			if (state.failed) return retval;
			if (state.backtracking == 0) stream_data_type.Add(data_type459.Tree);
			DebugLocation(1112, 3);
			// MySQL51Parser.g3:1112:3: (notSym= NOT NULL |nullSym= NULL )?
			int alt217=3;
			try { DebugEnterSubRule(217);
			try { DebugEnterDecision(217, false);
			int LA217_0 = input.LA(1);

			if ((LA217_0==NOT))
			{
				alt217 = 1;
			}
			else if ((LA217_0==NULL))
			{
				alt217 = 2;
			}
			} finally { DebugExitDecision(217); }
			switch (alt217)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1112:4: notSym= NOT NULL
				{
				DebugLocation(1112, 10);
				notSym=(IToken)Match(input,NOT,Follow._NOT_in_column_definition9315); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_NOT.Add(notSym);

				DebugLocation(1112, 15);
				NULL460=(IToken)Match(input,NULL,Follow._NULL_in_column_definition9317); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_NULL.Add(NULL460);


				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:1112:22: nullSym= NULL
				{
				DebugLocation(1112, 29);
				nullSym=(IToken)Match(input,NULL,Follow._NULL_in_column_definition9323); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_NULL.Add(nullSym);


				}
				break;

			}
			} finally { DebugExitSubRule(217); }

			DebugLocation(1113, 3);
			// MySQL51Parser.g3:1113:3: ( DEFAULT literal )?
			int alt218=2;
			try { DebugEnterSubRule(218);
			try { DebugEnterDecision(218, false);
			int LA218_0 = input.LA(1);

			if ((LA218_0==DEFAULT))
			{
				alt218 = 1;
			}
			} finally { DebugExitDecision(218); }
			switch (alt218)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1113:4: DEFAULT literal
				{
				DebugLocation(1113, 4);
				DEFAULT461=(IToken)Match(input,DEFAULT,Follow._DEFAULT_in_column_definition9330); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_DEFAULT.Add(DEFAULT461);

				DebugLocation(1113, 12);
				PushFollow(Follow._literal_in_column_definition9332);
				literal462=literal();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_literal.Add(literal462.Tree);

				}
				break;

			}
			} finally { DebugExitSubRule(218); }

			DebugLocation(1114, 10);
			// MySQL51Parser.g3:1114:10: (autoInc= AUTO_INCREMENT )?
			int alt219=2;
			try { DebugEnterSubRule(219);
			try { DebugEnterDecision(219, false);
			int LA219_0 = input.LA(1);

			if ((LA219_0==AUTO_INCREMENT))
			{
				alt219 = 1;
			}
			} finally { DebugExitDecision(219); }
			switch (alt219)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1114:10: autoInc= AUTO_INCREMENT
				{
				DebugLocation(1114, 10);
				autoInc=(IToken)Match(input,AUTO_INCREMENT,Follow._AUTO_INCREMENT_in_column_definition9342); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_AUTO_INCREMENT.Add(autoInc);


				}
				break;

			}
			} finally { DebugExitSubRule(219); }

			DebugLocation(1115, 3);
			// MySQL51Parser.g3:1115:3: ( UNIQUE (uniqueKey= KEY )? | ( PRIMARY )? generalKey= KEY )?
			int alt222=3;
			try { DebugEnterSubRule(222);
			try { DebugEnterDecision(222, false);
			int LA222_0 = input.LA(1);

			if ((LA222_0==UNIQUE))
			{
				alt222 = 1;
			}
			else if ((LA222_0==KEY||LA222_0==PRIMARY))
			{
				alt222 = 2;
			}
			} finally { DebugExitDecision(222); }
			switch (alt222)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1115:4: UNIQUE (uniqueKey= KEY )?
				{
				DebugLocation(1115, 4);
				UNIQUE463=(IToken)Match(input,UNIQUE,Follow._UNIQUE_in_column_definition9348); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_UNIQUE.Add(UNIQUE463);

				DebugLocation(1115, 20);
				// MySQL51Parser.g3:1115:20: (uniqueKey= KEY )?
				int alt220=2;
				try { DebugEnterSubRule(220);
				try { DebugEnterDecision(220, false);
				int LA220_0 = input.LA(1);

				if ((LA220_0==KEY))
				{
					alt220 = 1;
				}
				} finally { DebugExitDecision(220); }
				switch (alt220)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1115:20: uniqueKey= KEY
					{
					DebugLocation(1115, 20);
					uniqueKey=(IToken)Match(input,KEY,Follow._KEY_in_column_definition9352); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_KEY.Add(uniqueKey);


					}
					break;

				}
				} finally { DebugExitSubRule(220); }


				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:1115:28: ( PRIMARY )? generalKey= KEY
				{
				DebugLocation(1115, 28);
				// MySQL51Parser.g3:1115:28: ( PRIMARY )?
				int alt221=2;
				try { DebugEnterSubRule(221);
				try { DebugEnterDecision(221, false);
				int LA221_0 = input.LA(1);

				if ((LA221_0==PRIMARY))
				{
					alt221 = 1;
				}
				} finally { DebugExitDecision(221); }
				switch (alt221)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1115:28: PRIMARY
					{
					DebugLocation(1115, 28);
					PRIMARY464=(IToken)Match(input,PRIMARY,Follow._PRIMARY_in_column_definition9357); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_PRIMARY.Add(PRIMARY464);


					}
					break;

				}
				} finally { DebugExitSubRule(221); }

				DebugLocation(1115, 47);
				generalKey=(IToken)Match(input,KEY,Follow._KEY_in_column_definition9362); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_KEY.Add(generalKey);


				}
				break;

			}
			} finally { DebugExitSubRule(222); }

			DebugLocation(1116, 3);
			// MySQL51Parser.g3:1116:3: ( COMMENT STRING )?
			int alt223=2;
			try { DebugEnterSubRule(223);
			try { DebugEnterDecision(223, false);
			int LA223_0 = input.LA(1);

			if ((LA223_0==COMMENT))
			{
				alt223 = 1;
			}
			} finally { DebugExitDecision(223); }
			switch (alt223)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1116:4: COMMENT STRING
				{
				DebugLocation(1116, 4);
				COMMENT465=(IToken)Match(input,COMMENT,Follow._COMMENT_in_column_definition9369); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMENT.Add(COMMENT465);

				DebugLocation(1116, 12);
				STRING466=(IToken)Match(input,STRING,Follow._STRING_in_column_definition9371); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_STRING.Add(STRING466);


				}
				break;

			}
			} finally { DebugExitSubRule(223); }

			DebugLocation(1117, 3);
			// MySQL51Parser.g3:1117:3: ( reference_definition )?
			int alt224=2;
			try { DebugEnterSubRule(224);
			try { DebugEnterDecision(224, false);
			int LA224_0 = input.LA(1);

			if ((LA224_0==CASCADE||LA224_0==NO||LA224_0==RESTRICT||LA224_0==SET))
			{
				alt224 = 1;
			}
			} finally { DebugExitDecision(224); }
			switch (alt224)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1117:4: reference_definition
				{
				DebugLocation(1117, 4);
				PushFollow(Follow._reference_definition_in_column_definition9378);
				reference_definition467=reference_definition();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_reference_definition.Add(reference_definition467.Tree);

				}
				break;

			}
			} finally { DebugExitSubRule(224); }



			{
			// AST REWRITE
			// elements: data_type, notSym, nullSym, DEFAULT, literal, autoInc, UNIQUE, PRIMARY, KEY
			// token labels: notSym, nullSym, autoInc
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if (state.backtracking == 0) {
			retval.Tree = root_0;
			RewriteRuleITokenStream stream_notSym=new RewriteRuleITokenStream(adaptor,"token notSym",notSym);
			RewriteRuleITokenStream stream_nullSym=new RewriteRuleITokenStream(adaptor,"token nullSym",nullSym);
			RewriteRuleITokenStream stream_autoInc=new RewriteRuleITokenStream(adaptor,"token autoInc",autoInc);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

			root_0 = (object)adaptor.Nil();
			// 1121:3: -> ^( TYPE data_type ( $notSym)? ( $nullSym)? ( ^( DEFAULT literal ) )? ( $autoInc)? ( UNIQUE )? ( PRIMARY )? ( KEY )? )
			{
				DebugLocation(1121, 6);
				// MySQL51Parser.g3:1121:6: ^( TYPE data_type ( $notSym)? ( $nullSym)? ( ^( DEFAULT literal ) )? ( $autoInc)? ( UNIQUE )? ( PRIMARY )? ( KEY )? )
				{
				object root_1 = (object)adaptor.Nil();
				DebugLocation(1121, 8);
				root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(TYPE, "TYPE"), root_1);

				DebugLocation(1121, 13);
				adaptor.AddChild(root_1, stream_data_type.NextTree());
				DebugLocation(1122, 6);
				// MySQL51Parser.g3:1122:6: ( $notSym)?
				if (stream_notSym.HasNext)
				{
					DebugLocation(1122, 6);
					adaptor.AddChild(root_1, stream_notSym.NextNode());

				}
				stream_notSym.Reset();
				DebugLocation(1123, 5);
				// MySQL51Parser.g3:1123:5: ( $nullSym)?
				if (stream_nullSym.HasNext)
				{
					DebugLocation(1123, 7);
					adaptor.AddChild(root_1, stream_nullSym.NextNode());

				}
				stream_nullSym.Reset();
				DebugLocation(1124, 5);
				// MySQL51Parser.g3:1124:5: ( ^( DEFAULT literal ) )?
				if (stream_DEFAULT.HasNext||stream_literal.HasNext)
				{
					DebugLocation(1124, 5);
					// MySQL51Parser.g3:1124:5: ^( DEFAULT literal )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1124, 7);
					root_2 = (object)adaptor.BecomeRoot(stream_DEFAULT.NextNode(), root_2);

					DebugLocation(1124, 15);
					adaptor.AddChild(root_2, stream_literal.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

				}
				stream_DEFAULT.Reset();
				stream_literal.Reset();
				DebugLocation(1125, 5);
				// MySQL51Parser.g3:1125:5: ( $autoInc)?
				if (stream_autoInc.HasNext)
				{
					DebugLocation(1125, 7);
					adaptor.AddChild(root_1, stream_autoInc.NextNode());

				}
				stream_autoInc.Reset();
				DebugLocation(1126, 5);
				// MySQL51Parser.g3:1126:5: ( UNIQUE )?
				if (stream_UNIQUE.HasNext)
				{
					DebugLocation(1126, 5);
					adaptor.AddChild(root_1, stream_UNIQUE.NextNode());

				}
				stream_UNIQUE.Reset();
				DebugLocation(1126, 13);
				// MySQL51Parser.g3:1126:13: ( PRIMARY )?
				if (stream_PRIMARY.HasNext)
				{
					DebugLocation(1126, 13);
					adaptor.AddChild(root_1, stream_PRIMARY.NextNode());

				}
				stream_PRIMARY.Reset();
				DebugLocation(1126, 22);
				// MySQL51Parser.g3:1126:22: ( KEY )?
				if (stream_KEY.HasNext)
				{
					DebugLocation(1126, 22);
					adaptor.AddChild(root_1, stream_KEY.NextNode());

				}
				stream_KEY.Reset();

				adaptor.AddChild(root_0, root_1);
				}

			}

			retval.Tree = root_0;
			}
			}

			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("column_definition", 83);
			LeaveRule("column_definition", 83);
			LeaveRule_column_definition();
		}
		DebugLocation(1128, 1);
		} finally { DebugExitRule(GrammarFileName, "column_definition"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "column_definition"

	private sealed partial class data_type_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public data_type_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_data_type();
	partial void LeaveRule_data_type();

	// $ANTLR start "data_type"
	// MySQL51Parser.g3:1130:1: data_type : ( BIT ( LPAREN NUMBER RPAREN )? | ( TINYINT | SMALLINT | MEDIUMINT | INT | INTEGER | BIGINT ) ( LPAREN NUMBER RPAREN )? ( SIGNED | UNSIGNED )? ( ZEROFILL )? | ( REAL | DOUBLE | FLOAT | DECIMAL | NUMERIC ) ( LPAREN num1= NUMBER COMMA num2= NUMBER RPAREN )? ( SIGNED | UNSIGNED )? ( ZEROFILL )? | DATE | TIME | TIMESTAMP | DATETIME | YEAR | TINYBLOB | BLOB | MEDIUMBLOB | LONGBLOB | ( CHAR | VARCHAR ) LPAREN NUMBER RPAREN ( charset )? ( collate )? | ( BINARY | VARBINARY ) LPAREN NUMBER RPAREN | ( TINYTEXT | TEXT | MEDIUMTEXT | LONGTEXT ) ( BINARY )? ( charset )? ( collate )? | ( ENUM | SET ) LPAREN values+= STRING ( COMMA values+= STRING )* RPAREN ( charset )? ( collate )? );
	[GrammarRule("data_type")]
	private MySQL51Parser.data_type_return data_type()
	{
		EnterRule_data_type();
		EnterRule("data_type", 84);
		TraceIn("data_type", 84);
		MySQL51Parser.data_type_return retval = new MySQL51Parser.data_type_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken num1 = default(IToken);
		IToken num2 = default(IToken);
		IToken BIT468 = default(IToken);
		IToken LPAREN469 = default(IToken);
		IToken NUMBER470 = default(IToken);
		IToken RPAREN471 = default(IToken);
		IToken set472 = default(IToken);
		IToken LPAREN473 = default(IToken);
		IToken NUMBER474 = default(IToken);
		IToken RPAREN475 = default(IToken);
		IToken set476 = default(IToken);
		IToken ZEROFILL477 = default(IToken);
		IToken set478 = default(IToken);
		IToken LPAREN479 = default(IToken);
		IToken COMMA480 = default(IToken);
		IToken RPAREN481 = default(IToken);
		IToken set482 = default(IToken);
		IToken ZEROFILL483 = default(IToken);
		IToken DATE484 = default(IToken);
		IToken TIME485 = default(IToken);
		IToken TIMESTAMP486 = default(IToken);
		IToken DATETIME487 = default(IToken);
		IToken YEAR488 = default(IToken);
		IToken TINYBLOB489 = default(IToken);
		IToken BLOB490 = default(IToken);
		IToken MEDIUMBLOB491 = default(IToken);
		IToken LONGBLOB492 = default(IToken);
		IToken set493 = default(IToken);
		IToken LPAREN494 = default(IToken);
		IToken NUMBER495 = default(IToken);
		IToken RPAREN496 = default(IToken);
		IToken set499 = default(IToken);
		IToken LPAREN500 = default(IToken);
		IToken NUMBER501 = default(IToken);
		IToken RPAREN502 = default(IToken);
		IToken set503 = default(IToken);
		IToken BINARY504 = default(IToken);
		IToken set507 = default(IToken);
		IToken LPAREN508 = default(IToken);
		IToken COMMA509 = default(IToken);
		IToken RPAREN510 = default(IToken);
		IToken values = default(IToken);
		List<IToken> list_values = null;
		MySQL51Parser.charset_return charset497 = default(MySQL51Parser.charset_return);
		MySQL51Parser.collate_return collate498 = default(MySQL51Parser.collate_return);
		MySQL51Parser.charset_return charset505 = default(MySQL51Parser.charset_return);
		MySQL51Parser.collate_return collate506 = default(MySQL51Parser.collate_return);
		MySQL51Parser.charset_return charset511 = default(MySQL51Parser.charset_return);
		MySQL51Parser.collate_return collate512 = default(MySQL51Parser.collate_return);

		object num1_tree = default(object);
		object num2_tree = default(object);
		object BIT468_tree = default(object);
		object LPAREN469_tree = default(object);
		object NUMBER470_tree = default(object);
		object RPAREN471_tree = default(object);
		object set472_tree = default(object);
		object LPAREN473_tree = default(object);
		object NUMBER474_tree = default(object);
		object RPAREN475_tree = default(object);
		object set476_tree = default(object);
		object ZEROFILL477_tree = default(object);
		object set478_tree = default(object);
		object LPAREN479_tree = default(object);
		object COMMA480_tree = default(object);
		object RPAREN481_tree = default(object);
		object set482_tree = default(object);
		object ZEROFILL483_tree = default(object);
		object DATE484_tree = default(object);
		object TIME485_tree = default(object);
		object TIMESTAMP486_tree = default(object);
		object DATETIME487_tree = default(object);
		object YEAR488_tree = default(object);
		object TINYBLOB489_tree = default(object);
		object BLOB490_tree = default(object);
		object MEDIUMBLOB491_tree = default(object);
		object LONGBLOB492_tree = default(object);
		object set493_tree = default(object);
		object LPAREN494_tree = default(object);
		object NUMBER495_tree = default(object);
		object RPAREN496_tree = default(object);
		object set499_tree = default(object);
		object LPAREN500_tree = default(object);
		object NUMBER501_tree = default(object);
		object RPAREN502_tree = default(object);
		object set503_tree = default(object);
		object BINARY504_tree = default(object);
		object set507_tree = default(object);
		object LPAREN508_tree = default(object);
		object COMMA509_tree = default(object);
		object RPAREN510_tree = default(object);
		object values_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "data_type");
		DebugLocation(1130, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1131:2: ( BIT ( LPAREN NUMBER RPAREN )? | ( TINYINT | SMALLINT | MEDIUMINT | INT | INTEGER | BIGINT ) ( LPAREN NUMBER RPAREN )? ( SIGNED | UNSIGNED )? ( ZEROFILL )? | ( REAL | DOUBLE | FLOAT | DECIMAL | NUMERIC ) ( LPAREN num1= NUMBER COMMA num2= NUMBER RPAREN )? ( SIGNED | UNSIGNED )? ( ZEROFILL )? | DATE | TIME | TIMESTAMP | DATETIME | YEAR | TINYBLOB | BLOB | MEDIUMBLOB | LONGBLOB | ( CHAR | VARCHAR ) LPAREN NUMBER RPAREN ( charset )? ( collate )? | ( BINARY | VARBINARY ) LPAREN NUMBER RPAREN | ( TINYTEXT | TEXT | MEDIUMTEXT | LONGTEXT ) ( BINARY )? ( charset )? ( collate )? | ( ENUM | SET ) LPAREN values+= STRING ( COMMA values+= STRING )* RPAREN ( charset )? ( collate )? )
			int alt240=16;
			try { DebugEnterDecision(240, false);
			switch (input.LA(1))
			{
			case BIT:
				{
				alt240 = 1;
				}
				break;
			case BIGINT:
			case INT:
			case INTEGER:
			case MEDIUMINT:
			case SMALLINT:
			case TINYINT:
				{
				alt240 = 2;
				}
				break;
			case DECIMAL:
			case DOUBLE:
			case FLOAT:
			case NUMERIC:
			case REAL:
				{
				alt240 = 3;
				}
				break;
			case DATE:
				{
				alt240 = 4;
				}
				break;
			case TIME:
				{
				alt240 = 5;
				}
				break;
			case TIMESTAMP:
				{
				alt240 = 6;
				}
				break;
			case DATETIME:
				{
				alt240 = 7;
				}
				break;
			case YEAR:
				{
				alt240 = 8;
				}
				break;
			case TINYBLOB:
				{
				alt240 = 9;
				}
				break;
			case BLOB:
				{
				alt240 = 10;
				}
				break;
			case MEDIUMBLOB:
				{
				alt240 = 11;
				}
				break;
			case LONGBLOB:
				{
				alt240 = 12;
				}
				break;
			case CHAR:
			case VARCHAR:
				{
				alt240 = 13;
				}
				break;
			case BINARY:
			case VARBINARY:
				{
				alt240 = 14;
				}
				break;
			case LONGTEXT:
			case MEDIUMTEXT:
			case TEXT:
			case TINYTEXT:
				{
				alt240 = 15;
				}
				break;
			case ENUM:
			case SET:
				{
				alt240 = 16;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 240, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(240); }
			switch (alt240)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1131:4: BIT ( LPAREN NUMBER RPAREN )?
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1131, 4);
				BIT468=(IToken)Match(input,BIT,Follow._BIT_in_data_type9463); if (state.failed) return retval;
				if (state.backtracking == 0) {
				BIT468_tree = (object)adaptor.Create(BIT468);
				adaptor.AddChild(root_0, BIT468_tree);
				}
				DebugLocation(1132, 3);
				// MySQL51Parser.g3:1132:3: ( LPAREN NUMBER RPAREN )?
				int alt225=2;
				try { DebugEnterSubRule(225);
				try { DebugEnterDecision(225, false);
				int LA225_0 = input.LA(1);

				if ((LA225_0==LPAREN))
				{
					alt225 = 1;
				}
				} finally { DebugExitDecision(225); }
				switch (alt225)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1132:5: LPAREN NUMBER RPAREN
					{
					DebugLocation(1132, 5);
					LPAREN469=(IToken)Match(input,LPAREN,Follow._LPAREN_in_data_type9470); if (state.failed) return retval;
					if (state.backtracking == 0) {
					LPAREN469_tree = (object)adaptor.Create(LPAREN469);
					adaptor.AddChild(root_0, LPAREN469_tree);
					}
					DebugLocation(1132, 12);
					NUMBER470=(IToken)Match(input,NUMBER,Follow._NUMBER_in_data_type9472); if (state.failed) return retval;
					if (state.backtracking == 0) {
					NUMBER470_tree = (object)adaptor.Create(NUMBER470);
					adaptor.AddChild(root_0, NUMBER470_tree);
					}
					DebugLocation(1132, 20);
					RPAREN471=(IToken)Match(input,RPAREN,Follow._RPAREN_in_data_type9475); if (state.failed) return retval;
					if (state.backtracking == 0) {
					RPAREN471_tree = (object)adaptor.Create(RPAREN471);
					adaptor.AddChild(root_0, RPAREN471_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(225); }


				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:1133:4: ( TINYINT | SMALLINT | MEDIUMINT | INT | INTEGER | BIGINT ) ( LPAREN NUMBER RPAREN )? ( SIGNED | UNSIGNED )? ( ZEROFILL )?
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1133, 4);
				set472=(IToken)input.LT(1);
				if (input.LA(1)==BIGINT||input.LA(1)==INT||input.LA(1)==INTEGER||input.LA(1)==MEDIUMINT||input.LA(1)==SMALLINT||input.LA(1)==TINYINT)
				{
					input.Consume();
					if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set472));
					state.errorRecovery=false;state.failed=false;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					MismatchedSetException mse = new MismatchedSetException(null,input);
					DebugRecognitionException(mse);
					throw mse;
				}

				DebugLocation(1140, 3);
				// MySQL51Parser.g3:1140:3: ( LPAREN NUMBER RPAREN )?
				int alt226=2;
				try { DebugEnterSubRule(226);
				try { DebugEnterDecision(226, false);
				int LA226_0 = input.LA(1);

				if ((LA226_0==LPAREN))
				{
					alt226 = 1;
				}
				} finally { DebugExitDecision(226); }
				switch (alt226)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1140:4: LPAREN NUMBER RPAREN
					{
					DebugLocation(1140, 4);
					LPAREN473=(IToken)Match(input,LPAREN,Follow._LPAREN_in_data_type9535); if (state.failed) return retval;
					if (state.backtracking == 0) {
					LPAREN473_tree = (object)adaptor.Create(LPAREN473);
					adaptor.AddChild(root_0, LPAREN473_tree);
					}
					DebugLocation(1140, 11);
					NUMBER474=(IToken)Match(input,NUMBER,Follow._NUMBER_in_data_type9537); if (state.failed) return retval;
					if (state.backtracking == 0) {
					NUMBER474_tree = (object)adaptor.Create(NUMBER474);
					adaptor.AddChild(root_0, NUMBER474_tree);
					}
					DebugLocation(1140, 19);
					RPAREN475=(IToken)Match(input,RPAREN,Follow._RPAREN_in_data_type9540); if (state.failed) return retval;
					if (state.backtracking == 0) {
					RPAREN475_tree = (object)adaptor.Create(RPAREN475);
					adaptor.AddChild(root_0, RPAREN475_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(226); }

				DebugLocation(1141, 3);
				// MySQL51Parser.g3:1141:3: ( SIGNED | UNSIGNED )?
				int alt227=2;
				try { DebugEnterSubRule(227);
				try { DebugEnterDecision(227, false);
				int LA227_0 = input.LA(1);

				if ((LA227_0==SIGNED||LA227_0==UNSIGNED))
				{
					alt227 = 1;
				}
				} finally { DebugExitDecision(227); }
				switch (alt227)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:
					{
					DebugLocation(1141, 3);
					set476=(IToken)input.LT(1);
					if (input.LA(1)==SIGNED||input.LA(1)==UNSIGNED)
					{
						input.Consume();
						if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set476));
						state.errorRecovery=false;state.failed=false;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						DebugRecognitionException(mse);
						throw mse;
					}


					}
					break;

				}
				} finally { DebugExitSubRule(227); }

				DebugLocation(1142, 3);
				// MySQL51Parser.g3:1142:3: ( ZEROFILL )?
				int alt228=2;
				try { DebugEnterSubRule(228);
				try { DebugEnterDecision(228, false);
				int LA228_0 = input.LA(1);

				if ((LA228_0==ZEROFILL))
				{
					alt228 = 1;
				}
				} finally { DebugExitDecision(228); }
				switch (alt228)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1142:4: ZEROFILL
					{
					DebugLocation(1142, 4);
					ZEROFILL477=(IToken)Match(input,ZEROFILL,Follow._ZEROFILL_in_data_type9559); if (state.failed) return retval;
					if (state.backtracking == 0) {
					ZEROFILL477_tree = (object)adaptor.Create(ZEROFILL477);
					adaptor.AddChild(root_0, ZEROFILL477_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(228); }


				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:1143:4: ( REAL | DOUBLE | FLOAT | DECIMAL | NUMERIC ) ( LPAREN num1= NUMBER COMMA num2= NUMBER RPAREN )? ( SIGNED | UNSIGNED )? ( ZEROFILL )?
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1143, 4);
				set478=(IToken)input.LT(1);
				if (input.LA(1)==DECIMAL||input.LA(1)==DOUBLE||input.LA(1)==FLOAT||input.LA(1)==NUMERIC||input.LA(1)==REAL)
				{
					input.Consume();
					if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set478));
					state.errorRecovery=false;state.failed=false;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					MismatchedSetException mse = new MismatchedSetException(null,input);
					DebugRecognitionException(mse);
					throw mse;
				}

				DebugLocation(1149, 3);
				// MySQL51Parser.g3:1149:3: ( LPAREN num1= NUMBER COMMA num2= NUMBER RPAREN )?
				int alt229=2;
				try { DebugEnterSubRule(229);
				try { DebugEnterDecision(229, false);
				int LA229_0 = input.LA(1);

				if ((LA229_0==LPAREN))
				{
					alt229 = 1;
				}
				} finally { DebugExitDecision(229); }
				switch (alt229)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1149:4: LPAREN num1= NUMBER COMMA num2= NUMBER RPAREN
					{
					DebugLocation(1149, 4);
					LPAREN479=(IToken)Match(input,LPAREN,Follow._LPAREN_in_data_type9613); if (state.failed) return retval;
					if (state.backtracking == 0) {
					LPAREN479_tree = (object)adaptor.Create(LPAREN479);
					adaptor.AddChild(root_0, LPAREN479_tree);
					}
					DebugLocation(1149, 15);
					num1=(IToken)Match(input,NUMBER,Follow._NUMBER_in_data_type9617); if (state.failed) return retval;
					if (state.backtracking == 0) {
					num1_tree = (object)adaptor.Create(num1);
					adaptor.AddChild(root_0, num1_tree);
					}
					DebugLocation(1149, 23);
					COMMA480=(IToken)Match(input,COMMA,Follow._COMMA_in_data_type9619); if (state.failed) return retval;
					if (state.backtracking == 0) {
					COMMA480_tree = (object)adaptor.Create(COMMA480);
					adaptor.AddChild(root_0, COMMA480_tree);
					}
					DebugLocation(1149, 33);
					num2=(IToken)Match(input,NUMBER,Follow._NUMBER_in_data_type9623); if (state.failed) return retval;
					if (state.backtracking == 0) {
					num2_tree = (object)adaptor.Create(num2);
					adaptor.AddChild(root_0, num2_tree);
					}
					DebugLocation(1149, 41);
					RPAREN481=(IToken)Match(input,RPAREN,Follow._RPAREN_in_data_type9625); if (state.failed) return retval;
					if (state.backtracking == 0) {
					RPAREN481_tree = (object)adaptor.Create(RPAREN481);
					adaptor.AddChild(root_0, RPAREN481_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(229); }

				DebugLocation(1150, 3);
				// MySQL51Parser.g3:1150:3: ( SIGNED | UNSIGNED )?
				int alt230=2;
				try { DebugEnterSubRule(230);
				try { DebugEnterDecision(230, false);
				int LA230_0 = input.LA(1);

				if ((LA230_0==SIGNED||LA230_0==UNSIGNED))
				{
					alt230 = 1;
				}
				} finally { DebugExitDecision(230); }
				switch (alt230)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:
					{
					DebugLocation(1150, 3);
					set482=(IToken)input.LT(1);
					if (input.LA(1)==SIGNED||input.LA(1)==UNSIGNED)
					{
						input.Consume();
						if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set482));
						state.errorRecovery=false;state.failed=false;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						DebugRecognitionException(mse);
						throw mse;
					}


					}
					break;

				}
				} finally { DebugExitSubRule(230); }

				DebugLocation(1151, 3);
				// MySQL51Parser.g3:1151:3: ( ZEROFILL )?
				int alt231=2;
				try { DebugEnterSubRule(231);
				try { DebugEnterDecision(231, false);
				int LA231_0 = input.LA(1);

				if ((LA231_0==ZEROFILL))
				{
					alt231 = 1;
				}
				} finally { DebugExitDecision(231); }
				switch (alt231)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1151:4: ZEROFILL
					{
					DebugLocation(1151, 4);
					ZEROFILL483=(IToken)Match(input,ZEROFILL,Follow._ZEROFILL_in_data_type9645); if (state.failed) return retval;
					if (state.backtracking == 0) {
					ZEROFILL483_tree = (object)adaptor.Create(ZEROFILL483);
					adaptor.AddChild(root_0, ZEROFILL483_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(231); }


				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:1152:4: DATE
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1152, 4);
				DATE484=(IToken)Match(input,DATE,Follow._DATE_in_data_type9653); if (state.failed) return retval;
				if (state.backtracking == 0) {
				DATE484_tree = (object)adaptor.Create(DATE484);
				adaptor.AddChild(root_0, DATE484_tree);
				}

				}
				break;
			case 5:
				DebugEnterAlt(5);
				// MySQL51Parser.g3:1153:4: TIME
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1153, 4);
				TIME485=(IToken)Match(input,TIME,Follow._TIME_in_data_type9660); if (state.failed) return retval;
				if (state.backtracking == 0) {
				TIME485_tree = (object)adaptor.Create(TIME485);
				adaptor.AddChild(root_0, TIME485_tree);
				}

				}
				break;
			case 6:
				DebugEnterAlt(6);
				// MySQL51Parser.g3:1154:4: TIMESTAMP
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1154, 4);
				TIMESTAMP486=(IToken)Match(input,TIMESTAMP,Follow._TIMESTAMP_in_data_type9667); if (state.failed) return retval;
				if (state.backtracking == 0) {
				TIMESTAMP486_tree = (object)adaptor.Create(TIMESTAMP486);
				adaptor.AddChild(root_0, TIMESTAMP486_tree);
				}

				}
				break;
			case 7:
				DebugEnterAlt(7);
				// MySQL51Parser.g3:1155:4: DATETIME
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1155, 4);
				DATETIME487=(IToken)Match(input,DATETIME,Follow._DATETIME_in_data_type9673); if (state.failed) return retval;
				if (state.backtracking == 0) {
				DATETIME487_tree = (object)adaptor.Create(DATETIME487);
				adaptor.AddChild(root_0, DATETIME487_tree);
				}

				}
				break;
			case 8:
				DebugEnterAlt(8);
				// MySQL51Parser.g3:1156:4: YEAR
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1156, 4);
				YEAR488=(IToken)Match(input,YEAR,Follow._YEAR_in_data_type9679); if (state.failed) return retval;
				if (state.backtracking == 0) {
				YEAR488_tree = (object)adaptor.Create(YEAR488);
				adaptor.AddChild(root_0, YEAR488_tree);
				}

				}
				break;
			case 9:
				DebugEnterAlt(9);
				// MySQL51Parser.g3:1157:4: TINYBLOB
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1157, 4);
				TINYBLOB489=(IToken)Match(input,TINYBLOB,Follow._TINYBLOB_in_data_type9686); if (state.failed) return retval;
				if (state.backtracking == 0) {
				TINYBLOB489_tree = (object)adaptor.Create(TINYBLOB489);
				adaptor.AddChild(root_0, TINYBLOB489_tree);
				}

				}
				break;
			case 10:
				DebugEnterAlt(10);
				// MySQL51Parser.g3:1158:4: BLOB
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1158, 4);
				BLOB490=(IToken)Match(input,BLOB,Follow._BLOB_in_data_type9692); if (state.failed) return retval;
				if (state.backtracking == 0) {
				BLOB490_tree = (object)adaptor.Create(BLOB490);
				adaptor.AddChild(root_0, BLOB490_tree);
				}

				}
				break;
			case 11:
				DebugEnterAlt(11);
				// MySQL51Parser.g3:1159:4: MEDIUMBLOB
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1159, 4);
				MEDIUMBLOB491=(IToken)Match(input,MEDIUMBLOB,Follow._MEDIUMBLOB_in_data_type9699); if (state.failed) return retval;
				if (state.backtracking == 0) {
				MEDIUMBLOB491_tree = (object)adaptor.Create(MEDIUMBLOB491);
				adaptor.AddChild(root_0, MEDIUMBLOB491_tree);
				}

				}
				break;
			case 12:
				DebugEnterAlt(12);
				// MySQL51Parser.g3:1160:4: LONGBLOB
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1160, 4);
				LONGBLOB492=(IToken)Match(input,LONGBLOB,Follow._LONGBLOB_in_data_type9705); if (state.failed) return retval;
				if (state.backtracking == 0) {
				LONGBLOB492_tree = (object)adaptor.Create(LONGBLOB492);
				adaptor.AddChild(root_0, LONGBLOB492_tree);
				}

				}
				break;
			case 13:
				DebugEnterAlt(13);
				// MySQL51Parser.g3:1161:4: ( CHAR | VARCHAR ) LPAREN NUMBER RPAREN ( charset )? ( collate )?
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1161, 4);
				set493=(IToken)input.LT(1);
				if (input.LA(1)==CHAR||input.LA(1)==VARCHAR)
				{
					input.Consume();
					if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set493));
					state.errorRecovery=false;state.failed=false;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					MismatchedSetException mse = new MismatchedSetException(null,input);
					DebugRecognitionException(mse);
					throw mse;
				}

				DebugLocation(1164, 3);
				LPAREN494=(IToken)Match(input,LPAREN,Follow._LPAREN_in_data_type9729); if (state.failed) return retval;
				if (state.backtracking == 0) {
				LPAREN494_tree = (object)adaptor.Create(LPAREN494);
				adaptor.AddChild(root_0, LPAREN494_tree);
				}
				DebugLocation(1164, 10);
				NUMBER495=(IToken)Match(input,NUMBER,Follow._NUMBER_in_data_type9731); if (state.failed) return retval;
				if (state.backtracking == 0) {
				NUMBER495_tree = (object)adaptor.Create(NUMBER495);
				adaptor.AddChild(root_0, NUMBER495_tree);
				}
				DebugLocation(1164, 18);
				RPAREN496=(IToken)Match(input,RPAREN,Follow._RPAREN_in_data_type9734); if (state.failed) return retval;
				if (state.backtracking == 0) {
				RPAREN496_tree = (object)adaptor.Create(RPAREN496);
				adaptor.AddChild(root_0, RPAREN496_tree);
				}
				DebugLocation(1165, 3);
				// MySQL51Parser.g3:1165:3: ( charset )?
				int alt232=2;
				try { DebugEnterSubRule(232);
				try { DebugEnterDecision(232, false);
				int LA232_0 = input.LA(1);

				if ((LA232_0==CHARACTER))
				{
					alt232 = 1;
				}
				} finally { DebugExitDecision(232); }
				switch (alt232)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1165:4: charset
					{
					DebugLocation(1165, 4);
					PushFollow(Follow._charset_in_data_type9739);
					charset497=charset();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, charset497.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(232); }

				DebugLocation(1166, 3);
				// MySQL51Parser.g3:1166:3: ( collate )?
				int alt233=2;
				try { DebugEnterSubRule(233);
				try { DebugEnterDecision(233, false);
				int LA233_0 = input.LA(1);

				if ((LA233_0==COLLATE))
				{
					alt233 = 1;
				}
				} finally { DebugExitDecision(233); }
				switch (alt233)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1166:4: collate
					{
					DebugLocation(1166, 4);
					PushFollow(Follow._collate_in_data_type9747);
					collate498=collate();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, collate498.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(233); }


				}
				break;
			case 14:
				DebugEnterAlt(14);
				// MySQL51Parser.g3:1167:4: ( BINARY | VARBINARY ) LPAREN NUMBER RPAREN
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1167, 4);
				set499=(IToken)input.LT(1);
				if (input.LA(1)==BINARY||input.LA(1)==VARBINARY)
				{
					input.Consume();
					if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set499));
					state.errorRecovery=false;state.failed=false;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					MismatchedSetException mse = new MismatchedSetException(null,input);
					DebugRecognitionException(mse);
					throw mse;
				}

				DebugLocation(1170, 3);
				LPAREN500=(IToken)Match(input,LPAREN,Follow._LPAREN_in_data_type9774); if (state.failed) return retval;
				if (state.backtracking == 0) {
				LPAREN500_tree = (object)adaptor.Create(LPAREN500);
				adaptor.AddChild(root_0, LPAREN500_tree);
				}
				DebugLocation(1170, 10);
				NUMBER501=(IToken)Match(input,NUMBER,Follow._NUMBER_in_data_type9776); if (state.failed) return retval;
				if (state.backtracking == 0) {
				NUMBER501_tree = (object)adaptor.Create(NUMBER501);
				adaptor.AddChild(root_0, NUMBER501_tree);
				}
				DebugLocation(1170, 18);
				RPAREN502=(IToken)Match(input,RPAREN,Follow._RPAREN_in_data_type9779); if (state.failed) return retval;
				if (state.backtracking == 0) {
				RPAREN502_tree = (object)adaptor.Create(RPAREN502);
				adaptor.AddChild(root_0, RPAREN502_tree);
				}

				}
				break;
			case 15:
				DebugEnterAlt(15);
				// MySQL51Parser.g3:1171:4: ( TINYTEXT | TEXT | MEDIUMTEXT | LONGTEXT ) ( BINARY )? ( charset )? ( collate )?
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1171, 4);
				set503=(IToken)input.LT(1);
				if (input.LA(1)==LONGTEXT||input.LA(1)==MEDIUMTEXT||input.LA(1)==TEXT||input.LA(1)==TINYTEXT)
				{
					input.Consume();
					if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set503));
					state.errorRecovery=false;state.failed=false;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					MismatchedSetException mse = new MismatchedSetException(null,input);
					DebugRecognitionException(mse);
					throw mse;
				}

				DebugLocation(1176, 3);
				// MySQL51Parser.g3:1176:3: ( BINARY )?
				int alt234=2;
				try { DebugEnterSubRule(234);
				try { DebugEnterDecision(234, false);
				int LA234_0 = input.LA(1);

				if ((LA234_0==BINARY))
				{
					alt234 = 1;
				}
				} finally { DebugExitDecision(234); }
				switch (alt234)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1176:4: BINARY
					{
					DebugLocation(1176, 4);
					BINARY504=(IToken)Match(input,BINARY,Follow._BINARY_in_data_type9818); if (state.failed) return retval;
					if (state.backtracking == 0) {
					BINARY504_tree = (object)adaptor.Create(BINARY504);
					adaptor.AddChild(root_0, BINARY504_tree);
					}

					}
					break;

				}
				} finally { DebugExitSubRule(234); }

				DebugLocation(1177, 3);
				// MySQL51Parser.g3:1177:3: ( charset )?
				int alt235=2;
				try { DebugEnterSubRule(235);
				try { DebugEnterDecision(235, false);
				int LA235_0 = input.LA(1);

				if ((LA235_0==CHARACTER))
				{
					alt235 = 1;
				}
				} finally { DebugExitDecision(235); }
				switch (alt235)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1177:4: charset
					{
					DebugLocation(1177, 4);
					PushFollow(Follow._charset_in_data_type9826);
					charset505=charset();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, charset505.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(235); }

				DebugLocation(1178, 3);
				// MySQL51Parser.g3:1178:3: ( collate )?
				int alt236=2;
				try { DebugEnterSubRule(236);
				try { DebugEnterDecision(236, false);
				int LA236_0 = input.LA(1);

				if ((LA236_0==COLLATE))
				{
					alt236 = 1;
				}
				} finally { DebugExitDecision(236); }
				switch (alt236)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1178:4: collate
					{
					DebugLocation(1178, 4);
					PushFollow(Follow._collate_in_data_type9834);
					collate506=collate();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, collate506.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(236); }


				}
				break;
			case 16:
				DebugEnterAlt(16);
				// MySQL51Parser.g3:1179:4: ( ENUM | SET ) LPAREN values+= STRING ( COMMA values+= STRING )* RPAREN ( charset )? ( collate )?
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1179, 4);
				set507=(IToken)input.LT(1);
				if (input.LA(1)==ENUM||input.LA(1)==SET)
				{
					input.Consume();
					if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set507));
					state.errorRecovery=false;state.failed=false;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					MismatchedSetException mse = new MismatchedSetException(null,input);
					DebugRecognitionException(mse);
					throw mse;
				}

				DebugLocation(1182, 3);
				LPAREN508=(IToken)Match(input,LPAREN,Follow._LPAREN_in_data_type9861); if (state.failed) return retval;
				if (state.backtracking == 0) {
				LPAREN508_tree = (object)adaptor.Create(LPAREN508);
				adaptor.AddChild(root_0, LPAREN508_tree);
				}
				DebugLocation(1182, 16);
				values=(IToken)Match(input,STRING,Follow._STRING_in_data_type9865); if (state.failed) return retval;
				if (state.backtracking == 0) {
				values_tree = (object)adaptor.Create(values);
				adaptor.AddChild(root_0, values_tree);
				}
				if (list_values==null) list_values=new List<IToken>();
				list_values.Add(values);

				DebugLocation(1182, 25);
				// MySQL51Parser.g3:1182:25: ( COMMA values+= STRING )*
				try { DebugEnterSubRule(237);
				while (true)
				{
					int alt237=2;
					try { DebugEnterDecision(237, false);
					int LA237_0 = input.LA(1);

					if ((LA237_0==COMMA))
					{
						alt237 = 1;
					}


					} finally { DebugExitDecision(237); }
					switch ( alt237 )
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:1182:26: COMMA values+= STRING
						{
						DebugLocation(1182, 26);
						COMMA509=(IToken)Match(input,COMMA,Follow._COMMA_in_data_type9868); if (state.failed) return retval;
						if (state.backtracking == 0) {
						COMMA509_tree = (object)adaptor.Create(COMMA509);
						adaptor.AddChild(root_0, COMMA509_tree);
						}
						DebugLocation(1182, 38);
						values=(IToken)Match(input,STRING,Follow._STRING_in_data_type9872); if (state.failed) return retval;
						if (state.backtracking == 0) {
						values_tree = (object)adaptor.Create(values);
						adaptor.AddChild(root_0, values_tree);
						}
						if (list_values==null) list_values=new List<IToken>();
						list_values.Add(values);


						}
						break;

					default:
						goto loop237;
					}
				}

				loop237:
					;

				} finally { DebugExitSubRule(237); }

				DebugLocation(1182, 49);
				RPAREN510=(IToken)Match(input,RPAREN,Follow._RPAREN_in_data_type9876); if (state.failed) return retval;
				if (state.backtracking == 0) {
				RPAREN510_tree = (object)adaptor.Create(RPAREN510);
				adaptor.AddChild(root_0, RPAREN510_tree);
				}
				DebugLocation(1183, 3);
				// MySQL51Parser.g3:1183:3: ( charset )?
				int alt238=2;
				try { DebugEnterSubRule(238);
				try { DebugEnterDecision(238, false);
				int LA238_0 = input.LA(1);

				if ((LA238_0==CHARACTER))
				{
					alt238 = 1;
				}
				} finally { DebugExitDecision(238); }
				switch (alt238)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1183:4: charset
					{
					DebugLocation(1183, 4);
					PushFollow(Follow._charset_in_data_type9882);
					charset511=charset();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, charset511.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(238); }

				DebugLocation(1184, 3);
				// MySQL51Parser.g3:1184:3: ( collate )?
				int alt239=2;
				try { DebugEnterSubRule(239);
				try { DebugEnterDecision(239, false);
				int LA239_0 = input.LA(1);

				if ((LA239_0==COLLATE))
				{
					alt239 = 1;
				}
				} finally { DebugExitDecision(239); }
				switch (alt239)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1184:4: collate
					{
					DebugLocation(1184, 4);
					PushFollow(Follow._collate_in_data_type9890);
					collate512=collate();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) adaptor.AddChild(root_0, collate512.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(239); }


				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("data_type", 84);
			LeaveRule("data_type", 84);
			LeaveRule_data_type();
		}
		DebugLocation(1185, 1);
		} finally { DebugExitRule(GrammarFileName, "data_type"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "data_type"

	private sealed partial class charset_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public charset_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_charset();
	partial void LeaveRule_charset();

	// $ANTLR start "charset"
	// MySQL51Parser.g3:1187:1: charset : CHARACTER SET ( ID | STRING ) ;
	[GrammarRule("charset")]
	private MySQL51Parser.charset_return charset()
	{
		EnterRule_charset();
		EnterRule("charset", 85);
		TraceIn("charset", 85);
		MySQL51Parser.charset_return retval = new MySQL51Parser.charset_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken CHARACTER513 = default(IToken);
		IToken SET514 = default(IToken);
		IToken set515 = default(IToken);

		object CHARACTER513_tree = default(object);
		object SET514_tree = default(object);
		object set515_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "charset");
		DebugLocation(1187, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1188:2: ( CHARACTER SET ( ID | STRING ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:1188:4: CHARACTER SET ( ID | STRING )
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(1188, 4);
			CHARACTER513=(IToken)Match(input,CHARACTER,Follow._CHARACTER_in_charset9904); if (state.failed) return retval;
			if (state.backtracking == 0) {
			CHARACTER513_tree = (object)adaptor.Create(CHARACTER513);
			adaptor.AddChild(root_0, CHARACTER513_tree);
			}
			DebugLocation(1188, 14);
			SET514=(IToken)Match(input,SET,Follow._SET_in_charset9906); if (state.failed) return retval;
			if (state.backtracking == 0) {
			SET514_tree = (object)adaptor.Create(SET514);
			adaptor.AddChild(root_0, SET514_tree);
			}
			DebugLocation(1189, 3);
			set515=(IToken)input.LT(1);
			if (input.LA(1)==ID||input.LA(1)==STRING)
			{
				input.Consume();
				if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set515));
				state.errorRecovery=false;state.failed=false;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				DebugRecognitionException(mse);
				throw mse;
			}


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("charset", 85);
			LeaveRule("charset", 85);
			LeaveRule_charset();
		}
		DebugLocation(1192, 1);
		} finally { DebugExitRule(GrammarFileName, "charset"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "charset"

	private sealed partial class collate_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public collate_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_collate();
	partial void LeaveRule_collate();

	// $ANTLR start "collate"
	// MySQL51Parser.g3:1194:1: collate : COLLATE ( ID | STRING ) ;
	[GrammarRule("collate")]
	private MySQL51Parser.collate_return collate()
	{
		EnterRule_collate();
		EnterRule("collate", 86);
		TraceIn("collate", 86);
		MySQL51Parser.collate_return retval = new MySQL51Parser.collate_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken COLLATE516 = default(IToken);
		IToken set517 = default(IToken);

		object COLLATE516_tree = default(object);
		object set517_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "collate");
		DebugLocation(1194, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1195:2: ( COLLATE ( ID | STRING ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:1195:4: COLLATE ( ID | STRING )
			{
			root_0 = (object)adaptor.Nil();

			DebugLocation(1195, 4);
			COLLATE516=(IToken)Match(input,COLLATE,Follow._COLLATE_in_collate9935); if (state.failed) return retval;
			if (state.backtracking == 0) {
			COLLATE516_tree = (object)adaptor.Create(COLLATE516);
			adaptor.AddChild(root_0, COLLATE516_tree);
			}
			DebugLocation(1196, 3);
			set517=(IToken)input.LT(1);
			if (input.LA(1)==ID||input.LA(1)==STRING)
			{
				input.Consume();
				if (state.backtracking == 0) adaptor.AddChild(root_0, (object)adaptor.Create(set517));
				state.errorRecovery=false;state.failed=false;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				DebugRecognitionException(mse);
				throw mse;
			}


			}

			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("collate", 86);
			LeaveRule("collate", 86);
			LeaveRule_collate();
		}
		DebugLocation(1199, 1);
		} finally { DebugExitRule(GrammarFileName, "collate"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "collate"

	private sealed partial class reference_definition_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public reference_definition_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_reference_definition();
	partial void LeaveRule_reference_definition();

	// $ANTLR start "reference_definition"
	// MySQL51Parser.g3:1201:1: reference_definition : ( RESTRICT | CASCADE | SET NULL | NO ACTION );
	[GrammarRule("reference_definition")]
	private MySQL51Parser.reference_definition_return reference_definition()
	{
		EnterRule_reference_definition();
		EnterRule("reference_definition", 87);
		TraceIn("reference_definition", 87);
		MySQL51Parser.reference_definition_return retval = new MySQL51Parser.reference_definition_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken RESTRICT518 = default(IToken);
		IToken CASCADE519 = default(IToken);
		IToken SET520 = default(IToken);
		IToken NULL521 = default(IToken);
		IToken NO522 = default(IToken);
		IToken ACTION523 = default(IToken);

		object RESTRICT518_tree = default(object);
		object CASCADE519_tree = default(object);
		object SET520_tree = default(object);
		object NULL521_tree = default(object);
		object NO522_tree = default(object);
		object ACTION523_tree = default(object);

		try { DebugEnterRule(GrammarFileName, "reference_definition");
		DebugLocation(1201, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1202:2: ( RESTRICT | CASCADE | SET NULL | NO ACTION )
			int alt241=4;
			try { DebugEnterDecision(241, false);
			switch (input.LA(1))
			{
			case RESTRICT:
				{
				alt241 = 1;
				}
				break;
			case CASCADE:
				{
				alt241 = 2;
				}
				break;
			case SET:
				{
				alt241 = 3;
				}
				break;
			case NO:
				{
				alt241 = 4;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 241, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(241); }
			switch (alt241)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1202:4: RESTRICT
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1202, 4);
				RESTRICT518=(IToken)Match(input,RESTRICT,Follow._RESTRICT_in_reference_definition9966); if (state.failed) return retval;
				if (state.backtracking == 0) {
				RESTRICT518_tree = (object)adaptor.Create(RESTRICT518);
				adaptor.AddChild(root_0, RESTRICT518_tree);
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:1203:4: CASCADE
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1203, 4);
				CASCADE519=(IToken)Match(input,CASCADE,Follow._CASCADE_in_reference_definition9972); if (state.failed) return retval;
				if (state.backtracking == 0) {
				CASCADE519_tree = (object)adaptor.Create(CASCADE519);
				adaptor.AddChild(root_0, CASCADE519_tree);
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:1204:4: SET NULL
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1204, 4);
				SET520=(IToken)Match(input,SET,Follow._SET_in_reference_definition9979); if (state.failed) return retval;
				if (state.backtracking == 0) {
				SET520_tree = (object)adaptor.Create(SET520);
				adaptor.AddChild(root_0, SET520_tree);
				}
				DebugLocation(1204, 8);
				NULL521=(IToken)Match(input,NULL,Follow._NULL_in_reference_definition9981); if (state.failed) return retval;
				if (state.backtracking == 0) {
				NULL521_tree = (object)adaptor.Create(NULL521);
				adaptor.AddChild(root_0, NULL521_tree);
				}

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:1205:4: NO ACTION
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1205, 4);
				NO522=(IToken)Match(input,NO,Follow._NO_in_reference_definition9987); if (state.failed) return retval;
				if (state.backtracking == 0) {
				NO522_tree = (object)adaptor.Create(NO522);
				adaptor.AddChild(root_0, NO522_tree);
				}
				DebugLocation(1205, 7);
				ACTION523=(IToken)Match(input,ACTION,Follow._ACTION_in_reference_definition9989); if (state.failed) return retval;
				if (state.backtracking == 0) {
				ACTION523_tree = (object)adaptor.Create(ACTION523);
				adaptor.AddChild(root_0, ACTION523_tree);
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("reference_definition", 87);
			LeaveRule("reference_definition", 87);
			LeaveRule_reference_definition();
		}
		DebugLocation(1206, 1);
		} finally { DebugExitRule(GrammarFileName, "reference_definition"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "reference_definition"

	private sealed partial class functionCall_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public functionCall_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_functionCall();
	partial void LeaveRule_functionCall();

	// $ANTLR start "functionCall"
	// MySQL51Parser.g3:1209:1: functionCall : ( AVG LPAREN expr RPAREN -> ^( FUNC ^( AVG expr ) ) | BIT_AND LPAREN expr RPAREN -> ^( FUNC ^( BIT_AND expr ) ) | BIT_OR LPAREN expr RPAREN -> ^( FUNC ^( BIT_OR expr ) ) | BIT_XOR LPAREN expr RPAREN -> ^( FUNC ^( BIT_XOR expr ) ) | CAST LPAREN expr AS cast_data_type RPAREN -> ^( FUNC ^( CAST expr cast_data_type ) ) | CONCAT LPAREN exprList RPAREN -> ^( FUNC ^( CONCAT exprList ) ) | COUNT LPAREN MULT RPAREN -> ^( FUNC ^( COUNT_STAR[$MULT] ) ) | COUNT LPAREN expr RPAREN -> ^( FUNC ^( COUNT expr ) ) | COUNT LPAREN DISTINCT exprList RPAREN -> ^( FUNC ^( COUNT exprList DISTINCT ) ) | DATE_ADD LPAREN date= expr COMMA INTERVAL interval= expr timeUnit RPAREN -> ^( FUNC ^( DATE_ADD $date $interval timeUnit ) ) | DATE_SUB LPAREN date= expr COMMA INTERVAL interval= expr timeUnit RPAREN -> ^( FUNC ^( DATE_SUB $date $interval timeUnit ) ) | GROUP_CONCAT LPAREN ( DISTINCT )? exprList ( order_by )? ( SEPARATOR text_string )? RPAREN -> ^( FUNC ^( GROUP_CONCAT exprList ( DISTINCT )? ( order_by )? ( text_string )? ) ) | MAX LPAREN ( DISTINCT )? expr RPAREN -> ^( FUNC ^( MAX expr ( DISTINCT )? ) ) | MID LPAREN expr COMMA expr COMMA expr RPAREN -> ^( FUNC ^( MID ( expr )+ ) ) | MIN LPAREN ( DISTINCT )? expr RPAREN -> ^( FUNC ^( MIN expr ( DISTINCT )? ) ) | SESSION_USER LPAREN RPAREN -> ^( FUNC ^( SESSION_USER LPAREN ) ) | STD LPAREN expr RPAREN -> ^( FUNC ^( STD expr ) ) | STDDEV LPAREN expr RPAREN -> ^( FUNC ^( STDDEV expr ) ) | STDDEV_POP LPAREN expr RPAREN -> ^( FUNC ^( STDDEV_POP expr ) ) | STDDEV_SAMP LPAREN expr RPAREN -> ^( FUNC ^( STDDEV_SAMP expr ) ) | SUM LPAREN ( DISTINCT )? expr RPAREN -> ^( FUNC ^( SUM expr ( DISTINCT )? ) ) | SYSTEM_USER LPAREN RPAREN -> ^( FUNC ^( SYSTEM_USER LPAREN ) ) | TRIM LPAREN ( (pos= BOTH |pos= LEADING |pos= TRAILING ) (remstr= expr )? FROM str= expr -> ^( FUNC ^( TRIM $str ( $pos)? ( $remstr)? ) ) |str1= expr ( FROM str2= expr -> ^( FUNC ^( TRIM $str2 $str1) ) | -> ^( FUNC ^( TRIM $str1) ) ) ) RPAREN | VARIANCE LPAREN expr RPAREN -> ^( FUNC ^( VARIANCE expr ) ) | VAR_POP LPAREN expr RPAREN -> ^( FUNC ^( VAR_POP expr ) ) | VAR_SAMP LPAREN expr RPAREN -> ^( FUNC ^( VAR_SAMP expr ) ) | ADDDATE LPAREN date= expr COMMA ( ( INTERVAL )=> INTERVAL interval= expr timeUnit RPAREN -> ^( FUNC ^( ADDDATE $date $interval timeUnit ) ) |days= expr RPAREN -> ^( FUNC ^( ADDDATE $date $days) ) ) | CURDATE LPAREN RPAREN -> ^( FUNC ^( CURDATE LPAREN ) ) | CURRENT_DATE ( LPAREN RPAREN )? -> ^( FUNC ^( CURRENT_DATE ( LPAREN )? ) ) | CURTIME LPAREN RPAREN -> ^( FUNC ^( CURTIME LPAREN ) ) | CURRENT_TIME ( LPAREN RPAREN )? -> ^( FUNC ^( CURRENT_TIME ( LPAREN )? ) ) | EXTRACT LPAREN timeUnit FROM expr RPAREN -> ^( FUNC ^( EXTRACT timeUnit expr ) ) | GET_FORMAT LPAREN (type= DATE |type= TIME |type= DATETIME ) locale= expr RPAREN -> ^( FUNC ^( GET_FORMAT $type $locale) ) | NOW LPAREN RPAREN -> ^( FUNC ^( NOW LPAREN ) ) | CURRENT_TIMESTAMP ( LPAREN RPAREN )? -> ^( FUNC ^( CURRENT_TIMESTAMP ( LPAREN )? ) ) | POSITION LPAREN substr= expr IN str= expr RPAREN -> ^( FUNC ^( POSITION $substr $str) ) | SUBDATE LPAREN date= expr COMMA (days= expr -> ^( FUNC ^( SUBDATE $date $days) ) | ( INTERVAL )=> INTERVAL interval= expr timeUnit -> ^( FUNC ^( SUBDATE $date $interval timeUnit ) ) ) RPAREN | (funcName= SUBSTR |funcName= SUBSTRING ) LPAREN str= expr ( COMMA position= expr COMMA (len= expr )? -> ^( FUNC ^( $funcName $str $position ( $len)? ) ) | FROM position= expr ( FOR len= expr )? -> ^( FUNC ^( $funcName $str $position ( $len)? ( FROM )? ) ) ) RPAREN | SYSDATE LPAREN RPAREN -> ^( FUNC ^( SYSDATE LPAREN ) ) | TIMESTAMP_ADD LPAREN timestampUnit interval= expr date= expr RPAREN -> ^( FUNC ^( TIMESTAMP_ADD $date $interval timestampUnit ) ) | TIMESTAMP_DIFF LPAREN timestampUnit date1= expr date2= expr RPAREN -> ^( FUNC ^( TIMESTAMP_DIFF $date1 $date2 timestampUnit ) ) | UTC_DATE ( LPAREN RPAREN )? -> ^( FUNC ^( UTC_DATE ( LPAREN )? ) ) | UTC_TIMESTAMP ( LPAREN RPAREN )? -> ^( FUNC ^( UTC_TIMESTAMP ( LPAREN )? ) ) | UTC_TIME ( LPAREN RPAREN )? -> ^( FUNC ^( UTC_TIME ( LPAREN )? ) ) | functionCall_conflicts | functionCall_reserved |name= ID args= parenOptExprList -> ^( FUNC ^( $name $args) ) );
	[GrammarRule("functionCall")]
	private MySQL51Parser.functionCall_return functionCall()
	{
		EnterRule_functionCall();
		EnterRule("functionCall", 88);
		TraceIn("functionCall", 88);
		MySQL51Parser.functionCall_return retval = new MySQL51Parser.functionCall_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken pos = default(IToken);
		IToken type = default(IToken);
		IToken funcName = default(IToken);
		IToken name = default(IToken);
		IToken AVG524 = default(IToken);
		IToken LPAREN525 = default(IToken);
		IToken RPAREN527 = default(IToken);
		IToken BIT_AND528 = default(IToken);
		IToken LPAREN529 = default(IToken);
		IToken RPAREN531 = default(IToken);
		IToken BIT_OR532 = default(IToken);
		IToken LPAREN533 = default(IToken);
		IToken RPAREN535 = default(IToken);
		IToken BIT_XOR536 = default(IToken);
		IToken LPAREN537 = default(IToken);
		IToken RPAREN539 = default(IToken);
		IToken CAST540 = default(IToken);
		IToken LPAREN541 = default(IToken);
		IToken AS543 = default(IToken);
		IToken RPAREN545 = default(IToken);
		IToken CONCAT546 = default(IToken);
		IToken LPAREN547 = default(IToken);
		IToken RPAREN549 = default(IToken);
		IToken COUNT550 = default(IToken);
		IToken LPAREN551 = default(IToken);
		IToken MULT552 = default(IToken);
		IToken RPAREN553 = default(IToken);
		IToken COUNT554 = default(IToken);
		IToken LPAREN555 = default(IToken);
		IToken RPAREN557 = default(IToken);
		IToken COUNT558 = default(IToken);
		IToken LPAREN559 = default(IToken);
		IToken DISTINCT560 = default(IToken);
		IToken RPAREN562 = default(IToken);
		IToken DATE_ADD563 = default(IToken);
		IToken LPAREN564 = default(IToken);
		IToken COMMA565 = default(IToken);
		IToken INTERVAL566 = default(IToken);
		IToken RPAREN568 = default(IToken);
		IToken DATE_SUB569 = default(IToken);
		IToken LPAREN570 = default(IToken);
		IToken COMMA571 = default(IToken);
		IToken INTERVAL572 = default(IToken);
		IToken RPAREN574 = default(IToken);
		IToken GROUP_CONCAT575 = default(IToken);
		IToken LPAREN576 = default(IToken);
		IToken DISTINCT577 = default(IToken);
		IToken SEPARATOR580 = default(IToken);
		IToken RPAREN582 = default(IToken);
		IToken MAX583 = default(IToken);
		IToken LPAREN584 = default(IToken);
		IToken DISTINCT585 = default(IToken);
		IToken RPAREN587 = default(IToken);
		IToken MID588 = default(IToken);
		IToken LPAREN589 = default(IToken);
		IToken COMMA591 = default(IToken);
		IToken COMMA593 = default(IToken);
		IToken RPAREN595 = default(IToken);
		IToken MIN596 = default(IToken);
		IToken LPAREN597 = default(IToken);
		IToken DISTINCT598 = default(IToken);
		IToken RPAREN600 = default(IToken);
		IToken SESSION_USER601 = default(IToken);
		IToken LPAREN602 = default(IToken);
		IToken RPAREN603 = default(IToken);
		IToken STD604 = default(IToken);
		IToken LPAREN605 = default(IToken);
		IToken RPAREN607 = default(IToken);
		IToken STDDEV608 = default(IToken);
		IToken LPAREN609 = default(IToken);
		IToken RPAREN611 = default(IToken);
		IToken STDDEV_POP612 = default(IToken);
		IToken LPAREN613 = default(IToken);
		IToken RPAREN615 = default(IToken);
		IToken STDDEV_SAMP616 = default(IToken);
		IToken LPAREN617 = default(IToken);
		IToken RPAREN619 = default(IToken);
		IToken SUM620 = default(IToken);
		IToken LPAREN621 = default(IToken);
		IToken DISTINCT622 = default(IToken);
		IToken RPAREN624 = default(IToken);
		IToken SYSTEM_USER625 = default(IToken);
		IToken LPAREN626 = default(IToken);
		IToken RPAREN627 = default(IToken);
		IToken TRIM628 = default(IToken);
		IToken LPAREN629 = default(IToken);
		IToken FROM630 = default(IToken);
		IToken FROM631 = default(IToken);
		IToken RPAREN632 = default(IToken);
		IToken VARIANCE633 = default(IToken);
		IToken LPAREN634 = default(IToken);
		IToken RPAREN636 = default(IToken);
		IToken VAR_POP637 = default(IToken);
		IToken LPAREN638 = default(IToken);
		IToken RPAREN640 = default(IToken);
		IToken VAR_SAMP641 = default(IToken);
		IToken LPAREN642 = default(IToken);
		IToken RPAREN644 = default(IToken);
		IToken ADDDATE645 = default(IToken);
		IToken LPAREN646 = default(IToken);
		IToken COMMA647 = default(IToken);
		IToken INTERVAL648 = default(IToken);
		IToken RPAREN650 = default(IToken);
		IToken RPAREN651 = default(IToken);
		IToken CURDATE652 = default(IToken);
		IToken LPAREN653 = default(IToken);
		IToken RPAREN654 = default(IToken);
		IToken CURRENT_DATE655 = default(IToken);
		IToken LPAREN656 = default(IToken);
		IToken RPAREN657 = default(IToken);
		IToken CURTIME658 = default(IToken);
		IToken LPAREN659 = default(IToken);
		IToken RPAREN660 = default(IToken);
		IToken CURRENT_TIME661 = default(IToken);
		IToken LPAREN662 = default(IToken);
		IToken RPAREN663 = default(IToken);
		IToken EXTRACT664 = default(IToken);
		IToken LPAREN665 = default(IToken);
		IToken FROM667 = default(IToken);
		IToken RPAREN669 = default(IToken);
		IToken GET_FORMAT670 = default(IToken);
		IToken LPAREN671 = default(IToken);
		IToken RPAREN672 = default(IToken);
		IToken NOW673 = default(IToken);
		IToken LPAREN674 = default(IToken);
		IToken RPAREN675 = default(IToken);
		IToken CURRENT_TIMESTAMP676 = default(IToken);
		IToken LPAREN677 = default(IToken);
		IToken RPAREN678 = default(IToken);
		IToken POSITION679 = default(IToken);
		IToken LPAREN680 = default(IToken);
		IToken IN681 = default(IToken);
		IToken RPAREN682 = default(IToken);
		IToken SUBDATE683 = default(IToken);
		IToken LPAREN684 = default(IToken);
		IToken COMMA685 = default(IToken);
		IToken INTERVAL686 = default(IToken);
		IToken RPAREN688 = default(IToken);
		IToken LPAREN689 = default(IToken);
		IToken COMMA690 = default(IToken);
		IToken COMMA691 = default(IToken);
		IToken FROM692 = default(IToken);
		IToken FOR693 = default(IToken);
		IToken RPAREN694 = default(IToken);
		IToken SYSDATE695 = default(IToken);
		IToken LPAREN696 = default(IToken);
		IToken RPAREN697 = default(IToken);
		IToken TIMESTAMP_ADD698 = default(IToken);
		IToken LPAREN699 = default(IToken);
		IToken RPAREN701 = default(IToken);
		IToken TIMESTAMP_DIFF702 = default(IToken);
		IToken LPAREN703 = default(IToken);
		IToken RPAREN705 = default(IToken);
		IToken UTC_DATE706 = default(IToken);
		IToken LPAREN707 = default(IToken);
		IToken RPAREN708 = default(IToken);
		IToken UTC_TIMESTAMP709 = default(IToken);
		IToken LPAREN710 = default(IToken);
		IToken RPAREN711 = default(IToken);
		IToken UTC_TIME712 = default(IToken);
		IToken LPAREN713 = default(IToken);
		IToken RPAREN714 = default(IToken);
		MySQL51Parser.expr_return date = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return interval = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return remstr = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return str = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return str1 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return str2 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return days = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return locale = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return substr = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return position = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return len = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return date1 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return date2 = default(MySQL51Parser.expr_return);
		MySQL51Parser.parenOptExprList_return args = default(MySQL51Parser.parenOptExprList_return);
		MySQL51Parser.expr_return expr526 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr530 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr534 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr538 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr542 = default(MySQL51Parser.expr_return);
		MySQL51Parser.cast_data_type_return cast_data_type544 = default(MySQL51Parser.cast_data_type_return);
		MySQL51Parser.exprList_return exprList548 = default(MySQL51Parser.exprList_return);
		MySQL51Parser.expr_return expr556 = default(MySQL51Parser.expr_return);
		MySQL51Parser.exprList_return exprList561 = default(MySQL51Parser.exprList_return);
		MySQL51Parser.timeUnit_return timeUnit567 = default(MySQL51Parser.timeUnit_return);
		MySQL51Parser.timeUnit_return timeUnit573 = default(MySQL51Parser.timeUnit_return);
		MySQL51Parser.exprList_return exprList578 = default(MySQL51Parser.exprList_return);
		MySQL51Parser.order_by_return order_by579 = default(MySQL51Parser.order_by_return);
		MySQL51Parser.text_string_return text_string581 = default(MySQL51Parser.text_string_return);
		MySQL51Parser.expr_return expr586 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr590 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr592 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr594 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr599 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr606 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr610 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr614 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr618 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr623 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr635 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr639 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr643 = default(MySQL51Parser.expr_return);
		MySQL51Parser.timeUnit_return timeUnit649 = default(MySQL51Parser.timeUnit_return);
		MySQL51Parser.timeUnit_return timeUnit666 = default(MySQL51Parser.timeUnit_return);
		MySQL51Parser.expr_return expr668 = default(MySQL51Parser.expr_return);
		MySQL51Parser.timeUnit_return timeUnit687 = default(MySQL51Parser.timeUnit_return);
		MySQL51Parser.timestampUnit_return timestampUnit700 = default(MySQL51Parser.timestampUnit_return);
		MySQL51Parser.timestampUnit_return timestampUnit704 = default(MySQL51Parser.timestampUnit_return);
		MySQL51Parser.functionCall_conflicts_return functionCall_conflicts715 = default(MySQL51Parser.functionCall_conflicts_return);
		MySQL51Parser.functionCall_reserved_return functionCall_reserved716 = default(MySQL51Parser.functionCall_reserved_return);

		object pos_tree = default(object);
		object type_tree = default(object);
		object funcName_tree = default(object);
		object name_tree = default(object);
		object AVG524_tree = default(object);
		object LPAREN525_tree = default(object);
		object RPAREN527_tree = default(object);
		object BIT_AND528_tree = default(object);
		object LPAREN529_tree = default(object);
		object RPAREN531_tree = default(object);
		object BIT_OR532_tree = default(object);
		object LPAREN533_tree = default(object);
		object RPAREN535_tree = default(object);
		object BIT_XOR536_tree = default(object);
		object LPAREN537_tree = default(object);
		object RPAREN539_tree = default(object);
		object CAST540_tree = default(object);
		object LPAREN541_tree = default(object);
		object AS543_tree = default(object);
		object RPAREN545_tree = default(object);
		object CONCAT546_tree = default(object);
		object LPAREN547_tree = default(object);
		object RPAREN549_tree = default(object);
		object COUNT550_tree = default(object);
		object LPAREN551_tree = default(object);
		object MULT552_tree = default(object);
		object RPAREN553_tree = default(object);
		object COUNT554_tree = default(object);
		object LPAREN555_tree = default(object);
		object RPAREN557_tree = default(object);
		object COUNT558_tree = default(object);
		object LPAREN559_tree = default(object);
		object DISTINCT560_tree = default(object);
		object RPAREN562_tree = default(object);
		object DATE_ADD563_tree = default(object);
		object LPAREN564_tree = default(object);
		object COMMA565_tree = default(object);
		object INTERVAL566_tree = default(object);
		object RPAREN568_tree = default(object);
		object DATE_SUB569_tree = default(object);
		object LPAREN570_tree = default(object);
		object COMMA571_tree = default(object);
		object INTERVAL572_tree = default(object);
		object RPAREN574_tree = default(object);
		object GROUP_CONCAT575_tree = default(object);
		object LPAREN576_tree = default(object);
		object DISTINCT577_tree = default(object);
		object SEPARATOR580_tree = default(object);
		object RPAREN582_tree = default(object);
		object MAX583_tree = default(object);
		object LPAREN584_tree = default(object);
		object DISTINCT585_tree = default(object);
		object RPAREN587_tree = default(object);
		object MID588_tree = default(object);
		object LPAREN589_tree = default(object);
		object COMMA591_tree = default(object);
		object COMMA593_tree = default(object);
		object RPAREN595_tree = default(object);
		object MIN596_tree = default(object);
		object LPAREN597_tree = default(object);
		object DISTINCT598_tree = default(object);
		object RPAREN600_tree = default(object);
		object SESSION_USER601_tree = default(object);
		object LPAREN602_tree = default(object);
		object RPAREN603_tree = default(object);
		object STD604_tree = default(object);
		object LPAREN605_tree = default(object);
		object RPAREN607_tree = default(object);
		object STDDEV608_tree = default(object);
		object LPAREN609_tree = default(object);
		object RPAREN611_tree = default(object);
		object STDDEV_POP612_tree = default(object);
		object LPAREN613_tree = default(object);
		object RPAREN615_tree = default(object);
		object STDDEV_SAMP616_tree = default(object);
		object LPAREN617_tree = default(object);
		object RPAREN619_tree = default(object);
		object SUM620_tree = default(object);
		object LPAREN621_tree = default(object);
		object DISTINCT622_tree = default(object);
		object RPAREN624_tree = default(object);
		object SYSTEM_USER625_tree = default(object);
		object LPAREN626_tree = default(object);
		object RPAREN627_tree = default(object);
		object TRIM628_tree = default(object);
		object LPAREN629_tree = default(object);
		object FROM630_tree = default(object);
		object FROM631_tree = default(object);
		object RPAREN632_tree = default(object);
		object VARIANCE633_tree = default(object);
		object LPAREN634_tree = default(object);
		object RPAREN636_tree = default(object);
		object VAR_POP637_tree = default(object);
		object LPAREN638_tree = default(object);
		object RPAREN640_tree = default(object);
		object VAR_SAMP641_tree = default(object);
		object LPAREN642_tree = default(object);
		object RPAREN644_tree = default(object);
		object ADDDATE645_tree = default(object);
		object LPAREN646_tree = default(object);
		object COMMA647_tree = default(object);
		object INTERVAL648_tree = default(object);
		object RPAREN650_tree = default(object);
		object RPAREN651_tree = default(object);
		object CURDATE652_tree = default(object);
		object LPAREN653_tree = default(object);
		object RPAREN654_tree = default(object);
		object CURRENT_DATE655_tree = default(object);
		object LPAREN656_tree = default(object);
		object RPAREN657_tree = default(object);
		object CURTIME658_tree = default(object);
		object LPAREN659_tree = default(object);
		object RPAREN660_tree = default(object);
		object CURRENT_TIME661_tree = default(object);
		object LPAREN662_tree = default(object);
		object RPAREN663_tree = default(object);
		object EXTRACT664_tree = default(object);
		object LPAREN665_tree = default(object);
		object FROM667_tree = default(object);
		object RPAREN669_tree = default(object);
		object GET_FORMAT670_tree = default(object);
		object LPAREN671_tree = default(object);
		object RPAREN672_tree = default(object);
		object NOW673_tree = default(object);
		object LPAREN674_tree = default(object);
		object RPAREN675_tree = default(object);
		object CURRENT_TIMESTAMP676_tree = default(object);
		object LPAREN677_tree = default(object);
		object RPAREN678_tree = default(object);
		object POSITION679_tree = default(object);
		object LPAREN680_tree = default(object);
		object IN681_tree = default(object);
		object RPAREN682_tree = default(object);
		object SUBDATE683_tree = default(object);
		object LPAREN684_tree = default(object);
		object COMMA685_tree = default(object);
		object INTERVAL686_tree = default(object);
		object RPAREN688_tree = default(object);
		object LPAREN689_tree = default(object);
		object COMMA690_tree = default(object);
		object COMMA691_tree = default(object);
		object FROM692_tree = default(object);
		object FOR693_tree = default(object);
		object RPAREN694_tree = default(object);
		object SYSDATE695_tree = default(object);
		object LPAREN696_tree = default(object);
		object RPAREN697_tree = default(object);
		object TIMESTAMP_ADD698_tree = default(object);
		object LPAREN699_tree = default(object);
		object RPAREN701_tree = default(object);
		object TIMESTAMP_DIFF702_tree = default(object);
		object LPAREN703_tree = default(object);
		object RPAREN705_tree = default(object);
		object UTC_DATE706_tree = default(object);
		object LPAREN707_tree = default(object);
		object RPAREN708_tree = default(object);
		object UTC_TIMESTAMP709_tree = default(object);
		object LPAREN710_tree = default(object);
		object RPAREN711_tree = default(object);
		object UTC_TIME712_tree = default(object);
		object LPAREN713_tree = default(object);
		object RPAREN714_tree = default(object);
		RewriteRuleITokenStream stream_AVG=new RewriteRuleITokenStream(adaptor,"token AVG");
		RewriteRuleITokenStream stream_LPAREN=new RewriteRuleITokenStream(adaptor,"token LPAREN");
		RewriteRuleITokenStream stream_RPAREN=new RewriteRuleITokenStream(adaptor,"token RPAREN");
		RewriteRuleITokenStream stream_BIT_AND=new RewriteRuleITokenStream(adaptor,"token BIT_AND");
		RewriteRuleITokenStream stream_BIT_OR=new RewriteRuleITokenStream(adaptor,"token BIT_OR");
		RewriteRuleITokenStream stream_BIT_XOR=new RewriteRuleITokenStream(adaptor,"token BIT_XOR");
		RewriteRuleITokenStream stream_CAST=new RewriteRuleITokenStream(adaptor,"token CAST");
		RewriteRuleITokenStream stream_AS=new RewriteRuleITokenStream(adaptor,"token AS");
		RewriteRuleITokenStream stream_CONCAT=new RewriteRuleITokenStream(adaptor,"token CONCAT");
		RewriteRuleITokenStream stream_COUNT=new RewriteRuleITokenStream(adaptor,"token COUNT");
		RewriteRuleITokenStream stream_MULT=new RewriteRuleITokenStream(adaptor,"token MULT");
		RewriteRuleITokenStream stream_DISTINCT=new RewriteRuleITokenStream(adaptor,"token DISTINCT");
		RewriteRuleITokenStream stream_DATE_ADD=new RewriteRuleITokenStream(adaptor,"token DATE_ADD");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleITokenStream stream_INTERVAL=new RewriteRuleITokenStream(adaptor,"token INTERVAL");
		RewriteRuleITokenStream stream_DATE_SUB=new RewriteRuleITokenStream(adaptor,"token DATE_SUB");
		RewriteRuleITokenStream stream_GROUP_CONCAT=new RewriteRuleITokenStream(adaptor,"token GROUP_CONCAT");
		RewriteRuleITokenStream stream_SEPARATOR=new RewriteRuleITokenStream(adaptor,"token SEPARATOR");
		RewriteRuleITokenStream stream_MAX=new RewriteRuleITokenStream(adaptor,"token MAX");
		RewriteRuleITokenStream stream_MID=new RewriteRuleITokenStream(adaptor,"token MID");
		RewriteRuleITokenStream stream_MIN=new RewriteRuleITokenStream(adaptor,"token MIN");
		RewriteRuleITokenStream stream_SESSION_USER=new RewriteRuleITokenStream(adaptor,"token SESSION_USER");
		RewriteRuleITokenStream stream_STD=new RewriteRuleITokenStream(adaptor,"token STD");
		RewriteRuleITokenStream stream_STDDEV=new RewriteRuleITokenStream(adaptor,"token STDDEV");
		RewriteRuleITokenStream stream_STDDEV_POP=new RewriteRuleITokenStream(adaptor,"token STDDEV_POP");
		RewriteRuleITokenStream stream_STDDEV_SAMP=new RewriteRuleITokenStream(adaptor,"token STDDEV_SAMP");
		RewriteRuleITokenStream stream_SUM=new RewriteRuleITokenStream(adaptor,"token SUM");
		RewriteRuleITokenStream stream_SYSTEM_USER=new RewriteRuleITokenStream(adaptor,"token SYSTEM_USER");
		RewriteRuleITokenStream stream_TRIM=new RewriteRuleITokenStream(adaptor,"token TRIM");
		RewriteRuleITokenStream stream_BOTH=new RewriteRuleITokenStream(adaptor,"token BOTH");
		RewriteRuleITokenStream stream_LEADING=new RewriteRuleITokenStream(adaptor,"token LEADING");
		RewriteRuleITokenStream stream_TRAILING=new RewriteRuleITokenStream(adaptor,"token TRAILING");
		RewriteRuleITokenStream stream_FROM=new RewriteRuleITokenStream(adaptor,"token FROM");
		RewriteRuleITokenStream stream_VARIANCE=new RewriteRuleITokenStream(adaptor,"token VARIANCE");
		RewriteRuleITokenStream stream_VAR_POP=new RewriteRuleITokenStream(adaptor,"token VAR_POP");
		RewriteRuleITokenStream stream_VAR_SAMP=new RewriteRuleITokenStream(adaptor,"token VAR_SAMP");
		RewriteRuleITokenStream stream_ADDDATE=new RewriteRuleITokenStream(adaptor,"token ADDDATE");
		RewriteRuleITokenStream stream_CURDATE=new RewriteRuleITokenStream(adaptor,"token CURDATE");
		RewriteRuleITokenStream stream_CURRENT_DATE=new RewriteRuleITokenStream(adaptor,"token CURRENT_DATE");
		RewriteRuleITokenStream stream_CURTIME=new RewriteRuleITokenStream(adaptor,"token CURTIME");
		RewriteRuleITokenStream stream_CURRENT_TIME=new RewriteRuleITokenStream(adaptor,"token CURRENT_TIME");
		RewriteRuleITokenStream stream_EXTRACT=new RewriteRuleITokenStream(adaptor,"token EXTRACT");
		RewriteRuleITokenStream stream_GET_FORMAT=new RewriteRuleITokenStream(adaptor,"token GET_FORMAT");
		RewriteRuleITokenStream stream_DATE=new RewriteRuleITokenStream(adaptor,"token DATE");
		RewriteRuleITokenStream stream_TIME=new RewriteRuleITokenStream(adaptor,"token TIME");
		RewriteRuleITokenStream stream_DATETIME=new RewriteRuleITokenStream(adaptor,"token DATETIME");
		RewriteRuleITokenStream stream_NOW=new RewriteRuleITokenStream(adaptor,"token NOW");
		RewriteRuleITokenStream stream_CURRENT_TIMESTAMP=new RewriteRuleITokenStream(adaptor,"token CURRENT_TIMESTAMP");
		RewriteRuleITokenStream stream_POSITION=new RewriteRuleITokenStream(adaptor,"token POSITION");
		RewriteRuleITokenStream stream_IN=new RewriteRuleITokenStream(adaptor,"token IN");
		RewriteRuleITokenStream stream_SUBDATE=new RewriteRuleITokenStream(adaptor,"token SUBDATE");
		RewriteRuleITokenStream stream_SUBSTR=new RewriteRuleITokenStream(adaptor,"token SUBSTR");
		RewriteRuleITokenStream stream_SUBSTRING=new RewriteRuleITokenStream(adaptor,"token SUBSTRING");
		RewriteRuleITokenStream stream_FOR=new RewriteRuleITokenStream(adaptor,"token FOR");
		RewriteRuleITokenStream stream_SYSDATE=new RewriteRuleITokenStream(adaptor,"token SYSDATE");
		RewriteRuleITokenStream stream_TIMESTAMP_ADD=new RewriteRuleITokenStream(adaptor,"token TIMESTAMP_ADD");
		RewriteRuleITokenStream stream_TIMESTAMP_DIFF=new RewriteRuleITokenStream(adaptor,"token TIMESTAMP_DIFF");
		RewriteRuleITokenStream stream_UTC_DATE=new RewriteRuleITokenStream(adaptor,"token UTC_DATE");
		RewriteRuleITokenStream stream_UTC_TIMESTAMP=new RewriteRuleITokenStream(adaptor,"token UTC_TIMESTAMP");
		RewriteRuleITokenStream stream_UTC_TIME=new RewriteRuleITokenStream(adaptor,"token UTC_TIME");
		RewriteRuleITokenStream stream_ID=new RewriteRuleITokenStream(adaptor,"token ID");
		RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr");
		RewriteRuleSubtreeStream stream_cast_data_type=new RewriteRuleSubtreeStream(adaptor,"rule cast_data_type");
		RewriteRuleSubtreeStream stream_exprList=new RewriteRuleSubtreeStream(adaptor,"rule exprList");
		RewriteRuleSubtreeStream stream_timeUnit=new RewriteRuleSubtreeStream(adaptor,"rule timeUnit");
		RewriteRuleSubtreeStream stream_order_by=new RewriteRuleSubtreeStream(adaptor,"rule order_by");
		RewriteRuleSubtreeStream stream_text_string=new RewriteRuleSubtreeStream(adaptor,"rule text_string");
		RewriteRuleSubtreeStream stream_timestampUnit=new RewriteRuleSubtreeStream(adaptor,"rule timestampUnit");
		RewriteRuleSubtreeStream stream_parenOptExprList=new RewriteRuleSubtreeStream(adaptor,"rule parenOptExprList");
		try { DebugEnterRule(GrammarFileName, "functionCall");
		DebugLocation(1209, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1210:2: ( AVG LPAREN expr RPAREN -> ^( FUNC ^( AVG expr ) ) | BIT_AND LPAREN expr RPAREN -> ^( FUNC ^( BIT_AND expr ) ) | BIT_OR LPAREN expr RPAREN -> ^( FUNC ^( BIT_OR expr ) ) | BIT_XOR LPAREN expr RPAREN -> ^( FUNC ^( BIT_XOR expr ) ) | CAST LPAREN expr AS cast_data_type RPAREN -> ^( FUNC ^( CAST expr cast_data_type ) ) | CONCAT LPAREN exprList RPAREN -> ^( FUNC ^( CONCAT exprList ) ) | COUNT LPAREN MULT RPAREN -> ^( FUNC ^( COUNT_STAR[$MULT] ) ) | COUNT LPAREN expr RPAREN -> ^( FUNC ^( COUNT expr ) ) | COUNT LPAREN DISTINCT exprList RPAREN -> ^( FUNC ^( COUNT exprList DISTINCT ) ) | DATE_ADD LPAREN date= expr COMMA INTERVAL interval= expr timeUnit RPAREN -> ^( FUNC ^( DATE_ADD $date $interval timeUnit ) ) | DATE_SUB LPAREN date= expr COMMA INTERVAL interval= expr timeUnit RPAREN -> ^( FUNC ^( DATE_SUB $date $interval timeUnit ) ) | GROUP_CONCAT LPAREN ( DISTINCT )? exprList ( order_by )? ( SEPARATOR text_string )? RPAREN -> ^( FUNC ^( GROUP_CONCAT exprList ( DISTINCT )? ( order_by )? ( text_string )? ) ) | MAX LPAREN ( DISTINCT )? expr RPAREN -> ^( FUNC ^( MAX expr ( DISTINCT )? ) ) | MID LPAREN expr COMMA expr COMMA expr RPAREN -> ^( FUNC ^( MID ( expr )+ ) ) | MIN LPAREN ( DISTINCT )? expr RPAREN -> ^( FUNC ^( MIN expr ( DISTINCT )? ) ) | SESSION_USER LPAREN RPAREN -> ^( FUNC ^( SESSION_USER LPAREN ) ) | STD LPAREN expr RPAREN -> ^( FUNC ^( STD expr ) ) | STDDEV LPAREN expr RPAREN -> ^( FUNC ^( STDDEV expr ) ) | STDDEV_POP LPAREN expr RPAREN -> ^( FUNC ^( STDDEV_POP expr ) ) | STDDEV_SAMP LPAREN expr RPAREN -> ^( FUNC ^( STDDEV_SAMP expr ) ) | SUM LPAREN ( DISTINCT )? expr RPAREN -> ^( FUNC ^( SUM expr ( DISTINCT )? ) ) | SYSTEM_USER LPAREN RPAREN -> ^( FUNC ^( SYSTEM_USER LPAREN ) ) | TRIM LPAREN ( (pos= BOTH |pos= LEADING |pos= TRAILING ) (remstr= expr )? FROM str= expr -> ^( FUNC ^( TRIM $str ( $pos)? ( $remstr)? ) ) |str1= expr ( FROM str2= expr -> ^( FUNC ^( TRIM $str2 $str1) ) | -> ^( FUNC ^( TRIM $str1) ) ) ) RPAREN | VARIANCE LPAREN expr RPAREN -> ^( FUNC ^( VARIANCE expr ) ) | VAR_POP LPAREN expr RPAREN -> ^( FUNC ^( VAR_POP expr ) ) | VAR_SAMP LPAREN expr RPAREN -> ^( FUNC ^( VAR_SAMP expr ) ) | ADDDATE LPAREN date= expr COMMA ( ( INTERVAL )=> INTERVAL interval= expr timeUnit RPAREN -> ^( FUNC ^( ADDDATE $date $interval timeUnit ) ) |days= expr RPAREN -> ^( FUNC ^( ADDDATE $date $days) ) ) | CURDATE LPAREN RPAREN -> ^( FUNC ^( CURDATE LPAREN ) ) | CURRENT_DATE ( LPAREN RPAREN )? -> ^( FUNC ^( CURRENT_DATE ( LPAREN )? ) ) | CURTIME LPAREN RPAREN -> ^( FUNC ^( CURTIME LPAREN ) ) | CURRENT_TIME ( LPAREN RPAREN )? -> ^( FUNC ^( CURRENT_TIME ( LPAREN )? ) ) | EXTRACT LPAREN timeUnit FROM expr RPAREN -> ^( FUNC ^( EXTRACT timeUnit expr ) ) | GET_FORMAT LPAREN (type= DATE |type= TIME |type= DATETIME ) locale= expr RPAREN -> ^( FUNC ^( GET_FORMAT $type $locale) ) | NOW LPAREN RPAREN -> ^( FUNC ^( NOW LPAREN ) ) | CURRENT_TIMESTAMP ( LPAREN RPAREN )? -> ^( FUNC ^( CURRENT_TIMESTAMP ( LPAREN )? ) ) | POSITION LPAREN substr= expr IN str= expr RPAREN -> ^( FUNC ^( POSITION $substr $str) ) | SUBDATE LPAREN date= expr COMMA (days= expr -> ^( FUNC ^( SUBDATE $date $days) ) | ( INTERVAL )=> INTERVAL interval= expr timeUnit -> ^( FUNC ^( SUBDATE $date $interval timeUnit ) ) ) RPAREN | (funcName= SUBSTR |funcName= SUBSTRING ) LPAREN str= expr ( COMMA position= expr COMMA (len= expr )? -> ^( FUNC ^( $funcName $str $position ( $len)? ) ) | FROM position= expr ( FOR len= expr )? -> ^( FUNC ^( $funcName $str $position ( $len)? ( FROM )? ) ) ) RPAREN | SYSDATE LPAREN RPAREN -> ^( FUNC ^( SYSDATE LPAREN ) ) | TIMESTAMP_ADD LPAREN timestampUnit interval= expr date= expr RPAREN -> ^( FUNC ^( TIMESTAMP_ADD $date $interval timestampUnit ) ) | TIMESTAMP_DIFF LPAREN timestampUnit date1= expr date2= expr RPAREN -> ^( FUNC ^( TIMESTAMP_DIFF $date1 $date2 timestampUnit ) ) | UTC_DATE ( LPAREN RPAREN )? -> ^( FUNC ^( UTC_DATE ( LPAREN )? ) ) | UTC_TIMESTAMP ( LPAREN RPAREN )? -> ^( FUNC ^( UTC_TIMESTAMP ( LPAREN )? ) ) | UTC_TIME ( LPAREN RPAREN )? -> ^( FUNC ^( UTC_TIME ( LPAREN )? ) ) | functionCall_conflicts | functionCall_reserved |name= ID args= parenOptExprList -> ^( FUNC ^( $name $args) ) )
			int alt265=47;
			try { DebugEnterDecision(265, false);
			try
			{
				alt265 = dfa265.Predict(input);
			}
			catch (NoViableAltException nvae)
			{
				DebugRecognitionException(nvae);
				throw;
			}
			} finally { DebugExitDecision(265); }
			switch (alt265)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1211:4: AVG LPAREN expr RPAREN
				{
				DebugLocation(1211, 4);
				AVG524=(IToken)Match(input,AVG,Follow._AVG_in_functionCall10007); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_AVG.Add(AVG524);

				DebugLocation(1211, 8);
				LPAREN525=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10009); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN525);

				DebugLocation(1211, 15);
				PushFollow(Follow._expr_in_functionCall10011);
				expr526=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr526.Tree);
				DebugLocation(1211, 20);
				RPAREN527=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10013); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN527);



				{
				// AST REWRITE
				// elements: AVG, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1211:31: -> ^( FUNC ^( AVG expr ) )
				{
					DebugLocation(1211, 34);
					// MySQL51Parser.g3:1211:34: ^( FUNC ^( AVG expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1211, 36);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1211, 41);
					// MySQL51Parser.g3:1211:41: ^( AVG expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1211, 43);
					root_2 = (object)adaptor.BecomeRoot(stream_AVG.NextNode(), root_2);

					DebugLocation(1211, 47);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:1212:4: BIT_AND LPAREN expr RPAREN
				{
				DebugLocation(1212, 4);
				BIT_AND528=(IToken)Match(input,BIT_AND,Follow._BIT_AND_in_functionCall10034); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_BIT_AND.Add(BIT_AND528);

				DebugLocation(1212, 12);
				LPAREN529=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10036); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN529);

				DebugLocation(1212, 19);
				PushFollow(Follow._expr_in_functionCall10038);
				expr530=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr530.Tree);
				DebugLocation(1212, 24);
				RPAREN531=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10040); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN531);



				{
				// AST REWRITE
				// elements: BIT_AND, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1212:32: -> ^( FUNC ^( BIT_AND expr ) )
				{
					DebugLocation(1212, 35);
					// MySQL51Parser.g3:1212:35: ^( FUNC ^( BIT_AND expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1212, 37);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1212, 42);
					// MySQL51Parser.g3:1212:42: ^( BIT_AND expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1212, 44);
					root_2 = (object)adaptor.BecomeRoot(stream_BIT_AND.NextNode(), root_2);

					DebugLocation(1212, 52);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:1213:4: BIT_OR LPAREN expr RPAREN
				{
				DebugLocation(1213, 4);
				BIT_OR532=(IToken)Match(input,BIT_OR,Follow._BIT_OR_in_functionCall10058); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_BIT_OR.Add(BIT_OR532);

				DebugLocation(1213, 11);
				LPAREN533=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10060); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN533);

				DebugLocation(1213, 18);
				PushFollow(Follow._expr_in_functionCall10062);
				expr534=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr534.Tree);
				DebugLocation(1213, 23);
				RPAREN535=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10064); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN535);



				{
				// AST REWRITE
				// elements: BIT_OR, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1213:31: -> ^( FUNC ^( BIT_OR expr ) )
				{
					DebugLocation(1213, 34);
					// MySQL51Parser.g3:1213:34: ^( FUNC ^( BIT_OR expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1213, 36);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1213, 41);
					// MySQL51Parser.g3:1213:41: ^( BIT_OR expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1213, 43);
					root_2 = (object)adaptor.BecomeRoot(stream_BIT_OR.NextNode(), root_2);

					DebugLocation(1213, 50);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:1214:4: BIT_XOR LPAREN expr RPAREN
				{
				DebugLocation(1214, 4);
				BIT_XOR536=(IToken)Match(input,BIT_XOR,Follow._BIT_XOR_in_functionCall10082); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_BIT_XOR.Add(BIT_XOR536);

				DebugLocation(1214, 12);
				LPAREN537=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10084); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN537);

				DebugLocation(1214, 19);
				PushFollow(Follow._expr_in_functionCall10086);
				expr538=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr538.Tree);
				DebugLocation(1214, 24);
				RPAREN539=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10088); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN539);



				{
				// AST REWRITE
				// elements: BIT_XOR, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1214:32: -> ^( FUNC ^( BIT_XOR expr ) )
				{
					DebugLocation(1214, 35);
					// MySQL51Parser.g3:1214:35: ^( FUNC ^( BIT_XOR expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1214, 37);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1214, 42);
					// MySQL51Parser.g3:1214:42: ^( BIT_XOR expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1214, 44);
					root_2 = (object)adaptor.BecomeRoot(stream_BIT_XOR.NextNode(), root_2);

					DebugLocation(1214, 52);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 5:
				DebugEnterAlt(5);
				// MySQL51Parser.g3:1215:4: CAST LPAREN expr AS cast_data_type RPAREN
				{
				DebugLocation(1215, 4);
				CAST540=(IToken)Match(input,CAST,Follow._CAST_in_functionCall10106); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CAST.Add(CAST540);

				DebugLocation(1215, 9);
				LPAREN541=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10108); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN541);

				DebugLocation(1215, 16);
				PushFollow(Follow._expr_in_functionCall10110);
				expr542=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr542.Tree);
				DebugLocation(1215, 21);
				AS543=(IToken)Match(input,AS,Follow._AS_in_functionCall10112); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_AS.Add(AS543);

				DebugLocation(1215, 24);
				PushFollow(Follow._cast_data_type_in_functionCall10114);
				cast_data_type544=cast_data_type();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_cast_data_type.Add(cast_data_type544.Tree);
				DebugLocation(1215, 39);
				RPAREN545=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10116); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN545);



				{
				// AST REWRITE
				// elements: CAST, expr, cast_data_type
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1215:49: -> ^( FUNC ^( CAST expr cast_data_type ) )
				{
					DebugLocation(1215, 52);
					// MySQL51Parser.g3:1215:52: ^( FUNC ^( CAST expr cast_data_type ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1215, 54);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1215, 59);
					// MySQL51Parser.g3:1215:59: ^( CAST expr cast_data_type )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1215, 61);
					root_2 = (object)adaptor.BecomeRoot(stream_CAST.NextNode(), root_2);

					DebugLocation(1215, 66);
					adaptor.AddChild(root_2, stream_expr.NextTree());
					DebugLocation(1215, 71);
					adaptor.AddChild(root_2, stream_cast_data_type.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 6:
				DebugEnterAlt(6);
				// MySQL51Parser.g3:1216:4: CONCAT LPAREN exprList RPAREN
				{
				DebugLocation(1216, 4);
				CONCAT546=(IToken)Match(input,CONCAT,Follow._CONCAT_in_functionCall10138); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CONCAT.Add(CONCAT546);

				DebugLocation(1216, 11);
				LPAREN547=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10140); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN547);

				DebugLocation(1216, 18);
				PushFollow(Follow._exprList_in_functionCall10142);
				exprList548=exprList();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_exprList.Add(exprList548.Tree);
				DebugLocation(1216, 27);
				RPAREN549=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10144); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN549);



				{
				// AST REWRITE
				// elements: CONCAT, exprList
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1216:35: -> ^( FUNC ^( CONCAT exprList ) )
				{
					DebugLocation(1216, 38);
					// MySQL51Parser.g3:1216:38: ^( FUNC ^( CONCAT exprList ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1216, 40);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1216, 45);
					// MySQL51Parser.g3:1216:45: ^( CONCAT exprList )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1216, 47);
					root_2 = (object)adaptor.BecomeRoot(stream_CONCAT.NextNode(), root_2);

					DebugLocation(1216, 54);
					adaptor.AddChild(root_2, stream_exprList.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 7:
				DebugEnterAlt(7);
				// MySQL51Parser.g3:1217:4: COUNT LPAREN MULT RPAREN
				{
				DebugLocation(1217, 4);
				COUNT550=(IToken)Match(input,COUNT,Follow._COUNT_in_functionCall10162); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COUNT.Add(COUNT550);

				DebugLocation(1217, 10);
				LPAREN551=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10164); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN551);

				DebugLocation(1217, 17);
				MULT552=(IToken)Match(input,MULT,Follow._MULT_in_functionCall10166); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_MULT.Add(MULT552);

				DebugLocation(1217, 22);
				RPAREN553=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10168); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN553);



				{
				// AST REWRITE
				// elements: 
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1217:30: -> ^( FUNC ^( COUNT_STAR[$MULT] ) )
				{
					DebugLocation(1217, 33);
					// MySQL51Parser.g3:1217:33: ^( FUNC ^( COUNT_STAR[$MULT] ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1217, 35);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1217, 40);
					// MySQL51Parser.g3:1217:40: ^( COUNT_STAR[$MULT] )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1217, 42);
					root_2 = (object)adaptor.BecomeRoot((object)adaptor.Create(COUNT_STAR, MULT552), root_2);

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 8:
				DebugEnterAlt(8);
				// MySQL51Parser.g3:1218:4: COUNT LPAREN expr RPAREN
				{
				DebugLocation(1218, 4);
				COUNT554=(IToken)Match(input,COUNT,Follow._COUNT_in_functionCall10186); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COUNT.Add(COUNT554);

				DebugLocation(1218, 10);
				LPAREN555=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10188); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN555);

				DebugLocation(1218, 17);
				PushFollow(Follow._expr_in_functionCall10190);
				expr556=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr556.Tree);
				DebugLocation(1218, 22);
				RPAREN557=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10192); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN557);



				{
				// AST REWRITE
				// elements: COUNT, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1218:30: -> ^( FUNC ^( COUNT expr ) )
				{
					DebugLocation(1218, 33);
					// MySQL51Parser.g3:1218:33: ^( FUNC ^( COUNT expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1218, 35);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1218, 40);
					// MySQL51Parser.g3:1218:40: ^( COUNT expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1218, 42);
					root_2 = (object)adaptor.BecomeRoot(stream_COUNT.NextNode(), root_2);

					DebugLocation(1218, 48);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 9:
				DebugEnterAlt(9);
				// MySQL51Parser.g3:1219:4: COUNT LPAREN DISTINCT exprList RPAREN
				{
				DebugLocation(1219, 4);
				COUNT558=(IToken)Match(input,COUNT,Follow._COUNT_in_functionCall10211); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COUNT.Add(COUNT558);

				DebugLocation(1219, 10);
				LPAREN559=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10213); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN559);

				DebugLocation(1219, 17);
				DISTINCT560=(IToken)Match(input,DISTINCT,Follow._DISTINCT_in_functionCall10215); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_DISTINCT.Add(DISTINCT560);

				DebugLocation(1219, 26);
				PushFollow(Follow._exprList_in_functionCall10217);
				exprList561=exprList();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_exprList.Add(exprList561.Tree);
				DebugLocation(1219, 35);
				RPAREN562=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10219); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN562);



				{
				// AST REWRITE
				// elements: COUNT, exprList, DISTINCT
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1219:43: -> ^( FUNC ^( COUNT exprList DISTINCT ) )
				{
					DebugLocation(1219, 46);
					// MySQL51Parser.g3:1219:46: ^( FUNC ^( COUNT exprList DISTINCT ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1219, 48);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1219, 53);
					// MySQL51Parser.g3:1219:53: ^( COUNT exprList DISTINCT )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1219, 55);
					root_2 = (object)adaptor.BecomeRoot(stream_COUNT.NextNode(), root_2);

					DebugLocation(1219, 61);
					adaptor.AddChild(root_2, stream_exprList.NextTree());
					DebugLocation(1219, 70);
					adaptor.AddChild(root_2, stream_DISTINCT.NextNode());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 10:
				DebugEnterAlt(10);
				// MySQL51Parser.g3:1220:4: DATE_ADD LPAREN date= expr COMMA INTERVAL interval= expr timeUnit RPAREN
				{
				DebugLocation(1220, 4);
				DATE_ADD563=(IToken)Match(input,DATE_ADD,Follow._DATE_ADD_in_functionCall10239); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_DATE_ADD.Add(DATE_ADD563);

				DebugLocation(1220, 13);
				LPAREN564=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10241); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN564);

				DebugLocation(1220, 24);
				PushFollow(Follow._expr_in_functionCall10245);
				date=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(date.Tree);
				DebugLocation(1220, 30);
				COMMA565=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall10247); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA565);

				DebugLocation(1220, 36);
				INTERVAL566=(IToken)Match(input,INTERVAL,Follow._INTERVAL_in_functionCall10249); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_INTERVAL.Add(INTERVAL566);

				DebugLocation(1220, 53);
				PushFollow(Follow._expr_in_functionCall10253);
				interval=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(interval.Tree);
				DebugLocation(1220, 59);
				PushFollow(Follow._timeUnit_in_functionCall10255);
				timeUnit567=timeUnit();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_timeUnit.Add(timeUnit567.Tree);
				DebugLocation(1220, 68);
				RPAREN568=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10257); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN568);



				{
				// AST REWRITE
				// elements: DATE_ADD, date, interval, timeUnit
				// token labels: 
				// rule labels: date, interval, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_date=new RewriteRuleSubtreeStream(adaptor,"rule date",date!=null?date.Tree:null);
				RewriteRuleSubtreeStream stream_interval=new RewriteRuleSubtreeStream(adaptor,"rule interval",interval!=null?interval.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1220:78: -> ^( FUNC ^( DATE_ADD $date $interval timeUnit ) )
				{
					DebugLocation(1220, 81);
					// MySQL51Parser.g3:1220:81: ^( FUNC ^( DATE_ADD $date $interval timeUnit ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1220, 83);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1220, 88);
					// MySQL51Parser.g3:1220:88: ^( DATE_ADD $date $interval timeUnit )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1220, 90);
					root_2 = (object)adaptor.BecomeRoot(stream_DATE_ADD.NextNode(), root_2);

					DebugLocation(1220, 100);
					adaptor.AddChild(root_2, stream_date.NextTree());
					DebugLocation(1220, 106);
					adaptor.AddChild(root_2, stream_interval.NextTree());
					DebugLocation(1220, 115);
					adaptor.AddChild(root_2, stream_timeUnit.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 11:
				DebugEnterAlt(11);
				// MySQL51Parser.g3:1221:4: DATE_SUB LPAREN date= expr COMMA INTERVAL interval= expr timeUnit RPAREN
				{
				DebugLocation(1221, 4);
				DATE_SUB569=(IToken)Match(input,DATE_SUB,Follow._DATE_SUB_in_functionCall10283); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_DATE_SUB.Add(DATE_SUB569);

				DebugLocation(1221, 13);
				LPAREN570=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10285); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN570);

				DebugLocation(1221, 24);
				PushFollow(Follow._expr_in_functionCall10289);
				date=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(date.Tree);
				DebugLocation(1221, 30);
				COMMA571=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall10291); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA571);

				DebugLocation(1221, 36);
				INTERVAL572=(IToken)Match(input,INTERVAL,Follow._INTERVAL_in_functionCall10293); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_INTERVAL.Add(INTERVAL572);

				DebugLocation(1221, 53);
				PushFollow(Follow._expr_in_functionCall10297);
				interval=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(interval.Tree);
				DebugLocation(1221, 59);
				PushFollow(Follow._timeUnit_in_functionCall10299);
				timeUnit573=timeUnit();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_timeUnit.Add(timeUnit573.Tree);
				DebugLocation(1221, 68);
				RPAREN574=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10301); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN574);



				{
				// AST REWRITE
				// elements: DATE_SUB, date, interval, timeUnit
				// token labels: 
				// rule labels: date, interval, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_date=new RewriteRuleSubtreeStream(adaptor,"rule date",date!=null?date.Tree:null);
				RewriteRuleSubtreeStream stream_interval=new RewriteRuleSubtreeStream(adaptor,"rule interval",interval!=null?interval.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1221:76: -> ^( FUNC ^( DATE_SUB $date $interval timeUnit ) )
				{
					DebugLocation(1221, 79);
					// MySQL51Parser.g3:1221:79: ^( FUNC ^( DATE_SUB $date $interval timeUnit ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1221, 81);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1221, 86);
					// MySQL51Parser.g3:1221:86: ^( DATE_SUB $date $interval timeUnit )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1221, 88);
					root_2 = (object)adaptor.BecomeRoot(stream_DATE_SUB.NextNode(), root_2);

					DebugLocation(1221, 98);
					adaptor.AddChild(root_2, stream_date.NextTree());
					DebugLocation(1221, 104);
					adaptor.AddChild(root_2, stream_interval.NextTree());
					DebugLocation(1221, 113);
					adaptor.AddChild(root_2, stream_timeUnit.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 12:
				DebugEnterAlt(12);
				// MySQL51Parser.g3:1222:4: GROUP_CONCAT LPAREN ( DISTINCT )? exprList ( order_by )? ( SEPARATOR text_string )? RPAREN
				{
				DebugLocation(1222, 4);
				GROUP_CONCAT575=(IToken)Match(input,GROUP_CONCAT,Follow._GROUP_CONCAT_in_functionCall10325); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_GROUP_CONCAT.Add(GROUP_CONCAT575);

				DebugLocation(1222, 17);
				LPAREN576=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10327); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN576);

				DebugLocation(1223, 4);
				// MySQL51Parser.g3:1223:4: ( DISTINCT )?
				int alt242=2;
				try { DebugEnterSubRule(242);
				try { DebugEnterDecision(242, false);
				int LA242_0 = input.LA(1);

				if ((LA242_0==DISTINCT))
				{
					alt242 = 1;
				}
				} finally { DebugExitDecision(242); }
				switch (alt242)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1223:4: DISTINCT
					{
					DebugLocation(1223, 4);
					DISTINCT577=(IToken)Match(input,DISTINCT,Follow._DISTINCT_in_functionCall10333); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_DISTINCT.Add(DISTINCT577);


					}
					break;

				}
				} finally { DebugExitSubRule(242); }

				DebugLocation(1223, 14);
				PushFollow(Follow._exprList_in_functionCall10336);
				exprList578=exprList();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_exprList.Add(exprList578.Tree);
				DebugLocation(1224, 4);
				// MySQL51Parser.g3:1224:4: ( order_by )?
				int alt243=2;
				try { DebugEnterSubRule(243);
				try { DebugEnterDecision(243, false);
				int LA243_0 = input.LA(1);

				if ((LA243_0==ORDER))
				{
					alt243 = 1;
				}
				} finally { DebugExitDecision(243); }
				switch (alt243)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1224:4: order_by
					{
					DebugLocation(1224, 4);
					PushFollow(Follow._order_by_in_functionCall10341);
					order_by579=order_by();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_order_by.Add(order_by579.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(243); }

				DebugLocation(1225, 4);
				// MySQL51Parser.g3:1225:4: ( SEPARATOR text_string )?
				int alt244=2;
				try { DebugEnterSubRule(244);
				try { DebugEnterDecision(244, false);
				int LA244_0 = input.LA(1);

				if ((LA244_0==SEPARATOR))
				{
					alt244 = 1;
				}
				} finally { DebugExitDecision(244); }
				switch (alt244)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1225:5: SEPARATOR text_string
					{
					DebugLocation(1225, 5);
					SEPARATOR580=(IToken)Match(input,SEPARATOR,Follow._SEPARATOR_in_functionCall10348); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SEPARATOR.Add(SEPARATOR580);

					DebugLocation(1225, 15);
					PushFollow(Follow._text_string_in_functionCall10350);
					text_string581=text_string();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_text_string.Add(text_string581.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(244); }

				DebugLocation(1226, 3);
				RPAREN582=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10356); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN582);



				{
				// AST REWRITE
				// elements: GROUP_CONCAT, exprList, DISTINCT, order_by, text_string
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1226:18: -> ^( FUNC ^( GROUP_CONCAT exprList ( DISTINCT )? ( order_by )? ( text_string )? ) )
				{
					DebugLocation(1226, 21);
					// MySQL51Parser.g3:1226:21: ^( FUNC ^( GROUP_CONCAT exprList ( DISTINCT )? ( order_by )? ( text_string )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1226, 23);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1226, 28);
					// MySQL51Parser.g3:1226:28: ^( GROUP_CONCAT exprList ( DISTINCT )? ( order_by )? ( text_string )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1226, 30);
					root_2 = (object)adaptor.BecomeRoot(stream_GROUP_CONCAT.NextNode(), root_2);

					DebugLocation(1226, 43);
					adaptor.AddChild(root_2, stream_exprList.NextTree());
					DebugLocation(1226, 52);
					// MySQL51Parser.g3:1226:52: ( DISTINCT )?
					if (stream_DISTINCT.HasNext)
					{
						DebugLocation(1226, 52);
						adaptor.AddChild(root_2, stream_DISTINCT.NextNode());

					}
					stream_DISTINCT.Reset();
					DebugLocation(1226, 62);
					// MySQL51Parser.g3:1226:62: ( order_by )?
					if (stream_order_by.HasNext)
					{
						DebugLocation(1226, 62);
						adaptor.AddChild(root_2, stream_order_by.NextTree());

					}
					stream_order_by.Reset();
					DebugLocation(1226, 72);
					// MySQL51Parser.g3:1226:72: ( text_string )?
					if (stream_text_string.HasNext)
					{
						DebugLocation(1226, 72);
						adaptor.AddChild(root_2, stream_text_string.NextTree());

					}
					stream_text_string.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 13:
				DebugEnterAlt(13);
				// MySQL51Parser.g3:1227:4: MAX LPAREN ( DISTINCT )? expr RPAREN
				{
				DebugLocation(1227, 4);
				MAX583=(IToken)Match(input,MAX,Follow._MAX_in_functionCall10390); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_MAX.Add(MAX583);

				DebugLocation(1227, 8);
				LPAREN584=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10392); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN584);

				DebugLocation(1227, 15);
				// MySQL51Parser.g3:1227:15: ( DISTINCT )?
				int alt245=2;
				try { DebugEnterSubRule(245);
				try { DebugEnterDecision(245, false);
				int LA245_0 = input.LA(1);

				if ((LA245_0==DISTINCT))
				{
					alt245 = 1;
				}
				} finally { DebugExitDecision(245); }
				switch (alt245)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1227:15: DISTINCT
					{
					DebugLocation(1227, 15);
					DISTINCT585=(IToken)Match(input,DISTINCT,Follow._DISTINCT_in_functionCall10394); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_DISTINCT.Add(DISTINCT585);


					}
					break;

				}
				} finally { DebugExitSubRule(245); }

				DebugLocation(1227, 25);
				PushFollow(Follow._expr_in_functionCall10397);
				expr586=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr586.Tree);
				DebugLocation(1227, 30);
				RPAREN587=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10399); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN587);



				{
				// AST REWRITE
				// elements: MAX, expr, DISTINCT
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1227:38: -> ^( FUNC ^( MAX expr ( DISTINCT )? ) )
				{
					DebugLocation(1227, 41);
					// MySQL51Parser.g3:1227:41: ^( FUNC ^( MAX expr ( DISTINCT )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1227, 43);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1227, 48);
					// MySQL51Parser.g3:1227:48: ^( MAX expr ( DISTINCT )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1227, 50);
					root_2 = (object)adaptor.BecomeRoot(stream_MAX.NextNode(), root_2);

					DebugLocation(1227, 54);
					adaptor.AddChild(root_2, stream_expr.NextTree());
					DebugLocation(1227, 59);
					// MySQL51Parser.g3:1227:59: ( DISTINCT )?
					if (stream_DISTINCT.HasNext)
					{
						DebugLocation(1227, 59);
						adaptor.AddChild(root_2, stream_DISTINCT.NextNode());

					}
					stream_DISTINCT.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 14:
				DebugEnterAlt(14);
				// MySQL51Parser.g3:1229:4: MID LPAREN expr COMMA expr COMMA expr RPAREN
				{
				DebugLocation(1229, 4);
				MID588=(IToken)Match(input,MID,Follow._MID_in_functionCall10423); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_MID.Add(MID588);

				DebugLocation(1229, 8);
				LPAREN589=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10425); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN589);

				DebugLocation(1229, 15);
				PushFollow(Follow._expr_in_functionCall10427);
				expr590=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr590.Tree);
				DebugLocation(1229, 20);
				COMMA591=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall10429); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA591);

				DebugLocation(1229, 26);
				PushFollow(Follow._expr_in_functionCall10431);
				expr592=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr592.Tree);
				DebugLocation(1229, 31);
				COMMA593=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall10433); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA593);

				DebugLocation(1229, 37);
				PushFollow(Follow._expr_in_functionCall10435);
				expr594=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr594.Tree);
				DebugLocation(1229, 42);
				RPAREN595=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10437); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN595);



				{
				// AST REWRITE
				// elements: MID, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1229:50: -> ^( FUNC ^( MID ( expr )+ ) )
				{
					DebugLocation(1229, 53);
					// MySQL51Parser.g3:1229:53: ^( FUNC ^( MID ( expr )+ ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1229, 55);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1229, 60);
					// MySQL51Parser.g3:1229:60: ^( MID ( expr )+ )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1229, 62);
					root_2 = (object)adaptor.BecomeRoot(stream_MID.NextNode(), root_2);

					DebugLocation(1229, 66);
					if (!(stream_expr.HasNext))
					{
						throw new RewriteEarlyExitException();
					}
					while ( stream_expr.HasNext )
					{
						DebugLocation(1229, 66);
						adaptor.AddChild(root_2, stream_expr.NextTree());

					}
					stream_expr.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 15:
				DebugEnterAlt(15);
				// MySQL51Parser.g3:1230:4: MIN LPAREN ( DISTINCT )? expr RPAREN
				{
				DebugLocation(1230, 4);
				MIN596=(IToken)Match(input,MIN,Follow._MIN_in_functionCall10456); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_MIN.Add(MIN596);

				DebugLocation(1230, 8);
				LPAREN597=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10458); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN597);

				DebugLocation(1230, 15);
				// MySQL51Parser.g3:1230:15: ( DISTINCT )?
				int alt246=2;
				try { DebugEnterSubRule(246);
				try { DebugEnterDecision(246, false);
				int LA246_0 = input.LA(1);

				if ((LA246_0==DISTINCT))
				{
					alt246 = 1;
				}
				} finally { DebugExitDecision(246); }
				switch (alt246)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1230:15: DISTINCT
					{
					DebugLocation(1230, 15);
					DISTINCT598=(IToken)Match(input,DISTINCT,Follow._DISTINCT_in_functionCall10460); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_DISTINCT.Add(DISTINCT598);


					}
					break;

				}
				} finally { DebugExitSubRule(246); }

				DebugLocation(1230, 25);
				PushFollow(Follow._expr_in_functionCall10463);
				expr599=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr599.Tree);
				DebugLocation(1230, 30);
				RPAREN600=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10465); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN600);



				{
				// AST REWRITE
				// elements: MIN, expr, DISTINCT
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1230:38: -> ^( FUNC ^( MIN expr ( DISTINCT )? ) )
				{
					DebugLocation(1230, 41);
					// MySQL51Parser.g3:1230:41: ^( FUNC ^( MIN expr ( DISTINCT )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1230, 43);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1230, 48);
					// MySQL51Parser.g3:1230:48: ^( MIN expr ( DISTINCT )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1230, 50);
					root_2 = (object)adaptor.BecomeRoot(stream_MIN.NextNode(), root_2);

					DebugLocation(1230, 54);
					adaptor.AddChild(root_2, stream_expr.NextTree());
					DebugLocation(1230, 59);
					// MySQL51Parser.g3:1230:59: ( DISTINCT )?
					if (stream_DISTINCT.HasNext)
					{
						DebugLocation(1230, 59);
						adaptor.AddChild(root_2, stream_DISTINCT.NextNode());

					}
					stream_DISTINCT.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 16:
				DebugEnterAlt(16);
				// MySQL51Parser.g3:1232:4: SESSION_USER LPAREN RPAREN
				{
				DebugLocation(1232, 4);
				SESSION_USER601=(IToken)Match(input,SESSION_USER,Follow._SESSION_USER_in_functionCall10489); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_SESSION_USER.Add(SESSION_USER601);

				DebugLocation(1232, 17);
				LPAREN602=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10491); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN602);

				DebugLocation(1232, 24);
				RPAREN603=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10493); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN603);



				{
				// AST REWRITE
				// elements: SESSION_USER, LPAREN
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1232:32: -> ^( FUNC ^( SESSION_USER LPAREN ) )
				{
					DebugLocation(1232, 35);
					// MySQL51Parser.g3:1232:35: ^( FUNC ^( SESSION_USER LPAREN ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1232, 37);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1232, 42);
					// MySQL51Parser.g3:1232:42: ^( SESSION_USER LPAREN )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1232, 44);
					root_2 = (object)adaptor.BecomeRoot(stream_SESSION_USER.NextNode(), root_2);

					DebugLocation(1232, 57);
					adaptor.AddChild(root_2, stream_LPAREN.NextNode());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 17:
				DebugEnterAlt(17);
				// MySQL51Parser.g3:1233:4: STD LPAREN expr RPAREN
				{
				DebugLocation(1233, 4);
				STD604=(IToken)Match(input,STD,Follow._STD_in_functionCall10511); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_STD.Add(STD604);

				DebugLocation(1233, 8);
				LPAREN605=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10513); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN605);

				DebugLocation(1233, 15);
				PushFollow(Follow._expr_in_functionCall10515);
				expr606=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr606.Tree);
				DebugLocation(1233, 20);
				RPAREN607=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10517); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN607);



				{
				// AST REWRITE
				// elements: STD, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1233:28: -> ^( FUNC ^( STD expr ) )
				{
					DebugLocation(1233, 31);
					// MySQL51Parser.g3:1233:31: ^( FUNC ^( STD expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1233, 33);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1233, 38);
					// MySQL51Parser.g3:1233:38: ^( STD expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1233, 40);
					root_2 = (object)adaptor.BecomeRoot(stream_STD.NextNode(), root_2);

					DebugLocation(1233, 44);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 18:
				DebugEnterAlt(18);
				// MySQL51Parser.g3:1234:4: STDDEV LPAREN expr RPAREN
				{
				DebugLocation(1234, 4);
				STDDEV608=(IToken)Match(input,STDDEV,Follow._STDDEV_in_functionCall10535); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_STDDEV.Add(STDDEV608);

				DebugLocation(1234, 11);
				LPAREN609=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10537); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN609);

				DebugLocation(1234, 18);
				PushFollow(Follow._expr_in_functionCall10539);
				expr610=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr610.Tree);
				DebugLocation(1234, 23);
				RPAREN611=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10541); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN611);



				{
				// AST REWRITE
				// elements: STDDEV, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1234:31: -> ^( FUNC ^( STDDEV expr ) )
				{
					DebugLocation(1234, 34);
					// MySQL51Parser.g3:1234:34: ^( FUNC ^( STDDEV expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1234, 36);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1234, 41);
					// MySQL51Parser.g3:1234:41: ^( STDDEV expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1234, 43);
					root_2 = (object)adaptor.BecomeRoot(stream_STDDEV.NextNode(), root_2);

					DebugLocation(1234, 50);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 19:
				DebugEnterAlt(19);
				// MySQL51Parser.g3:1235:4: STDDEV_POP LPAREN expr RPAREN
				{
				DebugLocation(1235, 4);
				STDDEV_POP612=(IToken)Match(input,STDDEV_POP,Follow._STDDEV_POP_in_functionCall10559); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_STDDEV_POP.Add(STDDEV_POP612);

				DebugLocation(1235, 15);
				LPAREN613=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10561); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN613);

				DebugLocation(1235, 22);
				PushFollow(Follow._expr_in_functionCall10563);
				expr614=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr614.Tree);
				DebugLocation(1235, 27);
				RPAREN615=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10565); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN615);



				{
				// AST REWRITE
				// elements: STDDEV_POP, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1235:35: -> ^( FUNC ^( STDDEV_POP expr ) )
				{
					DebugLocation(1235, 38);
					// MySQL51Parser.g3:1235:38: ^( FUNC ^( STDDEV_POP expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1235, 40);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1235, 45);
					// MySQL51Parser.g3:1235:45: ^( STDDEV_POP expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1235, 47);
					root_2 = (object)adaptor.BecomeRoot(stream_STDDEV_POP.NextNode(), root_2);

					DebugLocation(1235, 58);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 20:
				DebugEnterAlt(20);
				// MySQL51Parser.g3:1236:4: STDDEV_SAMP LPAREN expr RPAREN
				{
				DebugLocation(1236, 4);
				STDDEV_SAMP616=(IToken)Match(input,STDDEV_SAMP,Follow._STDDEV_SAMP_in_functionCall10583); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_STDDEV_SAMP.Add(STDDEV_SAMP616);

				DebugLocation(1236, 16);
				LPAREN617=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10585); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN617);

				DebugLocation(1236, 23);
				PushFollow(Follow._expr_in_functionCall10587);
				expr618=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr618.Tree);
				DebugLocation(1236, 28);
				RPAREN619=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10589); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN619);



				{
				// AST REWRITE
				// elements: STDDEV_SAMP, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1236:36: -> ^( FUNC ^( STDDEV_SAMP expr ) )
				{
					DebugLocation(1236, 39);
					// MySQL51Parser.g3:1236:39: ^( FUNC ^( STDDEV_SAMP expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1236, 41);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1236, 46);
					// MySQL51Parser.g3:1236:46: ^( STDDEV_SAMP expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1236, 48);
					root_2 = (object)adaptor.BecomeRoot(stream_STDDEV_SAMP.NextNode(), root_2);

					DebugLocation(1236, 60);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 21:
				DebugEnterAlt(21);
				// MySQL51Parser.g3:1237:4: SUM LPAREN ( DISTINCT )? expr RPAREN
				{
				DebugLocation(1237, 4);
				SUM620=(IToken)Match(input,SUM,Follow._SUM_in_functionCall10607); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_SUM.Add(SUM620);

				DebugLocation(1237, 8);
				LPAREN621=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10609); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN621);

				DebugLocation(1237, 15);
				// MySQL51Parser.g3:1237:15: ( DISTINCT )?
				int alt247=2;
				try { DebugEnterSubRule(247);
				try { DebugEnterDecision(247, false);
				int LA247_0 = input.LA(1);

				if ((LA247_0==DISTINCT))
				{
					alt247 = 1;
				}
				} finally { DebugExitDecision(247); }
				switch (alt247)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1237:15: DISTINCT
					{
					DebugLocation(1237, 15);
					DISTINCT622=(IToken)Match(input,DISTINCT,Follow._DISTINCT_in_functionCall10611); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_DISTINCT.Add(DISTINCT622);


					}
					break;

				}
				} finally { DebugExitSubRule(247); }

				DebugLocation(1237, 25);
				PushFollow(Follow._expr_in_functionCall10614);
				expr623=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr623.Tree);
				DebugLocation(1237, 30);
				RPAREN624=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10616); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN624);



				{
				// AST REWRITE
				// elements: SUM, expr, DISTINCT
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1237:38: -> ^( FUNC ^( SUM expr ( DISTINCT )? ) )
				{
					DebugLocation(1237, 41);
					// MySQL51Parser.g3:1237:41: ^( FUNC ^( SUM expr ( DISTINCT )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1237, 43);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1237, 48);
					// MySQL51Parser.g3:1237:48: ^( SUM expr ( DISTINCT )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1237, 50);
					root_2 = (object)adaptor.BecomeRoot(stream_SUM.NextNode(), root_2);

					DebugLocation(1237, 54);
					adaptor.AddChild(root_2, stream_expr.NextTree());
					DebugLocation(1237, 59);
					// MySQL51Parser.g3:1237:59: ( DISTINCT )?
					if (stream_DISTINCT.HasNext)
					{
						DebugLocation(1237, 59);
						adaptor.AddChild(root_2, stream_DISTINCT.NextNode());

					}
					stream_DISTINCT.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 22:
				DebugEnterAlt(22);
				// MySQL51Parser.g3:1239:4: SYSTEM_USER LPAREN RPAREN
				{
				DebugLocation(1239, 4);
				SYSTEM_USER625=(IToken)Match(input,SYSTEM_USER,Follow._SYSTEM_USER_in_functionCall10640); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_SYSTEM_USER.Add(SYSTEM_USER625);

				DebugLocation(1239, 16);
				LPAREN626=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10642); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN626);

				DebugLocation(1239, 23);
				RPAREN627=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10644); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN627);



				{
				// AST REWRITE
				// elements: SYSTEM_USER, LPAREN
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1239:31: -> ^( FUNC ^( SYSTEM_USER LPAREN ) )
				{
					DebugLocation(1239, 34);
					// MySQL51Parser.g3:1239:34: ^( FUNC ^( SYSTEM_USER LPAREN ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1239, 36);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1239, 41);
					// MySQL51Parser.g3:1239:41: ^( SYSTEM_USER LPAREN )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1239, 43);
					root_2 = (object)adaptor.BecomeRoot(stream_SYSTEM_USER.NextNode(), root_2);

					DebugLocation(1239, 55);
					adaptor.AddChild(root_2, stream_LPAREN.NextNode());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 23:
				DebugEnterAlt(23);
				// MySQL51Parser.g3:1240:4: TRIM LPAREN ( (pos= BOTH |pos= LEADING |pos= TRAILING ) (remstr= expr )? FROM str= expr -> ^( FUNC ^( TRIM $str ( $pos)? ( $remstr)? ) ) |str1= expr ( FROM str2= expr -> ^( FUNC ^( TRIM $str2 $str1) ) | -> ^( FUNC ^( TRIM $str1) ) ) ) RPAREN
				{
				DebugLocation(1240, 4);
				TRIM628=(IToken)Match(input,TRIM,Follow._TRIM_in_functionCall10662); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TRIM.Add(TRIM628);

				DebugLocation(1240, 9);
				LPAREN629=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10664); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN629);

				DebugLocation(1241, 4);
				// MySQL51Parser.g3:1241:4: ( (pos= BOTH |pos= LEADING |pos= TRAILING ) (remstr= expr )? FROM str= expr -> ^( FUNC ^( TRIM $str ( $pos)? ( $remstr)? ) ) |str1= expr ( FROM str2= expr -> ^( FUNC ^( TRIM $str2 $str1) ) | -> ^( FUNC ^( TRIM $str1) ) ) )
				int alt251=2;
				try { DebugEnterSubRule(251);
				try { DebugEnterDecision(251, false);
				int LA251_0 = input.LA(1);

				if ((LA251_0==BOTH||LA251_0==LEADING||LA251_0==TRAILING))
				{
					alt251 = 1;
				}
				else if ((LA251_0==ACTION||(LA251_0>=ADDDATE && LA251_0<=ALGORITHM)||LA251_0==ANY||LA251_0==ASCII||(LA251_0>=AT && LA251_0<=BACKUP)||LA251_0==BEGIN||(LA251_0>=BINARY && LA251_0<=BIT)||LA251_0==BITWISE_INVERSION||(LA251_0>=BIT_AND && LA251_0<=BIT_XOR)||(LA251_0>=BLOCK && LA251_0<=BOOLEAN)||LA251_0==BTREE||(LA251_0>=BYTE && LA251_0<=CACHE)||LA251_0==CASCADED||(LA251_0>=CAST && LA251_0<=CHAIN)||(LA251_0>=CHANGED && LA251_0<=CHAR)||LA251_0==CHARSET||(LA251_0>=CHECKSUM && LA251_0<=COLLATION)||LA251_0==COLUMNS||LA251_0==COMMENT||(LA251_0>=COMMIT && LA251_0<=CONCURRENT)||(LA251_0>=CONNECTION && LA251_0<=CONSISTENT)||(LA251_0>=CONTAINS && LA251_0<=CONTEXT)||LA251_0==CONTRIBUTORS||(LA251_0>=COUNT && LA251_0<=CPU)||(LA251_0>=CUBE && LA251_0<=CURRENT_USER)||LA251_0==CURTIME||(LA251_0>=DATA && LA251_0<=DATABASE)||(LA251_0>=DATAFILE && LA251_0<=DATE_ADD)||LA251_0==DATE_SUB||LA251_0==DAY||LA251_0==DEALLOCATE||LA251_0==DEFINER||LA251_0==DELAY_KEY_WRITE||LA251_0==DES_KEY_FILE||(LA251_0>=DIRECTORY && LA251_0<=DISK)||LA251_0==DO||(LA251_0>=DUMPFILE && LA251_0<=DYNAMIC)||LA251_0==ENABLE||(LA251_0>=END && LA251_0<=ENUM)||(LA251_0>=ERRORS && LA251_0<=ESCAPE)||(LA251_0>=EVENT && LA251_0<=EXISTS)||LA251_0==EXPANSION||(LA251_0>=EXTENDED && LA251_0<=FAULTS)||(LA251_0>=FIELDS && LA251_0<=FIXED)||LA251_0==FLUSH||(LA251_0>=FOUND && LA251_0<=FRAC_SECOND)||LA251_0==FULL||(LA251_0>=FUNCTION && LA251_0<=GLOBAL_VARIABLE)||LA251_0==GRANTS||(LA251_0>=GROUP && LA251_0<=HASH)||(LA251_0>=HELP && LA251_0<=HEXA_VALUE)||(LA251_0>=HOST && LA251_0<=HOUR)||(LA251_0>=ID && LA251_0<=IF)||LA251_0==IMPORT||LA251_0==INDEXES||LA251_0==INITIAL_SIZE||LA251_0==INNOBASE||(LA251_0>=INSERT && LA251_0<=INSTALL)||LA251_0==INTERVAL||(LA251_0>=INVOKER && LA251_0<=IPC)||(LA251_0>=ISOLATION && LA251_0<=ISSUER)||LA251_0==KEY_BLOCK_SIZE||(LA251_0>=LABEL && LA251_0<=LAST)||(LA251_0>=LEAVES && LA251_0<=LEFT)||LA251_0==LESS||LA251_0==LEVEL||(LA251_0>=LINESTRING && LA251_0<=LIST)||LA251_0==LOCAL||(LA251_0>=LOCKS && LA251_0<=LOGFILE)||LA251_0==LOGS||(LA251_0>=LPAREN && LA251_0<=MASTER_SSL_KEY)||LA251_0==MASTER_USER||(LA251_0>=MAX && LA251_0<=MEDIUM)||(LA251_0>=MEMORY && LA251_0<=MID)||(LA251_0>=MIGRATE && LA251_0<=MINUTE)||(LA251_0>=MIN_ROWS && LA251_0<=MODE)||LA251_0==MODIFY||LA251_0==MONTH||(LA251_0>=MULTILINESTRING && LA251_0<=NATIONAL)||(LA251_0>=NCHAR && LA251_0<=NOT)||(LA251_0>=NOT_OP && LA251_0<=NO_WAIT)||LA251_0==NULL||LA251_0==NUMBER||(LA251_0>=NVARCHAR && LA251_0<=OLD_PASSWORD)||(LA251_0>=ONE && LA251_0<=OPEN)||LA251_0==OPTIONS||(LA251_0>=OWNER && LA251_0<=POSITION)||(LA251_0>=PREPARE && LA251_0<=PREV)||LA251_0==PRIVILEGES||(LA251_0>=PROCESS && LA251_0<=PROFILES)||(LA251_0>=QUARTER && LA251_0<=QUICK)||(LA251_0>=REBUILD && LA251_0<=REDUNDANT)||(LA251_0>=RELAY_LOG_FILE && LA251_0<=RELAY_THREAD)||(LA251_0>=RELOAD && LA251_0<=REMOVE)||(LA251_0>=REORGANIZE && LA251_0<=REPLICATION)||(LA251_0>=RESET && LA251_0<=RESTORE)||LA251_0==RESUME||LA251_0==RETURNS||LA251_0==RIGHT||(LA251_0>=ROLLBACK && LA251_0<=ROW_FORMAT)||(LA251_0>=RTREE && LA251_0<=SCHEDULE)||LA251_0==SECOND||LA251_0==SECURITY||(LA251_0>=SERIAL && LA251_0<=SESSION_VARIABLE)||LA251_0==SHARE||(LA251_0>=SHUTDOWN && LA251_0<=SLAVE)||(LA251_0>=SNAPSHOT && LA251_0<=SOCKET)||(LA251_0>=SONAME && LA251_0<=SOURCE)||(LA251_0>=SQL_BUFFER_RESULT && LA251_0<=SQL_CACHE)||LA251_0==SQL_NO_CACHE||LA251_0==SQL_THREAD||LA251_0==START||(LA251_0>=STARTS && LA251_0<=STORAGE)||(LA251_0>=STRING && LA251_0<=SYSTEM_USER)||(LA251_0>=TABLES && LA251_0<=TEMPTABLE)||(LA251_0>=TEXT && LA251_0<=THAN)||(LA251_0>=TIME && LA251_0<=TIMESTAMP_DIFF)||(LA251_0>=TRANSACTION && LA251_0<=TRANSACTIONAL)||(LA251_0>=TRIGGERS && LA251_0<=UNDEFINED)||(LA251_0>=UNDOFILE && LA251_0<=UNINSTALL)||LA251_0==UNKNOWN||LA251_0==UNTIL||LA251_0==UPGRADE||LA251_0==USER||LA251_0==USE_FRM||(LA251_0>=UTC_DATE && LA251_0<=VALUE)||LA251_0==VALUE_PLACEHOLDER||(LA251_0>=VARIABLES && LA251_0<=VARIANCE)||(LA251_0>=VAR_POP && LA251_0<=WEEK)||(LA251_0>=WORK && LA251_0<=WRAPPER)||(LA251_0>=X509 && LA251_0<=XA)||LA251_0==YEAR||LA251_0==CONCAT))
				{
					alt251 = 2;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 251, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
				} finally { DebugExitDecision(251); }
				switch (alt251)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1241:6: (pos= BOTH |pos= LEADING |pos= TRAILING ) (remstr= expr )? FROM str= expr
					{
					DebugLocation(1241, 6);
					// MySQL51Parser.g3:1241:6: (pos= BOTH |pos= LEADING |pos= TRAILING )
					int alt248=3;
					try { DebugEnterSubRule(248);
					try { DebugEnterDecision(248, false);
					switch (input.LA(1))
					{
					case BOTH:
						{
						alt248 = 1;
						}
						break;
					case LEADING:
						{
						alt248 = 2;
						}
						break;
					case TRAILING:
						{
						alt248 = 3;
						}
						break;
					default:
						{
							if (state.backtracking>0) {state.failed=true; return retval;}
							NoViableAltException nvae = new NoViableAltException("", 248, 0, input);
							DebugRecognitionException(nvae);
							throw nvae;
						}
					}

					} finally { DebugExitDecision(248); }
					switch (alt248)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:1241:7: pos= BOTH
						{
						DebugLocation(1241, 10);
						pos=(IToken)Match(input,BOTH,Follow._BOTH_in_functionCall10674); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_BOTH.Add(pos);


						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:1241:18: pos= LEADING
						{
						DebugLocation(1241, 21);
						pos=(IToken)Match(input,LEADING,Follow._LEADING_in_functionCall10680); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_LEADING.Add(pos);


						}
						break;
					case 3:
						DebugEnterAlt(3);
						// MySQL51Parser.g3:1241:32: pos= TRAILING
						{
						DebugLocation(1241, 35);
						pos=(IToken)Match(input,TRAILING,Follow._TRAILING_in_functionCall10686); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_TRAILING.Add(pos);


						}
						break;

					}
					} finally { DebugExitSubRule(248); }

					DebugLocation(1242, 11);
					// MySQL51Parser.g3:1242:11: (remstr= expr )?
					int alt249=2;
					try { DebugEnterSubRule(249);
					try { DebugEnterDecision(249, false);
					int LA249_0 = input.LA(1);

					if ((LA249_0==ACTION||(LA249_0>=ADDDATE && LA249_0<=ALGORITHM)||LA249_0==ANY||LA249_0==ASCII||(LA249_0>=AT && LA249_0<=BACKUP)||LA249_0==BEGIN||(LA249_0>=BINARY && LA249_0<=BIT)||LA249_0==BITWISE_INVERSION||(LA249_0>=BIT_AND && LA249_0<=BIT_XOR)||(LA249_0>=BLOCK && LA249_0<=BOOLEAN)||LA249_0==BTREE||(LA249_0>=BYTE && LA249_0<=CACHE)||LA249_0==CASCADED||(LA249_0>=CAST && LA249_0<=CHAIN)||(LA249_0>=CHANGED && LA249_0<=CHAR)||LA249_0==CHARSET||(LA249_0>=CHECKSUM && LA249_0<=COLLATION)||LA249_0==COLUMNS||LA249_0==COMMENT||(LA249_0>=COMMIT && LA249_0<=CONCURRENT)||(LA249_0>=CONNECTION && LA249_0<=CONSISTENT)||(LA249_0>=CONTAINS && LA249_0<=CONTEXT)||LA249_0==CONTRIBUTORS||(LA249_0>=COUNT && LA249_0<=CPU)||(LA249_0>=CUBE && LA249_0<=CURRENT_USER)||LA249_0==CURTIME||(LA249_0>=DATA && LA249_0<=DATABASE)||(LA249_0>=DATAFILE && LA249_0<=DATE_ADD)||LA249_0==DATE_SUB||LA249_0==DAY||LA249_0==DEALLOCATE||LA249_0==DEFINER||LA249_0==DELAY_KEY_WRITE||LA249_0==DES_KEY_FILE||(LA249_0>=DIRECTORY && LA249_0<=DISK)||LA249_0==DO||(LA249_0>=DUMPFILE && LA249_0<=DYNAMIC)||LA249_0==ENABLE||(LA249_0>=END && LA249_0<=ENUM)||(LA249_0>=ERRORS && LA249_0<=ESCAPE)||(LA249_0>=EVENT && LA249_0<=EXISTS)||LA249_0==EXPANSION||(LA249_0>=EXTENDED && LA249_0<=FAULTS)||(LA249_0>=FIELDS && LA249_0<=FIXED)||LA249_0==FLUSH||(LA249_0>=FOUND && LA249_0<=FRAC_SECOND)||LA249_0==FULL||(LA249_0>=FUNCTION && LA249_0<=GLOBAL_VARIABLE)||LA249_0==GRANTS||(LA249_0>=GROUP && LA249_0<=HASH)||(LA249_0>=HELP && LA249_0<=HEXA_VALUE)||(LA249_0>=HOST && LA249_0<=HOUR)||(LA249_0>=ID && LA249_0<=IF)||LA249_0==IMPORT||LA249_0==INDEXES||LA249_0==INITIAL_SIZE||LA249_0==INNOBASE||(LA249_0>=INSERT && LA249_0<=INSTALL)||LA249_0==INTERVAL||(LA249_0>=INVOKER && LA249_0<=IPC)||(LA249_0>=ISOLATION && LA249_0<=ISSUER)||LA249_0==KEY_BLOCK_SIZE||(LA249_0>=LABEL && LA249_0<=LAST)||(LA249_0>=LEAVES && LA249_0<=LEFT)||LA249_0==LESS||LA249_0==LEVEL||(LA249_0>=LINESTRING && LA249_0<=LIST)||LA249_0==LOCAL||(LA249_0>=LOCKS && LA249_0<=LOGFILE)||LA249_0==LOGS||(LA249_0>=LPAREN && LA249_0<=MASTER_SSL_KEY)||LA249_0==MASTER_USER||(LA249_0>=MAX && LA249_0<=MEDIUM)||(LA249_0>=MEMORY && LA249_0<=MID)||(LA249_0>=MIGRATE && LA249_0<=MINUTE)||(LA249_0>=MIN_ROWS && LA249_0<=MODE)||LA249_0==MODIFY||LA249_0==MONTH||(LA249_0>=MULTILINESTRING && LA249_0<=NATIONAL)||(LA249_0>=NCHAR && LA249_0<=NOT)||(LA249_0>=NOT_OP && LA249_0<=NO_WAIT)||LA249_0==NULL||LA249_0==NUMBER||(LA249_0>=NVARCHAR && LA249_0<=OLD_PASSWORD)||(LA249_0>=ONE && LA249_0<=OPEN)||LA249_0==OPTIONS||(LA249_0>=OWNER && LA249_0<=POSITION)||(LA249_0>=PREPARE && LA249_0<=PREV)||LA249_0==PRIVILEGES||(LA249_0>=PROCESS && LA249_0<=PROFILES)||(LA249_0>=QUARTER && LA249_0<=QUICK)||(LA249_0>=REBUILD && LA249_0<=REDUNDANT)||(LA249_0>=RELAY_LOG_FILE && LA249_0<=RELAY_THREAD)||(LA249_0>=RELOAD && LA249_0<=REMOVE)||(LA249_0>=REORGANIZE && LA249_0<=REPLICATION)||(LA249_0>=RESET && LA249_0<=RESTORE)||LA249_0==RESUME||LA249_0==RETURNS||LA249_0==RIGHT||(LA249_0>=ROLLBACK && LA249_0<=ROW_FORMAT)||(LA249_0>=RTREE && LA249_0<=SCHEDULE)||LA249_0==SECOND||LA249_0==SECURITY||(LA249_0>=SERIAL && LA249_0<=SESSION_VARIABLE)||LA249_0==SHARE||(LA249_0>=SHUTDOWN && LA249_0<=SLAVE)||(LA249_0>=SNAPSHOT && LA249_0<=SOCKET)||(LA249_0>=SONAME && LA249_0<=SOURCE)||(LA249_0>=SQL_BUFFER_RESULT && LA249_0<=SQL_CACHE)||LA249_0==SQL_NO_CACHE||LA249_0==SQL_THREAD||LA249_0==START||(LA249_0>=STARTS && LA249_0<=STORAGE)||(LA249_0>=STRING && LA249_0<=SYSTEM_USER)||(LA249_0>=TABLES && LA249_0<=TEMPTABLE)||(LA249_0>=TEXT && LA249_0<=THAN)||(LA249_0>=TIME && LA249_0<=TIMESTAMP_DIFF)||(LA249_0>=TRANSACTION && LA249_0<=TRANSACTIONAL)||(LA249_0>=TRIGGERS && LA249_0<=UNDEFINED)||(LA249_0>=UNDOFILE && LA249_0<=UNINSTALL)||LA249_0==UNKNOWN||LA249_0==UNTIL||LA249_0==UPGRADE||LA249_0==USER||LA249_0==USE_FRM||(LA249_0>=UTC_DATE && LA249_0<=VALUE)||LA249_0==VALUE_PLACEHOLDER||(LA249_0>=VARIABLES && LA249_0<=VARIANCE)||(LA249_0>=VAR_POP && LA249_0<=WEEK)||(LA249_0>=WORK && LA249_0<=WRAPPER)||(LA249_0>=X509 && LA249_0<=XA)||LA249_0==YEAR||LA249_0==CONCAT))
					{
						alt249 = 1;
					}
					} finally { DebugExitDecision(249); }
					switch (alt249)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:1242:11: remstr= expr
						{
						DebugLocation(1242, 11);
						PushFollow(Follow._expr_in_functionCall10695);
						remstr=expr();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_expr.Add(remstr.Tree);

						}
						break;

					}
					} finally { DebugExitSubRule(249); }

					DebugLocation(1242, 18);
					FROM630=(IToken)Match(input,FROM,Follow._FROM_in_functionCall10698); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_FROM.Add(FROM630);

					DebugLocation(1242, 26);
					PushFollow(Follow._expr_in_functionCall10702);
					str=expr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_expr.Add(str.Tree);


					{
					// AST REWRITE
					// elements: TRIM, str, pos, remstr
					// token labels: pos
					// rule labels: str, remstr, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleITokenStream stream_pos=new RewriteRuleITokenStream(adaptor,"token pos",pos);
					RewriteRuleSubtreeStream stream_str=new RewriteRuleSubtreeStream(adaptor,"rule str",str!=null?str.Tree:null);
					RewriteRuleSubtreeStream stream_remstr=new RewriteRuleSubtreeStream(adaptor,"rule remstr",remstr!=null?remstr.Tree:null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 1242:33: -> ^( FUNC ^( TRIM $str ( $pos)? ( $remstr)? ) )
					{
						DebugLocation(1242, 36);
						// MySQL51Parser.g3:1242:36: ^( FUNC ^( TRIM $str ( $pos)? ( $remstr)? ) )
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(1242, 38);
						root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

						DebugLocation(1242, 43);
						// MySQL51Parser.g3:1242:43: ^( TRIM $str ( $pos)? ( $remstr)? )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1242, 45);
						root_2 = (object)adaptor.BecomeRoot(stream_TRIM.NextNode(), root_2);

						DebugLocation(1242, 51);
						adaptor.AddChild(root_2, stream_str.NextTree());
						DebugLocation(1242, 56);
						// MySQL51Parser.g3:1242:56: ( $pos)?
						if (stream_pos.HasNext)
						{
							DebugLocation(1242, 56);
							adaptor.AddChild(root_2, stream_pos.NextNode());

						}
						stream_pos.Reset();
						DebugLocation(1242, 62);
						// MySQL51Parser.g3:1242:62: ( $remstr)?
						if (stream_remstr.HasNext)
						{
							DebugLocation(1242, 62);
							adaptor.AddChild(root_2, stream_remstr.NextTree());

						}
						stream_remstr.Reset();

						adaptor.AddChild(root_1, root_2);
						}

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:1243:6: str1= expr ( FROM str2= expr -> ^( FUNC ^( TRIM $str2 $str1) ) | -> ^( FUNC ^( TRIM $str1) ) )
					{
					DebugLocation(1243, 10);
					PushFollow(Follow._expr_in_functionCall10733);
					str1=expr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_expr.Add(str1.Tree);
					DebugLocation(1244, 5);
					// MySQL51Parser.g3:1244:5: ( FROM str2= expr -> ^( FUNC ^( TRIM $str2 $str1) ) | -> ^( FUNC ^( TRIM $str1) ) )
					int alt250=2;
					try { DebugEnterSubRule(250);
					try { DebugEnterDecision(250, false);
					int LA250_0 = input.LA(1);

					if ((LA250_0==FROM))
					{
						alt250 = 1;
					}
					else if ((LA250_0==RPAREN))
					{
						alt250 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 250, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					} finally { DebugExitDecision(250); }
					switch (alt250)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:1244:7: FROM str2= expr
						{
						DebugLocation(1244, 7);
						FROM631=(IToken)Match(input,FROM,Follow._FROM_in_functionCall10741); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_FROM.Add(FROM631);

						DebugLocation(1244, 16);
						PushFollow(Follow._expr_in_functionCall10745);
						str2=expr();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_expr.Add(str2.Tree);


						{
						// AST REWRITE
						// elements: TRIM, str2, str1
						// token labels: 
						// rule labels: str2, str1, retval
						// token list labels: 
						// rule list labels: 
						// wildcard labels: 
						if (state.backtracking == 0) {
						retval.Tree = root_0;
						RewriteRuleSubtreeStream stream_str2=new RewriteRuleSubtreeStream(adaptor,"rule str2",str2!=null?str2.Tree:null);
						RewriteRuleSubtreeStream stream_str1=new RewriteRuleSubtreeStream(adaptor,"rule str1",str1!=null?str1.Tree:null);
						RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

						root_0 = (object)adaptor.Nil();
						// 1244:25: -> ^( FUNC ^( TRIM $str2 $str1) )
						{
							DebugLocation(1244, 28);
							// MySQL51Parser.g3:1244:28: ^( FUNC ^( TRIM $str2 $str1) )
							{
							object root_1 = (object)adaptor.Nil();
							DebugLocation(1244, 30);
							root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

							DebugLocation(1244, 35);
							// MySQL51Parser.g3:1244:35: ^( TRIM $str2 $str1)
							{
							object root_2 = (object)adaptor.Nil();
							DebugLocation(1244, 37);
							root_2 = (object)adaptor.BecomeRoot(stream_TRIM.NextNode(), root_2);

							DebugLocation(1244, 43);
							adaptor.AddChild(root_2, stream_str2.NextTree());
							DebugLocation(1244, 49);
							adaptor.AddChild(root_2, stream_str1.NextTree());

							adaptor.AddChild(root_1, root_2);
							}

							adaptor.AddChild(root_0, root_1);
							}

						}

						retval.Tree = root_0;
						}
						}

						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:1245:23: 
						{

						{
						// AST REWRITE
						// elements: TRIM, str1
						// token labels: 
						// rule labels: str1, retval
						// token list labels: 
						// rule list labels: 
						// wildcard labels: 
						if (state.backtracking == 0) {
						retval.Tree = root_0;
						RewriteRuleSubtreeStream stream_str1=new RewriteRuleSubtreeStream(adaptor,"rule str1",str1!=null?str1.Tree:null);
						RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

						root_0 = (object)adaptor.Nil();
						// 1245:23: -> ^( FUNC ^( TRIM $str1) )
						{
							DebugLocation(1245, 26);
							// MySQL51Parser.g3:1245:26: ^( FUNC ^( TRIM $str1) )
							{
							object root_1 = (object)adaptor.Nil();
							DebugLocation(1245, 28);
							root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

							DebugLocation(1245, 33);
							// MySQL51Parser.g3:1245:33: ^( TRIM $str1)
							{
							object root_2 = (object)adaptor.Nil();
							DebugLocation(1245, 35);
							root_2 = (object)adaptor.BecomeRoot(stream_TRIM.NextNode(), root_2);

							DebugLocation(1245, 41);
							adaptor.AddChild(root_2, stream_str1.NextTree());

							adaptor.AddChild(root_1, root_2);
							}

							adaptor.AddChild(root_0, root_1);
							}

						}

						retval.Tree = root_0;
						}
						}

						}
						break;

					}
					} finally { DebugExitSubRule(250); }


					}
					break;

				}
				} finally { DebugExitSubRule(251); }

				DebugLocation(1248, 4);
				RPAREN632=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10805); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN632);


				}
				break;
			case 24:
				DebugEnterAlt(24);
				// MySQL51Parser.g3:1249:4: VARIANCE LPAREN expr RPAREN
				{
				DebugLocation(1249, 4);
				VARIANCE633=(IToken)Match(input,VARIANCE,Follow._VARIANCE_in_functionCall10810); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_VARIANCE.Add(VARIANCE633);

				DebugLocation(1249, 13);
				LPAREN634=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10812); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN634);

				DebugLocation(1249, 20);
				PushFollow(Follow._expr_in_functionCall10814);
				expr635=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr635.Tree);
				DebugLocation(1249, 25);
				RPAREN636=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10816); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN636);



				{
				// AST REWRITE
				// elements: VARIANCE, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1249:33: -> ^( FUNC ^( VARIANCE expr ) )
				{
					DebugLocation(1249, 36);
					// MySQL51Parser.g3:1249:36: ^( FUNC ^( VARIANCE expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1249, 38);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1249, 43);
					// MySQL51Parser.g3:1249:43: ^( VARIANCE expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1249, 45);
					root_2 = (object)adaptor.BecomeRoot(stream_VARIANCE.NextNode(), root_2);

					DebugLocation(1249, 54);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 25:
				DebugEnterAlt(25);
				// MySQL51Parser.g3:1250:4: VAR_POP LPAREN expr RPAREN
				{
				DebugLocation(1250, 4);
				VAR_POP637=(IToken)Match(input,VAR_POP,Follow._VAR_POP_in_functionCall10834); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_VAR_POP.Add(VAR_POP637);

				DebugLocation(1250, 12);
				LPAREN638=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10836); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN638);

				DebugLocation(1250, 19);
				PushFollow(Follow._expr_in_functionCall10838);
				expr639=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr639.Tree);
				DebugLocation(1250, 24);
				RPAREN640=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10840); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN640);



				{
				// AST REWRITE
				// elements: VAR_POP, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1250:32: -> ^( FUNC ^( VAR_POP expr ) )
				{
					DebugLocation(1250, 35);
					// MySQL51Parser.g3:1250:35: ^( FUNC ^( VAR_POP expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1250, 37);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1250, 42);
					// MySQL51Parser.g3:1250:42: ^( VAR_POP expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1250, 44);
					root_2 = (object)adaptor.BecomeRoot(stream_VAR_POP.NextNode(), root_2);

					DebugLocation(1250, 52);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 26:
				DebugEnterAlt(26);
				// MySQL51Parser.g3:1251:4: VAR_SAMP LPAREN expr RPAREN
				{
				DebugLocation(1251, 4);
				VAR_SAMP641=(IToken)Match(input,VAR_SAMP,Follow._VAR_SAMP_in_functionCall10858); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_VAR_SAMP.Add(VAR_SAMP641);

				DebugLocation(1251, 13);
				LPAREN642=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10860); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN642);

				DebugLocation(1251, 20);
				PushFollow(Follow._expr_in_functionCall10862);
				expr643=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr643.Tree);
				DebugLocation(1251, 25);
				RPAREN644=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10864); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN644);



				{
				// AST REWRITE
				// elements: VAR_SAMP, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1251:33: -> ^( FUNC ^( VAR_SAMP expr ) )
				{
					DebugLocation(1251, 36);
					// MySQL51Parser.g3:1251:36: ^( FUNC ^( VAR_SAMP expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1251, 38);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1251, 43);
					// MySQL51Parser.g3:1251:43: ^( VAR_SAMP expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1251, 45);
					root_2 = (object)adaptor.BecomeRoot(stream_VAR_SAMP.NextNode(), root_2);

					DebugLocation(1251, 54);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 27:
				DebugEnterAlt(27);
				// MySQL51Parser.g3:1254:4: ADDDATE LPAREN date= expr COMMA ( ( INTERVAL )=> INTERVAL interval= expr timeUnit RPAREN -> ^( FUNC ^( ADDDATE $date $interval timeUnit ) ) |days= expr RPAREN -> ^( FUNC ^( ADDDATE $date $days) ) )
				{
				DebugLocation(1254, 4);
				ADDDATE645=(IToken)Match(input,ADDDATE,Follow._ADDDATE_in_functionCall10885); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_ADDDATE.Add(ADDDATE645);

				DebugLocation(1254, 12);
				LPAREN646=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10887); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN646);

				DebugLocation(1254, 23);
				PushFollow(Follow._expr_in_functionCall10891);
				date=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(date.Tree);
				DebugLocation(1254, 29);
				COMMA647=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall10893); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA647);

				DebugLocation(1255, 3);
				// MySQL51Parser.g3:1255:3: ( ( INTERVAL )=> INTERVAL interval= expr timeUnit RPAREN -> ^( FUNC ^( ADDDATE $date $interval timeUnit ) ) |days= expr RPAREN -> ^( FUNC ^( ADDDATE $date $days) ) )
				int alt252=2;
				try { DebugEnterSubRule(252);
				try { DebugEnterDecision(252, false);
				try
				{
					alt252 = dfa252.Predict(input);
				}
				catch (NoViableAltException nvae)
				{
					DebugRecognitionException(nvae);
					throw;
				}
				} finally { DebugExitDecision(252); }
				switch (alt252)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1255:5: ( INTERVAL )=> INTERVAL interval= expr timeUnit RPAREN
					{
					DebugLocation(1255, 18);
					INTERVAL648=(IToken)Match(input,INTERVAL,Follow._INTERVAL_in_functionCall10905); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_INTERVAL.Add(INTERVAL648);

					DebugLocation(1255, 35);
					PushFollow(Follow._expr_in_functionCall10909);
					interval=expr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_expr.Add(interval.Tree);
					DebugLocation(1255, 41);
					PushFollow(Follow._timeUnit_in_functionCall10911);
					timeUnit649=timeUnit();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_timeUnit.Add(timeUnit649.Tree);
					DebugLocation(1255, 50);
					RPAREN650=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10913); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_RPAREN.Add(RPAREN650);



					{
					// AST REWRITE
					// elements: ADDDATE, date, interval, timeUnit
					// token labels: 
					// rule labels: date, interval, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleSubtreeStream stream_date=new RewriteRuleSubtreeStream(adaptor,"rule date",date!=null?date.Tree:null);
					RewriteRuleSubtreeStream stream_interval=new RewriteRuleSubtreeStream(adaptor,"rule interval",interval!=null?interval.Tree:null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 1255:58: -> ^( FUNC ^( ADDDATE $date $interval timeUnit ) )
					{
						DebugLocation(1255, 61);
						// MySQL51Parser.g3:1255:61: ^( FUNC ^( ADDDATE $date $interval timeUnit ) )
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(1255, 63);
						root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

						DebugLocation(1255, 68);
						// MySQL51Parser.g3:1255:68: ^( ADDDATE $date $interval timeUnit )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1255, 70);
						root_2 = (object)adaptor.BecomeRoot(stream_ADDDATE.NextNode(), root_2);

						DebugLocation(1255, 79);
						adaptor.AddChild(root_2, stream_date.NextTree());
						DebugLocation(1255, 85);
						adaptor.AddChild(root_2, stream_interval.NextTree());
						DebugLocation(1255, 94);
						adaptor.AddChild(root_2, stream_timeUnit.NextTree());

						adaptor.AddChild(root_1, root_2);
						}

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:1256:5: days= expr RPAREN
					{
					DebugLocation(1256, 9);
					PushFollow(Follow._expr_in_functionCall10940);
					days=expr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_expr.Add(days.Tree);
					DebugLocation(1256, 15);
					RPAREN651=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10942); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_RPAREN.Add(RPAREN651);



					{
					// AST REWRITE
					// elements: ADDDATE, date, days
					// token labels: 
					// rule labels: date, days, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleSubtreeStream stream_date=new RewriteRuleSubtreeStream(adaptor,"rule date",date!=null?date.Tree:null);
					RewriteRuleSubtreeStream stream_days=new RewriteRuleSubtreeStream(adaptor,"rule days",days!=null?days.Tree:null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 1256:23: -> ^( FUNC ^( ADDDATE $date $days) )
					{
						DebugLocation(1256, 26);
						// MySQL51Parser.g3:1256:26: ^( FUNC ^( ADDDATE $date $days) )
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(1256, 28);
						root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

						DebugLocation(1256, 33);
						// MySQL51Parser.g3:1256:33: ^( ADDDATE $date $days)
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1256, 35);
						root_2 = (object)adaptor.BecomeRoot(stream_ADDDATE.NextNode(), root_2);

						DebugLocation(1256, 44);
						adaptor.AddChild(root_2, stream_date.NextTree());
						DebugLocation(1256, 50);
						adaptor.AddChild(root_2, stream_days.NextTree());

						adaptor.AddChild(root_1, root_2);
						}

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;

				}
				} finally { DebugExitSubRule(252); }


				}
				break;
			case 28:
				DebugEnterAlt(28);
				// MySQL51Parser.g3:1258:4: CURDATE LPAREN RPAREN
				{
				DebugLocation(1258, 4);
				CURDATE652=(IToken)Match(input,CURDATE,Follow._CURDATE_in_functionCall10968); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CURDATE.Add(CURDATE652);

				DebugLocation(1258, 12);
				LPAREN653=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10970); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN653);

				DebugLocation(1258, 19);
				RPAREN654=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10972); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN654);



				{
				// AST REWRITE
				// elements: CURDATE, LPAREN
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1258:27: -> ^( FUNC ^( CURDATE LPAREN ) )
				{
					DebugLocation(1258, 30);
					// MySQL51Parser.g3:1258:30: ^( FUNC ^( CURDATE LPAREN ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1258, 32);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1258, 37);
					// MySQL51Parser.g3:1258:37: ^( CURDATE LPAREN )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1258, 39);
					root_2 = (object)adaptor.BecomeRoot(stream_CURDATE.NextNode(), root_2);

					DebugLocation(1258, 47);
					adaptor.AddChild(root_2, stream_LPAREN.NextNode());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 29:
				DebugEnterAlt(29);
				// MySQL51Parser.g3:1259:4: CURRENT_DATE ( LPAREN RPAREN )?
				{
				DebugLocation(1259, 4);
				CURRENT_DATE655=(IToken)Match(input,CURRENT_DATE,Follow._CURRENT_DATE_in_functionCall10990); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CURRENT_DATE.Add(CURRENT_DATE655);

				DebugLocation(1259, 17);
				// MySQL51Parser.g3:1259:17: ( LPAREN RPAREN )?
				int alt253=2;
				try { DebugEnterSubRule(253);
				try { DebugEnterDecision(253, false);
				int LA253_0 = input.LA(1);

				if ((LA253_0==LPAREN))
				{
					int LA253_1 = input.LA(2);

					if ((LA253_1==RPAREN))
					{
						alt253 = 1;
					}
				}
				} finally { DebugExitDecision(253); }
				switch (alt253)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1259:18: LPAREN RPAREN
					{
					DebugLocation(1259, 18);
					LPAREN656=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall10993); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_LPAREN.Add(LPAREN656);

					DebugLocation(1259, 25);
					RPAREN657=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall10995); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_RPAREN.Add(RPAREN657);


					}
					break;

				}
				} finally { DebugExitSubRule(253); }



				{
				// AST REWRITE
				// elements: CURRENT_DATE, LPAREN
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1259:34: -> ^( FUNC ^( CURRENT_DATE ( LPAREN )? ) )
				{
					DebugLocation(1259, 37);
					// MySQL51Parser.g3:1259:37: ^( FUNC ^( CURRENT_DATE ( LPAREN )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1259, 39);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1259, 44);
					// MySQL51Parser.g3:1259:44: ^( CURRENT_DATE ( LPAREN )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1259, 46);
					root_2 = (object)adaptor.BecomeRoot(stream_CURRENT_DATE.NextNode(), root_2);

					DebugLocation(1259, 59);
					// MySQL51Parser.g3:1259:59: ( LPAREN )?
					if (stream_LPAREN.HasNext)
					{
						DebugLocation(1259, 59);
						adaptor.AddChild(root_2, stream_LPAREN.NextNode());

					}
					stream_LPAREN.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 30:
				DebugEnterAlt(30);
				// MySQL51Parser.g3:1260:4: CURTIME LPAREN RPAREN
				{
				DebugLocation(1260, 4);
				CURTIME658=(IToken)Match(input,CURTIME,Follow._CURTIME_in_functionCall11015); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CURTIME.Add(CURTIME658);

				DebugLocation(1260, 12);
				LPAREN659=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall11017); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN659);

				DebugLocation(1260, 19);
				RPAREN660=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall11019); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN660);



				{
				// AST REWRITE
				// elements: CURTIME, LPAREN
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1260:28: -> ^( FUNC ^( CURTIME LPAREN ) )
				{
					DebugLocation(1260, 31);
					// MySQL51Parser.g3:1260:31: ^( FUNC ^( CURTIME LPAREN ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1260, 33);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1260, 38);
					// MySQL51Parser.g3:1260:38: ^( CURTIME LPAREN )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1260, 40);
					root_2 = (object)adaptor.BecomeRoot(stream_CURTIME.NextNode(), root_2);

					DebugLocation(1260, 48);
					adaptor.AddChild(root_2, stream_LPAREN.NextNode());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 31:
				DebugEnterAlt(31);
				// MySQL51Parser.g3:1261:4: CURRENT_TIME ( LPAREN RPAREN )?
				{
				DebugLocation(1261, 4);
				CURRENT_TIME661=(IToken)Match(input,CURRENT_TIME,Follow._CURRENT_TIME_in_functionCall11038); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CURRENT_TIME.Add(CURRENT_TIME661);

				DebugLocation(1261, 17);
				// MySQL51Parser.g3:1261:17: ( LPAREN RPAREN )?
				int alt254=2;
				try { DebugEnterSubRule(254);
				try { DebugEnterDecision(254, false);
				int LA254_0 = input.LA(1);

				if ((LA254_0==LPAREN))
				{
					int LA254_1 = input.LA(2);

					if ((LA254_1==RPAREN))
					{
						alt254 = 1;
					}
				}
				} finally { DebugExitDecision(254); }
				switch (alt254)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1261:18: LPAREN RPAREN
					{
					DebugLocation(1261, 18);
					LPAREN662=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall11041); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_LPAREN.Add(LPAREN662);

					DebugLocation(1261, 25);
					RPAREN663=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall11043); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_RPAREN.Add(RPAREN663);


					}
					break;

				}
				} finally { DebugExitSubRule(254); }



				{
				// AST REWRITE
				// elements: CURRENT_TIME, LPAREN
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1261:34: -> ^( FUNC ^( CURRENT_TIME ( LPAREN )? ) )
				{
					DebugLocation(1261, 37);
					// MySQL51Parser.g3:1261:37: ^( FUNC ^( CURRENT_TIME ( LPAREN )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1261, 39);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1261, 44);
					// MySQL51Parser.g3:1261:44: ^( CURRENT_TIME ( LPAREN )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1261, 46);
					root_2 = (object)adaptor.BecomeRoot(stream_CURRENT_TIME.NextNode(), root_2);

					DebugLocation(1261, 59);
					// MySQL51Parser.g3:1261:59: ( LPAREN )?
					if (stream_LPAREN.HasNext)
					{
						DebugLocation(1261, 59);
						adaptor.AddChild(root_2, stream_LPAREN.NextNode());

					}
					stream_LPAREN.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 32:
				DebugEnterAlt(32);
				// MySQL51Parser.g3:1262:4: EXTRACT LPAREN timeUnit FROM expr RPAREN
				{
				DebugLocation(1262, 4);
				EXTRACT664=(IToken)Match(input,EXTRACT,Follow._EXTRACT_in_functionCall11063); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_EXTRACT.Add(EXTRACT664);

				DebugLocation(1262, 12);
				LPAREN665=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall11065); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN665);

				DebugLocation(1262, 19);
				PushFollow(Follow._timeUnit_in_functionCall11067);
				timeUnit666=timeUnit();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_timeUnit.Add(timeUnit666.Tree);
				DebugLocation(1262, 28);
				FROM667=(IToken)Match(input,FROM,Follow._FROM_in_functionCall11069); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_FROM.Add(FROM667);

				DebugLocation(1262, 33);
				PushFollow(Follow._expr_in_functionCall11071);
				expr668=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr668.Tree);
				DebugLocation(1262, 38);
				RPAREN669=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall11073); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN669);



				{
				// AST REWRITE
				// elements: EXTRACT, timeUnit, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1262:46: -> ^( FUNC ^( EXTRACT timeUnit expr ) )
				{
					DebugLocation(1262, 49);
					// MySQL51Parser.g3:1262:49: ^( FUNC ^( EXTRACT timeUnit expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1262, 51);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1262, 56);
					// MySQL51Parser.g3:1262:56: ^( EXTRACT timeUnit expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1262, 58);
					root_2 = (object)adaptor.BecomeRoot(stream_EXTRACT.NextNode(), root_2);

					DebugLocation(1262, 66);
					adaptor.AddChild(root_2, stream_timeUnit.NextTree());
					DebugLocation(1262, 75);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 33:
				DebugEnterAlt(33);
				// MySQL51Parser.g3:1263:4: GET_FORMAT LPAREN (type= DATE |type= TIME |type= DATETIME ) locale= expr RPAREN
				{
				DebugLocation(1263, 4);
				GET_FORMAT670=(IToken)Match(input,GET_FORMAT,Follow._GET_FORMAT_in_functionCall11093); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_GET_FORMAT.Add(GET_FORMAT670);

				DebugLocation(1263, 15);
				LPAREN671=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall11095); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN671);

				DebugLocation(1264, 4);
				// MySQL51Parser.g3:1264:4: (type= DATE |type= TIME |type= DATETIME )
				int alt255=3;
				try { DebugEnterSubRule(255);
				try { DebugEnterDecision(255, false);
				switch (input.LA(1))
				{
				case DATE:
					{
					alt255 = 1;
					}
					break;
				case TIME:
					{
					alt255 = 2;
					}
					break;
				case DATETIME:
					{
					alt255 = 3;
					}
					break;
				default:
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 255, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
				}

				} finally { DebugExitDecision(255); }
				switch (alt255)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1264:5: type= DATE
					{
					DebugLocation(1264, 9);
					type=(IToken)Match(input,DATE,Follow._DATE_in_functionCall11104); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_DATE.Add(type);


					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:1264:17: type= TIME
					{
					DebugLocation(1264, 21);
					type=(IToken)Match(input,TIME,Follow._TIME_in_functionCall11110); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_TIME.Add(type);


					}
					break;
				case 3:
					DebugEnterAlt(3);
					// MySQL51Parser.g3:1264:29: type= DATETIME
					{
					DebugLocation(1264, 33);
					type=(IToken)Match(input,DATETIME,Follow._DATETIME_in_functionCall11116); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_DATETIME.Add(type);


					}
					break;

				}
				} finally { DebugExitSubRule(255); }

				DebugLocation(1265, 10);
				PushFollow(Follow._expr_in_functionCall11124);
				locale=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(locale.Tree);
				DebugLocation(1266, 3);
				RPAREN672=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall11128); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN672);



				{
				// AST REWRITE
				// elements: GET_FORMAT, type, locale
				// token labels: type
				// rule labels: locale, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleITokenStream stream_type=new RewriteRuleITokenStream(adaptor,"token type",type);
				RewriteRuleSubtreeStream stream_locale=new RewriteRuleSubtreeStream(adaptor,"rule locale",locale!=null?locale.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1266:17: -> ^( FUNC ^( GET_FORMAT $type $locale) )
				{
					DebugLocation(1266, 20);
					// MySQL51Parser.g3:1266:20: ^( FUNC ^( GET_FORMAT $type $locale) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1266, 22);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1266, 27);
					// MySQL51Parser.g3:1266:27: ^( GET_FORMAT $type $locale)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1266, 29);
					root_2 = (object)adaptor.BecomeRoot(stream_GET_FORMAT.NextNode(), root_2);

					DebugLocation(1266, 41);
					adaptor.AddChild(root_2, stream_type.NextNode());
					DebugLocation(1266, 47);
					adaptor.AddChild(root_2, stream_locale.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 34:
				DebugEnterAlt(34);
				// MySQL51Parser.g3:1267:4: NOW LPAREN RPAREN
				{
				DebugLocation(1267, 4);
				NOW673=(IToken)Match(input,NOW,Follow._NOW_in_functionCall11156); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_NOW.Add(NOW673);

				DebugLocation(1267, 8);
				LPAREN674=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall11158); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN674);

				DebugLocation(1267, 15);
				RPAREN675=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall11160); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN675);



				{
				// AST REWRITE
				// elements: NOW, LPAREN
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1267:26: -> ^( FUNC ^( NOW LPAREN ) )
				{
					DebugLocation(1267, 29);
					// MySQL51Parser.g3:1267:29: ^( FUNC ^( NOW LPAREN ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1267, 31);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1267, 36);
					// MySQL51Parser.g3:1267:36: ^( NOW LPAREN )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1267, 38);
					root_2 = (object)adaptor.BecomeRoot(stream_NOW.NextNode(), root_2);

					DebugLocation(1267, 42);
					adaptor.AddChild(root_2, stream_LPAREN.NextNode());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 35:
				DebugEnterAlt(35);
				// MySQL51Parser.g3:1268:4: CURRENT_TIMESTAMP ( LPAREN RPAREN )?
				{
				DebugLocation(1268, 4);
				CURRENT_TIMESTAMP676=(IToken)Match(input,CURRENT_TIMESTAMP,Follow._CURRENT_TIMESTAMP_in_functionCall11181); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CURRENT_TIMESTAMP.Add(CURRENT_TIMESTAMP676);

				DebugLocation(1268, 22);
				// MySQL51Parser.g3:1268:22: ( LPAREN RPAREN )?
				int alt256=2;
				try { DebugEnterSubRule(256);
				try { DebugEnterDecision(256, false);
				int LA256_0 = input.LA(1);

				if ((LA256_0==LPAREN))
				{
					int LA256_1 = input.LA(2);

					if ((LA256_1==RPAREN))
					{
						alt256 = 1;
					}
				}
				} finally { DebugExitDecision(256); }
				switch (alt256)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1268:23: LPAREN RPAREN
					{
					DebugLocation(1268, 23);
					LPAREN677=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall11184); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_LPAREN.Add(LPAREN677);

					DebugLocation(1268, 30);
					RPAREN678=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall11186); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_RPAREN.Add(RPAREN678);


					}
					break;

				}
				} finally { DebugExitSubRule(256); }



				{
				// AST REWRITE
				// elements: CURRENT_TIMESTAMP, LPAREN
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1268:39: -> ^( FUNC ^( CURRENT_TIMESTAMP ( LPAREN )? ) )
				{
					DebugLocation(1268, 42);
					// MySQL51Parser.g3:1268:42: ^( FUNC ^( CURRENT_TIMESTAMP ( LPAREN )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1268, 44);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1268, 49);
					// MySQL51Parser.g3:1268:49: ^( CURRENT_TIMESTAMP ( LPAREN )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1268, 51);
					root_2 = (object)adaptor.BecomeRoot(stream_CURRENT_TIMESTAMP.NextNode(), root_2);

					DebugLocation(1268, 69);
					// MySQL51Parser.g3:1268:69: ( LPAREN )?
					if (stream_LPAREN.HasNext)
					{
						DebugLocation(1268, 69);
						adaptor.AddChild(root_2, stream_LPAREN.NextNode());

					}
					stream_LPAREN.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 36:
				DebugEnterAlt(36);
				// MySQL51Parser.g3:1269:4: POSITION LPAREN substr= expr IN str= expr RPAREN
				{
				DebugLocation(1269, 4);
				POSITION679=(IToken)Match(input,POSITION,Follow._POSITION_in_functionCall11206); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_POSITION.Add(POSITION679);

				DebugLocation(1269, 13);
				LPAREN680=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall11208); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN680);

				DebugLocation(1269, 26);
				PushFollow(Follow._expr_in_functionCall11212);
				substr=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(substr.Tree);
				DebugLocation(1269, 32);
				IN681=(IToken)Match(input,IN,Follow._IN_in_functionCall11214); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_IN.Add(IN681);

				DebugLocation(1269, 38);
				PushFollow(Follow._expr_in_functionCall11218);
				str=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(str.Tree);
				DebugLocation(1269, 44);
				RPAREN682=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall11220); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN682);



				{
				// AST REWRITE
				// elements: POSITION, substr, str
				// token labels: 
				// rule labels: substr, str, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_substr=new RewriteRuleSubtreeStream(adaptor,"rule substr",substr!=null?substr.Tree:null);
				RewriteRuleSubtreeStream stream_str=new RewriteRuleSubtreeStream(adaptor,"rule str",str!=null?str.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1269:52: -> ^( FUNC ^( POSITION $substr $str) )
				{
					DebugLocation(1269, 55);
					// MySQL51Parser.g3:1269:55: ^( FUNC ^( POSITION $substr $str) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1269, 57);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1269, 62);
					// MySQL51Parser.g3:1269:62: ^( POSITION $substr $str)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1269, 64);
					root_2 = (object)adaptor.BecomeRoot(stream_POSITION.NextNode(), root_2);

					DebugLocation(1269, 74);
					adaptor.AddChild(root_2, stream_substr.NextTree());
					DebugLocation(1269, 82);
					adaptor.AddChild(root_2, stream_str.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 37:
				DebugEnterAlt(37);
				// MySQL51Parser.g3:1270:4: SUBDATE LPAREN date= expr COMMA (days= expr -> ^( FUNC ^( SUBDATE $date $days) ) | ( INTERVAL )=> INTERVAL interval= expr timeUnit -> ^( FUNC ^( SUBDATE $date $interval timeUnit ) ) ) RPAREN
				{
				DebugLocation(1270, 4);
				SUBDATE683=(IToken)Match(input,SUBDATE,Follow._SUBDATE_in_functionCall11244); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_SUBDATE.Add(SUBDATE683);

				DebugLocation(1270, 12);
				LPAREN684=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall11246); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN684);

				DebugLocation(1270, 23);
				PushFollow(Follow._expr_in_functionCall11250);
				date=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(date.Tree);
				DebugLocation(1270, 29);
				COMMA685=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall11252); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA685);

				DebugLocation(1271, 4);
				// MySQL51Parser.g3:1271:4: (days= expr -> ^( FUNC ^( SUBDATE $date $days) ) | ( INTERVAL )=> INTERVAL interval= expr timeUnit -> ^( FUNC ^( SUBDATE $date $interval timeUnit ) ) )
				int alt257=2;
				try { DebugEnterSubRule(257);
				try { DebugEnterDecision(257, false);
				try
				{
					alt257 = dfa257.Predict(input);
				}
				catch (NoViableAltException nvae)
				{
					DebugRecognitionException(nvae);
					throw;
				}
				} finally { DebugExitDecision(257); }
				switch (alt257)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1271:6: days= expr
					{
					DebugLocation(1271, 10);
					PushFollow(Follow._expr_in_functionCall11261);
					days=expr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_expr.Add(days.Tree);


					{
					// AST REWRITE
					// elements: SUBDATE, date, days
					// token labels: 
					// rule labels: date, days, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleSubtreeStream stream_date=new RewriteRuleSubtreeStream(adaptor,"rule date",date!=null?date.Tree:null);
					RewriteRuleSubtreeStream stream_days=new RewriteRuleSubtreeStream(adaptor,"rule days",days!=null?days.Tree:null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 1271:18: -> ^( FUNC ^( SUBDATE $date $days) )
					{
						DebugLocation(1271, 21);
						// MySQL51Parser.g3:1271:21: ^( FUNC ^( SUBDATE $date $days) )
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(1271, 23);
						root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

						DebugLocation(1271, 28);
						// MySQL51Parser.g3:1271:28: ^( SUBDATE $date $days)
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1271, 30);
						root_2 = (object)adaptor.BecomeRoot(stream_SUBDATE.NextNode(), root_2);

						DebugLocation(1271, 39);
						adaptor.AddChild(root_2, stream_date.NextTree());
						DebugLocation(1271, 45);
						adaptor.AddChild(root_2, stream_days.NextTree());

						adaptor.AddChild(root_1, root_2);
						}

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:1272:6: ( INTERVAL )=> INTERVAL interval= expr timeUnit
					{
					DebugLocation(1272, 18);
					INTERVAL686=(IToken)Match(input,INTERVAL,Follow._INTERVAL_in_functionCall11290); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_INTERVAL.Add(INTERVAL686);

					DebugLocation(1272, 35);
					PushFollow(Follow._expr_in_functionCall11294);
					interval=expr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_expr.Add(interval.Tree);
					DebugLocation(1272, 41);
					PushFollow(Follow._timeUnit_in_functionCall11296);
					timeUnit687=timeUnit();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_timeUnit.Add(timeUnit687.Tree);


					{
					// AST REWRITE
					// elements: SUBDATE, date, interval, timeUnit
					// token labels: 
					// rule labels: date, interval, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleSubtreeStream stream_date=new RewriteRuleSubtreeStream(adaptor,"rule date",date!=null?date.Tree:null);
					RewriteRuleSubtreeStream stream_interval=new RewriteRuleSubtreeStream(adaptor,"rule interval",interval!=null?interval.Tree:null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 1272:50: -> ^( FUNC ^( SUBDATE $date $interval timeUnit ) )
					{
						DebugLocation(1272, 53);
						// MySQL51Parser.g3:1272:53: ^( FUNC ^( SUBDATE $date $interval timeUnit ) )
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(1272, 55);
						root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

						DebugLocation(1272, 60);
						// MySQL51Parser.g3:1272:60: ^( SUBDATE $date $interval timeUnit )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1272, 62);
						root_2 = (object)adaptor.BecomeRoot(stream_SUBDATE.NextNode(), root_2);

						DebugLocation(1272, 71);
						adaptor.AddChild(root_2, stream_date.NextTree());
						DebugLocation(1272, 77);
						adaptor.AddChild(root_2, stream_interval.NextTree());
						DebugLocation(1272, 86);
						adaptor.AddChild(root_2, stream_timeUnit.NextTree());

						adaptor.AddChild(root_1, root_2);
						}

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;

				}
				} finally { DebugExitSubRule(257); }

				DebugLocation(1274, 3);
				RPAREN688=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall11323); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN688);


				}
				break;
			case 38:
				DebugEnterAlt(38);
				// MySQL51Parser.g3:1276:4: (funcName= SUBSTR |funcName= SUBSTRING ) LPAREN str= expr ( COMMA position= expr COMMA (len= expr )? -> ^( FUNC ^( $funcName $str $position ( $len)? ) ) | FROM position= expr ( FOR len= expr )? -> ^( FUNC ^( $funcName $str $position ( $len)? ( FROM )? ) ) ) RPAREN
				{
				DebugLocation(1276, 4);
				// MySQL51Parser.g3:1276:4: (funcName= SUBSTR |funcName= SUBSTRING )
				int alt258=2;
				try { DebugEnterSubRule(258);
				try { DebugEnterDecision(258, false);
				int LA258_0 = input.LA(1);

				if ((LA258_0==SUBSTR))
				{
					alt258 = 1;
				}
				else if ((LA258_0==SUBSTRING))
				{
					alt258 = 2;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 258, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
				} finally { DebugExitDecision(258); }
				switch (alt258)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1276:5: funcName= SUBSTR
					{
					DebugLocation(1276, 13);
					funcName=(IToken)Match(input,SUBSTR,Follow._SUBSTR_in_functionCall11333); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SUBSTR.Add(funcName);


					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:1276:23: funcName= SUBSTRING
					{
					DebugLocation(1276, 31);
					funcName=(IToken)Match(input,SUBSTRING,Follow._SUBSTRING_in_functionCall11339); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_SUBSTRING.Add(funcName);


					}
					break;

				}
				} finally { DebugExitSubRule(258); }

				DebugLocation(1276, 43);
				LPAREN689=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall11342); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN689);

				DebugLocation(1277, 7);
				PushFollow(Follow._expr_in_functionCall11350);
				str=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(str.Tree);
				DebugLocation(1278, 4);
				// MySQL51Parser.g3:1278:4: ( COMMA position= expr COMMA (len= expr )? -> ^( FUNC ^( $funcName $str $position ( $len)? ) ) | FROM position= expr ( FOR len= expr )? -> ^( FUNC ^( $funcName $str $position ( $len)? ( FROM )? ) ) )
				int alt261=2;
				try { DebugEnterSubRule(261);
				try { DebugEnterDecision(261, false);
				int LA261_0 = input.LA(1);

				if ((LA261_0==COMMA))
				{
					alt261 = 1;
				}
				else if ((LA261_0==FROM))
				{
					alt261 = 2;
				}
				else
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 261, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
				} finally { DebugExitDecision(261); }
				switch (alt261)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1278:6: COMMA position= expr COMMA (len= expr )?
					{
					DebugLocation(1278, 6);
					COMMA690=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall11358); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMA.Add(COMMA690);

					DebugLocation(1278, 20);
					PushFollow(Follow._expr_in_functionCall11362);
					position=expr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_expr.Add(position.Tree);
					DebugLocation(1278, 26);
					COMMA691=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall11364); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMA.Add(COMMA691);

					DebugLocation(1278, 35);
					// MySQL51Parser.g3:1278:35: (len= expr )?
					int alt259=2;
					try { DebugEnterSubRule(259);
					try { DebugEnterDecision(259, false);
					int LA259_0 = input.LA(1);

					if ((LA259_0==ACTION||(LA259_0>=ADDDATE && LA259_0<=ALGORITHM)||LA259_0==ANY||LA259_0==ASCII||(LA259_0>=AT && LA259_0<=BACKUP)||LA259_0==BEGIN||(LA259_0>=BINARY && LA259_0<=BIT)||LA259_0==BITWISE_INVERSION||(LA259_0>=BIT_AND && LA259_0<=BIT_XOR)||(LA259_0>=BLOCK && LA259_0<=BOOLEAN)||LA259_0==BTREE||(LA259_0>=BYTE && LA259_0<=CACHE)||LA259_0==CASCADED||(LA259_0>=CAST && LA259_0<=CHAIN)||(LA259_0>=CHANGED && LA259_0<=CHAR)||LA259_0==CHARSET||(LA259_0>=CHECKSUM && LA259_0<=COLLATION)||LA259_0==COLUMNS||LA259_0==COMMENT||(LA259_0>=COMMIT && LA259_0<=CONCURRENT)||(LA259_0>=CONNECTION && LA259_0<=CONSISTENT)||(LA259_0>=CONTAINS && LA259_0<=CONTEXT)||LA259_0==CONTRIBUTORS||(LA259_0>=COUNT && LA259_0<=CPU)||(LA259_0>=CUBE && LA259_0<=CURRENT_USER)||LA259_0==CURTIME||(LA259_0>=DATA && LA259_0<=DATABASE)||(LA259_0>=DATAFILE && LA259_0<=DATE_ADD)||LA259_0==DATE_SUB||LA259_0==DAY||LA259_0==DEALLOCATE||LA259_0==DEFINER||LA259_0==DELAY_KEY_WRITE||LA259_0==DES_KEY_FILE||(LA259_0>=DIRECTORY && LA259_0<=DISK)||LA259_0==DO||(LA259_0>=DUMPFILE && LA259_0<=DYNAMIC)||LA259_0==ENABLE||(LA259_0>=END && LA259_0<=ENUM)||(LA259_0>=ERRORS && LA259_0<=ESCAPE)||(LA259_0>=EVENT && LA259_0<=EXISTS)||LA259_0==EXPANSION||(LA259_0>=EXTENDED && LA259_0<=FAULTS)||(LA259_0>=FIELDS && LA259_0<=FIXED)||LA259_0==FLUSH||(LA259_0>=FOUND && LA259_0<=FRAC_SECOND)||LA259_0==FULL||(LA259_0>=FUNCTION && LA259_0<=GLOBAL_VARIABLE)||LA259_0==GRANTS||(LA259_0>=GROUP && LA259_0<=HASH)||(LA259_0>=HELP && LA259_0<=HEXA_VALUE)||(LA259_0>=HOST && LA259_0<=HOUR)||(LA259_0>=ID && LA259_0<=IF)||LA259_0==IMPORT||LA259_0==INDEXES||LA259_0==INITIAL_SIZE||LA259_0==INNOBASE||(LA259_0>=INSERT && LA259_0<=INSTALL)||LA259_0==INTERVAL||(LA259_0>=INVOKER && LA259_0<=IPC)||(LA259_0>=ISOLATION && LA259_0<=ISSUER)||LA259_0==KEY_BLOCK_SIZE||(LA259_0>=LABEL && LA259_0<=LAST)||(LA259_0>=LEAVES && LA259_0<=LEFT)||LA259_0==LESS||LA259_0==LEVEL||(LA259_0>=LINESTRING && LA259_0<=LIST)||LA259_0==LOCAL||(LA259_0>=LOCKS && LA259_0<=LOGFILE)||LA259_0==LOGS||(LA259_0>=LPAREN && LA259_0<=MASTER_SSL_KEY)||LA259_0==MASTER_USER||(LA259_0>=MAX && LA259_0<=MEDIUM)||(LA259_0>=MEMORY && LA259_0<=MID)||(LA259_0>=MIGRATE && LA259_0<=MINUTE)||(LA259_0>=MIN_ROWS && LA259_0<=MODE)||LA259_0==MODIFY||LA259_0==MONTH||(LA259_0>=MULTILINESTRING && LA259_0<=NATIONAL)||(LA259_0>=NCHAR && LA259_0<=NOT)||(LA259_0>=NOT_OP && LA259_0<=NO_WAIT)||LA259_0==NULL||LA259_0==NUMBER||(LA259_0>=NVARCHAR && LA259_0<=OLD_PASSWORD)||(LA259_0>=ONE && LA259_0<=OPEN)||LA259_0==OPTIONS||(LA259_0>=OWNER && LA259_0<=POSITION)||(LA259_0>=PREPARE && LA259_0<=PREV)||LA259_0==PRIVILEGES||(LA259_0>=PROCESS && LA259_0<=PROFILES)||(LA259_0>=QUARTER && LA259_0<=QUICK)||(LA259_0>=REBUILD && LA259_0<=REDUNDANT)||(LA259_0>=RELAY_LOG_FILE && LA259_0<=RELAY_THREAD)||(LA259_0>=RELOAD && LA259_0<=REMOVE)||(LA259_0>=REORGANIZE && LA259_0<=REPLICATION)||(LA259_0>=RESET && LA259_0<=RESTORE)||LA259_0==RESUME||LA259_0==RETURNS||LA259_0==RIGHT||(LA259_0>=ROLLBACK && LA259_0<=ROW_FORMAT)||(LA259_0>=RTREE && LA259_0<=SCHEDULE)||LA259_0==SECOND||LA259_0==SECURITY||(LA259_0>=SERIAL && LA259_0<=SESSION_VARIABLE)||LA259_0==SHARE||(LA259_0>=SHUTDOWN && LA259_0<=SLAVE)||(LA259_0>=SNAPSHOT && LA259_0<=SOCKET)||(LA259_0>=SONAME && LA259_0<=SOURCE)||(LA259_0>=SQL_BUFFER_RESULT && LA259_0<=SQL_CACHE)||LA259_0==SQL_NO_CACHE||LA259_0==SQL_THREAD||LA259_0==START||(LA259_0>=STARTS && LA259_0<=STORAGE)||(LA259_0>=STRING && LA259_0<=SYSTEM_USER)||(LA259_0>=TABLES && LA259_0<=TEMPTABLE)||(LA259_0>=TEXT && LA259_0<=THAN)||(LA259_0>=TIME && LA259_0<=TIMESTAMP_DIFF)||(LA259_0>=TRANSACTION && LA259_0<=TRANSACTIONAL)||(LA259_0>=TRIGGERS && LA259_0<=UNDEFINED)||(LA259_0>=UNDOFILE && LA259_0<=UNINSTALL)||LA259_0==UNKNOWN||LA259_0==UNTIL||LA259_0==UPGRADE||LA259_0==USER||LA259_0==USE_FRM||(LA259_0>=UTC_DATE && LA259_0<=VALUE)||LA259_0==VALUE_PLACEHOLDER||(LA259_0>=VARIABLES && LA259_0<=VARIANCE)||(LA259_0>=VAR_POP && LA259_0<=WEEK)||(LA259_0>=WORK && LA259_0<=WRAPPER)||(LA259_0>=X509 && LA259_0<=XA)||LA259_0==YEAR||LA259_0==CONCAT))
					{
						alt259 = 1;
					}
					} finally { DebugExitDecision(259); }
					switch (alt259)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:1278:35: len= expr
						{
						DebugLocation(1278, 35);
						PushFollow(Follow._expr_in_functionCall11368);
						len=expr();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_expr.Add(len.Tree);

						}
						break;

					}
					} finally { DebugExitSubRule(259); }



					{
					// AST REWRITE
					// elements: funcName, str, position, len
					// token labels: funcName
					// rule labels: str, position, len, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleITokenStream stream_funcName=new RewriteRuleITokenStream(adaptor,"token funcName",funcName);
					RewriteRuleSubtreeStream stream_str=new RewriteRuleSubtreeStream(adaptor,"rule str",str!=null?str.Tree:null);
					RewriteRuleSubtreeStream stream_position=new RewriteRuleSubtreeStream(adaptor,"rule position",position!=null?position.Tree:null);
					RewriteRuleSubtreeStream stream_len=new RewriteRuleSubtreeStream(adaptor,"rule len",len!=null?len.Tree:null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 1278:46: -> ^( FUNC ^( $funcName $str $position ( $len)? ) )
					{
						DebugLocation(1278, 49);
						// MySQL51Parser.g3:1278:49: ^( FUNC ^( $funcName $str $position ( $len)? ) )
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(1278, 51);
						root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

						DebugLocation(1278, 56);
						// MySQL51Parser.g3:1278:56: ^( $funcName $str $position ( $len)? )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1278, 59);
						root_2 = (object)adaptor.BecomeRoot(stream_funcName.NextNode(), root_2);

						DebugLocation(1278, 69);
						adaptor.AddChild(root_2, stream_str.NextTree());
						DebugLocation(1278, 74);
						adaptor.AddChild(root_2, stream_position.NextTree());
						DebugLocation(1278, 84);
						// MySQL51Parser.g3:1278:84: ( $len)?
						if (stream_len.HasNext)
						{
							DebugLocation(1278, 84);
							adaptor.AddChild(root_2, stream_len.NextTree());

						}
						stream_len.Reset();

						adaptor.AddChild(root_1, root_2);
						}

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;
				case 2:
					DebugEnterAlt(2);
					// MySQL51Parser.g3:1279:6: FROM position= expr ( FOR len= expr )?
					{
					DebugLocation(1279, 6);
					FROM692=(IToken)Match(input,FROM,Follow._FROM_in_functionCall11401); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_FROM.Add(FROM692);

					DebugLocation(1279, 19);
					PushFollow(Follow._expr_in_functionCall11405);
					position=expr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_expr.Add(position.Tree);
					DebugLocation(1279, 25);
					// MySQL51Parser.g3:1279:25: ( FOR len= expr )?
					int alt260=2;
					try { DebugEnterSubRule(260);
					try { DebugEnterDecision(260, false);
					int LA260_0 = input.LA(1);

					if ((LA260_0==FOR))
					{
						alt260 = 1;
					}
					} finally { DebugExitDecision(260); }
					switch (alt260)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:1279:26: FOR len= expr
						{
						DebugLocation(1279, 26);
						FOR693=(IToken)Match(input,FOR,Follow._FOR_in_functionCall11408); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_FOR.Add(FOR693);

						DebugLocation(1279, 33);
						PushFollow(Follow._expr_in_functionCall11412);
						len=expr();
						PopFollow();
						if (state.failed) return retval;
						if (state.backtracking == 0) stream_expr.Add(len.Tree);

						}
						break;

					}
					} finally { DebugExitSubRule(260); }



					{
					// AST REWRITE
					// elements: funcName, str, position, len, FROM
					// token labels: funcName
					// rule labels: str, position, len, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if (state.backtracking == 0) {
					retval.Tree = root_0;
					RewriteRuleITokenStream stream_funcName=new RewriteRuleITokenStream(adaptor,"token funcName",funcName);
					RewriteRuleSubtreeStream stream_str=new RewriteRuleSubtreeStream(adaptor,"rule str",str!=null?str.Tree:null);
					RewriteRuleSubtreeStream stream_position=new RewriteRuleSubtreeStream(adaptor,"rule position",position!=null?position.Tree:null);
					RewriteRuleSubtreeStream stream_len=new RewriteRuleSubtreeStream(adaptor,"rule len",len!=null?len.Tree:null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

					root_0 = (object)adaptor.Nil();
					// 1279:43: -> ^( FUNC ^( $funcName $str $position ( $len)? ( FROM )? ) )
					{
						DebugLocation(1279, 46);
						// MySQL51Parser.g3:1279:46: ^( FUNC ^( $funcName $str $position ( $len)? ( FROM )? ) )
						{
						object root_1 = (object)adaptor.Nil();
						DebugLocation(1279, 48);
						root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

						DebugLocation(1279, 53);
						// MySQL51Parser.g3:1279:53: ^( $funcName $str $position ( $len)? ( FROM )? )
						{
						object root_2 = (object)adaptor.Nil();
						DebugLocation(1279, 56);
						root_2 = (object)adaptor.BecomeRoot(stream_funcName.NextNode(), root_2);

						DebugLocation(1279, 66);
						adaptor.AddChild(root_2, stream_str.NextTree());
						DebugLocation(1279, 71);
						adaptor.AddChild(root_2, stream_position.NextTree());
						DebugLocation(1279, 81);
						// MySQL51Parser.g3:1279:81: ( $len)?
						if (stream_len.HasNext)
						{
							DebugLocation(1279, 81);
							adaptor.AddChild(root_2, stream_len.NextTree());

						}
						stream_len.Reset();
						DebugLocation(1279, 86);
						// MySQL51Parser.g3:1279:86: ( FROM )?
						if (stream_FROM.HasNext)
						{
							DebugLocation(1279, 86);
							adaptor.AddChild(root_2, stream_FROM.NextNode());

						}
						stream_FROM.Reset();

						adaptor.AddChild(root_1, root_2);
						}

						adaptor.AddChild(root_0, root_1);
						}

					}

					retval.Tree = root_0;
					}
					}

					}
					break;

				}
				} finally { DebugExitSubRule(261); }

				DebugLocation(1281, 4);
				RPAREN694=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall11450); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN694);


				}
				break;
			case 39:
				DebugEnterAlt(39);
				// MySQL51Parser.g3:1282:4: SYSDATE LPAREN RPAREN
				{
				DebugLocation(1282, 4);
				SYSDATE695=(IToken)Match(input,SYSDATE,Follow._SYSDATE_in_functionCall11455); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_SYSDATE.Add(SYSDATE695);

				DebugLocation(1282, 12);
				LPAREN696=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall11457); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN696);

				DebugLocation(1282, 19);
				RPAREN697=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall11459); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN697);



				{
				// AST REWRITE
				// elements: SYSDATE, LPAREN
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1282:29: -> ^( FUNC ^( SYSDATE LPAREN ) )
				{
					DebugLocation(1282, 32);
					// MySQL51Parser.g3:1282:32: ^( FUNC ^( SYSDATE LPAREN ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1282, 34);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1282, 39);
					// MySQL51Parser.g3:1282:39: ^( SYSDATE LPAREN )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1282, 41);
					root_2 = (object)adaptor.BecomeRoot(stream_SYSDATE.NextNode(), root_2);

					DebugLocation(1282, 49);
					adaptor.AddChild(root_2, stream_LPAREN.NextNode());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 40:
				DebugEnterAlt(40);
				// MySQL51Parser.g3:1283:4: TIMESTAMP_ADD LPAREN timestampUnit interval= expr date= expr RPAREN
				{
				DebugLocation(1283, 4);
				TIMESTAMP_ADD698=(IToken)Match(input,TIMESTAMP_ADD,Follow._TIMESTAMP_ADD_in_functionCall11479); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TIMESTAMP_ADD.Add(TIMESTAMP_ADD698);

				DebugLocation(1283, 18);
				LPAREN699=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall11481); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN699);

				DebugLocation(1284, 4);
				PushFollow(Follow._timestampUnit_in_functionCall11486);
				timestampUnit700=timestampUnit();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_timestampUnit.Add(timestampUnit700.Tree);
				DebugLocation(1285, 12);
				PushFollow(Follow._expr_in_functionCall11493);
				interval=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(interval.Tree);
				DebugLocation(1286, 8);
				PushFollow(Follow._expr_in_functionCall11500);
				date=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(date.Tree);
				DebugLocation(1287, 4);
				RPAREN701=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall11505); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN701);



				{
				// AST REWRITE
				// elements: TIMESTAMP_ADD, date, interval, timestampUnit
				// token labels: 
				// rule labels: date, interval, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_date=new RewriteRuleSubtreeStream(adaptor,"rule date",date!=null?date.Tree:null);
				RewriteRuleSubtreeStream stream_interval=new RewriteRuleSubtreeStream(adaptor,"rule interval",interval!=null?interval.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1287:18: -> ^( FUNC ^( TIMESTAMP_ADD $date $interval timestampUnit ) )
				{
					DebugLocation(1287, 21);
					// MySQL51Parser.g3:1287:21: ^( FUNC ^( TIMESTAMP_ADD $date $interval timestampUnit ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1287, 23);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1287, 28);
					// MySQL51Parser.g3:1287:28: ^( TIMESTAMP_ADD $date $interval timestampUnit )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1287, 30);
					root_2 = (object)adaptor.BecomeRoot(stream_TIMESTAMP_ADD.NextNode(), root_2);

					DebugLocation(1287, 45);
					adaptor.AddChild(root_2, stream_date.NextTree());
					DebugLocation(1287, 51);
					adaptor.AddChild(root_2, stream_interval.NextTree());
					DebugLocation(1287, 60);
					adaptor.AddChild(root_2, stream_timestampUnit.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 41:
				DebugEnterAlt(41);
				// MySQL51Parser.g3:1288:4: TIMESTAMP_DIFF LPAREN timestampUnit date1= expr date2= expr RPAREN
				{
				DebugLocation(1288, 4);
				TIMESTAMP_DIFF702=(IToken)Match(input,TIMESTAMP_DIFF,Follow._TIMESTAMP_DIFF_in_functionCall11535); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TIMESTAMP_DIFF.Add(TIMESTAMP_DIFF702);

				DebugLocation(1288, 19);
				LPAREN703=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall11537); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN703);

				DebugLocation(1289, 4);
				PushFollow(Follow._timestampUnit_in_functionCall11542);
				timestampUnit704=timestampUnit();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_timestampUnit.Add(timestampUnit704.Tree);
				DebugLocation(1290, 9);
				PushFollow(Follow._expr_in_functionCall11549);
				date1=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(date1.Tree);
				DebugLocation(1291, 9);
				PushFollow(Follow._expr_in_functionCall11556);
				date2=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(date2.Tree);
				DebugLocation(1292, 4);
				RPAREN705=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall11561); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN705);



				{
				// AST REWRITE
				// elements: TIMESTAMP_DIFF, date1, date2, timestampUnit
				// token labels: 
				// rule labels: date1, date2, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_date1=new RewriteRuleSubtreeStream(adaptor,"rule date1",date1!=null?date1.Tree:null);
				RewriteRuleSubtreeStream stream_date2=new RewriteRuleSubtreeStream(adaptor,"rule date2",date2!=null?date2.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1292:18: -> ^( FUNC ^( TIMESTAMP_DIFF $date1 $date2 timestampUnit ) )
				{
					DebugLocation(1292, 21);
					// MySQL51Parser.g3:1292:21: ^( FUNC ^( TIMESTAMP_DIFF $date1 $date2 timestampUnit ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1292, 23);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1292, 28);
					// MySQL51Parser.g3:1292:28: ^( TIMESTAMP_DIFF $date1 $date2 timestampUnit )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1292, 30);
					root_2 = (object)adaptor.BecomeRoot(stream_TIMESTAMP_DIFF.NextNode(), root_2);

					DebugLocation(1292, 46);
					adaptor.AddChild(root_2, stream_date1.NextTree());
					DebugLocation(1292, 53);
					adaptor.AddChild(root_2, stream_date2.NextTree());
					DebugLocation(1292, 59);
					adaptor.AddChild(root_2, stream_timestampUnit.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 42:
				DebugEnterAlt(42);
				// MySQL51Parser.g3:1293:4: UTC_DATE ( LPAREN RPAREN )?
				{
				DebugLocation(1293, 4);
				UTC_DATE706=(IToken)Match(input,UTC_DATE,Follow._UTC_DATE_in_functionCall11591); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_UTC_DATE.Add(UTC_DATE706);

				DebugLocation(1293, 13);
				// MySQL51Parser.g3:1293:13: ( LPAREN RPAREN )?
				int alt262=2;
				try { DebugEnterSubRule(262);
				try { DebugEnterDecision(262, false);
				int LA262_0 = input.LA(1);

				if ((LA262_0==LPAREN))
				{
					int LA262_1 = input.LA(2);

					if ((LA262_1==RPAREN))
					{
						alt262 = 1;
					}
				}
				} finally { DebugExitDecision(262); }
				switch (alt262)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1293:14: LPAREN RPAREN
					{
					DebugLocation(1293, 14);
					LPAREN707=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall11594); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_LPAREN.Add(LPAREN707);

					DebugLocation(1293, 21);
					RPAREN708=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall11596); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_RPAREN.Add(RPAREN708);


					}
					break;

				}
				} finally { DebugExitSubRule(262); }



				{
				// AST REWRITE
				// elements: UTC_DATE, LPAREN
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1293:33: -> ^( FUNC ^( UTC_DATE ( LPAREN )? ) )
				{
					DebugLocation(1293, 36);
					// MySQL51Parser.g3:1293:36: ^( FUNC ^( UTC_DATE ( LPAREN )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1293, 38);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1293, 43);
					// MySQL51Parser.g3:1293:43: ^( UTC_DATE ( LPAREN )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1293, 45);
					root_2 = (object)adaptor.BecomeRoot(stream_UTC_DATE.NextNode(), root_2);

					DebugLocation(1293, 54);
					// MySQL51Parser.g3:1293:54: ( LPAREN )?
					if (stream_LPAREN.HasNext)
					{
						DebugLocation(1293, 54);
						adaptor.AddChild(root_2, stream_LPAREN.NextNode());

					}
					stream_LPAREN.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 43:
				DebugEnterAlt(43);
				// MySQL51Parser.g3:1294:4: UTC_TIMESTAMP ( LPAREN RPAREN )?
				{
				DebugLocation(1294, 4);
				UTC_TIMESTAMP709=(IToken)Match(input,UTC_TIMESTAMP,Follow._UTC_TIMESTAMP_in_functionCall11619); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_UTC_TIMESTAMP.Add(UTC_TIMESTAMP709);

				DebugLocation(1294, 18);
				// MySQL51Parser.g3:1294:18: ( LPAREN RPAREN )?
				int alt263=2;
				try { DebugEnterSubRule(263);
				try { DebugEnterDecision(263, false);
				int LA263_0 = input.LA(1);

				if ((LA263_0==LPAREN))
				{
					int LA263_1 = input.LA(2);

					if ((LA263_1==RPAREN))
					{
						alt263 = 1;
					}
				}
				} finally { DebugExitDecision(263); }
				switch (alt263)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1294:19: LPAREN RPAREN
					{
					DebugLocation(1294, 19);
					LPAREN710=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall11622); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_LPAREN.Add(LPAREN710);

					DebugLocation(1294, 26);
					RPAREN711=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall11624); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_RPAREN.Add(RPAREN711);


					}
					break;

				}
				} finally { DebugExitSubRule(263); }



				{
				// AST REWRITE
				// elements: UTC_TIMESTAMP, LPAREN
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1294:37: -> ^( FUNC ^( UTC_TIMESTAMP ( LPAREN )? ) )
				{
					DebugLocation(1294, 40);
					// MySQL51Parser.g3:1294:40: ^( FUNC ^( UTC_TIMESTAMP ( LPAREN )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1294, 42);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1294, 47);
					// MySQL51Parser.g3:1294:47: ^( UTC_TIMESTAMP ( LPAREN )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1294, 49);
					root_2 = (object)adaptor.BecomeRoot(stream_UTC_TIMESTAMP.NextNode(), root_2);

					DebugLocation(1294, 63);
					// MySQL51Parser.g3:1294:63: ( LPAREN )?
					if (stream_LPAREN.HasNext)
					{
						DebugLocation(1294, 63);
						adaptor.AddChild(root_2, stream_LPAREN.NextNode());

					}
					stream_LPAREN.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 44:
				DebugEnterAlt(44);
				// MySQL51Parser.g3:1295:4: UTC_TIME ( LPAREN RPAREN )?
				{
				DebugLocation(1295, 4);
				UTC_TIME712=(IToken)Match(input,UTC_TIME,Follow._UTC_TIME_in_functionCall11646); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_UTC_TIME.Add(UTC_TIME712);

				DebugLocation(1295, 13);
				// MySQL51Parser.g3:1295:13: ( LPAREN RPAREN )?
				int alt264=2;
				try { DebugEnterSubRule(264);
				try { DebugEnterDecision(264, false);
				int LA264_0 = input.LA(1);

				if ((LA264_0==LPAREN))
				{
					int LA264_1 = input.LA(2);

					if ((LA264_1==RPAREN))
					{
						alt264 = 1;
					}
				}
				} finally { DebugExitDecision(264); }
				switch (alt264)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1295:14: LPAREN RPAREN
					{
					DebugLocation(1295, 14);
					LPAREN713=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall11649); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_LPAREN.Add(LPAREN713);

					DebugLocation(1295, 21);
					RPAREN714=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall11651); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_RPAREN.Add(RPAREN714);


					}
					break;

				}
				} finally { DebugExitSubRule(264); }



				{
				// AST REWRITE
				// elements: UTC_TIME, LPAREN
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1295:33: -> ^( FUNC ^( UTC_TIME ( LPAREN )? ) )
				{
					DebugLocation(1295, 36);
					// MySQL51Parser.g3:1295:36: ^( FUNC ^( UTC_TIME ( LPAREN )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1295, 38);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1295, 43);
					// MySQL51Parser.g3:1295:43: ^( UTC_TIME ( LPAREN )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1295, 45);
					root_2 = (object)adaptor.BecomeRoot(stream_UTC_TIME.NextNode(), root_2);

					DebugLocation(1295, 54);
					// MySQL51Parser.g3:1295:54: ( LPAREN )?
					if (stream_LPAREN.HasNext)
					{
						DebugLocation(1295, 54);
						adaptor.AddChild(root_2, stream_LPAREN.NextNode());

					}
					stream_LPAREN.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 45:
				DebugEnterAlt(45);
				// MySQL51Parser.g3:1297:4: functionCall_conflicts
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1297, 4);
				PushFollow(Follow._functionCall_conflicts_in_functionCall11675);
				functionCall_conflicts715=functionCall_conflicts();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, functionCall_conflicts715.Tree);

				}
				break;
			case 46:
				DebugEnterAlt(46);
				// MySQL51Parser.g3:1298:4: functionCall_reserved
				{
				root_0 = (object)adaptor.Nil();

				DebugLocation(1298, 4);
				PushFollow(Follow._functionCall_reserved_in_functionCall11680);
				functionCall_reserved716=functionCall_reserved();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) adaptor.AddChild(root_0, functionCall_reserved716.Tree);

				}
				break;
			case 47:
				DebugEnterAlt(47);
				// MySQL51Parser.g3:1301:4: name= ID args= parenOptExprList
				{
				DebugLocation(1301, 8);
				name=(IToken)Match(input,ID,Follow._ID_in_functionCall11691); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_ID.Add(name);

				DebugLocation(1301, 16);
				PushFollow(Follow._parenOptExprList_in_functionCall11695);
				args=parenOptExprList();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_parenOptExprList.Add(args.Tree);


				{
				// AST REWRITE
				// elements: name, args
				// token labels: name
				// rule labels: args, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleITokenStream stream_name=new RewriteRuleITokenStream(adaptor,"token name",name);
				RewriteRuleSubtreeStream stream_args=new RewriteRuleSubtreeStream(adaptor,"rule args",args!=null?args.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1301:39: -> ^( FUNC ^( $name $args) )
				{
					DebugLocation(1301, 42);
					// MySQL51Parser.g3:1301:42: ^( FUNC ^( $name $args) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1301, 44);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1301, 49);
					// MySQL51Parser.g3:1301:49: ^( $name $args)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1301, 52);
					root_2 = (object)adaptor.BecomeRoot(stream_name.NextNode(), root_2);

					DebugLocation(1301, 58);
					adaptor.AddChild(root_2, stream_args.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("functionCall", 88);
			LeaveRule("functionCall", 88);
			LeaveRule_functionCall();
		}
		DebugLocation(1302, 1);
		} finally { DebugExitRule(GrammarFileName, "functionCall"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "functionCall"

	private sealed partial class functionCall_conflicts_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public functionCall_conflicts_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_functionCall_conflicts();
	partial void LeaveRule_functionCall_conflicts();

	// $ANTLR start "functionCall_conflicts"
	// MySQL51Parser.g3:1304:1: functionCall_conflicts : ( ASCII LPAREN expr RPAREN -> ^( FUNC ^( ASCII expr ) ) | CHARSET LPAREN expr RPAREN -> ^( FUNC ^( CHARSET expr ) ) | COALESCE LPAREN exprList RPAREN -> ^( FUNC ^( COALESCE exprList ) ) | COLLATION LPAREN expr RPAREN -> ^( FUNC ^( COLLATION expr ) ) | CONTAINS LPAREN e1= expr COMMA e2= expr RPAREN -> ^( FUNC ^( CONTAINS $e1 $e2) ) | DATABASE LPAREN RPAREN -> ^( FUNC ^( DATABASE LPAREN ) ) | GEOMETRYCOLLECTION LPAREN exprList RPAREN -> ^( FUNC ^( GEOMETRYCOLLECTION exprList ) ) | IF LPAREN e1= expr COMMA e2= expr COMMA e3= expr RPAREN -> ^( FUNC ^( IF $e1 $e2 $e3) ) | LINESTRING LPAREN exprList RPAREN -> ^( FUNC ^( LINESTRING exprList ) ) | MICROSECOND LPAREN expr RPAREN -> ^( FUNC ^( MICROSECOND expr ) ) | MOD LPAREN e1= expr COMMA e2= expr RPAREN -> ^( FUNC ^( MOD $e1 $e2) ) | MULTILINESTRING LPAREN exprList RPAREN -> ^( FUNC ^( MULTILINESTRING exprList ) ) | MULTIPOINT LPAREN exprList RPAREN -> ^( FUNC ^( MULTIPOINT exprList ) ) | MULTIPOLYGON LPAREN exprList RPAREN -> ^( FUNC ^( MULTIPOLYGON exprList ) ) | OLD_PASSWORD LPAREN expr RPAREN -> ^( FUNC ^( OLD_PASSWORD expr ) ) | PASSWORD LPAREN expr RPAREN -> ^( FUNC ^( PASSWORD expr ) ) | POINT LPAREN x= expr COMMA y= expr RPAREN -> ^( FUNC ^( POINT $x $y) ) | POLYGON LPAREN exprList RPAREN -> ^( FUNC ^( POLYGON exprList ) ) | QUARTER LPAREN expr RPAREN -> ^( FUNC ^( QUARTER expr ) ) | REPEAT LPAREN str= expr COMMA count= expr RPAREN -> ^( FUNC ^( REPEAT $str $count) ) | REPLACE LPAREN str= expr COMMA from= expr COMMA to= expr RPAREN -> ^( FUNC ^( REPLACE $str $from $to) ) | TRUNCATE LPAREN num= expr COMMA decimals= expr RPAREN -> ^( FUNC ^( TRUNCATE $num $decimals) ) | WEEK LPAREN date= expr ( COMMA mode= expr )? RPAREN -> ^( FUNC ^( WEEK $date ( $mode)? ) ) );
	[GrammarRule("functionCall_conflicts")]
	private MySQL51Parser.functionCall_conflicts_return functionCall_conflicts()
	{
		EnterRule_functionCall_conflicts();
		EnterRule("functionCall_conflicts", 89);
		TraceIn("functionCall_conflicts", 89);
		MySQL51Parser.functionCall_conflicts_return retval = new MySQL51Parser.functionCall_conflicts_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken ASCII717 = default(IToken);
		IToken LPAREN718 = default(IToken);
		IToken RPAREN720 = default(IToken);
		IToken CHARSET721 = default(IToken);
		IToken LPAREN722 = default(IToken);
		IToken RPAREN724 = default(IToken);
		IToken COALESCE725 = default(IToken);
		IToken LPAREN726 = default(IToken);
		IToken RPAREN728 = default(IToken);
		IToken COLLATION729 = default(IToken);
		IToken LPAREN730 = default(IToken);
		IToken RPAREN732 = default(IToken);
		IToken CONTAINS733 = default(IToken);
		IToken LPAREN734 = default(IToken);
		IToken COMMA735 = default(IToken);
		IToken RPAREN736 = default(IToken);
		IToken DATABASE737 = default(IToken);
		IToken LPAREN738 = default(IToken);
		IToken RPAREN739 = default(IToken);
		IToken GEOMETRYCOLLECTION740 = default(IToken);
		IToken LPAREN741 = default(IToken);
		IToken RPAREN743 = default(IToken);
		IToken IF744 = default(IToken);
		IToken LPAREN745 = default(IToken);
		IToken COMMA746 = default(IToken);
		IToken COMMA747 = default(IToken);
		IToken RPAREN748 = default(IToken);
		IToken LINESTRING749 = default(IToken);
		IToken LPAREN750 = default(IToken);
		IToken RPAREN752 = default(IToken);
		IToken MICROSECOND753 = default(IToken);
		IToken LPAREN754 = default(IToken);
		IToken RPAREN756 = default(IToken);
		IToken MOD757 = default(IToken);
		IToken LPAREN758 = default(IToken);
		IToken COMMA759 = default(IToken);
		IToken RPAREN760 = default(IToken);
		IToken MULTILINESTRING761 = default(IToken);
		IToken LPAREN762 = default(IToken);
		IToken RPAREN764 = default(IToken);
		IToken MULTIPOINT765 = default(IToken);
		IToken LPAREN766 = default(IToken);
		IToken RPAREN768 = default(IToken);
		IToken MULTIPOLYGON769 = default(IToken);
		IToken LPAREN770 = default(IToken);
		IToken RPAREN772 = default(IToken);
		IToken OLD_PASSWORD773 = default(IToken);
		IToken LPAREN774 = default(IToken);
		IToken RPAREN776 = default(IToken);
		IToken PASSWORD777 = default(IToken);
		IToken LPAREN778 = default(IToken);
		IToken RPAREN780 = default(IToken);
		IToken POINT781 = default(IToken);
		IToken LPAREN782 = default(IToken);
		IToken COMMA783 = default(IToken);
		IToken RPAREN784 = default(IToken);
		IToken POLYGON785 = default(IToken);
		IToken LPAREN786 = default(IToken);
		IToken RPAREN788 = default(IToken);
		IToken QUARTER789 = default(IToken);
		IToken LPAREN790 = default(IToken);
		IToken RPAREN792 = default(IToken);
		IToken REPEAT793 = default(IToken);
		IToken LPAREN794 = default(IToken);
		IToken COMMA795 = default(IToken);
		IToken RPAREN796 = default(IToken);
		IToken REPLACE797 = default(IToken);
		IToken LPAREN798 = default(IToken);
		IToken COMMA799 = default(IToken);
		IToken COMMA800 = default(IToken);
		IToken RPAREN801 = default(IToken);
		IToken TRUNCATE802 = default(IToken);
		IToken LPAREN803 = default(IToken);
		IToken COMMA804 = default(IToken);
		IToken RPAREN805 = default(IToken);
		IToken WEEK806 = default(IToken);
		IToken LPAREN807 = default(IToken);
		IToken COMMA808 = default(IToken);
		IToken RPAREN809 = default(IToken);
		MySQL51Parser.expr_return e1 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return e2 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return e3 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return x = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return y = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return str = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return count = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return from = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return to = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return num = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return decimals = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return date = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return mode = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr719 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr723 = default(MySQL51Parser.expr_return);
		MySQL51Parser.exprList_return exprList727 = default(MySQL51Parser.exprList_return);
		MySQL51Parser.expr_return expr731 = default(MySQL51Parser.expr_return);
		MySQL51Parser.exprList_return exprList742 = default(MySQL51Parser.exprList_return);
		MySQL51Parser.exprList_return exprList751 = default(MySQL51Parser.exprList_return);
		MySQL51Parser.expr_return expr755 = default(MySQL51Parser.expr_return);
		MySQL51Parser.exprList_return exprList763 = default(MySQL51Parser.exprList_return);
		MySQL51Parser.exprList_return exprList767 = default(MySQL51Parser.exprList_return);
		MySQL51Parser.exprList_return exprList771 = default(MySQL51Parser.exprList_return);
		MySQL51Parser.expr_return expr775 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr779 = default(MySQL51Parser.expr_return);
		MySQL51Parser.exprList_return exprList787 = default(MySQL51Parser.exprList_return);
		MySQL51Parser.expr_return expr791 = default(MySQL51Parser.expr_return);

		object ASCII717_tree = default(object);
		object LPAREN718_tree = default(object);
		object RPAREN720_tree = default(object);
		object CHARSET721_tree = default(object);
		object LPAREN722_tree = default(object);
		object RPAREN724_tree = default(object);
		object COALESCE725_tree = default(object);
		object LPAREN726_tree = default(object);
		object RPAREN728_tree = default(object);
		object COLLATION729_tree = default(object);
		object LPAREN730_tree = default(object);
		object RPAREN732_tree = default(object);
		object CONTAINS733_tree = default(object);
		object LPAREN734_tree = default(object);
		object COMMA735_tree = default(object);
		object RPAREN736_tree = default(object);
		object DATABASE737_tree = default(object);
		object LPAREN738_tree = default(object);
		object RPAREN739_tree = default(object);
		object GEOMETRYCOLLECTION740_tree = default(object);
		object LPAREN741_tree = default(object);
		object RPAREN743_tree = default(object);
		object IF744_tree = default(object);
		object LPAREN745_tree = default(object);
		object COMMA746_tree = default(object);
		object COMMA747_tree = default(object);
		object RPAREN748_tree = default(object);
		object LINESTRING749_tree = default(object);
		object LPAREN750_tree = default(object);
		object RPAREN752_tree = default(object);
		object MICROSECOND753_tree = default(object);
		object LPAREN754_tree = default(object);
		object RPAREN756_tree = default(object);
		object MOD757_tree = default(object);
		object LPAREN758_tree = default(object);
		object COMMA759_tree = default(object);
		object RPAREN760_tree = default(object);
		object MULTILINESTRING761_tree = default(object);
		object LPAREN762_tree = default(object);
		object RPAREN764_tree = default(object);
		object MULTIPOINT765_tree = default(object);
		object LPAREN766_tree = default(object);
		object RPAREN768_tree = default(object);
		object MULTIPOLYGON769_tree = default(object);
		object LPAREN770_tree = default(object);
		object RPAREN772_tree = default(object);
		object OLD_PASSWORD773_tree = default(object);
		object LPAREN774_tree = default(object);
		object RPAREN776_tree = default(object);
		object PASSWORD777_tree = default(object);
		object LPAREN778_tree = default(object);
		object RPAREN780_tree = default(object);
		object POINT781_tree = default(object);
		object LPAREN782_tree = default(object);
		object COMMA783_tree = default(object);
		object RPAREN784_tree = default(object);
		object POLYGON785_tree = default(object);
		object LPAREN786_tree = default(object);
		object RPAREN788_tree = default(object);
		object QUARTER789_tree = default(object);
		object LPAREN790_tree = default(object);
		object RPAREN792_tree = default(object);
		object REPEAT793_tree = default(object);
		object LPAREN794_tree = default(object);
		object COMMA795_tree = default(object);
		object RPAREN796_tree = default(object);
		object REPLACE797_tree = default(object);
		object LPAREN798_tree = default(object);
		object COMMA799_tree = default(object);
		object COMMA800_tree = default(object);
		object RPAREN801_tree = default(object);
		object TRUNCATE802_tree = default(object);
		object LPAREN803_tree = default(object);
		object COMMA804_tree = default(object);
		object RPAREN805_tree = default(object);
		object WEEK806_tree = default(object);
		object LPAREN807_tree = default(object);
		object COMMA808_tree = default(object);
		object RPAREN809_tree = default(object);
		RewriteRuleITokenStream stream_ASCII=new RewriteRuleITokenStream(adaptor,"token ASCII");
		RewriteRuleITokenStream stream_LPAREN=new RewriteRuleITokenStream(adaptor,"token LPAREN");
		RewriteRuleITokenStream stream_RPAREN=new RewriteRuleITokenStream(adaptor,"token RPAREN");
		RewriteRuleITokenStream stream_CHARSET=new RewriteRuleITokenStream(adaptor,"token CHARSET");
		RewriteRuleITokenStream stream_COALESCE=new RewriteRuleITokenStream(adaptor,"token COALESCE");
		RewriteRuleITokenStream stream_COLLATION=new RewriteRuleITokenStream(adaptor,"token COLLATION");
		RewriteRuleITokenStream stream_CONTAINS=new RewriteRuleITokenStream(adaptor,"token CONTAINS");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleITokenStream stream_DATABASE=new RewriteRuleITokenStream(adaptor,"token DATABASE");
		RewriteRuleITokenStream stream_GEOMETRYCOLLECTION=new RewriteRuleITokenStream(adaptor,"token GEOMETRYCOLLECTION");
		RewriteRuleITokenStream stream_IF=new RewriteRuleITokenStream(adaptor,"token IF");
		RewriteRuleITokenStream stream_LINESTRING=new RewriteRuleITokenStream(adaptor,"token LINESTRING");
		RewriteRuleITokenStream stream_MICROSECOND=new RewriteRuleITokenStream(adaptor,"token MICROSECOND");
		RewriteRuleITokenStream stream_MOD=new RewriteRuleITokenStream(adaptor,"token MOD");
		RewriteRuleITokenStream stream_MULTILINESTRING=new RewriteRuleITokenStream(adaptor,"token MULTILINESTRING");
		RewriteRuleITokenStream stream_MULTIPOINT=new RewriteRuleITokenStream(adaptor,"token MULTIPOINT");
		RewriteRuleITokenStream stream_MULTIPOLYGON=new RewriteRuleITokenStream(adaptor,"token MULTIPOLYGON");
		RewriteRuleITokenStream stream_OLD_PASSWORD=new RewriteRuleITokenStream(adaptor,"token OLD_PASSWORD");
		RewriteRuleITokenStream stream_PASSWORD=new RewriteRuleITokenStream(adaptor,"token PASSWORD");
		RewriteRuleITokenStream stream_POINT=new RewriteRuleITokenStream(adaptor,"token POINT");
		RewriteRuleITokenStream stream_POLYGON=new RewriteRuleITokenStream(adaptor,"token POLYGON");
		RewriteRuleITokenStream stream_QUARTER=new RewriteRuleITokenStream(adaptor,"token QUARTER");
		RewriteRuleITokenStream stream_REPEAT=new RewriteRuleITokenStream(adaptor,"token REPEAT");
		RewriteRuleITokenStream stream_REPLACE=new RewriteRuleITokenStream(adaptor,"token REPLACE");
		RewriteRuleITokenStream stream_TRUNCATE=new RewriteRuleITokenStream(adaptor,"token TRUNCATE");
		RewriteRuleITokenStream stream_WEEK=new RewriteRuleITokenStream(adaptor,"token WEEK");
		RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr");
		RewriteRuleSubtreeStream stream_exprList=new RewriteRuleSubtreeStream(adaptor,"rule exprList");
		try { DebugEnterRule(GrammarFileName, "functionCall_conflicts");
		DebugLocation(1304, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1305:2: ( ASCII LPAREN expr RPAREN -> ^( FUNC ^( ASCII expr ) ) | CHARSET LPAREN expr RPAREN -> ^( FUNC ^( CHARSET expr ) ) | COALESCE LPAREN exprList RPAREN -> ^( FUNC ^( COALESCE exprList ) ) | COLLATION LPAREN expr RPAREN -> ^( FUNC ^( COLLATION expr ) ) | CONTAINS LPAREN e1= expr COMMA e2= expr RPAREN -> ^( FUNC ^( CONTAINS $e1 $e2) ) | DATABASE LPAREN RPAREN -> ^( FUNC ^( DATABASE LPAREN ) ) | GEOMETRYCOLLECTION LPAREN exprList RPAREN -> ^( FUNC ^( GEOMETRYCOLLECTION exprList ) ) | IF LPAREN e1= expr COMMA e2= expr COMMA e3= expr RPAREN -> ^( FUNC ^( IF $e1 $e2 $e3) ) | LINESTRING LPAREN exprList RPAREN -> ^( FUNC ^( LINESTRING exprList ) ) | MICROSECOND LPAREN expr RPAREN -> ^( FUNC ^( MICROSECOND expr ) ) | MOD LPAREN e1= expr COMMA e2= expr RPAREN -> ^( FUNC ^( MOD $e1 $e2) ) | MULTILINESTRING LPAREN exprList RPAREN -> ^( FUNC ^( MULTILINESTRING exprList ) ) | MULTIPOINT LPAREN exprList RPAREN -> ^( FUNC ^( MULTIPOINT exprList ) ) | MULTIPOLYGON LPAREN exprList RPAREN -> ^( FUNC ^( MULTIPOLYGON exprList ) ) | OLD_PASSWORD LPAREN expr RPAREN -> ^( FUNC ^( OLD_PASSWORD expr ) ) | PASSWORD LPAREN expr RPAREN -> ^( FUNC ^( PASSWORD expr ) ) | POINT LPAREN x= expr COMMA y= expr RPAREN -> ^( FUNC ^( POINT $x $y) ) | POLYGON LPAREN exprList RPAREN -> ^( FUNC ^( POLYGON exprList ) ) | QUARTER LPAREN expr RPAREN -> ^( FUNC ^( QUARTER expr ) ) | REPEAT LPAREN str= expr COMMA count= expr RPAREN -> ^( FUNC ^( REPEAT $str $count) ) | REPLACE LPAREN str= expr COMMA from= expr COMMA to= expr RPAREN -> ^( FUNC ^( REPLACE $str $from $to) ) | TRUNCATE LPAREN num= expr COMMA decimals= expr RPAREN -> ^( FUNC ^( TRUNCATE $num $decimals) ) | WEEK LPAREN date= expr ( COMMA mode= expr )? RPAREN -> ^( FUNC ^( WEEK $date ( $mode)? ) ) )
			int alt267=23;
			try { DebugEnterDecision(267, false);
			switch (input.LA(1))
			{
			case ASCII:
				{
				alt267 = 1;
				}
				break;
			case CHARSET:
				{
				alt267 = 2;
				}
				break;
			case COALESCE:
				{
				alt267 = 3;
				}
				break;
			case COLLATION:
				{
				alt267 = 4;
				}
				break;
			case CONTAINS:
				{
				alt267 = 5;
				}
				break;
			case DATABASE:
				{
				alt267 = 6;
				}
				break;
			case GEOMETRYCOLLECTION:
				{
				alt267 = 7;
				}
				break;
			case IF:
				{
				alt267 = 8;
				}
				break;
			case LINESTRING:
				{
				alt267 = 9;
				}
				break;
			case MICROSECOND:
				{
				alt267 = 10;
				}
				break;
			case MOD:
				{
				alt267 = 11;
				}
				break;
			case MULTILINESTRING:
				{
				alt267 = 12;
				}
				break;
			case MULTIPOINT:
				{
				alt267 = 13;
				}
				break;
			case MULTIPOLYGON:
				{
				alt267 = 14;
				}
				break;
			case OLD_PASSWORD:
				{
				alt267 = 15;
				}
				break;
			case PASSWORD:
				{
				alt267 = 16;
				}
				break;
			case POINT:
				{
				alt267 = 17;
				}
				break;
			case POLYGON:
				{
				alt267 = 18;
				}
				break;
			case QUARTER:
				{
				alt267 = 19;
				}
				break;
			case REPEAT:
				{
				alt267 = 20;
				}
				break;
			case REPLACE:
				{
				alt267 = 21;
				}
				break;
			case TRUNCATE:
				{
				alt267 = 22;
				}
				break;
			case WEEK:
				{
				alt267 = 23;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 267, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(267); }
			switch (alt267)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1307:3: ASCII LPAREN expr RPAREN
				{
				DebugLocation(1307, 3);
				ASCII717=(IToken)Match(input,ASCII,Follow._ASCII_in_functionCall_conflicts11730); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_ASCII.Add(ASCII717);

				DebugLocation(1307, 9);
				LPAREN718=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts11732); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN718);

				DebugLocation(1307, 16);
				PushFollow(Follow._expr_in_functionCall_conflicts11734);
				expr719=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr719.Tree);
				DebugLocation(1307, 21);
				RPAREN720=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts11736); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN720);



				{
				// AST REWRITE
				// elements: ASCII, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1307:29: -> ^( FUNC ^( ASCII expr ) )
				{
					DebugLocation(1307, 32);
					// MySQL51Parser.g3:1307:32: ^( FUNC ^( ASCII expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1307, 34);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1307, 39);
					// MySQL51Parser.g3:1307:39: ^( ASCII expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1307, 41);
					root_2 = (object)adaptor.BecomeRoot(stream_ASCII.NextNode(), root_2);

					DebugLocation(1307, 47);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:1308:4: CHARSET LPAREN expr RPAREN
				{
				DebugLocation(1308, 4);
				CHARSET721=(IToken)Match(input,CHARSET,Follow._CHARSET_in_functionCall_conflicts11754); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CHARSET.Add(CHARSET721);

				DebugLocation(1308, 12);
				LPAREN722=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts11756); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN722);

				DebugLocation(1308, 19);
				PushFollow(Follow._expr_in_functionCall_conflicts11758);
				expr723=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr723.Tree);
				DebugLocation(1308, 24);
				RPAREN724=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts11760); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN724);



				{
				// AST REWRITE
				// elements: CHARSET, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1308:32: -> ^( FUNC ^( CHARSET expr ) )
				{
					DebugLocation(1308, 35);
					// MySQL51Parser.g3:1308:35: ^( FUNC ^( CHARSET expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1308, 37);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1308, 42);
					// MySQL51Parser.g3:1308:42: ^( CHARSET expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1308, 44);
					root_2 = (object)adaptor.BecomeRoot(stream_CHARSET.NextNode(), root_2);

					DebugLocation(1308, 52);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:1309:4: COALESCE LPAREN exprList RPAREN
				{
				DebugLocation(1309, 4);
				COALESCE725=(IToken)Match(input,COALESCE,Follow._COALESCE_in_functionCall_conflicts11778); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COALESCE.Add(COALESCE725);

				DebugLocation(1309, 13);
				LPAREN726=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts11780); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN726);

				DebugLocation(1309, 20);
				PushFollow(Follow._exprList_in_functionCall_conflicts11782);
				exprList727=exprList();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_exprList.Add(exprList727.Tree);
				DebugLocation(1309, 29);
				RPAREN728=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts11784); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN728);



				{
				// AST REWRITE
				// elements: COALESCE, exprList
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1309:37: -> ^( FUNC ^( COALESCE exprList ) )
				{
					DebugLocation(1309, 40);
					// MySQL51Parser.g3:1309:40: ^( FUNC ^( COALESCE exprList ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1309, 42);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1309, 47);
					// MySQL51Parser.g3:1309:47: ^( COALESCE exprList )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1309, 49);
					root_2 = (object)adaptor.BecomeRoot(stream_COALESCE.NextNode(), root_2);

					DebugLocation(1309, 58);
					adaptor.AddChild(root_2, stream_exprList.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:1310:4: COLLATION LPAREN expr RPAREN
				{
				DebugLocation(1310, 4);
				COLLATION729=(IToken)Match(input,COLLATION,Follow._COLLATION_in_functionCall_conflicts11802); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COLLATION.Add(COLLATION729);

				DebugLocation(1310, 14);
				LPAREN730=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts11804); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN730);

				DebugLocation(1310, 21);
				PushFollow(Follow._expr_in_functionCall_conflicts11806);
				expr731=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr731.Tree);
				DebugLocation(1310, 26);
				RPAREN732=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts11808); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN732);



				{
				// AST REWRITE
				// elements: COLLATION, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1310:34: -> ^( FUNC ^( COLLATION expr ) )
				{
					DebugLocation(1310, 37);
					// MySQL51Parser.g3:1310:37: ^( FUNC ^( COLLATION expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1310, 39);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1310, 44);
					// MySQL51Parser.g3:1310:44: ^( COLLATION expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1310, 46);
					root_2 = (object)adaptor.BecomeRoot(stream_COLLATION.NextNode(), root_2);

					DebugLocation(1310, 56);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 5:
				DebugEnterAlt(5);
				// MySQL51Parser.g3:1311:4: CONTAINS LPAREN e1= expr COMMA e2= expr RPAREN
				{
				DebugLocation(1311, 4);
				CONTAINS733=(IToken)Match(input,CONTAINS,Follow._CONTAINS_in_functionCall_conflicts11826); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CONTAINS.Add(CONTAINS733);

				DebugLocation(1311, 13);
				LPAREN734=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts11828); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN734);

				DebugLocation(1311, 22);
				PushFollow(Follow._expr_in_functionCall_conflicts11832);
				e1=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(e1.Tree);
				DebugLocation(1311, 28);
				COMMA735=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall_conflicts11834); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA735);

				DebugLocation(1311, 36);
				PushFollow(Follow._expr_in_functionCall_conflicts11838);
				e2=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(e2.Tree);
				DebugLocation(1311, 42);
				RPAREN736=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts11840); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN736);



				{
				// AST REWRITE
				// elements: CONTAINS, e1, e2
				// token labels: 
				// rule labels: e1, e2, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_e1=new RewriteRuleSubtreeStream(adaptor,"rule e1",e1!=null?e1.Tree:null);
				RewriteRuleSubtreeStream stream_e2=new RewriteRuleSubtreeStream(adaptor,"rule e2",e2!=null?e2.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1311:50: -> ^( FUNC ^( CONTAINS $e1 $e2) )
				{
					DebugLocation(1311, 53);
					// MySQL51Parser.g3:1311:53: ^( FUNC ^( CONTAINS $e1 $e2) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1311, 55);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1311, 60);
					// MySQL51Parser.g3:1311:60: ^( CONTAINS $e1 $e2)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1311, 62);
					root_2 = (object)adaptor.BecomeRoot(stream_CONTAINS.NextNode(), root_2);

					DebugLocation(1311, 72);
					adaptor.AddChild(root_2, stream_e1.NextTree());
					DebugLocation(1311, 76);
					adaptor.AddChild(root_2, stream_e2.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 6:
				DebugEnterAlt(6);
				// MySQL51Parser.g3:1312:4: DATABASE LPAREN RPAREN
				{
				DebugLocation(1312, 4);
				DATABASE737=(IToken)Match(input,DATABASE,Follow._DATABASE_in_functionCall_conflicts11863); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_DATABASE.Add(DATABASE737);

				DebugLocation(1312, 13);
				LPAREN738=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts11865); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN738);

				DebugLocation(1312, 20);
				RPAREN739=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts11867); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN739);



				{
				// AST REWRITE
				// elements: DATABASE, LPAREN
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1312:28: -> ^( FUNC ^( DATABASE LPAREN ) )
				{
					DebugLocation(1312, 31);
					// MySQL51Parser.g3:1312:31: ^( FUNC ^( DATABASE LPAREN ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1312, 33);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1312, 38);
					// MySQL51Parser.g3:1312:38: ^( DATABASE LPAREN )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1312, 40);
					root_2 = (object)adaptor.BecomeRoot(stream_DATABASE.NextNode(), root_2);

					DebugLocation(1312, 49);
					adaptor.AddChild(root_2, stream_LPAREN.NextNode());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 7:
				DebugEnterAlt(7);
				// MySQL51Parser.g3:1313:4: GEOMETRYCOLLECTION LPAREN exprList RPAREN
				{
				DebugLocation(1313, 4);
				GEOMETRYCOLLECTION740=(IToken)Match(input,GEOMETRYCOLLECTION,Follow._GEOMETRYCOLLECTION_in_functionCall_conflicts11885); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_GEOMETRYCOLLECTION.Add(GEOMETRYCOLLECTION740);

				DebugLocation(1313, 23);
				LPAREN741=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts11887); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN741);

				DebugLocation(1313, 30);
				PushFollow(Follow._exprList_in_functionCall_conflicts11889);
				exprList742=exprList();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_exprList.Add(exprList742.Tree);
				DebugLocation(1313, 39);
				RPAREN743=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts11891); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN743);



				{
				// AST REWRITE
				// elements: GEOMETRYCOLLECTION, exprList
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1313:47: -> ^( FUNC ^( GEOMETRYCOLLECTION exprList ) )
				{
					DebugLocation(1313, 50);
					// MySQL51Parser.g3:1313:50: ^( FUNC ^( GEOMETRYCOLLECTION exprList ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1313, 52);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1313, 57);
					// MySQL51Parser.g3:1313:57: ^( GEOMETRYCOLLECTION exprList )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1313, 59);
					root_2 = (object)adaptor.BecomeRoot(stream_GEOMETRYCOLLECTION.NextNode(), root_2);

					DebugLocation(1313, 78);
					adaptor.AddChild(root_2, stream_exprList.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 8:
				DebugEnterAlt(8);
				// MySQL51Parser.g3:1314:4: IF LPAREN e1= expr COMMA e2= expr COMMA e3= expr RPAREN
				{
				DebugLocation(1314, 4);
				IF744=(IToken)Match(input,IF,Follow._IF_in_functionCall_conflicts11910); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_IF.Add(IF744);

				DebugLocation(1314, 7);
				LPAREN745=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts11912); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN745);

				DebugLocation(1314, 16);
				PushFollow(Follow._expr_in_functionCall_conflicts11916);
				e1=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(e1.Tree);
				DebugLocation(1314, 22);
				COMMA746=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall_conflicts11918); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA746);

				DebugLocation(1314, 30);
				PushFollow(Follow._expr_in_functionCall_conflicts11922);
				e2=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(e2.Tree);
				DebugLocation(1314, 36);
				COMMA747=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall_conflicts11924); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA747);

				DebugLocation(1314, 44);
				PushFollow(Follow._expr_in_functionCall_conflicts11928);
				e3=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(e3.Tree);
				DebugLocation(1314, 50);
				RPAREN748=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts11930); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN748);



				{
				// AST REWRITE
				// elements: IF, e1, e2, e3
				// token labels: 
				// rule labels: e1, e2, e3, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_e1=new RewriteRuleSubtreeStream(adaptor,"rule e1",e1!=null?e1.Tree:null);
				RewriteRuleSubtreeStream stream_e2=new RewriteRuleSubtreeStream(adaptor,"rule e2",e2!=null?e2.Tree:null);
				RewriteRuleSubtreeStream stream_e3=new RewriteRuleSubtreeStream(adaptor,"rule e3",e3!=null?e3.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1314:57: -> ^( FUNC ^( IF $e1 $e2 $e3) )
				{
					DebugLocation(1314, 60);
					// MySQL51Parser.g3:1314:60: ^( FUNC ^( IF $e1 $e2 $e3) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1314, 62);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1314, 67);
					// MySQL51Parser.g3:1314:67: ^( IF $e1 $e2 $e3)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1314, 69);
					root_2 = (object)adaptor.BecomeRoot(stream_IF.NextNode(), root_2);

					DebugLocation(1314, 73);
					adaptor.AddChild(root_2, stream_e1.NextTree());
					DebugLocation(1314, 77);
					adaptor.AddChild(root_2, stream_e2.NextTree());
					DebugLocation(1314, 81);
					adaptor.AddChild(root_2, stream_e3.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 9:
				DebugEnterAlt(9);
				// MySQL51Parser.g3:1315:4: LINESTRING LPAREN exprList RPAREN
				{
				DebugLocation(1315, 4);
				LINESTRING749=(IToken)Match(input,LINESTRING,Follow._LINESTRING_in_functionCall_conflicts11954); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LINESTRING.Add(LINESTRING749);

				DebugLocation(1315, 15);
				LPAREN750=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts11956); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN750);

				DebugLocation(1315, 22);
				PushFollow(Follow._exprList_in_functionCall_conflicts11958);
				exprList751=exprList();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_exprList.Add(exprList751.Tree);
				DebugLocation(1315, 31);
				RPAREN752=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts11960); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN752);



				{
				// AST REWRITE
				// elements: LINESTRING, exprList
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1315:39: -> ^( FUNC ^( LINESTRING exprList ) )
				{
					DebugLocation(1315, 42);
					// MySQL51Parser.g3:1315:42: ^( FUNC ^( LINESTRING exprList ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1315, 44);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1315, 49);
					// MySQL51Parser.g3:1315:49: ^( LINESTRING exprList )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1315, 51);
					root_2 = (object)adaptor.BecomeRoot(stream_LINESTRING.NextNode(), root_2);

					DebugLocation(1315, 62);
					adaptor.AddChild(root_2, stream_exprList.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 10:
				DebugEnterAlt(10);
				// MySQL51Parser.g3:1316:4: MICROSECOND LPAREN expr RPAREN
				{
				DebugLocation(1316, 4);
				MICROSECOND753=(IToken)Match(input,MICROSECOND,Follow._MICROSECOND_in_functionCall_conflicts11979); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_MICROSECOND.Add(MICROSECOND753);

				DebugLocation(1316, 16);
				LPAREN754=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts11981); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN754);

				DebugLocation(1316, 23);
				PushFollow(Follow._expr_in_functionCall_conflicts11983);
				expr755=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr755.Tree);
				DebugLocation(1316, 28);
				RPAREN756=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts11985); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN756);



				{
				// AST REWRITE
				// elements: MICROSECOND, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1316:36: -> ^( FUNC ^( MICROSECOND expr ) )
				{
					DebugLocation(1316, 39);
					// MySQL51Parser.g3:1316:39: ^( FUNC ^( MICROSECOND expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1316, 41);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1316, 46);
					// MySQL51Parser.g3:1316:46: ^( MICROSECOND expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1316, 48);
					root_2 = (object)adaptor.BecomeRoot(stream_MICROSECOND.NextNode(), root_2);

					DebugLocation(1316, 60);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 11:
				DebugEnterAlt(11);
				// MySQL51Parser.g3:1317:4: MOD LPAREN e1= expr COMMA e2= expr RPAREN
				{
				DebugLocation(1317, 4);
				MOD757=(IToken)Match(input,MOD,Follow._MOD_in_functionCall_conflicts12003); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_MOD.Add(MOD757);

				DebugLocation(1317, 8);
				LPAREN758=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts12005); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN758);

				DebugLocation(1317, 17);
				PushFollow(Follow._expr_in_functionCall_conflicts12009);
				e1=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(e1.Tree);
				DebugLocation(1317, 23);
				COMMA759=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall_conflicts12011); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA759);

				DebugLocation(1317, 31);
				PushFollow(Follow._expr_in_functionCall_conflicts12015);
				e2=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(e2.Tree);
				DebugLocation(1317, 37);
				RPAREN760=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts12017); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN760);



				{
				// AST REWRITE
				// elements: MOD, e1, e2
				// token labels: 
				// rule labels: e1, e2, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_e1=new RewriteRuleSubtreeStream(adaptor,"rule e1",e1!=null?e1.Tree:null);
				RewriteRuleSubtreeStream stream_e2=new RewriteRuleSubtreeStream(adaptor,"rule e2",e2!=null?e2.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1317:45: -> ^( FUNC ^( MOD $e1 $e2) )
				{
					DebugLocation(1317, 48);
					// MySQL51Parser.g3:1317:48: ^( FUNC ^( MOD $e1 $e2) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1317, 50);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1317, 55);
					// MySQL51Parser.g3:1317:55: ^( MOD $e1 $e2)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1317, 57);
					root_2 = (object)adaptor.BecomeRoot(stream_MOD.NextNode(), root_2);

					DebugLocation(1317, 62);
					adaptor.AddChild(root_2, stream_e1.NextTree());
					DebugLocation(1317, 66);
					adaptor.AddChild(root_2, stream_e2.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 12:
				DebugEnterAlt(12);
				// MySQL51Parser.g3:1318:4: MULTILINESTRING LPAREN exprList RPAREN
				{
				DebugLocation(1318, 4);
				MULTILINESTRING761=(IToken)Match(input,MULTILINESTRING,Follow._MULTILINESTRING_in_functionCall_conflicts12039); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_MULTILINESTRING.Add(MULTILINESTRING761);

				DebugLocation(1318, 20);
				LPAREN762=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts12041); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN762);

				DebugLocation(1318, 27);
				PushFollow(Follow._exprList_in_functionCall_conflicts12043);
				exprList763=exprList();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_exprList.Add(exprList763.Tree);
				DebugLocation(1318, 36);
				RPAREN764=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts12045); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN764);



				{
				// AST REWRITE
				// elements: MULTILINESTRING, exprList
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1318:44: -> ^( FUNC ^( MULTILINESTRING exprList ) )
				{
					DebugLocation(1318, 47);
					// MySQL51Parser.g3:1318:47: ^( FUNC ^( MULTILINESTRING exprList ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1318, 49);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1318, 54);
					// MySQL51Parser.g3:1318:54: ^( MULTILINESTRING exprList )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1318, 56);
					root_2 = (object)adaptor.BecomeRoot(stream_MULTILINESTRING.NextNode(), root_2);

					DebugLocation(1318, 72);
					adaptor.AddChild(root_2, stream_exprList.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 13:
				DebugEnterAlt(13);
				// MySQL51Parser.g3:1319:4: MULTIPOINT LPAREN exprList RPAREN
				{
				DebugLocation(1319, 4);
				MULTIPOINT765=(IToken)Match(input,MULTIPOINT,Follow._MULTIPOINT_in_functionCall_conflicts12064); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_MULTIPOINT.Add(MULTIPOINT765);

				DebugLocation(1319, 15);
				LPAREN766=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts12066); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN766);

				DebugLocation(1319, 22);
				PushFollow(Follow._exprList_in_functionCall_conflicts12068);
				exprList767=exprList();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_exprList.Add(exprList767.Tree);
				DebugLocation(1319, 31);
				RPAREN768=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts12070); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN768);



				{
				// AST REWRITE
				// elements: MULTIPOINT, exprList
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1319:39: -> ^( FUNC ^( MULTIPOINT exprList ) )
				{
					DebugLocation(1319, 42);
					// MySQL51Parser.g3:1319:42: ^( FUNC ^( MULTIPOINT exprList ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1319, 44);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1319, 49);
					// MySQL51Parser.g3:1319:49: ^( MULTIPOINT exprList )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1319, 51);
					root_2 = (object)adaptor.BecomeRoot(stream_MULTIPOINT.NextNode(), root_2);

					DebugLocation(1319, 62);
					adaptor.AddChild(root_2, stream_exprList.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 14:
				DebugEnterAlt(14);
				// MySQL51Parser.g3:1320:4: MULTIPOLYGON LPAREN exprList RPAREN
				{
				DebugLocation(1320, 4);
				MULTIPOLYGON769=(IToken)Match(input,MULTIPOLYGON,Follow._MULTIPOLYGON_in_functionCall_conflicts12089); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_MULTIPOLYGON.Add(MULTIPOLYGON769);

				DebugLocation(1320, 17);
				LPAREN770=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts12091); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN770);

				DebugLocation(1320, 24);
				PushFollow(Follow._exprList_in_functionCall_conflicts12093);
				exprList771=exprList();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_exprList.Add(exprList771.Tree);
				DebugLocation(1320, 33);
				RPAREN772=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts12095); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN772);



				{
				// AST REWRITE
				// elements: MULTIPOLYGON, exprList
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1320:41: -> ^( FUNC ^( MULTIPOLYGON exprList ) )
				{
					DebugLocation(1320, 44);
					// MySQL51Parser.g3:1320:44: ^( FUNC ^( MULTIPOLYGON exprList ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1320, 46);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1320, 51);
					// MySQL51Parser.g3:1320:51: ^( MULTIPOLYGON exprList )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1320, 53);
					root_2 = (object)adaptor.BecomeRoot(stream_MULTIPOLYGON.NextNode(), root_2);

					DebugLocation(1320, 66);
					adaptor.AddChild(root_2, stream_exprList.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 15:
				DebugEnterAlt(15);
				// MySQL51Parser.g3:1321:4: OLD_PASSWORD LPAREN expr RPAREN
				{
				DebugLocation(1321, 4);
				OLD_PASSWORD773=(IToken)Match(input,OLD_PASSWORD,Follow._OLD_PASSWORD_in_functionCall_conflicts12114); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_OLD_PASSWORD.Add(OLD_PASSWORD773);

				DebugLocation(1321, 17);
				LPAREN774=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts12116); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN774);

				DebugLocation(1321, 24);
				PushFollow(Follow._expr_in_functionCall_conflicts12118);
				expr775=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr775.Tree);
				DebugLocation(1321, 29);
				RPAREN776=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts12120); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN776);



				{
				// AST REWRITE
				// elements: OLD_PASSWORD, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1321:37: -> ^( FUNC ^( OLD_PASSWORD expr ) )
				{
					DebugLocation(1321, 40);
					// MySQL51Parser.g3:1321:40: ^( FUNC ^( OLD_PASSWORD expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1321, 42);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1321, 47);
					// MySQL51Parser.g3:1321:47: ^( OLD_PASSWORD expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1321, 49);
					root_2 = (object)adaptor.BecomeRoot(stream_OLD_PASSWORD.NextNode(), root_2);

					DebugLocation(1321, 62);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 16:
				DebugEnterAlt(16);
				// MySQL51Parser.g3:1322:4: PASSWORD LPAREN expr RPAREN
				{
				DebugLocation(1322, 4);
				PASSWORD777=(IToken)Match(input,PASSWORD,Follow._PASSWORD_in_functionCall_conflicts12138); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_PASSWORD.Add(PASSWORD777);

				DebugLocation(1322, 13);
				LPAREN778=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts12140); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN778);

				DebugLocation(1322, 20);
				PushFollow(Follow._expr_in_functionCall_conflicts12142);
				expr779=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr779.Tree);
				DebugLocation(1322, 25);
				RPAREN780=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts12144); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN780);



				{
				// AST REWRITE
				// elements: PASSWORD, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1322:33: -> ^( FUNC ^( PASSWORD expr ) )
				{
					DebugLocation(1322, 36);
					// MySQL51Parser.g3:1322:36: ^( FUNC ^( PASSWORD expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1322, 38);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1322, 43);
					// MySQL51Parser.g3:1322:43: ^( PASSWORD expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1322, 45);
					root_2 = (object)adaptor.BecomeRoot(stream_PASSWORD.NextNode(), root_2);

					DebugLocation(1322, 54);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 17:
				DebugEnterAlt(17);
				// MySQL51Parser.g3:1323:4: POINT LPAREN x= expr COMMA y= expr RPAREN
				{
				DebugLocation(1323, 4);
				POINT781=(IToken)Match(input,POINT,Follow._POINT_in_functionCall_conflicts12162); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_POINT.Add(POINT781);

				DebugLocation(1323, 10);
				LPAREN782=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts12164); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN782);

				DebugLocation(1323, 18);
				PushFollow(Follow._expr_in_functionCall_conflicts12168);
				x=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(x.Tree);
				DebugLocation(1323, 24);
				COMMA783=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall_conflicts12170); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA783);

				DebugLocation(1323, 31);
				PushFollow(Follow._expr_in_functionCall_conflicts12174);
				y=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(y.Tree);
				DebugLocation(1323, 37);
				RPAREN784=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts12176); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN784);



				{
				// AST REWRITE
				// elements: POINT, x, y
				// token labels: 
				// rule labels: x, y, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_x=new RewriteRuleSubtreeStream(adaptor,"rule x",x!=null?x.Tree:null);
				RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1323:45: -> ^( FUNC ^( POINT $x $y) )
				{
					DebugLocation(1323, 48);
					// MySQL51Parser.g3:1323:48: ^( FUNC ^( POINT $x $y) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1323, 50);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1323, 55);
					// MySQL51Parser.g3:1323:55: ^( POINT $x $y)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1323, 57);
					root_2 = (object)adaptor.BecomeRoot(stream_POINT.NextNode(), root_2);

					DebugLocation(1323, 64);
					adaptor.AddChild(root_2, stream_x.NextTree());
					DebugLocation(1323, 67);
					adaptor.AddChild(root_2, stream_y.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 18:
				DebugEnterAlt(18);
				// MySQL51Parser.g3:1324:4: POLYGON LPAREN exprList RPAREN
				{
				DebugLocation(1324, 4);
				POLYGON785=(IToken)Match(input,POLYGON,Follow._POLYGON_in_functionCall_conflicts12199); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_POLYGON.Add(POLYGON785);

				DebugLocation(1324, 12);
				LPAREN786=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts12201); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN786);

				DebugLocation(1324, 19);
				PushFollow(Follow._exprList_in_functionCall_conflicts12203);
				exprList787=exprList();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_exprList.Add(exprList787.Tree);
				DebugLocation(1324, 28);
				RPAREN788=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts12205); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN788);



				{
				// AST REWRITE
				// elements: POLYGON, exprList
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1324:36: -> ^( FUNC ^( POLYGON exprList ) )
				{
					DebugLocation(1324, 39);
					// MySQL51Parser.g3:1324:39: ^( FUNC ^( POLYGON exprList ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1324, 41);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1324, 46);
					// MySQL51Parser.g3:1324:46: ^( POLYGON exprList )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1324, 48);
					root_2 = (object)adaptor.BecomeRoot(stream_POLYGON.NextNode(), root_2);

					DebugLocation(1324, 56);
					adaptor.AddChild(root_2, stream_exprList.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 19:
				DebugEnterAlt(19);
				// MySQL51Parser.g3:1325:4: QUARTER LPAREN expr RPAREN
				{
				DebugLocation(1325, 4);
				QUARTER789=(IToken)Match(input,QUARTER,Follow._QUARTER_in_functionCall_conflicts12224); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_QUARTER.Add(QUARTER789);

				DebugLocation(1325, 12);
				LPAREN790=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts12226); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN790);

				DebugLocation(1325, 19);
				PushFollow(Follow._expr_in_functionCall_conflicts12228);
				expr791=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr791.Tree);
				DebugLocation(1325, 24);
				RPAREN792=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts12230); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN792);



				{
				// AST REWRITE
				// elements: QUARTER, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1325:32: -> ^( FUNC ^( QUARTER expr ) )
				{
					DebugLocation(1325, 35);
					// MySQL51Parser.g3:1325:35: ^( FUNC ^( QUARTER expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1325, 37);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1325, 42);
					// MySQL51Parser.g3:1325:42: ^( QUARTER expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1325, 44);
					root_2 = (object)adaptor.BecomeRoot(stream_QUARTER.NextNode(), root_2);

					DebugLocation(1325, 52);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 20:
				DebugEnterAlt(20);
				// MySQL51Parser.g3:1326:4: REPEAT LPAREN str= expr COMMA count= expr RPAREN
				{
				DebugLocation(1326, 4);
				REPEAT793=(IToken)Match(input,REPEAT,Follow._REPEAT_in_functionCall_conflicts12248); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_REPEAT.Add(REPEAT793);

				DebugLocation(1326, 11);
				LPAREN794=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts12250); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN794);

				DebugLocation(1326, 21);
				PushFollow(Follow._expr_in_functionCall_conflicts12254);
				str=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(str.Tree);
				DebugLocation(1326, 27);
				COMMA795=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall_conflicts12256); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA795);

				DebugLocation(1326, 38);
				PushFollow(Follow._expr_in_functionCall_conflicts12260);
				count=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(count.Tree);
				DebugLocation(1326, 44);
				RPAREN796=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts12262); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN796);



				{
				// AST REWRITE
				// elements: REPEAT, str, count
				// token labels: 
				// rule labels: str, count, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_str=new RewriteRuleSubtreeStream(adaptor,"rule str",str!=null?str.Tree:null);
				RewriteRuleSubtreeStream stream_count=new RewriteRuleSubtreeStream(adaptor,"rule count",count!=null?count.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1326:52: -> ^( FUNC ^( REPEAT $str $count) )
				{
					DebugLocation(1326, 55);
					// MySQL51Parser.g3:1326:55: ^( FUNC ^( REPEAT $str $count) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1326, 57);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1326, 62);
					// MySQL51Parser.g3:1326:62: ^( REPEAT $str $count)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1326, 64);
					root_2 = (object)adaptor.BecomeRoot(stream_REPEAT.NextNode(), root_2);

					DebugLocation(1326, 72);
					adaptor.AddChild(root_2, stream_str.NextTree());
					DebugLocation(1326, 77);
					adaptor.AddChild(root_2, stream_count.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 21:
				DebugEnterAlt(21);
				// MySQL51Parser.g3:1327:4: REPLACE LPAREN str= expr COMMA from= expr COMMA to= expr RPAREN
				{
				DebugLocation(1327, 4);
				REPLACE797=(IToken)Match(input,REPLACE,Follow._REPLACE_in_functionCall_conflicts12284); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_REPLACE.Add(REPLACE797);

				DebugLocation(1327, 12);
				LPAREN798=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts12286); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN798);

				DebugLocation(1327, 22);
				PushFollow(Follow._expr_in_functionCall_conflicts12290);
				str=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(str.Tree);
				DebugLocation(1327, 28);
				COMMA799=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall_conflicts12292); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA799);

				DebugLocation(1327, 38);
				PushFollow(Follow._expr_in_functionCall_conflicts12296);
				from=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(from.Tree);
				DebugLocation(1327, 44);
				COMMA800=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall_conflicts12298); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA800);

				DebugLocation(1327, 52);
				PushFollow(Follow._expr_in_functionCall_conflicts12302);
				to=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(to.Tree);
				DebugLocation(1327, 58);
				RPAREN801=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts12304); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN801);



				{
				// AST REWRITE
				// elements: REPLACE, str, from, to
				// token labels: 
				// rule labels: str, from, to, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_str=new RewriteRuleSubtreeStream(adaptor,"rule str",str!=null?str.Tree:null);
				RewriteRuleSubtreeStream stream_from=new RewriteRuleSubtreeStream(adaptor,"rule from",from!=null?from.Tree:null);
				RewriteRuleSubtreeStream stream_to=new RewriteRuleSubtreeStream(adaptor,"rule to",to!=null?to.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1327:66: -> ^( FUNC ^( REPLACE $str $from $to) )
				{
					DebugLocation(1327, 69);
					// MySQL51Parser.g3:1327:69: ^( FUNC ^( REPLACE $str $from $to) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1327, 71);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1327, 76);
					// MySQL51Parser.g3:1327:76: ^( REPLACE $str $from $to)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1327, 78);
					root_2 = (object)adaptor.BecomeRoot(stream_REPLACE.NextNode(), root_2);

					DebugLocation(1327, 87);
					adaptor.AddChild(root_2, stream_str.NextTree());
					DebugLocation(1327, 92);
					adaptor.AddChild(root_2, stream_from.NextTree());
					DebugLocation(1327, 98);
					adaptor.AddChild(root_2, stream_to.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 22:
				DebugEnterAlt(22);
				// MySQL51Parser.g3:1328:4: TRUNCATE LPAREN num= expr COMMA decimals= expr RPAREN
				{
				DebugLocation(1328, 4);
				TRUNCATE802=(IToken)Match(input,TRUNCATE,Follow._TRUNCATE_in_functionCall_conflicts12329); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TRUNCATE.Add(TRUNCATE802);

				DebugLocation(1328, 13);
				LPAREN803=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts12331); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN803);

				DebugLocation(1328, 23);
				PushFollow(Follow._expr_in_functionCall_conflicts12335);
				num=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(num.Tree);
				DebugLocation(1328, 29);
				COMMA804=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall_conflicts12337); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA804);

				DebugLocation(1328, 43);
				PushFollow(Follow._expr_in_functionCall_conflicts12341);
				decimals=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(decimals.Tree);
				DebugLocation(1328, 49);
				RPAREN805=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts12343); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN805);



				{
				// AST REWRITE
				// elements: TRUNCATE, num, decimals
				// token labels: 
				// rule labels: num, decimals, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_num=new RewriteRuleSubtreeStream(adaptor,"rule num",num!=null?num.Tree:null);
				RewriteRuleSubtreeStream stream_decimals=new RewriteRuleSubtreeStream(adaptor,"rule decimals",decimals!=null?decimals.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1328:57: -> ^( FUNC ^( TRUNCATE $num $decimals) )
				{
					DebugLocation(1328, 60);
					// MySQL51Parser.g3:1328:60: ^( FUNC ^( TRUNCATE $num $decimals) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1328, 62);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1328, 67);
					// MySQL51Parser.g3:1328:67: ^( TRUNCATE $num $decimals)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1328, 69);
					root_2 = (object)adaptor.BecomeRoot(stream_TRUNCATE.NextNode(), root_2);

					DebugLocation(1328, 79);
					adaptor.AddChild(root_2, stream_num.NextTree());
					DebugLocation(1328, 84);
					adaptor.AddChild(root_2, stream_decimals.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 23:
				DebugEnterAlt(23);
				// MySQL51Parser.g3:1329:4: WEEK LPAREN date= expr ( COMMA mode= expr )? RPAREN
				{
				DebugLocation(1329, 4);
				WEEK806=(IToken)Match(input,WEEK,Follow._WEEK_in_functionCall_conflicts12365); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_WEEK.Add(WEEK806);

				DebugLocation(1329, 9);
				LPAREN807=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_conflicts12367); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN807);

				DebugLocation(1329, 20);
				PushFollow(Follow._expr_in_functionCall_conflicts12371);
				date=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(date.Tree);
				DebugLocation(1329, 26);
				// MySQL51Parser.g3:1329:26: ( COMMA mode= expr )?
				int alt266=2;
				try { DebugEnterSubRule(266);
				try { DebugEnterDecision(266, false);
				int LA266_0 = input.LA(1);

				if ((LA266_0==COMMA))
				{
					alt266 = 1;
				}
				} finally { DebugExitDecision(266); }
				switch (alt266)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1329:27: COMMA mode= expr
					{
					DebugLocation(1329, 27);
					COMMA808=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall_conflicts12374); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_COMMA.Add(COMMA808);

					DebugLocation(1329, 37);
					PushFollow(Follow._expr_in_functionCall_conflicts12378);
					mode=expr();
					PopFollow();
					if (state.failed) return retval;
					if (state.backtracking == 0) stream_expr.Add(mode.Tree);

					}
					break;

				}
				} finally { DebugExitSubRule(266); }

				DebugLocation(1329, 45);
				RPAREN809=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_conflicts12382); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN809);



				{
				// AST REWRITE
				// elements: WEEK, date, mode
				// token labels: 
				// rule labels: date, mode, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_date=new RewriteRuleSubtreeStream(adaptor,"rule date",date!=null?date.Tree:null);
				RewriteRuleSubtreeStream stream_mode=new RewriteRuleSubtreeStream(adaptor,"rule mode",mode!=null?mode.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1329:53: -> ^( FUNC ^( WEEK $date ( $mode)? ) )
				{
					DebugLocation(1329, 56);
					// MySQL51Parser.g3:1329:56: ^( FUNC ^( WEEK $date ( $mode)? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1329, 58);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1329, 63);
					// MySQL51Parser.g3:1329:63: ^( WEEK $date ( $mode)? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1329, 65);
					root_2 = (object)adaptor.BecomeRoot(stream_WEEK.NextNode(), root_2);

					DebugLocation(1329, 71);
					adaptor.AddChild(root_2, stream_date.NextTree());
					DebugLocation(1329, 77);
					// MySQL51Parser.g3:1329:77: ( $mode)?
					if (stream_mode.HasNext)
					{
						DebugLocation(1329, 77);
						adaptor.AddChild(root_2, stream_mode.NextTree());

					}
					stream_mode.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("functionCall_conflicts", 89);
			LeaveRule("functionCall_conflicts", 89);
			LeaveRule_functionCall_conflicts();
		}
		DebugLocation(1330, 1);
		} finally { DebugExitRule(GrammarFileName, "functionCall_conflicts"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "functionCall_conflicts"

	private sealed partial class functionCall_reserved_return : ParserRuleReturnScope<IToken>, IAstRuleReturnScope<object>, IAstRuleReturnScope
	{
		private object _tree;
		public object Tree { get { return _tree; } set { _tree = value; } }
		object IAstRuleReturnScope.Tree { get { return Tree; } }
		public functionCall_reserved_return(MySQL51Parser grammar) {OnCreated(grammar);}
		partial void OnCreated(MySQL51Parser grammar);
	}

	partial void EnterRule_functionCall_reserved();
	partial void LeaveRule_functionCall_reserved();

	// $ANTLR start "functionCall_reserved"
	// MySQL51Parser.g3:1332:1: functionCall_reserved : ( CHAR LPAREN exprList ( USING (charsetname= ID |charsetname= STRING ) )? RPAREN -> ^( FUNC ^( CHAR exprList ( $charsetname)? ) ) | CURRENT_USER ( LPAREN RPAREN )? -> ^( FUNC ^( CURRENT_USER ( LPAREN )? ) ) | DATE LPAREN expr RPAREN -> ^( FUNC ^( DATE expr ) ) | DAY LPAREN expr RPAREN -> ^( FUNC ^( DAY expr ) ) | HOUR LPAREN expr RPAREN -> ^( FUNC ^( HOUR expr ) ) | INSERT LPAREN str= expr COMMA pos= expr COMMA len= expr COMMA newstr= expr RPAREN -> ^( FUNC ^( INSERT $str $pos $len $newstr) ) | INTERVAL LPAREN exprList RPAREN -> ^( FUNC ^( INTERVAL exprList ) ) | LEFT LPAREN expr RPAREN -> ^( FUNC ^( LEFT expr ) ) | MINUTE LPAREN expr RPAREN -> ^( FUNC ^( MINUTE expr ) ) | MONTH LPAREN expr RPAREN -> ^( FUNC ^( MONTH expr ) ) | RIGHT LPAREN expr RPAREN -> ^( FUNC ^( RIGHT expr ) ) | SECOND LPAREN expr RPAREN -> ^( FUNC ^( SECOND expr ) ) | TIME LPAREN expr RPAREN -> ^( FUNC ^( TIME expr ) ) | TIMESTAMP LPAREN expr RPAREN -> ^( FUNC ^( TIMESTAMP expr ) ) | USER LPAREN RPAREN -> ^( FUNC ^( USER LPAREN ) ) | YEAR LPAREN expr RPAREN -> ^( FUNC ^( YEAR expr ) ) );
	[GrammarRule("functionCall_reserved")]
	private MySQL51Parser.functionCall_reserved_return functionCall_reserved()
	{
		EnterRule_functionCall_reserved();
		EnterRule("functionCall_reserved", 90);
		TraceIn("functionCall_reserved", 90);
		MySQL51Parser.functionCall_reserved_return retval = new MySQL51Parser.functionCall_reserved_return(this);
		retval.Start = (IToken)input.LT(1);

		object root_0 = default(object);

		IToken charsetname = default(IToken);
		IToken CHAR810 = default(IToken);
		IToken LPAREN811 = default(IToken);
		IToken USING813 = default(IToken);
		IToken RPAREN814 = default(IToken);
		IToken CURRENT_USER815 = default(IToken);
		IToken LPAREN816 = default(IToken);
		IToken RPAREN817 = default(IToken);
		IToken DATE818 = default(IToken);
		IToken LPAREN819 = default(IToken);
		IToken RPAREN821 = default(IToken);
		IToken DAY822 = default(IToken);
		IToken LPAREN823 = default(IToken);
		IToken RPAREN825 = default(IToken);
		IToken HOUR826 = default(IToken);
		IToken LPAREN827 = default(IToken);
		IToken RPAREN829 = default(IToken);
		IToken INSERT830 = default(IToken);
		IToken LPAREN831 = default(IToken);
		IToken COMMA832 = default(IToken);
		IToken COMMA833 = default(IToken);
		IToken COMMA834 = default(IToken);
		IToken RPAREN835 = default(IToken);
		IToken INTERVAL836 = default(IToken);
		IToken LPAREN837 = default(IToken);
		IToken RPAREN839 = default(IToken);
		IToken LEFT840 = default(IToken);
		IToken LPAREN841 = default(IToken);
		IToken RPAREN843 = default(IToken);
		IToken MINUTE844 = default(IToken);
		IToken LPAREN845 = default(IToken);
		IToken RPAREN847 = default(IToken);
		IToken MONTH848 = default(IToken);
		IToken LPAREN849 = default(IToken);
		IToken RPAREN851 = default(IToken);
		IToken RIGHT852 = default(IToken);
		IToken LPAREN853 = default(IToken);
		IToken RPAREN855 = default(IToken);
		IToken SECOND856 = default(IToken);
		IToken LPAREN857 = default(IToken);
		IToken RPAREN859 = default(IToken);
		IToken TIME860 = default(IToken);
		IToken LPAREN861 = default(IToken);
		IToken RPAREN863 = default(IToken);
		IToken TIMESTAMP864 = default(IToken);
		IToken LPAREN865 = default(IToken);
		IToken RPAREN867 = default(IToken);
		IToken USER868 = default(IToken);
		IToken LPAREN869 = default(IToken);
		IToken RPAREN870 = default(IToken);
		IToken YEAR871 = default(IToken);
		IToken LPAREN872 = default(IToken);
		IToken RPAREN874 = default(IToken);
		MySQL51Parser.expr_return str = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return pos = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return len = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return newstr = default(MySQL51Parser.expr_return);
		MySQL51Parser.exprList_return exprList812 = default(MySQL51Parser.exprList_return);
		MySQL51Parser.expr_return expr820 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr824 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr828 = default(MySQL51Parser.expr_return);
		MySQL51Parser.exprList_return exprList838 = default(MySQL51Parser.exprList_return);
		MySQL51Parser.expr_return expr842 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr846 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr850 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr854 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr858 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr862 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr866 = default(MySQL51Parser.expr_return);
		MySQL51Parser.expr_return expr873 = default(MySQL51Parser.expr_return);

		object charsetname_tree = default(object);
		object CHAR810_tree = default(object);
		object LPAREN811_tree = default(object);
		object USING813_tree = default(object);
		object RPAREN814_tree = default(object);
		object CURRENT_USER815_tree = default(object);
		object LPAREN816_tree = default(object);
		object RPAREN817_tree = default(object);
		object DATE818_tree = default(object);
		object LPAREN819_tree = default(object);
		object RPAREN821_tree = default(object);
		object DAY822_tree = default(object);
		object LPAREN823_tree = default(object);
		object RPAREN825_tree = default(object);
		object HOUR826_tree = default(object);
		object LPAREN827_tree = default(object);
		object RPAREN829_tree = default(object);
		object INSERT830_tree = default(object);
		object LPAREN831_tree = default(object);
		object COMMA832_tree = default(object);
		object COMMA833_tree = default(object);
		object COMMA834_tree = default(object);
		object RPAREN835_tree = default(object);
		object INTERVAL836_tree = default(object);
		object LPAREN837_tree = default(object);
		object RPAREN839_tree = default(object);
		object LEFT840_tree = default(object);
		object LPAREN841_tree = default(object);
		object RPAREN843_tree = default(object);
		object MINUTE844_tree = default(object);
		object LPAREN845_tree = default(object);
		object RPAREN847_tree = default(object);
		object MONTH848_tree = default(object);
		object LPAREN849_tree = default(object);
		object RPAREN851_tree = default(object);
		object RIGHT852_tree = default(object);
		object LPAREN853_tree = default(object);
		object RPAREN855_tree = default(object);
		object SECOND856_tree = default(object);
		object LPAREN857_tree = default(object);
		object RPAREN859_tree = default(object);
		object TIME860_tree = default(object);
		object LPAREN861_tree = default(object);
		object RPAREN863_tree = default(object);
		object TIMESTAMP864_tree = default(object);
		object LPAREN865_tree = default(object);
		object RPAREN867_tree = default(object);
		object USER868_tree = default(object);
		object LPAREN869_tree = default(object);
		object RPAREN870_tree = default(object);
		object YEAR871_tree = default(object);
		object LPAREN872_tree = default(object);
		object RPAREN874_tree = default(object);
		RewriteRuleITokenStream stream_CHAR=new RewriteRuleITokenStream(adaptor,"token CHAR");
		RewriteRuleITokenStream stream_LPAREN=new RewriteRuleITokenStream(adaptor,"token LPAREN");
		RewriteRuleITokenStream stream_USING=new RewriteRuleITokenStream(adaptor,"token USING");
		RewriteRuleITokenStream stream_ID=new RewriteRuleITokenStream(adaptor,"token ID");
		RewriteRuleITokenStream stream_STRING=new RewriteRuleITokenStream(adaptor,"token STRING");
		RewriteRuleITokenStream stream_RPAREN=new RewriteRuleITokenStream(adaptor,"token RPAREN");
		RewriteRuleITokenStream stream_CURRENT_USER=new RewriteRuleITokenStream(adaptor,"token CURRENT_USER");
		RewriteRuleITokenStream stream_DATE=new RewriteRuleITokenStream(adaptor,"token DATE");
		RewriteRuleITokenStream stream_DAY=new RewriteRuleITokenStream(adaptor,"token DAY");
		RewriteRuleITokenStream stream_HOUR=new RewriteRuleITokenStream(adaptor,"token HOUR");
		RewriteRuleITokenStream stream_INSERT=new RewriteRuleITokenStream(adaptor,"token INSERT");
		RewriteRuleITokenStream stream_COMMA=new RewriteRuleITokenStream(adaptor,"token COMMA");
		RewriteRuleITokenStream stream_INTERVAL=new RewriteRuleITokenStream(adaptor,"token INTERVAL");
		RewriteRuleITokenStream stream_LEFT=new RewriteRuleITokenStream(adaptor,"token LEFT");
		RewriteRuleITokenStream stream_MINUTE=new RewriteRuleITokenStream(adaptor,"token MINUTE");
		RewriteRuleITokenStream stream_MONTH=new RewriteRuleITokenStream(adaptor,"token MONTH");
		RewriteRuleITokenStream stream_RIGHT=new RewriteRuleITokenStream(adaptor,"token RIGHT");
		RewriteRuleITokenStream stream_SECOND=new RewriteRuleITokenStream(adaptor,"token SECOND");
		RewriteRuleITokenStream stream_TIME=new RewriteRuleITokenStream(adaptor,"token TIME");
		RewriteRuleITokenStream stream_TIMESTAMP=new RewriteRuleITokenStream(adaptor,"token TIMESTAMP");
		RewriteRuleITokenStream stream_USER=new RewriteRuleITokenStream(adaptor,"token USER");
		RewriteRuleITokenStream stream_YEAR=new RewriteRuleITokenStream(adaptor,"token YEAR");
		RewriteRuleSubtreeStream stream_exprList=new RewriteRuleSubtreeStream(adaptor,"rule exprList");
		RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr");
		try { DebugEnterRule(GrammarFileName, "functionCall_reserved");
		DebugLocation(1332, 1);
		if (RuleLevel == 0)
			DebugListener.Commence();
		IncRuleLevel();
		try
		{
			// MySQL51Parser.g3:1333:2: ( CHAR LPAREN exprList ( USING (charsetname= ID |charsetname= STRING ) )? RPAREN -> ^( FUNC ^( CHAR exprList ( $charsetname)? ) ) | CURRENT_USER ( LPAREN RPAREN )? -> ^( FUNC ^( CURRENT_USER ( LPAREN )? ) ) | DATE LPAREN expr RPAREN -> ^( FUNC ^( DATE expr ) ) | DAY LPAREN expr RPAREN -> ^( FUNC ^( DAY expr ) ) | HOUR LPAREN expr RPAREN -> ^( FUNC ^( HOUR expr ) ) | INSERT LPAREN str= expr COMMA pos= expr COMMA len= expr COMMA newstr= expr RPAREN -> ^( FUNC ^( INSERT $str $pos $len $newstr) ) | INTERVAL LPAREN exprList RPAREN -> ^( FUNC ^( INTERVAL exprList ) ) | LEFT LPAREN expr RPAREN -> ^( FUNC ^( LEFT expr ) ) | MINUTE LPAREN expr RPAREN -> ^( FUNC ^( MINUTE expr ) ) | MONTH LPAREN expr RPAREN -> ^( FUNC ^( MONTH expr ) ) | RIGHT LPAREN expr RPAREN -> ^( FUNC ^( RIGHT expr ) ) | SECOND LPAREN expr RPAREN -> ^( FUNC ^( SECOND expr ) ) | TIME LPAREN expr RPAREN -> ^( FUNC ^( TIME expr ) ) | TIMESTAMP LPAREN expr RPAREN -> ^( FUNC ^( TIMESTAMP expr ) ) | USER LPAREN RPAREN -> ^( FUNC ^( USER LPAREN ) ) | YEAR LPAREN expr RPAREN -> ^( FUNC ^( YEAR expr ) ) )
			int alt271=16;
			try { DebugEnterDecision(271, false);
			switch (input.LA(1))
			{
			case CHAR:
				{
				alt271 = 1;
				}
				break;
			case CURRENT_USER:
				{
				alt271 = 2;
				}
				break;
			case DATE:
				{
				alt271 = 3;
				}
				break;
			case DAY:
				{
				alt271 = 4;
				}
				break;
			case HOUR:
				{
				alt271 = 5;
				}
				break;
			case INSERT:
				{
				alt271 = 6;
				}
				break;
			case INTERVAL:
				{
				alt271 = 7;
				}
				break;
			case LEFT:
				{
				alt271 = 8;
				}
				break;
			case MINUTE:
				{
				alt271 = 9;
				}
				break;
			case MONTH:
				{
				alt271 = 10;
				}
				break;
			case RIGHT:
				{
				alt271 = 11;
				}
				break;
			case SECOND:
				{
				alt271 = 12;
				}
				break;
			case TIME:
				{
				alt271 = 13;
				}
				break;
			case TIMESTAMP:
				{
				alt271 = 14;
				}
				break;
			case USER:
				{
				alt271 = 15;
				}
				break;
			case YEAR:
				{
				alt271 = 16;
				}
				break;
			default:
				{
					if (state.backtracking>0) {state.failed=true; return retval;}
					NoViableAltException nvae = new NoViableAltException("", 271, 0, input);
					DebugRecognitionException(nvae);
					throw nvae;
				}
			}

			} finally { DebugExitDecision(271); }
			switch (alt271)
			{
			case 1:
				DebugEnterAlt(1);
				// MySQL51Parser.g3:1334:3: CHAR LPAREN exprList ( USING (charsetname= ID |charsetname= STRING ) )? RPAREN
				{
				DebugLocation(1334, 3);
				CHAR810=(IToken)Match(input,CHAR,Follow._CHAR_in_functionCall_reserved12415); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CHAR.Add(CHAR810);

				DebugLocation(1334, 8);
				LPAREN811=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12417); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN811);

				DebugLocation(1334, 15);
				PushFollow(Follow._exprList_in_functionCall_reserved12419);
				exprList812=exprList();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_exprList.Add(exprList812.Tree);
				DebugLocation(1334, 24);
				// MySQL51Parser.g3:1334:24: ( USING (charsetname= ID |charsetname= STRING ) )?
				int alt269=2;
				try { DebugEnterSubRule(269);
				try { DebugEnterDecision(269, false);
				int LA269_0 = input.LA(1);

				if ((LA269_0==USING))
				{
					alt269 = 1;
				}
				} finally { DebugExitDecision(269); }
				switch (alt269)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1334:25: USING (charsetname= ID |charsetname= STRING )
					{
					DebugLocation(1334, 25);
					USING813=(IToken)Match(input,USING,Follow._USING_in_functionCall_reserved12422); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_USING.Add(USING813);

					DebugLocation(1334, 31);
					// MySQL51Parser.g3:1334:31: (charsetname= ID |charsetname= STRING )
					int alt268=2;
					try { DebugEnterSubRule(268);
					try { DebugEnterDecision(268, false);
					int LA268_0 = input.LA(1);

					if ((LA268_0==ID))
					{
						alt268 = 1;
					}
					else if ((LA268_0==STRING))
					{
						alt268 = 2;
					}
					else
					{
						if (state.backtracking>0) {state.failed=true; return retval;}
						NoViableAltException nvae = new NoViableAltException("", 268, 0, input);
						DebugRecognitionException(nvae);
						throw nvae;
					}
					} finally { DebugExitDecision(268); }
					switch (alt268)
					{
					case 1:
						DebugEnterAlt(1);
						// MySQL51Parser.g3:1334:32: charsetname= ID
						{
						DebugLocation(1334, 43);
						charsetname=(IToken)Match(input,ID,Follow._ID_in_functionCall_reserved12427); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_ID.Add(charsetname);


						}
						break;
					case 2:
						DebugEnterAlt(2);
						// MySQL51Parser.g3:1334:47: charsetname= STRING
						{
						DebugLocation(1334, 58);
						charsetname=(IToken)Match(input,STRING,Follow._STRING_in_functionCall_reserved12431); if (state.failed) return retval; 
						if (state.backtracking == 0) stream_STRING.Add(charsetname);


						}
						break;

					}
					} finally { DebugExitSubRule(268); }


					}
					break;

				}
				} finally { DebugExitSubRule(269); }

				DebugLocation(1334, 69);
				RPAREN814=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12436); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN814);



				{
				// AST REWRITE
				// elements: CHAR, exprList, charsetname
				// token labels: charsetname
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleITokenStream stream_charsetname=new RewriteRuleITokenStream(adaptor,"token charsetname",charsetname);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1334:77: -> ^( FUNC ^( CHAR exprList ( $charsetname)? ) )
				{
					DebugLocation(1334, 80);
					// MySQL51Parser.g3:1334:80: ^( FUNC ^( CHAR exprList ( $charsetname)? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1334, 82);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1334, 87);
					// MySQL51Parser.g3:1334:87: ^( CHAR exprList ( $charsetname)? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1334, 89);
					root_2 = (object)adaptor.BecomeRoot(stream_CHAR.NextNode(), root_2);

					DebugLocation(1334, 94);
					adaptor.AddChild(root_2, stream_exprList.NextTree());
					DebugLocation(1334, 104);
					// MySQL51Parser.g3:1334:104: ( $charsetname)?
					if (stream_charsetname.HasNext)
					{
						DebugLocation(1334, 104);
						adaptor.AddChild(root_2, stream_charsetname.NextNode());

					}
					stream_charsetname.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 2:
				DebugEnterAlt(2);
				// MySQL51Parser.g3:1335:4: CURRENT_USER ( LPAREN RPAREN )?
				{
				DebugLocation(1335, 4);
				CURRENT_USER815=(IToken)Match(input,CURRENT_USER,Follow._CURRENT_USER_in_functionCall_reserved12459); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_CURRENT_USER.Add(CURRENT_USER815);

				DebugLocation(1335, 17);
				// MySQL51Parser.g3:1335:17: ( LPAREN RPAREN )?
				int alt270=2;
				try { DebugEnterSubRule(270);
				try { DebugEnterDecision(270, false);
				int LA270_0 = input.LA(1);

				if ((LA270_0==LPAREN))
				{
					int LA270_1 = input.LA(2);

					if ((LA270_1==RPAREN))
					{
						alt270 = 1;
					}
				}
				} finally { DebugExitDecision(270); }
				switch (alt270)
				{
				case 1:
					DebugEnterAlt(1);
					// MySQL51Parser.g3:1335:18: LPAREN RPAREN
					{
					DebugLocation(1335, 18);
					LPAREN816=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12462); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_LPAREN.Add(LPAREN816);

					DebugLocation(1335, 25);
					RPAREN817=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12464); if (state.failed) return retval; 
					if (state.backtracking == 0) stream_RPAREN.Add(RPAREN817);


					}
					break;

				}
				} finally { DebugExitSubRule(270); }



				{
				// AST REWRITE
				// elements: CURRENT_USER, LPAREN
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1335:40: -> ^( FUNC ^( CURRENT_USER ( LPAREN )? ) )
				{
					DebugLocation(1335, 43);
					// MySQL51Parser.g3:1335:43: ^( FUNC ^( CURRENT_USER ( LPAREN )? ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1335, 45);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1335, 50);
					// MySQL51Parser.g3:1335:50: ^( CURRENT_USER ( LPAREN )? )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1335, 52);
					root_2 = (object)adaptor.BecomeRoot(stream_CURRENT_USER.NextNode(), root_2);

					DebugLocation(1335, 65);
					// MySQL51Parser.g3:1335:65: ( LPAREN )?
					if (stream_LPAREN.HasNext)
					{
						DebugLocation(1335, 65);
						adaptor.AddChild(root_2, stream_LPAREN.NextNode());

					}
					stream_LPAREN.Reset();

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 3:
				DebugEnterAlt(3);
				// MySQL51Parser.g3:1336:4: DATE LPAREN expr RPAREN
				{
				DebugLocation(1336, 4);
				DATE818=(IToken)Match(input,DATE,Follow._DATE_in_functionCall_reserved12490); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_DATE.Add(DATE818);

				DebugLocation(1336, 9);
				LPAREN819=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12492); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN819);

				DebugLocation(1336, 16);
				PushFollow(Follow._expr_in_functionCall_reserved12494);
				expr820=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr820.Tree);
				DebugLocation(1336, 21);
				RPAREN821=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12496); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN821);



				{
				// AST REWRITE
				// elements: DATE, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1336:29: -> ^( FUNC ^( DATE expr ) )
				{
					DebugLocation(1336, 32);
					// MySQL51Parser.g3:1336:32: ^( FUNC ^( DATE expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1336, 34);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1336, 39);
					// MySQL51Parser.g3:1336:39: ^( DATE expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1336, 41);
					root_2 = (object)adaptor.BecomeRoot(stream_DATE.NextNode(), root_2);

					DebugLocation(1336, 46);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 4:
				DebugEnterAlt(4);
				// MySQL51Parser.g3:1337:4: DAY LPAREN expr RPAREN
				{
				DebugLocation(1337, 4);
				DAY822=(IToken)Match(input,DAY,Follow._DAY_in_functionCall_reserved12514); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_DAY.Add(DAY822);

				DebugLocation(1337, 8);
				LPAREN823=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12516); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN823);

				DebugLocation(1337, 15);
				PushFollow(Follow._expr_in_functionCall_reserved12518);
				expr824=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr824.Tree);
				DebugLocation(1337, 20);
				RPAREN825=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12520); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN825);



				{
				// AST REWRITE
				// elements: DAY, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1337:28: -> ^( FUNC ^( DAY expr ) )
				{
					DebugLocation(1337, 31);
					// MySQL51Parser.g3:1337:31: ^( FUNC ^( DAY expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1337, 33);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1337, 38);
					// MySQL51Parser.g3:1337:38: ^( DAY expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1337, 40);
					root_2 = (object)adaptor.BecomeRoot(stream_DAY.NextNode(), root_2);

					DebugLocation(1337, 44);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 5:
				DebugEnterAlt(5);
				// MySQL51Parser.g3:1338:4: HOUR LPAREN expr RPAREN
				{
				DebugLocation(1338, 4);
				HOUR826=(IToken)Match(input,HOUR,Follow._HOUR_in_functionCall_reserved12538); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_HOUR.Add(HOUR826);

				DebugLocation(1338, 9);
				LPAREN827=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12540); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN827);

				DebugLocation(1338, 16);
				PushFollow(Follow._expr_in_functionCall_reserved12542);
				expr828=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr828.Tree);
				DebugLocation(1338, 21);
				RPAREN829=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12544); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN829);



				{
				// AST REWRITE
				// elements: HOUR, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1338:29: -> ^( FUNC ^( HOUR expr ) )
				{
					DebugLocation(1338, 32);
					// MySQL51Parser.g3:1338:32: ^( FUNC ^( HOUR expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1338, 34);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1338, 39);
					// MySQL51Parser.g3:1338:39: ^( HOUR expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1338, 41);
					root_2 = (object)adaptor.BecomeRoot(stream_HOUR.NextNode(), root_2);

					DebugLocation(1338, 46);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 6:
				DebugEnterAlt(6);
				// MySQL51Parser.g3:1339:4: INSERT LPAREN str= expr COMMA pos= expr COMMA len= expr COMMA newstr= expr RPAREN
				{
				DebugLocation(1339, 4);
				INSERT830=(IToken)Match(input,INSERT,Follow._INSERT_in_functionCall_reserved12562); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_INSERT.Add(INSERT830);

				DebugLocation(1339, 11);
				LPAREN831=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12564); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN831);

				DebugLocation(1340, 7);
				PushFollow(Follow._expr_in_functionCall_reserved12572);
				str=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(str.Tree);
				DebugLocation(1340, 13);
				COMMA832=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall_reserved12574); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA832);

				DebugLocation(1340, 22);
				PushFollow(Follow._expr_in_functionCall_reserved12578);
				pos=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(pos.Tree);
				DebugLocation(1340, 28);
				COMMA833=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall_reserved12580); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA833);

				DebugLocation(1340, 37);
				PushFollow(Follow._expr_in_functionCall_reserved12584);
				len=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(len.Tree);
				DebugLocation(1340, 43);
				COMMA834=(IToken)Match(input,COMMA,Follow._COMMA_in_functionCall_reserved12586); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_COMMA.Add(COMMA834);

				DebugLocation(1340, 55);
				PushFollow(Follow._expr_in_functionCall_reserved12590);
				newstr=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(newstr.Tree);
				DebugLocation(1341, 3);
				RPAREN835=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12594); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN835);



				{
				// AST REWRITE
				// elements: INSERT, str, pos, len, newstr
				// token labels: 
				// rule labels: str, pos, len, newstr, retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_str=new RewriteRuleSubtreeStream(adaptor,"rule str",str!=null?str.Tree:null);
				RewriteRuleSubtreeStream stream_pos=new RewriteRuleSubtreeStream(adaptor,"rule pos",pos!=null?pos.Tree:null);
				RewriteRuleSubtreeStream stream_len=new RewriteRuleSubtreeStream(adaptor,"rule len",len!=null?len.Tree:null);
				RewriteRuleSubtreeStream stream_newstr=new RewriteRuleSubtreeStream(adaptor,"rule newstr",newstr!=null?newstr.Tree:null);
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1341:15: -> ^( FUNC ^( INSERT $str $pos $len $newstr) )
				{
					DebugLocation(1341, 18);
					// MySQL51Parser.g3:1341:18: ^( FUNC ^( INSERT $str $pos $len $newstr) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1341, 20);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1341, 25);
					// MySQL51Parser.g3:1341:25: ^( INSERT $str $pos $len $newstr)
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1341, 27);
					root_2 = (object)adaptor.BecomeRoot(stream_INSERT.NextNode(), root_2);

					DebugLocation(1341, 35);
					adaptor.AddChild(root_2, stream_str.NextTree());
					DebugLocation(1341, 40);
					adaptor.AddChild(root_2, stream_pos.NextTree());
					DebugLocation(1341, 45);
					adaptor.AddChild(root_2, stream_len.NextTree());
					DebugLocation(1341, 50);
					adaptor.AddChild(root_2, stream_newstr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 7:
				DebugEnterAlt(7);
				// MySQL51Parser.g3:1343:4: INTERVAL LPAREN exprList RPAREN
				{
				DebugLocation(1343, 4);
				INTERVAL836=(IToken)Match(input,INTERVAL,Follow._INTERVAL_in_functionCall_reserved12628); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_INTERVAL.Add(INTERVAL836);

				DebugLocation(1343, 13);
				LPAREN837=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12630); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN837);

				DebugLocation(1343, 20);
				PushFollow(Follow._exprList_in_functionCall_reserved12632);
				exprList838=exprList();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_exprList.Add(exprList838.Tree);
				DebugLocation(1343, 29);
				RPAREN839=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12634); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN839);



				{
				// AST REWRITE
				// elements: INTERVAL, exprList
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1343:37: -> ^( FUNC ^( INTERVAL exprList ) )
				{
					DebugLocation(1343, 40);
					// MySQL51Parser.g3:1343:40: ^( FUNC ^( INTERVAL exprList ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1343, 42);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1343, 47);
					// MySQL51Parser.g3:1343:47: ^( INTERVAL exprList )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1343, 49);
					root_2 = (object)adaptor.BecomeRoot(stream_INTERVAL.NextNode(), root_2);

					DebugLocation(1343, 58);
					adaptor.AddChild(root_2, stream_exprList.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 8:
				DebugEnterAlt(8);
				// MySQL51Parser.g3:1344:4: LEFT LPAREN expr RPAREN
				{
				DebugLocation(1344, 4);
				LEFT840=(IToken)Match(input,LEFT,Follow._LEFT_in_functionCall_reserved12652); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LEFT.Add(LEFT840);

				DebugLocation(1344, 9);
				LPAREN841=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12654); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN841);

				DebugLocation(1344, 16);
				PushFollow(Follow._expr_in_functionCall_reserved12656);
				expr842=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr842.Tree);
				DebugLocation(1344, 21);
				RPAREN843=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12658); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN843);



				{
				// AST REWRITE
				// elements: LEFT, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1344:29: -> ^( FUNC ^( LEFT expr ) )
				{
					DebugLocation(1344, 32);
					// MySQL51Parser.g3:1344:32: ^( FUNC ^( LEFT expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1344, 34);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1344, 39);
					// MySQL51Parser.g3:1344:39: ^( LEFT expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1344, 41);
					root_2 = (object)adaptor.BecomeRoot(stream_LEFT.NextNode(), root_2);

					DebugLocation(1344, 46);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 9:
				DebugEnterAlt(9);
				// MySQL51Parser.g3:1345:4: MINUTE LPAREN expr RPAREN
				{
				DebugLocation(1345, 4);
				MINUTE844=(IToken)Match(input,MINUTE,Follow._MINUTE_in_functionCall_reserved12676); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_MINUTE.Add(MINUTE844);

				DebugLocation(1345, 11);
				LPAREN845=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12678); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN845);

				DebugLocation(1345, 18);
				PushFollow(Follow._expr_in_functionCall_reserved12680);
				expr846=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr846.Tree);
				DebugLocation(1345, 23);
				RPAREN847=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12682); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN847);



				{
				// AST REWRITE
				// elements: MINUTE, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1345:31: -> ^( FUNC ^( MINUTE expr ) )
				{
					DebugLocation(1345, 34);
					// MySQL51Parser.g3:1345:34: ^( FUNC ^( MINUTE expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1345, 36);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1345, 41);
					// MySQL51Parser.g3:1345:41: ^( MINUTE expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1345, 43);
					root_2 = (object)adaptor.BecomeRoot(stream_MINUTE.NextNode(), root_2);

					DebugLocation(1345, 50);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 10:
				DebugEnterAlt(10);
				// MySQL51Parser.g3:1346:4: MONTH LPAREN expr RPAREN
				{
				DebugLocation(1346, 4);
				MONTH848=(IToken)Match(input,MONTH,Follow._MONTH_in_functionCall_reserved12700); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_MONTH.Add(MONTH848);

				DebugLocation(1346, 10);
				LPAREN849=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12702); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN849);

				DebugLocation(1346, 17);
				PushFollow(Follow._expr_in_functionCall_reserved12704);
				expr850=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr850.Tree);
				DebugLocation(1346, 22);
				RPAREN851=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12706); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN851);



				{
				// AST REWRITE
				// elements: MONTH, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1346:30: -> ^( FUNC ^( MONTH expr ) )
				{
					DebugLocation(1346, 33);
					// MySQL51Parser.g3:1346:33: ^( FUNC ^( MONTH expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1346, 35);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1346, 40);
					// MySQL51Parser.g3:1346:40: ^( MONTH expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1346, 42);
					root_2 = (object)adaptor.BecomeRoot(stream_MONTH.NextNode(), root_2);

					DebugLocation(1346, 48);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 11:
				DebugEnterAlt(11);
				// MySQL51Parser.g3:1347:4: RIGHT LPAREN expr RPAREN
				{
				DebugLocation(1347, 4);
				RIGHT852=(IToken)Match(input,RIGHT,Follow._RIGHT_in_functionCall_reserved12724); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RIGHT.Add(RIGHT852);

				DebugLocation(1347, 10);
				LPAREN853=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12726); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN853);

				DebugLocation(1347, 17);
				PushFollow(Follow._expr_in_functionCall_reserved12728);
				expr854=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr854.Tree);
				DebugLocation(1347, 22);
				RPAREN855=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12730); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN855);



				{
				// AST REWRITE
				// elements: RIGHT, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1347:30: -> ^( FUNC ^( RIGHT expr ) )
				{
					DebugLocation(1347, 33);
					// MySQL51Parser.g3:1347:33: ^( FUNC ^( RIGHT expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1347, 35);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1347, 40);
					// MySQL51Parser.g3:1347:40: ^( RIGHT expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1347, 42);
					root_2 = (object)adaptor.BecomeRoot(stream_RIGHT.NextNode(), root_2);

					DebugLocation(1347, 48);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 12:
				DebugEnterAlt(12);
				// MySQL51Parser.g3:1348:4: SECOND LPAREN expr RPAREN
				{
				DebugLocation(1348, 4);
				SECOND856=(IToken)Match(input,SECOND,Follow._SECOND_in_functionCall_reserved12748); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_SECOND.Add(SECOND856);

				DebugLocation(1348, 11);
				LPAREN857=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12750); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN857);

				DebugLocation(1348, 18);
				PushFollow(Follow._expr_in_functionCall_reserved12752);
				expr858=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr858.Tree);
				DebugLocation(1348, 23);
				RPAREN859=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12754); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN859);



				{
				// AST REWRITE
				// elements: SECOND, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1348:31: -> ^( FUNC ^( SECOND expr ) )
				{
					DebugLocation(1348, 34);
					// MySQL51Parser.g3:1348:34: ^( FUNC ^( SECOND expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1348, 36);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1348, 41);
					// MySQL51Parser.g3:1348:41: ^( SECOND expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1348, 43);
					root_2 = (object)adaptor.BecomeRoot(stream_SECOND.NextNode(), root_2);

					DebugLocation(1348, 50);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 13:
				DebugEnterAlt(13);
				// MySQL51Parser.g3:1349:4: TIME LPAREN expr RPAREN
				{
				DebugLocation(1349, 4);
				TIME860=(IToken)Match(input,TIME,Follow._TIME_in_functionCall_reserved12772); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TIME.Add(TIME860);

				DebugLocation(1349, 9);
				LPAREN861=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12774); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN861);

				DebugLocation(1349, 16);
				PushFollow(Follow._expr_in_functionCall_reserved12776);
				expr862=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr862.Tree);
				DebugLocation(1349, 21);
				RPAREN863=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12778); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN863);



				{
				// AST REWRITE
				// elements: TIME, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1349:29: -> ^( FUNC ^( TIME expr ) )
				{
					DebugLocation(1349, 32);
					// MySQL51Parser.g3:1349:32: ^( FUNC ^( TIME expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1349, 34);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1349, 39);
					// MySQL51Parser.g3:1349:39: ^( TIME expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1349, 41);
					root_2 = (object)adaptor.BecomeRoot(stream_TIME.NextNode(), root_2);

					DebugLocation(1349, 46);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 14:
				DebugEnterAlt(14);
				// MySQL51Parser.g3:1350:4: TIMESTAMP LPAREN expr RPAREN
				{
				DebugLocation(1350, 4);
				TIMESTAMP864=(IToken)Match(input,TIMESTAMP,Follow._TIMESTAMP_in_functionCall_reserved12796); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_TIMESTAMP.Add(TIMESTAMP864);

				DebugLocation(1350, 14);
				LPAREN865=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12798); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN865);

				DebugLocation(1350, 21);
				PushFollow(Follow._expr_in_functionCall_reserved12800);
				expr866=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr866.Tree);
				DebugLocation(1350, 26);
				RPAREN867=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12802); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN867);



				{
				// AST REWRITE
				// elements: TIMESTAMP, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1350:34: -> ^( FUNC ^( TIMESTAMP expr ) )
				{
					DebugLocation(1350, 37);
					// MySQL51Parser.g3:1350:37: ^( FUNC ^( TIMESTAMP expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1350, 39);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1350, 44);
					// MySQL51Parser.g3:1350:44: ^( TIMESTAMP expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1350, 46);
					root_2 = (object)adaptor.BecomeRoot(stream_TIMESTAMP.NextNode(), root_2);

					DebugLocation(1350, 56);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 15:
				DebugEnterAlt(15);
				// MySQL51Parser.g3:1351:4: USER LPAREN RPAREN
				{
				DebugLocation(1351, 4);
				USER868=(IToken)Match(input,USER,Follow._USER_in_functionCall_reserved12820); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_USER.Add(USER868);

				DebugLocation(1351, 9);
				LPAREN869=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12822); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN869);

				DebugLocation(1351, 16);
				RPAREN870=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12824); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN870);



				{
				// AST REWRITE
				// elements: USER, LPAREN
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1351:24: -> ^( FUNC ^( USER LPAREN ) )
				{
					DebugLocation(1351, 27);
					// MySQL51Parser.g3:1351:27: ^( FUNC ^( USER LPAREN ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1351, 29);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1351, 34);
					// MySQL51Parser.g3:1351:34: ^( USER LPAREN )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1351, 36);
					root_2 = (object)adaptor.BecomeRoot(stream_USER.NextNode(), root_2);

					DebugLocation(1351, 41);
					adaptor.AddChild(root_2, stream_LPAREN.NextNode());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;
			case 16:
				DebugEnterAlt(16);
				// MySQL51Parser.g3:1352:4: YEAR LPAREN expr RPAREN
				{
				DebugLocation(1352, 4);
				YEAR871=(IToken)Match(input,YEAR,Follow._YEAR_in_functionCall_reserved12842); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_YEAR.Add(YEAR871);

				DebugLocation(1352, 9);
				LPAREN872=(IToken)Match(input,LPAREN,Follow._LPAREN_in_functionCall_reserved12844); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_LPAREN.Add(LPAREN872);

				DebugLocation(1352, 16);
				PushFollow(Follow._expr_in_functionCall_reserved12846);
				expr873=expr();
				PopFollow();
				if (state.failed) return retval;
				if (state.backtracking == 0) stream_expr.Add(expr873.Tree);
				DebugLocation(1352, 21);
				RPAREN874=(IToken)Match(input,RPAREN,Follow._RPAREN_in_functionCall_reserved12848); if (state.failed) return retval; 
				if (state.backtracking == 0) stream_RPAREN.Add(RPAREN874);



				{
				// AST REWRITE
				// elements: YEAR, expr
				// token labels: 
				// rule labels: retval
				// token list labels: 
				// rule list labels: 
				// wildcard labels: 
				if (state.backtracking == 0) {
				retval.Tree = root_0;
				RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.Tree:null);

				root_0 = (object)adaptor.Nil();
				// 1352:29: -> ^( FUNC ^( YEAR expr ) )
				{
					DebugLocation(1352, 32);
					// MySQL51Parser.g3:1352:32: ^( FUNC ^( YEAR expr ) )
					{
					object root_1 = (object)adaptor.Nil();
					DebugLocation(1352, 34);
					root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(FUNC, "FUNC"), root_1);

					DebugLocation(1352, 39);
					// MySQL51Parser.g3:1352:39: ^( YEAR expr )
					{
					object root_2 = (object)adaptor.Nil();
					DebugLocation(1352, 41);
					root_2 = (object)adaptor.BecomeRoot(stream_YEAR.NextNode(), root_2);

					DebugLocation(1352, 46);
					adaptor.AddChild(root_2, stream_expr.NextTree());

					adaptor.AddChild(root_1, root_2);
					}

					adaptor.AddChild(root_0, root_1);
					}

				}

				retval.Tree = root_0;
				}
				}

				}
				break;

			}
			retval.Stop = (IToken)input.LT(-1);

			if (state.backtracking == 0) {
			retval.Tree = (object)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.Tree, retval.Start, retval.Stop);
			}
		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.Tree = (object)adaptor.ErrorNode(input, retval.Start, input.LT(-1), re);

		}
		finally
		{
			TraceOut("functionCall_reserved", 90);
			LeaveRule("functionCall_reserved", 90);
			LeaveRule_functionCall_reserved();
		}
		DebugLocation(1353, 1);
		} finally { DebugExitRule(GrammarFileName, "functionCall_reserved"); }
		DecRuleLevel();
		if (RuleLevel == 0)
			DebugListener.Terminate();
		return retval;

	}
	// $ANTLR end "functionCall_reserved"

	partial void EnterRule_synpred1_MySQL51Parser_fragment();
	partial void LeaveRule_synpred1_MySQL51Parser_fragment();

	// $ANTLR start synpred1_MySQL51Parser
	public void synpred1_MySQL51Parser_fragment()
	{
		EnterRule_synpred1_MySQL51Parser_fragment();
		EnterRule("synpred1_MySQL51Parser_fragment", 91);
		TraceIn("synpred1_MySQL51Parser_fragment", 91);
		try
		{
			// MySQL51Parser.g3:300:4: ( LEFT | RIGHT )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:
			{
			DebugLocation(300, 4);
			if (input.LA(1)==LEFT||input.LA(1)==RIGHT)
			{
				input.Consume();
				state.errorRecovery=false;state.failed=false;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				DebugRecognitionException(mse);
				throw mse;
			}


			}

		}
		finally
		{
			TraceOut("synpred1_MySQL51Parser_fragment", 91);
			LeaveRule("synpred1_MySQL51Parser_fragment", 91);
			LeaveRule_synpred1_MySQL51Parser_fragment();
		}
	}
	// $ANTLR end synpred1_MySQL51Parser

	partial void EnterRule_synpred2_MySQL51Parser_fragment();
	partial void LeaveRule_synpred2_MySQL51Parser_fragment();

	// $ANTLR start synpred2_MySQL51Parser
	public void synpred2_MySQL51Parser_fragment()
	{
		EnterRule_synpred2_MySQL51Parser_fragment();
		EnterRule("synpred2_MySQL51Parser_fragment", 92);
		TraceIn("synpred2_MySQL51Parser_fragment", 92);
		try
		{
			// MySQL51Parser.g3:305:7: ( join_condition_on )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:305:8: join_condition_on
			{
			DebugLocation(305, 8);
			PushFollow(Follow._join_condition_on_in_synpred2_MySQL51Parser3151);
			join_condition_on();
			PopFollow();
			if (state.failed) return;

			}

		}
		finally
		{
			TraceOut("synpred2_MySQL51Parser_fragment", 92);
			LeaveRule("synpred2_MySQL51Parser_fragment", 92);
			LeaveRule_synpred2_MySQL51Parser_fragment();
		}
	}
	// $ANTLR end synpred2_MySQL51Parser

	partial void EnterRule_synpred3_MySQL51Parser_fragment();
	partial void LeaveRule_synpred3_MySQL51Parser_fragment();

	// $ANTLR start synpred3_MySQL51Parser
	public void synpred3_MySQL51Parser_fragment()
	{
		EnterRule_synpred3_MySQL51Parser_fragment();
		EnterRule("synpred3_MySQL51Parser_fragment", 93);
		TraceIn("synpred3_MySQL51Parser_fragment", 93);
		try
		{
			// MySQL51Parser.g3:309:5: ( NATURAL )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:309:6: NATURAL
			{
			DebugLocation(309, 6);
			Match(input,NATURAL,Follow._NATURAL_in_synpred3_MySQL51Parser3214); if (state.failed) return;

			}

		}
		finally
		{
			TraceOut("synpred3_MySQL51Parser_fragment", 93);
			LeaveRule("synpred3_MySQL51Parser_fragment", 93);
			LeaveRule_synpred3_MySQL51Parser_fragment();
		}
	}
	// $ANTLR end synpred3_MySQL51Parser

	partial void EnterRule_synpred4_MySQL51Parser_fragment();
	partial void LeaveRule_synpred4_MySQL51Parser_fragment();

	// $ANTLR start synpred4_MySQL51Parser
	public void synpred4_MySQL51Parser_fragment()
	{
		EnterRule_synpred4_MySQL51Parser_fragment();
		EnterRule("synpred4_MySQL51Parser_fragment", 94);
		TraceIn("synpred4_MySQL51Parser_fragment", 94);
		try
		{
			// MySQL51Parser.g3:755:27: ( subselect_in_expr_rhs )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:755:28: subselect_in_expr_rhs
			{
			DebugLocation(755, 28);
			PushFollow(Follow._subselect_in_expr_rhs_in_synpred4_MySQL51Parser6648);
			subselect_in_expr_rhs();
			PopFollow();
			if (state.failed) return;

			}

		}
		finally
		{
			TraceOut("synpred4_MySQL51Parser_fragment", 94);
			LeaveRule("synpred4_MySQL51Parser_fragment", 94);
			LeaveRule_synpred4_MySQL51Parser_fragment();
		}
	}
	// $ANTLR end synpred4_MySQL51Parser

	partial void EnterRule_synpred5_MySQL51Parser_fragment();
	partial void LeaveRule_synpred5_MySQL51Parser_fragment();

	// $ANTLR start synpred5_MySQL51Parser
	public void synpred5_MySQL51Parser_fragment()
	{
		EnterRule_synpred5_MySQL51Parser_fragment();
		EnterRule("synpred5_MySQL51Parser_fragment", 95);
		TraceIn("synpred5_MySQL51Parser_fragment", 95);
		try
		{
			// MySQL51Parser.g3:851:4: ( INTERVAL ~ ( LPAREN ) )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:851:5: INTERVAL ~ ( LPAREN )
			{
			DebugLocation(851, 5);
			Match(input,INTERVAL,Follow._INTERVAL_in_synpred5_MySQL51Parser7355); if (state.failed) return;
			DebugLocation(851, 14);
			if ((input.LA(1)>=ACCESSIBLE && input.LA(1)<=LOW_PRIORITY)||(input.LA(1)>=MASTER && input.LA(1)<=UNARY_PLUS))
			{
				input.Consume();
				state.errorRecovery=false;state.failed=false;
			}
			else
			{
				if (state.backtracking>0) {state.failed=true; return;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				DebugRecognitionException(mse);
				throw mse;
			}


			}

		}
		finally
		{
			TraceOut("synpred5_MySQL51Parser_fragment", 95);
			LeaveRule("synpred5_MySQL51Parser_fragment", 95);
			LeaveRule_synpred5_MySQL51Parser_fragment();
		}
	}
	// $ANTLR end synpred5_MySQL51Parser

	partial void EnterRule_synpred6_MySQL51Parser_fragment();
	partial void LeaveRule_synpred6_MySQL51Parser_fragment();

	// $ANTLR start synpred6_MySQL51Parser
	public void synpred6_MySQL51Parser_fragment()
	{
		EnterRule_synpred6_MySQL51Parser_fragment();
		EnterRule("synpred6_MySQL51Parser_fragment", 96);
		TraceIn("synpred6_MySQL51Parser_fragment", 96);
		try
		{
			// MySQL51Parser.g3:874:4: ( functionCall )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:874:5: functionCall
			{
			DebugLocation(874, 5);
			PushFollow(Follow._functionCall_in_synpred6_MySQL51Parser7528);
			functionCall();
			PopFollow();
			if (state.failed) return;

			}

		}
		finally
		{
			TraceOut("synpred6_MySQL51Parser_fragment", 96);
			LeaveRule("synpred6_MySQL51Parser_fragment", 96);
			LeaveRule_synpred6_MySQL51Parser_fragment();
		}
	}
	// $ANTLR end synpred6_MySQL51Parser

	partial void EnterRule_synpred7_MySQL51Parser_fragment();
	partial void LeaveRule_synpred7_MySQL51Parser_fragment();

	// $ANTLR start synpred7_MySQL51Parser
	public void synpred7_MySQL51Parser_fragment()
	{
		EnterRule_synpred7_MySQL51Parser_fragment();
		EnterRule("synpred7_MySQL51Parser_fragment", 97);
		TraceIn("synpred7_MySQL51Parser_fragment", 97);
		try
		{
			// MySQL51Parser.g3:1255:5: ( INTERVAL )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:1255:6: INTERVAL
			{
			DebugLocation(1255, 6);
			Match(input,INTERVAL,Follow._INTERVAL_in_synpred7_MySQL51Parser10901); if (state.failed) return;

			}

		}
		finally
		{
			TraceOut("synpred7_MySQL51Parser_fragment", 97);
			LeaveRule("synpred7_MySQL51Parser_fragment", 97);
			LeaveRule_synpred7_MySQL51Parser_fragment();
		}
	}
	// $ANTLR end synpred7_MySQL51Parser

	partial void EnterRule_synpred8_MySQL51Parser_fragment();
	partial void LeaveRule_synpred8_MySQL51Parser_fragment();

	// $ANTLR start synpred8_MySQL51Parser
	public void synpred8_MySQL51Parser_fragment()
	{
		EnterRule_synpred8_MySQL51Parser_fragment();
		EnterRule("synpred8_MySQL51Parser_fragment", 98);
		TraceIn("synpred8_MySQL51Parser_fragment", 98);
		try
		{
			// MySQL51Parser.g3:1272:6: ( INTERVAL )
			DebugEnterAlt(1);
			// MySQL51Parser.g3:1272:7: INTERVAL
			{
			DebugLocation(1272, 7);
			Match(input,INTERVAL,Follow._INTERVAL_in_synpred8_MySQL51Parser11287); if (state.failed) return;

			}

		}
		finally
		{
			TraceOut("synpred8_MySQL51Parser_fragment", 98);
			LeaveRule("synpred8_MySQL51Parser_fragment", 98);
			LeaveRule_synpred8_MySQL51Parser_fragment();
		}
	}
	// $ANTLR end synpred8_MySQL51Parser
	#endregion Rules

	#region Synpreds
	private bool EvaluatePredicate(System.Action fragment)
	{
		bool success = false;
		state.backtracking++;
		try { DebugBeginBacktrack(state.backtracking);
		int start = input.Mark();
		try
		{
			fragment();
		}
		catch ( RecognitionException re )
		{
			System.Console.Error.WriteLine("impossible: "+re);
		}
		success = !state.failed;
		input.Rewind(start);
		} finally { DebugEndBacktrack(state.backtracking, success); }
		state.backtracking--;
		state.failed=false;
		return success;
	}
	#endregion Synpreds


	#region DFA
	private DFA43 dfa43;
	private DFA50 dfa50;
	private DFA90 dfa90;
	private DFA85 dfa85;
	private DFA86 dfa86;
	private DFA114 dfa114;
	private DFA124 dfa124;
	private DFA134 dfa134;
	private DFA139 dfa139;
	private DFA146 dfa146;
	private DFA148 dfa148;
	private DFA195 dfa195;
	private DFA265 dfa265;
	private DFA252 dfa252;
	private DFA257 dfa257;

	protected override void InitDFAs()
	{
		base.InitDFAs();
		dfa43 = new DFA43( this );
		dfa50 = new DFA50( this );
		dfa90 = new DFA90( this, SpecialStateTransition90 );
		dfa85 = new DFA85( this );
		dfa86 = new DFA86( this, SpecialStateTransition86 );
		dfa114 = new DFA114( this, SpecialStateTransition114 );
		dfa124 = new DFA124( this, SpecialStateTransition124 );
		dfa134 = new DFA134( this );
		dfa139 = new DFA139( this );
		dfa146 = new DFA146( this, SpecialStateTransition146 );
		dfa148 = new DFA148( this, SpecialStateTransition148 );
		dfa195 = new DFA195( this );
		dfa265 = new DFA265( this );
		dfa252 = new DFA252( this, SpecialStateTransition252 );
		dfa257 = new DFA257( this, SpecialStateTransition257 );
	}

	private class DFA43 : DFA
	{
		private const string DFA43_eotS =
			"\x2E\xFFFF";
		private const string DFA43_eofS =
			"\x2E\xFFFF";
		private const string DFA43_minS =
			"\x1\x17\x4\xFFFF\x1\x4A\x2\xFFFF\x1\x6C\x5\xFFFF\x1\x46\x5\xFFFF\x1\x46"+
			"\x5\xFFFF\x3\x204\x11\xFFFF";
		private const string DFA43_maxS =
			"\x1\x278\x4\xFFFF\x1\x19C\x2\xFFFF\x1\x25B\x5\xFFFF\x1\x204\x5\xFFFF"+
			"\x1\x204\x5\xFFFF\x3\x256\x11\xFFFF";
		private const string DFA43_acceptS =
			"\x1\xFFFF\x1\x1\x1\x2\x1\x3\x1\x4\x1\xFFFF\x1\x5\x1\x6\x1\xFFFF\x1\xE"+
			"\x1\xF\x1\x10\x1\x11\x1\x12\x1\xFFFF\x1\x15\x1\x16\x1\x17\x1\x18\x1\x19"+
			"\x1\xFFFF\x1\x1C\x1\x1D\x1\x1E\x1\x1F\x1\x20\x3\xFFFF\x1\x21\x1\x22\x1"+
			"\x23\x1\x24\x1\x25\x1\x26\x1\x7\x1\x8\x1\x9\x1\xA\x1\xB\x1\xC\x1\xD\x1"+
			"\x13\x1\x14\x1\x1A\x1\x1B";
		private const string DFA43_specialS =
			"\x2E\xFFFF}>";
		private static readonly string[] DFA43_transitionS =
			{
				"\x1\x1\xB\xFFFF\x1\x2\x1A\xFFFF\x1\x3\x9\xFFFF\x1\x4\x1\xFFFF\x1\x6"+
				"\x10\xFFFF\x1\x7\x3\xFFFF\x1\x8\xD\xFFFF\x1\x9\x31\xFFFF\x1\xA\x1\xB"+
				"\x2\xFFFF\x1\xC\x4\xFFFF\x1\xD\x1B\xFFFF\x1\x5\x1\xFFFF\x1\xE\x3\xFFFF"+
				"\x1\x1A\x3\xFFFF\x1\xF\x1C\xFFFF\x1\x11\x2E\xFFFF\x1\x1C\x5D\xFFFF\x1"+
				"\x12\x14\xFFFF\x1\x13\xB\xFFFF\x1\x15\x1\x14\x1\xFFFF\x1\x16\x1\x17"+
				"\x1\x18\x36\xFFFF\x1\x19\xC\xFFFF\x1\x1B\x21\xFFFF\x1\x1D\x5\xFFFF\x1"+
				"\xB\x10\xFFFF\x1\x1E\x1\x1F\x13\xFFFF\x1\x20\x25\xFFFF\x1\x21\x6\xFFFF"+
				"\x1\x22\x1A\xFFFF\x1\x10",
				"",
				"",
				"",
				"",
				"\x1\x6\x5D\xFFFF\x1\xD\xF3\xFFFF\x1\x16",
				"",
				"",
				"\x1\x23\x3A\xFFFF\x1\x24\x1E\xFFFF\x1\x25\xD3\xFFFF\x1\x26\x80\xFFFF"+
				"\x1\x27\x13\xFFFF\x1\x28\x2B\xFFFF\x1\x29",
				"",
				"",
				"",
				"",
				"",
				"\x1\x2A\x1BD\xFFFF\x1\x2B",
				"",
				"",
				"",
				"",
				"",
				"\x1\x2C\x1BD\xFFFF\x1\x2D",
				"",
				"",
				"",
				"",
				"",
				"\x1\x1D\x51\xFFFF\x1\x21",
				"\x1\x1D\x51\xFFFF\x1\x21",
				"\x1\x1D\x51\xFFFF\x1\x21",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				""
			};

		private static readonly short[] DFA43_eot = DFA.UnpackEncodedString(DFA43_eotS);
		private static readonly short[] DFA43_eof = DFA.UnpackEncodedString(DFA43_eofS);
		private static readonly char[] DFA43_min = DFA.UnpackEncodedStringToUnsignedChars(DFA43_minS);
		private static readonly char[] DFA43_max = DFA.UnpackEncodedStringToUnsignedChars(DFA43_maxS);
		private static readonly short[] DFA43_accept = DFA.UnpackEncodedString(DFA43_acceptS);
		private static readonly short[] DFA43_special = DFA.UnpackEncodedString(DFA43_specialS);
		private static readonly short[][] DFA43_transition;

		static DFA43()
		{
			int numStates = DFA43_transitionS.Length;
			DFA43_transition = new short[numStates][];
			for ( int i=0; i < numStates; i++ )
			{
				DFA43_transition[i] = DFA.UnpackEncodedString(DFA43_transitionS[i]);
			}
		}

		public DFA43( BaseRecognizer recognizer )
		{
			this.recognizer = recognizer;
			this.decisionNumber = 43;
			this.eot = DFA43_eot;
			this.eof = DFA43_eof;
			this.min = DFA43_min;
			this.max = DFA43_max;
			this.accept = DFA43_accept;
			this.special = DFA43_special;
			this.transition = DFA43_transition;
		}

		public override string Description { get { return "65:5: ( AUTHORS -> ^( $show_stmt ^( AUTHORS ) ) | BINLOG EVENTS ( IN logName= STRING )? ( FROM NUMBER )? ( limit )? -> ^( $show_stmt ^( BINLOG ( $logName)? ( NUMBER )? ( limit )? ) ) | CHARACTER SET ( like_or_where )? -> ^( $show_stmt ^( CHARACTER ( like_or_where )? ) ) | COLLATION ( like_or_where )? -> ^( $show_stmt ^( COLLATION ( like_or_where )? ) ) | ( FULL )? COLUMNS ( FROM | IN ) simple_table_ref_no_alias ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( COLUMNS ( FULL )? simple_table_ref_no_alias ( ident )? ( like_or_where )? ) ) | CONTRIBUTORS -> ^( $show_stmt ^( CONTRIBUTORS ) ) | CREATE DATABASE ident -> ^( $show_stmt ^( CREATE DATABASE ident ) ) | CREATE EVENT ident -> ^( $show_stmt ^( CREATE EVENT ident ) ) | CREATE FUNCTION ident -> ^( $show_stmt ^( CREATE FUNCTION ident ) ) | CREATE PROCEDURE ident -> ^( $show_stmt ^( CREATE PROCEDURE ident ) ) | CREATE TABLE simple_table_ref_no_alias -> ^( $show_stmt ^( CREATE TABLE simple_table_ref_no_alias ) ) | CREATE TRIGGER ident -> ^( $show_stmt ^( CREATE TRIGGER ident ) ) | CREATE VIEW ident -> ^( $show_stmt ^( CREATE VIEW ident ) ) | DATABASES ( like_or_where )? -> ^( $show_stmt ^( DATABASES ( like_or_where )? ) ) | ENGINE ( INNODB | ident ) (what= STATUS |what= MUTEX ) -> ^( $show_stmt ^( ENGINE ( INNODB )? ( ident )? $what) ) | ( STORAGE )? ENGINES -> ^( $show_stmt ^( ENGINES ) ) | ERRORS ( limit )? -> ^( $show_stmt ^( ERRORS ( limit )? ) ) | ( FULL )? EVENTS -> ^( $show_stmt ^( EVENTS ( FULL )? ) ) | FUNCTION CODE ident -> ^( $show_stmt ^( CODE FUNCTION ident ) ) | FUNCTION STATUS ( like_or_where )? -> ^( $show_stmt ^( STATUS FUNCTION ( like_or_where )? ) ) | GRANTS FOR (whom= USER_HOST |whom= CURRENT_USER |whom= CURRENT_USER LPAREN RPAREN ) -> ^( $show_stmt ^( GRANTS $whom) ) | INDEX_SYM FROM simple_table_ref_no_alias ( ( FROM | IN ) ident )? -> ^( $show_stmt ^( INDEX_SYM simple_table_ref_no_alias ( ident )? ) ) | INNODB STATUS -> ^( $show_stmt ^( ENGINE INNODB STATUS ) ) | OPEN TABLES ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( OPEN ( ident )? ( like_or_where )? ) ) | PLUGINS -> ^( $show_stmt ^( PLUGINS ) ) | PROCEDURE CODE ident -> ^( $show_stmt ^( CODE PROCEDURE ident ) ) | PROCEDURE STATUS ( like_or_where )? -> ^( $show_stmt ^( STATUS PROCEDURE ident ) ) | PRIVILEGES -> ^( $show_stmt ^( PRIVILEGES ) ) | ( FULL )? PROCESSLIST -> ^( $show_stmt ^( PROCESSLIST ( FULL )? ) ) | PROFILE show_profile_types ( FOR QUERY NUMBER )? ( limit )? -> ^( $show_stmt ^( PROFILE show_profile_types ( NUMBER )? ( limit )? ) ) | PROFILES -> ^( $show_stmt ^( PROFILES ) ) | SCHEDULER STATUS -> ^( $show_stmt ^( STATUS SCHEDULER ) ) | optScopeModifier STATUS ( like_or_where )? -> ^( $show_stmt ^( STATUS ( optScopeModifier )? ( like_or_where )? ) ) | TABLE STATUS ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( STATUS TABLE ( ident )? ( like_or_where )? ) ) | TABLES ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( TABLES ( ident )? ( like_or_where )? ) ) | TRIGGERS ( ( FROM | IN ) ident )? ( like_or_where )? -> ^( $show_stmt ^( TRIGGERS ( ident )? ( like_or_where )? ) ) | optScopeModifier VARIABLES ( like_or_where )? -> ^( $show_stmt ^( VARIABLES ( optScopeModifier )? ( like_or_where )? ) ) | WARNINGS ( limit )? -> ^( $show_stmt ^( WARNINGS ( limit )? ) ) )"; } }

		public override void Error(NoViableAltException nvae)
		{
			DebugRecognitionException(nvae);
		}
	}

	private class DFA50 : DFA
	{
		private const string DFA50_eotS =
			"\x17E\xFFFF";
		private const string DFA50_eofS =
			"\x17E\xFFFF";
		private const string DFA50_minS =
			"\x1\x5\x17D\xFFFF";
		private const string DFA50_maxS =
			"\x1\x26F\x17D\xFFFF";
		private const string DFA50_acceptS =
			"\x1\xFFFF\x1\x2\x14F\xFFFF\x3\x1\x29\xFFFF\x1\x1";
		private const string DFA50_specialS =
			"\x17E\xFFFF}>";
		private static readonly string[] DFA50_transitionS =
			{
				"\x1\x1\x1\xFFFF\x5\x1\x1\x17D\x3\xFFFF\x1\x1\x2\xFFFF\x1\x1\x2\xFFFF"+
				"\x7\x1\x1\xFFFF\x1\x1\x2\xFFFF\x4\x1\x1\xFFFF\x1\x1\x2\xFFFF\x3\x1\x1"+
				"\xFFFF\x3\x1\x1\xFFFF\x1\x1\x1\xFFFF\x2\x1\x2\xFFFF\x1\x1\x1\xFFFF\x2"+
				"\x1\x1\xFFFF\x2\x1\x1\xFFFF\x1\x1\x1\xFFFF\x8\x1\x1\xFFFF\x1\x1\x1\xFFFF"+
				"\x1\x1\x1\xFFFF\x6\x1\x1\xFFFF\x2\x1\x1\xFFFF\x2\x1\x1\xFFFF\x1\x1\x1"+
				"\xFFFF\x2\x1\x2\xFFFF\x6\x1\x1\xFFFF\x1\x1\x2\xFFFF\x2\x1\x1\xFFFF\x4"+
				"\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x4\xFFFF\x1\x1\x4\xFFFF\x1\x1\x1\xFFFF"+
				"\x1\x1\x3\xFFFF\x1\x1\x2\xFFFF\x4\x1\x2\x17D\x2\xFFFF\x1\x1\x4\xFFFF"+
				"\x3\x1\x3\xFFFF\x1\x1\x1\xFFFF\x5\x1\x1\xFFFF\x2\x1\x2\xFFFF\x5\x1\x1"+
				"\xFFFF\x1\x1\x1\xFFFF\x6\x1\x1\xFFFF\x4\x1\x3\xFFFF\x1\x1\x3\xFFFF\x2"+
				"\x1\x1\xFFFF\x1\x1\x1\xFFFF\x6\x1\x2\xFFFF\x1\x1\x2\xFFFF\x4\x1\x1\xFFFF"+
				"\x2\x1\x1\x17D\x3\x1\x3\xFFFF\x3\x1\x1\xFFFF\x1\x1\x2\xFFFF\x1\x1\x1"+
				"\xFFFF\x1\x1\x1\xFFFF\x1\x1\x3\xFFFF\x3\x1\x7\xFFFF\x1\x1\x1\xFFFF\x3"+
				"\x1\x1\xFFFF\x2\x1\x4\xFFFF\x1\x1\x1\xFFFF\x3\x1\x3\xFFFF\x2\x1\x1\xFFFF"+
				"\x1\x1\x2\xFFFF\x1\x1\x4\xFFFF\x2\x1\x1\xFFFF\x1\x1\x3\xFFFF\x2\x1\x2"+
				"\xFFFF\x1\x1\x5\xFFFF\xF\x1\x1\xFFFF\x1\x1\x1\xFFFF\x9\x1\x3\xFFFF\x4"+
				"\x1\x1\xFFFF\x4\x1\x2\xFFFF\x3\x1\x1\xFFFF\x1\x1\x1\xFFFF\x9\x1\x1\xFFFF"+
				"\x8\x1\x1\xFFFF\x3\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x3\x1\x1"+
				"\xFFFF\x3\x1\x3\xFFFF\x1\x1\x5\xFFFF\x11\x1\x2\xFFFF\x3\x1\x1\xFFFF"+
				"\x1\x1\x1\xFFFF\x4\x1\x1\xFFFF\x3\x1\x8\xFFFF\x5\x1\x2\xFFFF\x3\x1\x1"+
				"\xFFFF\x2\x1\x1\xFFFF\x6\x1\x1\xFFFF\x3\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1"+
				"\x1\x1\xFFFF\x1\x1\x2\xFFFF\x6\x1\x1\xFFFF\x3\x1\x3\xFFFF\x1\x1\x1\xFFFF"+
				"\x1\x1\x4\xFFFF\x6\x1\x1\xFFFF\x1\x1\x1\xFFFF\x4\x1\x1\xFFFF\x2\x1\x1"+
				"\xFFFF\x3\x1\x6\xFFFF\x1\x17D\x1\x152\x1\x151\x1\x17D\x1\x153\x1\x17D"+
				"\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x8\x1\x1\x17D\xF\x1\x1\xFFFF\x4\x1\x1"+
				"\xFFFF\x2\x1\x1\xFFFF\x4\x1\x5\xFFFF\x2\x1\x1\xFFFF\x9\x1\x1\xFFFF\x4"+
				"\x1\x2\xFFFF\x1\x1\x2\xFFFF\x1\x1\x1\xFFFF\x1\x1\x2\xFFFF\x1\x1\x2\xFFFF"+
				"\x1\x1\x1\xFFFF\x4\x1\x1\xFFFF\x1\x1\x3\xFFFF\x2\x1\x1\xFFFF\x6\x1\x4"+
				"\xFFFF\x2\x1\x2\xFFFF\x2\x1\x1\xFFFF\x1\x1\x4\xFFFF\x1\x1",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				""
			};

		private static readonly short[] DFA50_eot = DFA.UnpackEncodedString(DFA50_eotS);
		private static readonly short[] DFA50_eof = DFA.UnpackEncodedString(DFA50_eofS);
		private static readonly char[] DFA50_min = DFA.UnpackEncodedStringToUnsignedChars(DFA50_minS);
		private static readonly char[] DFA50_max = DFA.UnpackEncodedStringToUnsignedChars(DFA50_maxS);
		private static readonly short[] DFA50_accept = DFA.UnpackEncodedString(DFA50_acceptS);
		private static readonly short[] DFA50_special = DFA.UnpackEncodedString(DFA50_specialS);
		private static readonly short[][] DFA50_transition;

		static DFA50()
		{
			int numStates = DFA50_transitionS.Length;
			DFA50_transition = new short[numStates][];
			for ( int i=0; i < numStates; i++ )
			{
				DFA50_transition[i] = DFA.UnpackEncodedString(DFA50_transitionS[i]);
			}
		}

		public DFA50( BaseRecognizer recognizer )
		{
			this.recognizer = recognizer;
			this.decisionNumber = 50;
			this.eot = DFA50_eot;
			this.eof = DFA50_eof;
			this.min = DFA50_min;
			this.max = DFA50_max;
			this.accept = DFA50_accept;
			this.special = DFA50_special;
			this.transition = DFA50_transition;
		}

		public override string Description { get { return "()* loopback of 156:11: ( options {k=1; } : select_options )*"; } }

		public override void Error(NoViableAltException nvae)
		{
			DebugRecognitionException(nvae);
		}
	}

	private class DFA90 : DFA
	{
		private const string DFA90_eotS =
			"\x19\xFFFF";
		private const string DFA90_eofS =
			"\x1\x1\x18\xFFFF";
		private const string DFA90_minS =
			"\x1\x4B\x11\xFFFF\x1\x0\x6\xFFFF";
		private const string DFA90_maxS =
			"\x1\x260\x11\xFFFF\x1\x0\x6\xFFFF";
		private const string DFA90_acceptS =
			"\x1\xFFFF\x1\x5\x11\xFFFF\x1\x1\x1\x2\x2\xFFFF\x1\x3\x1\x4";
		private const string DFA90_specialS =
			"\x1\x0\x11\xFFFF\x1\x1\x6\xFFFF}>";
		private static readonly string[] DFA90_transitionS =
			{
				"\x1\x1\x14\xFFFF\x1\x14\x5D\xFFFF\x1\x1\x12\xFFFF\x1\x1\x3\xFFFF\x1"+
				"\x1\x13\xFFFF\x1\x14\xF\xFFFF\x1\x1\x7\xFFFF\x1\x14\xB\xFFFF\x1\x12"+
				"\x6\xFFFF\x1\x1\x8\xFFFF\x1\x1\x42\xFFFF\x1\x18\x14\xFFFF\x1\x1\x8\xFFFF"+
				"\x1\x1\x1B\xFFFF\x1\x1\x2D\xFFFF\x1\x13\x8\xFFFF\x1\x1\xA\xFFFF\x1\x1"+
				"\x8\xFFFF\x1\x1\x25\xFFFF\x1\x17\x32\xFFFF\x1\x1\xD\xFFFF\x1\x1\x13"+
				"\xFFFF\x1\x1",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"\x1\xFFFF",
				"",
				"",
				"",
				"",
				"",
				""
			};

		private static readonly short[] DFA90_eot = DFA.UnpackEncodedString(DFA90_eotS);
		private static readonly short[] DFA90_eof = DFA.UnpackEncodedString(DFA90_eofS);
		private static readonly char[] DFA90_min = DFA.UnpackEncodedStringToUnsignedChars(DFA90_minS);
		private static readonly char[] DFA90_max = DFA.UnpackEncodedStringToUnsignedChars(DFA90_maxS);
		private static readonly short[] DFA90_accept = DFA.UnpackEncodedString(DFA90_acceptS);
		private static readonly short[] DFA90_special = DFA.UnpackEncodedString(DFA90_specialS);
		private static readonly short[][] DFA90_transition;

		static DFA90()
		{
			int numStates = DFA90_transitionS.Length;
			DFA90_transition = new short[numStates][];
			for ( int i=0; i < numStates; i++ )
			{
				DFA90_transition[i] = DFA.UnpackEncodedString(DFA90_transitionS[i]);
			}
		}

		public DFA90( BaseRecognizer recognizer, SpecialStateTransitionHandler specialStateTransition )
			: base(specialStateTransition)
		{
			this.recognizer = recognizer;
			this.decisionNumber = 90;
			this.eot = DFA90_eot;
			this.eof = DFA90_eof;
			this.min = DFA90_min;
			this.max = DFA90_max;
			this.accept = DFA90_accept;
			this.special = DFA90_special;
			this.transition = DFA90_transition;
		}

		public override string Description { get { return "()* loopback of 299:3: ( ( LEFT | RIGHT )=> (ltype= LEFT |ltype= RIGHT ) (outer= OUTER )? JOIN t3= table_ref lrjoinCond= join_condition_both -> ^( $ltype $t3 $lrjoinCond ( $outer)? ) | (type= INNER |type= CROSS )? JOIN t2= table_factor (cond1= join_condition_both )? -> ^( JOIN $t2 ( $cond1)? ( $type)? ) | (type= STRAIGHT_JOIN t2= table_factor ( ( join_condition_on )=>cond2= join_condition_on -> ^( $type $t2 $cond2) | -> ^( $type $t2) ) ) | ( NATURAL )=> NATURAL ( (type= LEFT |type= RIGHT ) (outer= OUTER )? )? JOIN t2= table_factor -> ^( NATURAL ( $type)? $t2 ( $outer)? ) )*"; } }

		public override void Error(NoViableAltException nvae)
		{
			DebugRecognitionException(nvae);
		}
	}

	private int SpecialStateTransition90(DFA dfa, int s, IIntStream _input)
	{
		ITokenStream input = (ITokenStream)_input;
		int _s = s;
		switch (s)
		{
			case 0:
				int LA90_0 = input.LA(1);


				int index90_0 = input.Index;
				input.Rewind();
				s = -1;
				if ((LA90_0==EOF||LA90_0==COMMA||LA90_0==FOR||LA90_0==GROUP||LA90_0==HAVING||LA90_0==INTO||LA90_0==LIMIT||LA90_0==LOCK||LA90_0==ON||LA90_0==ORDER||LA90_0==PROCEDURE||LA90_0==RPAREN||LA90_0==SEMI||LA90_0==SET||LA90_0==UNION||LA90_0==USING||LA90_0==WHERE)) {s = 1;}

				else if ((LA90_0==LEFT)) {s = 18;}

				else if ((LA90_0==RIGHT) && (EvaluatePredicate(synpred1_MySQL51Parser_fragment))) {s = 19;}

				else if ((LA90_0==CROSS||LA90_0==INNER||LA90_0==JOIN)) {s = 20;}

				else if ((LA90_0==STRAIGHT_JOIN)) {s = 23;}

				else if ((LA90_0==NATURAL) && (EvaluatePredicate(synpred3_MySQL51Parser_fragment))) {s = 24;}


				input.Seek(index90_0);
				if (s >= 0) return s;
				break;
			case 1:
				int LA90_18 = input.LA(1);


				int index90_18 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred1_MySQL51Parser_fragment))) {s = 19;}

				else if ((true)) {s = 1;}


				input.Seek(index90_18);
				if (s >= 0) return s;
				break;
		}
		if (state.backtracking > 0) {state.failed=true; return -1;}
		NoViableAltException nvae = new NoViableAltException(dfa.Description, 90, _s, input);
		dfa.Error(nvae);
		throw nvae;
	}
	private class DFA85 : DFA
	{
		private const string DFA85_eotS =
			"\x19\xFFFF";
		private const string DFA85_eofS =
			"\x1\x3\x18\xFFFF";
		private const string DFA85_minS =
			"\x1\x4B\x18\xFFFF";
		private const string DFA85_maxS =
			"\x1\x260\x18\xFFFF";
		private const string DFA85_acceptS =
			"\x1\xFFFF\x2\x1\x1\x2\x15\xFFFF";
		private const string DFA85_specialS =
			"\x19\xFFFF}>";
		private static readonly string[] DFA85_transitionS =
			{
				"\x1\x3\x14\xFFFF\x1\x3\x5D\xFFFF\x1\x3\x12\xFFFF\x1\x3\x3\xFFFF\x1\x3"+
				"\x13\xFFFF\x1\x3\xF\xFFFF\x1\x3\x7\xFFFF\x1\x3\xB\xFFFF\x1\x3\x6\xFFFF"+
				"\x1\x3\x8\xFFFF\x1\x3\x42\xFFFF\x1\x3\x14\xFFFF\x1\x1\x8\xFFFF\x1\x3"+
				"\x1B\xFFFF\x1\x3\x2D\xFFFF\x1\x3\x8\xFFFF\x1\x3\xA\xFFFF\x1\x3\x8\xFFFF"+
				"\x1\x3\x25\xFFFF\x1\x3\x32\xFFFF\x1\x3\xD\xFFFF\x1\x2\x13\xFFFF\x1\x3",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				""
			};

		private static readonly short[] DFA85_eot = DFA.UnpackEncodedString(DFA85_eotS);
		private static readonly short[] DFA85_eof = DFA.UnpackEncodedString(DFA85_eofS);
		private static readonly char[] DFA85_min = DFA.UnpackEncodedStringToUnsignedChars(DFA85_minS);
		private static readonly char[] DFA85_max = DFA.UnpackEncodedStringToUnsignedChars(DFA85_maxS);
		private static readonly short[] DFA85_accept = DFA.UnpackEncodedString(DFA85_acceptS);
		private static readonly short[] DFA85_special = DFA.UnpackEncodedString(DFA85_specialS);
		private static readonly short[][] DFA85_transition;

		static DFA85()
		{
			int numStates = DFA85_transitionS.Length;
			DFA85_transition = new short[numStates][];
			for ( int i=0; i < numStates; i++ )
			{
				DFA85_transition[i] = DFA.UnpackEncodedString(DFA85_transitionS[i]);
			}
		}

		public DFA85( BaseRecognizer recognizer )
		{
			this.recognizer = recognizer;
			this.decisionNumber = 85;
			this.eot = DFA85_eot;
			this.eof = DFA85_eof;
			this.min = DFA85_min;
			this.max = DFA85_max;
			this.accept = DFA85_accept;
			this.special = DFA85_special;
			this.transition = DFA85_transition;
		}

		public override string Description { get { return "302:56: (cond1= join_condition_both )?"; } }

		public override void Error(NoViableAltException nvae)
		{
			DebugRecognitionException(nvae);
		}
	}

	private class DFA86 : DFA
	{
		private const string DFA86_eotS =
			"\x1A\xFFFF";
		private const string DFA86_eofS =
			"\x1\x2\x19\xFFFF";
		private const string DFA86_minS =
			"\x1\x4B\x1\x0\x18\xFFFF";
		private const string DFA86_maxS =
			"\x1\x260\x1\x0\x18\xFFFF";
		private const string DFA86_acceptS =
			"\x2\xFFFF\x1\x2\x16\xFFFF\x1\x1";
		private const string DFA86_specialS =
			"\x1\xFFFF\x1\x0\x18\xFFFF}>";
		private static readonly string[] DFA86_transitionS =
			{
				"\x1\x2\x14\xFFFF\x1\x2\x5D\xFFFF\x1\x2\x12\xFFFF\x1\x2\x3\xFFFF\x1\x2"+
				"\x13\xFFFF\x1\x2\xF\xFFFF\x1\x2\x7\xFFFF\x1\x2\xB\xFFFF\x1\x2\x6\xFFFF"+
				"\x1\x2\x8\xFFFF\x1\x2\x42\xFFFF\x1\x2\x14\xFFFF\x1\x1\x8\xFFFF\x1\x2"+
				"\x1B\xFFFF\x1\x2\x2D\xFFFF\x1\x2\x8\xFFFF\x1\x2\xA\xFFFF\x1\x2\x8\xFFFF"+
				"\x1\x2\x25\xFFFF\x1\x2\x32\xFFFF\x1\x2\xD\xFFFF\x1\x2\x13\xFFFF\x1\x2",
				"\x1\xFFFF",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				""
			};

		private static readonly short[] DFA86_eot = DFA.UnpackEncodedString(DFA86_eotS);
		private static readonly short[] DFA86_eof = DFA.UnpackEncodedString(DFA86_eofS);
		private static readonly char[] DFA86_min = DFA.UnpackEncodedStringToUnsignedChars(DFA86_minS);
		private static readonly char[] DFA86_max = DFA.UnpackEncodedStringToUnsignedChars(DFA86_maxS);
		private static readonly short[] DFA86_accept = DFA.UnpackEncodedString(DFA86_acceptS);
		private static readonly short[] DFA86_special = DFA.UnpackEncodedString(DFA86_specialS);
		private static readonly short[][] DFA86_transition;

		static DFA86()
		{
			int numStates = DFA86_transitionS.Length;
			DFA86_transition = new short[numStates][];
			for ( int i=0; i < numStates; i++ )
			{
				DFA86_transition[i] = DFA.UnpackEncodedString(DFA86_transitionS[i]);
			}
		}

		public DFA86( BaseRecognizer recognizer, SpecialStateTransitionHandler specialStateTransition )
			: base(specialStateTransition)
		{
			this.recognizer = recognizer;
			this.decisionNumber = 86;
			this.eot = DFA86_eot;
			this.eof = DFA86_eof;
			this.min = DFA86_min;
			this.max = DFA86_max;
			this.accept = DFA86_accept;
			this.special = DFA86_special;
			this.transition = DFA86_transition;
		}

		public override string Description { get { return "305:5: ( ( join_condition_on )=>cond2= join_condition_on -> ^( $type $t2 $cond2) | -> ^( $type $t2) )"; } }

		public override void Error(NoViableAltException nvae)
		{
			DebugRecognitionException(nvae);
		}
	}

	private int SpecialStateTransition86(DFA dfa, int s, IIntStream _input)
	{
		ITokenStream input = (ITokenStream)_input;
		int _s = s;
		switch (s)
		{
			case 0:
				int LA86_1 = input.LA(1);


				int index86_1 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred2_MySQL51Parser_fragment))) {s = 25;}

				else if ((true)) {s = 2;}


				input.Seek(index86_1);
				if (s >= 0) return s;
				break;
		}
		if (state.backtracking > 0) {state.failed=true; return -1;}
		NoViableAltException nvae = new NoViableAltException(dfa.Description, 86, _s, input);
		dfa.Error(nvae);
		throw nvae;
	}
	private class DFA114 : DFA
	{
		private const string DFA114_eotS =
			"\x13B\xFFFF";
		private const string DFA114_eofS =
			"\x13B\xFFFF";
		private const string DFA114_minS =
			"\x1\x5\x138\x0\x2\xFFFF";
		private const string DFA114_maxS =
			"\x1\x26A\x138\x0\x2\xFFFF";
		private const string DFA114_acceptS =
			"\x139\xFFFF\x1\x1\x1\x2";
		private const string DFA114_specialS =
			"\x1\x0\x1\x1\x1\x2\x1\x3\x1\x4\x1\x5\x1\x6\x1\x7\x1\x8\x1\x9\x1\xA\x1"+
			"\xB\x1\xC\x1\xD\x1\xE\x1\xF\x1\x10\x1\x11\x1\x12\x1\x13\x1\x14\x1\x15"+
			"\x1\x16\x1\x17\x1\x18\x1\x19\x1\x1A\x1\x1B\x1\x1C\x1\x1D\x1\x1E\x1\x1F"+
			"\x1\x20\x1\x21\x1\x22\x1\x23\x1\x24\x1\x25\x1\x26\x1\x27\x1\x28\x1\x29"+
			"\x1\x2A\x1\x2B\x1\x2C\x1\x2D\x1\x2E\x1\x2F\x1\x30\x1\x31\x1\x32\x1\x33"+
			"\x1\x34\x1\x35\x1\x36\x1\x37\x1\x38\x1\x39\x1\x3A\x1\x3B\x1\x3C\x1\x3D"+
			"\x1\x3E\x1\x3F\x1\x40\x1\x41\x1\x42\x1\x43\x1\x44\x1\x45\x1\x46\x1\x47"+
			"\x1\x48\x1\x49\x1\x4A\x1\x4B\x1\x4C\x1\x4D\x1\x4E\x1\x4F\x1\x50\x1\x51"+
			"\x1\x52\x1\x53\x1\x54\x1\x55\x1\x56\x1\x57\x1\x58\x1\x59\x1\x5A\x1\x5B"+
			"\x1\x5C\x1\x5D\x1\x5E\x1\x5F\x1\x60\x1\x61\x1\x62\x1\x63\x1\x64\x1\x65"+
			"\x1\x66\x1\x67\x1\x68\x1\x69\x1\x6A\x1\x6B\x1\x6C\x1\x6D\x1\x6E\x1\x6F"+
			"\x1\x70\x1\x71\x1\x72\x1\x73\x1\x74\x1\x75\x1\x76\x1\x77\x1\x78\x1\x79"+
			"\x1\x7A\x1\x7B\x1\x7C\x1\x7D\x1\x7E\x1\x7F\x1\x80\x1\x81\x1\x82\x1\x83"+
			"\x1\x84\x1\x85\x1\x86\x1\x87\x1\x88\x1\x89\x1\x8A\x1\x8B\x1\x8C\x1\x8D"+
			"\x1\x8E\x1\x8F\x1\x90\x1\x91\x1\x92\x1\x93\x1\x94\x1\x95\x1\x96\x1\x97"+
			"\x1\x98\x1\x99\x1\x9A\x1\x9B\x1\x9C\x1\x9D\x1\x9E\x1\x9F\x1\xA0\x1\xA1"+
			"\x1\xA2\x1\xA3\x1\xA4\x1\xA5\x1\xA6\x1\xA7\x1\xA8\x1\xA9\x1\xAA\x1\xAB"+
			"\x1\xAC\x1\xAD\x1\xAE\x1\xAF\x1\xB0\x1\xB1\x1\xB2\x1\xB3\x1\xB4\x1\xB5"+
			"\x1\xB6\x1\xB7\x1\xB8\x1\xB9\x1\xBA\x1\xBB\x1\xBC\x1\xBD\x1\xBE\x1\xBF"+
			"\x1\xC0\x1\xC1\x1\xC2\x1\xC3\x1\xC4\x1\xC5\x1\xC6\x1\xC7\x1\xC8\x1\xC9"+
			"\x1\xCA\x1\xCB\x1\xCC\x1\xCD\x1\xCE\x1\xCF\x1\xD0\x1\xD1\x1\xD2\x1\xD3"+
			"\x1\xD4\x1\xD5\x1\xD6\x1\xD7\x1\xD8\x1\xD9\x1\xDA\x1\xDB\x1\xDC\x1\xDD"+
			"\x1\xDE\x1\xDF\x1\xE0\x1\xE1\x1\xE2\x1\xE3\x1\xE4\x1\xE5\x1\xE6\x1\xE7"+
			"\x1\xE8\x1\xE9\x1\xEA\x1\xEB\x1\xEC\x1\xED\x1\xEE\x1\xEF\x1\xF0\x1\xF1"+
			"\x1\xF2\x1\xF3\x1\xF4\x1\xF5\x1\xF6\x1\xF7\x1\xF8\x1\xF9\x1\xFA\x1\xFB"+
			"\x1\xFC\x1\xFD\x1\xFE\x1\xFF\x1\x100\x1\x101\x1\x102\x1\x103\x1\x104"+
			"\x1\x105\x1\x106\x1\x107\x1\x108\x1\x109\x1\x10A\x1\x10B\x1\x10C\x1\x10D"+
			"\x1\x10E\x1\x10F\x1\x110\x1\x111\x1\x112\x1\x113\x1\x114\x1\x115\x1\x116"+
			"\x1\x117\x1\x118\x1\x119\x1\x11A\x1\x11B\x1\x11C\x1\x11D\x1\x11E\x1\x11F"+
			"\x1\x120\x1\x121\x1\x122\x1\x123\x1\x124\x1\x125\x1\x126\x1\x127\x1\x128"+
			"\x1\x129\x1\x12A\x1\x12B\x1\x12C\x1\x12D\x1\x12E\x1\x12F\x1\x130\x1\x131"+
			"\x1\x132\x1\x133\x1\x134\x1\x135\x1\x136\x1\x137\x1\x138\x2\xFFFF}>";
		private static readonly string[] DFA114_transitionS =
			{
				"\x1\x35\x1\xFFFF\x1\x36\x1\x37\x1\x38\x1\x39\x1\x3A\x4\xFFFF\x1\x3B"+
				"\x2\xFFFF\x1\x1\x2\xFFFF\x1\x3C\x1\x3D\x1\x3F\x1\x3E\x1\x41\x1\x40\x1"+
				"\x2\x1\xFFFF\x1\x3\x4\xFFFF\x1\x42\x1\x43\x8\xFFFF\x1\x44\x1\x45\x1"+
				"\x46\x1\xFFFF\x1\x47\x1\xFFFF\x1\x4\x1\x5\x2\xFFFF\x1\x48\x2\xFFFF\x1"+
				"\x49\x1\xFFFF\x1\x4A\x2\xFFFF\x1\x6\x1\xFFFF\x1\x7\x1\x4B\x1\x4C\x1"+
				"\x8\x1\x4D\x1\x4E\x1\xFFFF\x1\x4F\x1\xFFFF\x1\x50\x1\xFFFF\x1\x9\x1"+
				"\xFFFF\x1\xA\x1\x52\x1\x53\x1\x54\x1\x55\x1\x56\x1\xFFFF\x1\x57\x1\x58"+
				"\x1\xFFFF\x1\xB\x1\x59\x1\xFFFF\x1\x5A\x2\xFFFF\x1\x5B\x2\xFFFF\x1\x5C"+
				"\x9\xFFFF\x1\x5D\x2\xFFFF\x1\x5E\x1\x60\x1\x5F\x4\xFFFF\x1\x61\x4\xFFFF"+
				"\x1\xC\x4\xFFFF\x1\x62\x1\xFFFF\x1\x63\x3\xFFFF\x1\x64\x2\xFFFF\x1\x65"+
				"\x1\x66\x1\x67\x1\x68\x4\xFFFF\x1\xD\x4\xFFFF\x1\x69\x1\x6A\x1\x6B\x3"+
				"\xFFFF\x1\x7B\x1\xFFFF\x1\xE\x1\x6C\x1\x6E\x1\x6F\x1\x6D\x1\xFFFF\x1"+
				"\x70\x1\x71\x2\xFFFF\x1\x72\x1\x73\x1\x74\x1\xF\x2\xFFFF\x1\x75\x1\xFFFF"+
				"\x1\x76\x1\x77\x2\xFFFF\x1\x79\x1\x78\x1\xFFFF\x1\x51\x1\x7D\x1\x7E"+
				"\x1\x7F\x3\xFFFF\x1\x10\x3\xFFFF\x1\x7A\x1\x80\x1\xFFFF\x1\x7C\x1\xFFFF"+
				"\x1\x127\x1\x81\x1\x82\x1\x83\x1\x85\x3\xFFFF\x1\x84\x2\xFFFF\x1\x11"+
				"\x1\xFFFF\x1\x12\x1\x86\x1\xFFFF\x1\x13\x2\xFFFF\x1\x14\x1\x87\x1\x88"+
				"\x3\xFFFF\x1\x34\x1\x89\x2\xFFFF\x1\x8B\x2\xFFFF\x1\x8C\x1\xFFFF\x1"+
				"\x8D\x1\xFFFF\x1\x92\x4\xFFFF\x1\x93\x1\x15\x9\xFFFF\x1\x8A\x1\x8E\x1"+
				"\x8F\x1\xFFFF\x1\x90\x1\x91\x4\xFFFF\x1\x94\x1\xFFFF\x1\x16\x1\x17\x1"+
				"\x95\x3\xFFFF\x1\x96\x2\xFFFF\x1\x97\x2\xFFFF\x1\x98\x4\xFFFF\x1\x99"+
				"\x1\x9A\x1\xFFFF\x1\x9B\x3\xFFFF\x1\x9C\x1\x9D\x2\xFFFF\x1\x9E\x6\xFFFF"+
				"\x1\xA0\x1\xA8\x1\xA1\x1\xA3\x1\xA4\x1\xA6\x1\xA2\x1\xA7\x1\xA9\x1\xAA"+
				"\x1\xAB\x1\xAC\x1\xAD\x1\xAE\x1\xFFFF\x1\xA5\x2\xFFFF\x1\xAF\x1\xB0"+
				"\x1\x9F\x1\xB1\x1\xB2\x1\xB3\x1\xB4\x1\xB5\x3\xFFFF\x1\xB6\x1\xB7\x1"+
				"\xB8\x2\xFFFF\x1\xB9\x2\xFFFF\x1\xBA\x2\xFFFF\x1\xBB\x1\xFFFF\x1\xBD"+
				"\x1\xFFFF\x1\xBC\x1\xFFFF\x1\xBE\x1\xFFFF\x1\xBF\x1\xC0\x1\xC1\x1\xC2"+
				"\x1\xC3\x1\xC4\x1\xC5\x1\xFFFF\x1\xC6\x1\xC7\x1\xC9\x1\xC8\x1\x18\x1"+
				"\xCB\x1\xCC\x4\xFFFF\x1\xCA\x5\xFFFF\x1\xCD\x1\xCE\x1\xCF\x1\xFFFF\x1"+
				"\xD1\x1\xD0\x1\x19\x3\xFFFF\x1\x1A\x5\xFFFF\x1\x1B\x1\xD2\x1\xD3\x1"+
				"\x1C\x1\xD4\x1\x1D\x1\xD5\x1\xD6\x1\xD7\x1\xD8\x1\xD9\x1\xDA\x1\xFFFF"+
				"\x1\xDB\x1\xDC\x1\x1E\x3\xFFFF\x1\x1F\x1\xDD\x1\xDE\x1\xFFFF\x1\xDF"+
				"\x1\xFFFF\x1\xE0\x1\xE1\x1\xE2\x1\xE3\x1\xFFFF\x1\xE4\x1\xE5\x1\xE6"+
				"\x8\xFFFF\x1\xE7\x1\xE8\x1\xEA\x1\xE9\x1\xEB\x2\xFFFF\x1\xEC\x1\xED"+
				"\x1\xEE\x1\xFFFF\x1\xEF\x1\x20\x1\xFFFF\x1\xF0\x1\x21\x1\xFFFF\x1\xF1"+
				"\x1\xFFFF\x1\xF2\x1\xFFFF\x1\x22\x1\xF3\x1\x23\x1\xFFFF\x1\xF4\x1\xFFFF"+
				"\x1\xF5\x4\xFFFF\x1\x24\x1\xF6\x1\xF7\x1\xFA\x1\xF8\x1\xF9\x1\x139\x1"+
				"\xFB\x1\x25\x1\xFC\x3\xFFFF\x1\xFD\x1\xFFFF\x1\x26\x4\xFFFF\x1\xFE\x1"+
				"\xFF\x1\x27\x1\x100\x3\xFFFF\x1\x102\x1\xFFFF\x1\x103\x1\x28\x1\x101"+
				"\x1\x2A\x1\xFFFF\x1\x104\x1\x29\x1\xFFFF\x1\x2B\x1\x105\x1\x106\x7\xFFFF"+
				"\x1\x108\x1\x107\x1\xFFFF\x1\x109\x1\xFFFF\x1\x10A\x1\xFFFF\x1\x2C\x1"+
				"\xFFFF\x1\x10B\x1\x10C\x4\xFFFF\x1\x2D\x1\x10D\x2\xFFFF\x1\x10E\x1\x10F"+
				"\x1\x110\x1\x111\x1\x112\x3\xFFFF\x1\x113\x1\x114\x1\x115\x1\x116\x3"+
				"\xFFFF\x1\x117\x1\x118\x1\x119\x1\x11A\x1\xFFFF\x1\x11B\x1\x11C\x1\xFFFF"+
				"\x1\x123\x1\x120\x1\x121\x1\x122\x5\xFFFF\x1\x11D\x1\x11E\x1\xFFFF\x1"+
				"\x11F\x2\xFFFF\x1\x2E\x1\x125\x1\x124\x1\x126\x1\x128\x1\x129\x1\xFFFF"+
				"\x1\x12B\x1\x12A\x1\x2F\x1\x30\x2\xFFFF\x1\x12C\x2\xFFFF\x1\x12D\x1"+
				"\xFFFF\x1\x33\x2\xFFFF\x1\x12E\x2\xFFFF\x1\x12F\x4\xFFFF\x1\x132\x5"+
				"\xFFFF\x1\x130\x4\xFFFF\x1\x131\x1\x134\x1\x133\x1\x135\x4\xFFFF\x1"+
				"\x136\x1\x31\x2\xFFFF\x1\x137\x1\x32\x1\xFFFF\x1\x138",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"",
				""
			};

		private static readonly short[] DFA114_eot = DFA.UnpackEncodedString(DFA114_eotS);
		private static readonly short[] DFA114_eof = DFA.UnpackEncodedString(DFA114_eofS);
		private static readonly char[] DFA114_min = DFA.UnpackEncodedStringToUnsignedChars(DFA114_minS);
		private static readonly char[] DFA114_max = DFA.UnpackEncodedStringToUnsignedChars(DFA114_maxS);
		private static readonly short[] DFA114_accept = DFA.UnpackEncodedString(DFA114_acceptS);
		private static readonly short[] DFA114_special = DFA.UnpackEncodedString(DFA114_specialS);
		private static readonly short[][] DFA114_transition;

		static DFA114()
		{
			int numStates = DFA114_transitionS.Length;
			DFA114_transition = new short[numStates][];
			for ( int i=0; i < numStates; i++ )
			{
				DFA114_transition[i] = DFA.UnpackEncodedString(DFA114_transitionS[i]);
			}
		}

		public DFA114( BaseRecognizer recognizer, SpecialStateTransitionHandler specialStateTransition )
			: base(specialStateTransition)
		{
			this.recognizer = recognizer;
			this.decisionNumber = 114;
			this.eot = DFA114_eot;
			this.eof = DFA114_eof;
			this.min = DFA114_min;
			this.max = DFA114_max;
			this.accept = DFA114_accept;
			this.special = DFA114_special;
			this.transition = DFA114_transition;
		}

		public override string Description { get { return "708:3: ({...}? => (names+= ident ( COMMA names+= ident )* )? |names+= ident ( COMMA names+= ident )* )"; } }

		public override void Error(NoViableAltException nvae)
		{
			DebugRecognitionException(nvae);
		}
	}

	private int SpecialStateTransition114(DFA dfa, int s, IIntStream _input)
	{
		ITokenStream input = (ITokenStream)_input;
		int _s = s;
		switch (s)
		{
			case 0:
				int LA114_0 = input.LA(1);


				int index114_0 = input.Index;
				input.Rewind();
				s = -1;
				if ((LA114_0==ASCII)) {s = 1;}

				else if ((LA114_0==BACKUP)) {s = 2;}

				else if ((LA114_0==BEGIN)) {s = 3;}

				else if ((LA114_0==BYTE)) {s = 4;}

				else if ((LA114_0==CACHE)) {s = 5;}

				else if ((LA114_0==CHARSET)) {s = 6;}

				else if ((LA114_0==CHECKSUM)) {s = 7;}

				else if ((LA114_0==CLOSE)) {s = 8;}

				else if ((LA114_0==COMMENT)) {s = 9;}

				else if ((LA114_0==COMMIT)) {s = 10;}

				else if ((LA114_0==CONTAINS)) {s = 11;}

				else if ((LA114_0==DEALLOCATE)) {s = 12;}

				else if ((LA114_0==DO)) {s = 13;}

				else if ((LA114_0==END)) {s = 14;}

				else if ((LA114_0==EXECUTE)) {s = 15;}

				else if ((LA114_0==FLUSH)) {s = 16;}

				else if ((LA114_0==GROUP)) {s = 17;}

				else if ((LA114_0==HANDLER)) {s = 18;}

				else if ((LA114_0==HELP)) {s = 19;}

				else if ((LA114_0==HOST)) {s = 20;}

				else if ((LA114_0==INSTALL)) {s = 21;}

				else if ((LA114_0==LABEL)) {s = 22;}

				else if ((LA114_0==LANGUAGE)) {s = 23;}

				else if ((LA114_0==NO)) {s = 24;}

				else if ((LA114_0==OPEN)) {s = 25;}

				else if ((LA114_0==OPTIONS)) {s = 26;}

				else if ((LA114_0==OWNER)) {s = 27;}

				else if ((LA114_0==PARSER)) {s = 28;}

				else if ((LA114_0==PARTITION)) {s = 29;}

				else if ((LA114_0==PORT)) {s = 30;}

				else if ((LA114_0==PREPARE)) {s = 31;}

				else if ((LA114_0==REMOVE)) {s = 32;}

				else if ((LA114_0==REPAIR)) {s = 33;}

				else if ((LA114_0==RESET)) {s = 34;}

				else if ((LA114_0==RESTORE)) {s = 35;}

				else if ((LA114_0==ROLLBACK)) {s = 36;}

				else if ((LA114_0==SAVEPOINT)) {s = 37;}

				else if ((LA114_0==SECURITY)) {s = 38;}

				else if ((LA114_0==SERVER)) {s = 39;}

				else if ((LA114_0==SIGNED)) {s = 40;}

				else if ((LA114_0==SOCKET)) {s = 41;}

				else if ((LA114_0==SLAVE)) {s = 42;}

				else if ((LA114_0==SONAME)) {s = 43;}

				else if ((LA114_0==START)) {s = 44;}

				else if ((LA114_0==STOP)) {s = 45;}

				else if ((LA114_0==TRUNCATE)) {s = 46;}

				else if ((LA114_0==UNICODE)) {s = 47;}

				else if ((LA114_0==UNINSTALL)) {s = 48;}

				else if ((LA114_0==WRAPPER)) {s = 49;}

				else if ((LA114_0==XA)) {s = 50;}

				else if ((LA114_0==UPGRADE)) {s = 51;}

				else if ((LA114_0==ID)) {s = 52;}

				else if ((LA114_0==ACTION)) {s = 53;}

				else if ((LA114_0==ADDDATE)) {s = 54;}

				else if ((LA114_0==AFTER)) {s = 55;}

				else if ((LA114_0==AGAINST)) {s = 56;}

				else if ((LA114_0==AGGREGATE)) {s = 57;}

				else if ((LA114_0==ALGORITHM)) {s = 58;}

				else if ((LA114_0==ANY)) {s = 59;}

				else if ((LA114_0==AT)) {s = 60;}

				else if ((LA114_0==AUTHORS)) {s = 61;}

				else if ((LA114_0==AUTO_INCREMENT)) {s = 62;}

				else if ((LA114_0==AUTOEXTEND_SIZE)) {s = 63;}

				else if ((LA114_0==AVG_ROW_LENGTH)) {s = 64;}

				else if ((LA114_0==AVG)) {s = 65;}

				else if ((LA114_0==BINLOG)) {s = 66;}

				else if ((LA114_0==BIT)) {s = 67;}

				else if ((LA114_0==BLOCK)) {s = 68;}

				else if ((LA114_0==BOOL)) {s = 69;}

				else if ((LA114_0==BOOLEAN)) {s = 70;}

				else if ((LA114_0==BTREE)) {s = 71;}

				else if ((LA114_0==CASCADED)) {s = 72;}

				else if ((LA114_0==CHAIN)) {s = 73;}

				else if ((LA114_0==CHANGED)) {s = 74;}

				else if ((LA114_0==CIPHER)) {s = 75;}

				else if ((LA114_0==CLIENT)) {s = 76;}

				else if ((LA114_0==COALESCE)) {s = 77;}

				else if ((LA114_0==CODE)) {s = 78;}

				else if ((LA114_0==COLLATION)) {s = 79;}

				else if ((LA114_0==COLUMNS)) {s = 80;}

				else if ((LA114_0==FIELDS)) {s = 81;}

				else if ((LA114_0==COMMITTED)) {s = 82;}

				else if ((LA114_0==COMPACT)) {s = 83;}

				else if ((LA114_0==COMPLETION)) {s = 84;}

				else if ((LA114_0==COMPRESSED)) {s = 85;}

				else if ((LA114_0==CONCURRENT)) {s = 86;}

				else if ((LA114_0==CONNECTION)) {s = 87;}

				else if ((LA114_0==CONSISTENT)) {s = 88;}

				else if ((LA114_0==CONTEXT)) {s = 89;}

				else if ((LA114_0==CONTRIBUTORS)) {s = 90;}

				else if ((LA114_0==CPU)) {s = 91;}

				else if ((LA114_0==CUBE)) {s = 92;}

				else if ((LA114_0==DATA)) {s = 93;}

				else if ((LA114_0==DATAFILE)) {s = 94;}

				else if ((LA114_0==DATETIME)) {s = 95;}

				else if ((LA114_0==DATE)) {s = 96;}

				else if ((LA114_0==DAY)) {s = 97;}

				else if ((LA114_0==DEFINER)) {s = 98;}

				else if ((LA114_0==DELAY_KEY_WRITE)) {s = 99;}

				else if ((LA114_0==DES_KEY_FILE)) {s = 100;}

				else if ((LA114_0==DIRECTORY)) {s = 101;}

				else if ((LA114_0==DISABLE)) {s = 102;}

				else if ((LA114_0==DISCARD)) {s = 103;}

				else if ((LA114_0==DISK)) {s = 104;}

				else if ((LA114_0==DUMPFILE)) {s = 105;}

				else if ((LA114_0==DUPLICATE)) {s = 106;}

				else if ((LA114_0==DYNAMIC)) {s = 107;}

				else if ((LA114_0==ENDS)) {s = 108;}

				else if ((LA114_0==ENUM)) {s = 109;}

				else if ((LA114_0==ENGINE)) {s = 110;}

				else if ((LA114_0==ENGINES)) {s = 111;}

				else if ((LA114_0==ERRORS)) {s = 112;}

				else if ((LA114_0==ESCAPE)) {s = 113;}

				else if ((LA114_0==EVENT)) {s = 114;}

				else if ((LA114_0==EVENTS)) {s = 115;}

				else if ((LA114_0==EVERY)) {s = 116;}

				else if ((LA114_0==EXPANSION)) {s = 117;}

				else if ((LA114_0==EXTENDED)) {s = 118;}

				else if ((LA114_0==EXTENT_SIZE)) {s = 119;}

				else if ((LA114_0==FAULTS)) {s = 120;}

				else if ((LA114_0==FAST)) {s = 121;}

				else if ((LA114_0==FOUND)) {s = 122;}

				else if ((LA114_0==ENABLE)) {s = 123;}

				else if ((LA114_0==FULL)) {s = 124;}

				else if ((LA114_0==FILE)) {s = 125;}

				else if ((LA114_0==FIRST)) {s = 126;}

				else if ((LA114_0==FIXED)) {s = 127;}

				else if ((LA114_0==FRAC_SECOND)) {s = 128;}

				else if ((LA114_0==GEOMETRY)) {s = 129;}

				else if ((LA114_0==GEOMETRYCOLLECTION)) {s = 130;}

				else if ((LA114_0==GET_FORMAT)) {s = 131;}

				else if ((LA114_0==GRANTS)) {s = 132;}

				else if ((LA114_0==GLOBAL)) {s = 133;}

				else if ((LA114_0==HASH)) {s = 134;}

				else if ((LA114_0==HOSTS)) {s = 135;}

				else if ((LA114_0==HOUR)) {s = 136;}

				else if ((LA114_0==IDENTIFIED)) {s = 137;}

				else if ((LA114_0==INVOKER)) {s = 138;}

				else if ((LA114_0==IMPORT)) {s = 139;}

				else if ((LA114_0==INDEXES)) {s = 140;}

				else if ((LA114_0==INITIAL_SIZE)) {s = 141;}

				else if ((LA114_0==IO)) {s = 142;}

				else if ((LA114_0==IPC)) {s = 143;}

				else if ((LA114_0==ISOLATION)) {s = 144;}

				else if ((LA114_0==ISSUER)) {s = 145;}

				else if ((LA114_0==INNOBASE)) {s = 146;}

				else if ((LA114_0==INSERT_METHOD)) {s = 147;}

				else if ((LA114_0==KEY_BLOCK_SIZE)) {s = 148;}

				else if ((LA114_0==LAST)) {s = 149;}

				else if ((LA114_0==LEAVES)) {s = 150;}

				else if ((LA114_0==LESS)) {s = 151;}

				else if ((LA114_0==LEVEL)) {s = 152;}

				else if ((LA114_0==LINESTRING)) {s = 153;}

				else if ((LA114_0==LIST)) {s = 154;}

				else if ((LA114_0==LOCAL)) {s = 155;}

				else if ((LA114_0==LOCKS)) {s = 156;}

				else if ((LA114_0==LOGFILE)) {s = 157;}

				else if ((LA114_0==LOGS)) {s = 158;}

				else if ((LA114_0==MAX_ROWS)) {s = 159;}

				else if ((LA114_0==MASTER)) {s = 160;}

				else if ((LA114_0==MASTER_HOST)) {s = 161;}

				else if ((LA114_0==MASTER_PORT)) {s = 162;}

				else if ((LA114_0==MASTER_LOG_FILE)) {s = 163;}

				else if ((LA114_0==MASTER_LOG_POS)) {s = 164;}

				else if ((LA114_0==MASTER_USER)) {s = 165;}

				else if ((LA114_0==MASTER_PASSWORD)) {s = 166;}

				else if ((LA114_0==MASTER_SERVER_ID)) {s = 167;}

				else if ((LA114_0==MASTER_CONNECT_RETRY)) {s = 168;}

				else if ((LA114_0==MASTER_SSL)) {s = 169;}

				else if ((LA114_0==MASTER_SSL_CA)) {s = 170;}

				else if ((LA114_0==MASTER_SSL_CAPATH)) {s = 171;}

				else if ((LA114_0==MASTER_SSL_CERT)) {s = 172;}

				else if ((LA114_0==MASTER_SSL_CIPHER)) {s = 173;}

				else if ((LA114_0==MASTER_SSL_KEY)) {s = 174;}

				else if ((LA114_0==MAX_CONNECTIONS_PER_HOUR)) {s = 175;}

				else if ((LA114_0==MAX_QUERIES_PER_HOUR)) {s = 176;}

				else if ((LA114_0==MAX_SIZE)) {s = 177;}

				else if ((LA114_0==MAX_UPDATES_PER_HOUR)) {s = 178;}

				else if ((LA114_0==MAX_USER_CONNECTIONS)) {s = 179;}

				else if ((LA114_0==MAX_VALUE)) {s = 180;}

				else if ((LA114_0==MEDIUM)) {s = 181;}

				else if ((LA114_0==MEMORY)) {s = 182;}

				else if ((LA114_0==MERGE)) {s = 183;}

				else if ((LA114_0==MICROSECOND)) {s = 184;}

				else if ((LA114_0==MIGRATE)) {s = 185;}

				else if ((LA114_0==MINUTE)) {s = 186;}

				else if ((LA114_0==MIN_ROWS)) {s = 187;}

				else if ((LA114_0==MODIFY)) {s = 188;}

				else if ((LA114_0==MODE)) {s = 189;}

				else if ((LA114_0==MONTH)) {s = 190;}

				else if ((LA114_0==MULTILINESTRING)) {s = 191;}

				else if ((LA114_0==MULTIPOINT)) {s = 192;}

				else if ((LA114_0==MULTIPOLYGON)) {s = 193;}

				else if ((LA114_0==MUTEX)) {s = 194;}

				else if ((LA114_0==NAME)) {s = 195;}

				else if ((LA114_0==NAMES)) {s = 196;}

				else if ((LA114_0==NATIONAL)) {s = 197;}

				else if ((LA114_0==NCHAR)) {s = 198;}

				else if ((LA114_0==NDBCLUSTER)) {s = 199;}

				else if ((LA114_0==NEXT)) {s = 200;}

				else if ((LA114_0==NEW)) {s = 201;}

				else if ((LA114_0==NO_WAIT)) {s = 202;}

				else if ((LA114_0==NODEGROUP)) {s = 203;}

				else if ((LA114_0==NONE)) {s = 204;}

				else if ((LA114_0==NVARCHAR)) {s = 205;}

				else if ((LA114_0==OFFSET)) {s = 206;}

				else if ((LA114_0==OLD_PASSWORD)) {s = 207;}

				else if ((LA114_0==ONE_SHOT)) {s = 208;}

				else if ((LA114_0==ONE)) {s = 209;}

				else if ((LA114_0==PACK_KEYS)) {s = 210;}

				else if ((LA114_0==PAGE)) {s = 211;}

				else if ((LA114_0==PARTIAL)) {s = 212;}

				else if ((LA114_0==PARTITIONING)) {s = 213;}

				else if ((LA114_0==PARTITIONS)) {s = 214;}

				else if ((LA114_0==PASSWORD)) {s = 215;}

				else if ((LA114_0==PHASE)) {s = 216;}

				else if ((LA114_0==PLUGIN)) {s = 217;}

				else if ((LA114_0==PLUGINS)) {s = 218;}

				else if ((LA114_0==POINT)) {s = 219;}

				else if ((LA114_0==POLYGON)) {s = 220;}

				else if ((LA114_0==PRESERVE)) {s = 221;}

				else if ((LA114_0==PREV)) {s = 222;}

				else if ((LA114_0==PRIVILEGES)) {s = 223;}

				else if ((LA114_0==PROCESS)) {s = 224;}

				else if ((LA114_0==PROCESSLIST)) {s = 225;}

				else if ((LA114_0==PROFILE)) {s = 226;}

				else if ((LA114_0==PROFILES)) {s = 227;}

				else if ((LA114_0==QUARTER)) {s = 228;}

				else if ((LA114_0==QUERY)) {s = 229;}

				else if ((LA114_0==QUICK)) {s = 230;}

				else if ((LA114_0==REBUILD)) {s = 231;}

				else if ((LA114_0==RECOVER)) {s = 232;}

				else if ((LA114_0==REDO_BUFFER_SIZE)) {s = 233;}

				else if ((LA114_0==REDOFILE)) {s = 234;}

				else if ((LA114_0==REDUNDANT)) {s = 235;}

				else if ((LA114_0==RELAY_LOG_FILE)) {s = 236;}

				else if ((LA114_0==RELAY_LOG_POS)) {s = 237;}

				else if ((LA114_0==RELAY_THREAD)) {s = 238;}

				else if ((LA114_0==RELOAD)) {s = 239;}

				else if ((LA114_0==REORGANIZE)) {s = 240;}

				else if ((LA114_0==REPEATABLE)) {s = 241;}

				else if ((LA114_0==REPLICATION)) {s = 242;}

				else if ((LA114_0==RESOURCES)) {s = 243;}

				else if ((LA114_0==RESUME)) {s = 244;}

				else if ((LA114_0==RETURNS)) {s = 245;}

				else if ((LA114_0==ROLLUP)) {s = 246;}

				else if ((LA114_0==ROUTINE)) {s = 247;}

				else if ((LA114_0==ROWS)) {s = 248;}

				else if ((LA114_0==ROW_FORMAT)) {s = 249;}

				else if ((LA114_0==ROW)) {s = 250;}

				else if ((LA114_0==RTREE)) {s = 251;}

				else if ((LA114_0==SCHEDULE)) {s = 252;}

				else if ((LA114_0==SECOND)) {s = 253;}

				else if ((LA114_0==SERIAL)) {s = 254;}

				else if ((LA114_0==SERIALIZABLE)) {s = 255;}

				else if ((LA114_0==SESSION)) {s = 256;}

				else if ((LA114_0==SIMPLE)) {s = 257;}

				else if ((LA114_0==SHARE)) {s = 258;}

				else if ((LA114_0==SHUTDOWN)) {s = 259;}

				else if ((LA114_0==SNAPSHOT)) {s = 260;}

				else if ((LA114_0==SOUNDS)) {s = 261;}

				else if ((LA114_0==SOURCE)) {s = 262;}

				else if ((LA114_0==SQL_CACHE)) {s = 263;}

				else if ((LA114_0==SQL_BUFFER_RESULT)) {s = 264;}

				else if ((LA114_0==SQL_NO_CACHE)) {s = 265;}

				else if ((LA114_0==SQL_THREAD)) {s = 266;}

				else if ((LA114_0==STARTS)) {s = 267;}

				else if ((LA114_0==STATUS)) {s = 268;}

				else if ((LA114_0==STORAGE)) {s = 269;}

				else if ((LA114_0==STRING_KEYWORD)) {s = 270;}

				else if ((LA114_0==SUBDATE)) {s = 271;}

				else if ((LA114_0==SUBJECT)) {s = 272;}

				else if ((LA114_0==SUBPARTITION)) {s = 273;}

				else if ((LA114_0==SUBPARTITIONS)) {s = 274;}

				else if ((LA114_0==SUPER)) {s = 275;}

				else if ((LA114_0==SUSPEND)) {s = 276;}

				else if ((LA114_0==SWAPS)) {s = 277;}

				else if ((LA114_0==SWITCHES)) {s = 278;}

				else if ((LA114_0==TABLES)) {s = 279;}

				else if ((LA114_0==TABLESPACE)) {s = 280;}

				else if ((LA114_0==TEMPORARY)) {s = 281;}

				else if ((LA114_0==TEMPTABLE)) {s = 282;}

				else if ((LA114_0==TEXT)) {s = 283;}

				else if ((LA114_0==THAN)) {s = 284;}

				else if ((LA114_0==TRANSACTION)) {s = 285;}

				else if ((LA114_0==TRANSACTIONAL)) {s = 286;}

				else if ((LA114_0==TRIGGERS)) {s = 287;}

				else if ((LA114_0==TIMESTAMP)) {s = 288;}

				else if ((LA114_0==TIMESTAMP_ADD)) {s = 289;}

				else if ((LA114_0==TIMESTAMP_DIFF)) {s = 290;}

				else if ((LA114_0==TIME)) {s = 291;}

				else if ((LA114_0==TYPES)) {s = 292;}

				else if ((LA114_0==TYPE)) {s = 293;}

				else if ((LA114_0==UDF_RETURNS)) {s = 294;}

				else if ((LA114_0==FUNCTION)) {s = 295;}

				else if ((LA114_0==UNCOMMITTED)) {s = 296;}

				else if ((LA114_0==UNDEFINED)) {s = 297;}

				else if ((LA114_0==UNDO_BUFFER_SIZE)) {s = 298;}

				else if ((LA114_0==UNDOFILE)) {s = 299;}

				else if ((LA114_0==UNKNOWN)) {s = 300;}

				else if ((LA114_0==UNTIL)) {s = 301;}

				else if ((LA114_0==USER)) {s = 302;}

				else if ((LA114_0==USE_FRM)) {s = 303;}

				else if ((LA114_0==VARIABLES)) {s = 304;}

				else if ((LA114_0==VIEW)) {s = 305;}

				else if ((LA114_0==VALUE)) {s = 306;}

				else if ((LA114_0==WARNINGS)) {s = 307;}

				else if ((LA114_0==WAIT)) {s = 308;}

				else if ((LA114_0==WEEK)) {s = 309;}

				else if ((LA114_0==WORK)) {s = 310;}

				else if ((LA114_0==X509)) {s = 311;}

				else if ((LA114_0==YEAR)) {s = 312;}

				else if ((LA114_0==RPAREN) && (EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}


				input.Seek(index114_0);
				if (s >= 0) return s;
				break;
			case 1:
				int LA114_1 = input.LA(1);


				int index114_1 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_1);
				if (s >= 0) return s;
				break;
			case 2:
				int LA114_2 = input.LA(1);


				int index114_2 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_2);
				if (s >= 0) return s;
				break;
			case 3:
				int LA114_3 = input.LA(1);


				int index114_3 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_3);
				if (s >= 0) return s;
				break;
			case 4:
				int LA114_4 = input.LA(1);


				int index114_4 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_4);
				if (s >= 0) return s;
				break;
			case 5:
				int LA114_5 = input.LA(1);


				int index114_5 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_5);
				if (s >= 0) return s;
				break;
			case 6:
				int LA114_6 = input.LA(1);


				int index114_6 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_6);
				if (s >= 0) return s;
				break;
			case 7:
				int LA114_7 = input.LA(1);


				int index114_7 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_7);
				if (s >= 0) return s;
				break;
			case 8:
				int LA114_8 = input.LA(1);


				int index114_8 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_8);
				if (s >= 0) return s;
				break;
			case 9:
				int LA114_9 = input.LA(1);


				int index114_9 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_9);
				if (s >= 0) return s;
				break;
			case 10:
				int LA114_10 = input.LA(1);


				int index114_10 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_10);
				if (s >= 0) return s;
				break;
			case 11:
				int LA114_11 = input.LA(1);


				int index114_11 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_11);
				if (s >= 0) return s;
				break;
			case 12:
				int LA114_12 = input.LA(1);


				int index114_12 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_12);
				if (s >= 0) return s;
				break;
			case 13:
				int LA114_13 = input.LA(1);


				int index114_13 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_13);
				if (s >= 0) return s;
				break;
			case 14:
				int LA114_14 = input.LA(1);


				int index114_14 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_14);
				if (s >= 0) return s;
				break;
			case 15:
				int LA114_15 = input.LA(1);


				int index114_15 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_15);
				if (s >= 0) return s;
				break;
			case 16:
				int LA114_16 = input.LA(1);


				int index114_16 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_16);
				if (s >= 0) return s;
				break;
			case 17:
				int LA114_17 = input.LA(1);


				int index114_17 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_17);
				if (s >= 0) return s;
				break;
			case 18:
				int LA114_18 = input.LA(1);


				int index114_18 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_18);
				if (s >= 0) return s;
				break;
			case 19:
				int LA114_19 = input.LA(1);


				int index114_19 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_19);
				if (s >= 0) return s;
				break;
			case 20:
				int LA114_20 = input.LA(1);


				int index114_20 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_20);
				if (s >= 0) return s;
				break;
			case 21:
				int LA114_21 = input.LA(1);


				int index114_21 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_21);
				if (s >= 0) return s;
				break;
			case 22:
				int LA114_22 = input.LA(1);


				int index114_22 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_22);
				if (s >= 0) return s;
				break;
			case 23:
				int LA114_23 = input.LA(1);


				int index114_23 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_23);
				if (s >= 0) return s;
				break;
			case 24:
				int LA114_24 = input.LA(1);


				int index114_24 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_24);
				if (s >= 0) return s;
				break;
			case 25:
				int LA114_25 = input.LA(1);


				int index114_25 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_25);
				if (s >= 0) return s;
				break;
			case 26:
				int LA114_26 = input.LA(1);


				int index114_26 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_26);
				if (s >= 0) return s;
				break;
			case 27:
				int LA114_27 = input.LA(1);


				int index114_27 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_27);
				if (s >= 0) return s;
				break;
			case 28:
				int LA114_28 = input.LA(1);


				int index114_28 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_28);
				if (s >= 0) return s;
				break;
			case 29:
				int LA114_29 = input.LA(1);


				int index114_29 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_29);
				if (s >= 0) return s;
				break;
			case 30:
				int LA114_30 = input.LA(1);


				int index114_30 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_30);
				if (s >= 0) return s;
				break;
			case 31:
				int LA114_31 = input.LA(1);


				int index114_31 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_31);
				if (s >= 0) return s;
				break;
			case 32:
				int LA114_32 = input.LA(1);


				int index114_32 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_32);
				if (s >= 0) return s;
				break;
			case 33:
				int LA114_33 = input.LA(1);


				int index114_33 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_33);
				if (s >= 0) return s;
				break;
			case 34:
				int LA114_34 = input.LA(1);


				int index114_34 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_34);
				if (s >= 0) return s;
				break;
			case 35:
				int LA114_35 = input.LA(1);


				int index114_35 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_35);
				if (s >= 0) return s;
				break;
			case 36:
				int LA114_36 = input.LA(1);


				int index114_36 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_36);
				if (s >= 0) return s;
				break;
			case 37:
				int LA114_37 = input.LA(1);


				int index114_37 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_37);
				if (s >= 0) return s;
				break;
			case 38:
				int LA114_38 = input.LA(1);


				int index114_38 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_38);
				if (s >= 0) return s;
				break;
			case 39:
				int LA114_39 = input.LA(1);


				int index114_39 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_39);
				if (s >= 0) return s;
				break;
			case 40:
				int LA114_40 = input.LA(1);


				int index114_40 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_40);
				if (s >= 0) return s;
				break;
			case 41:
				int LA114_41 = input.LA(1);


				int index114_41 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_41);
				if (s >= 0) return s;
				break;
			case 42:
				int LA114_42 = input.LA(1);


				int index114_42 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_42);
				if (s >= 0) return s;
				break;
			case 43:
				int LA114_43 = input.LA(1);


				int index114_43 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_43);
				if (s >= 0) return s;
				break;
			case 44:
				int LA114_44 = input.LA(1);


				int index114_44 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_44);
				if (s >= 0) return s;
				break;
			case 45:
				int LA114_45 = input.LA(1);


				int index114_45 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_45);
				if (s >= 0) return s;
				break;
			case 46:
				int LA114_46 = input.LA(1);


				int index114_46 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_46);
				if (s >= 0) return s;
				break;
			case 47:
				int LA114_47 = input.LA(1);


				int index114_47 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_47);
				if (s >= 0) return s;
				break;
			case 48:
				int LA114_48 = input.LA(1);


				int index114_48 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_48);
				if (s >= 0) return s;
				break;
			case 49:
				int LA114_49 = input.LA(1);


				int index114_49 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_49);
				if (s >= 0) return s;
				break;
			case 50:
				int LA114_50 = input.LA(1);


				int index114_50 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_50);
				if (s >= 0) return s;
				break;
			case 51:
				int LA114_51 = input.LA(1);


				int index114_51 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_51);
				if (s >= 0) return s;
				break;
			case 52:
				int LA114_52 = input.LA(1);


				int index114_52 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_52);
				if (s >= 0) return s;
				break;
			case 53:
				int LA114_53 = input.LA(1);


				int index114_53 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_53);
				if (s >= 0) return s;
				break;
			case 54:
				int LA114_54 = input.LA(1);


				int index114_54 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_54);
				if (s >= 0) return s;
				break;
			case 55:
				int LA114_55 = input.LA(1);


				int index114_55 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_55);
				if (s >= 0) return s;
				break;
			case 56:
				int LA114_56 = input.LA(1);


				int index114_56 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_56);
				if (s >= 0) return s;
				break;
			case 57:
				int LA114_57 = input.LA(1);


				int index114_57 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_57);
				if (s >= 0) return s;
				break;
			case 58:
				int LA114_58 = input.LA(1);


				int index114_58 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_58);
				if (s >= 0) return s;
				break;
			case 59:
				int LA114_59 = input.LA(1);


				int index114_59 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_59);
				if (s >= 0) return s;
				break;
			case 60:
				int LA114_60 = input.LA(1);


				int index114_60 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_60);
				if (s >= 0) return s;
				break;
			case 61:
				int LA114_61 = input.LA(1);


				int index114_61 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_61);
				if (s >= 0) return s;
				break;
			case 62:
				int LA114_62 = input.LA(1);


				int index114_62 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_62);
				if (s >= 0) return s;
				break;
			case 63:
				int LA114_63 = input.LA(1);


				int index114_63 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_63);
				if (s >= 0) return s;
				break;
			case 64:
				int LA114_64 = input.LA(1);


				int index114_64 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_64);
				if (s >= 0) return s;
				break;
			case 65:
				int LA114_65 = input.LA(1);


				int index114_65 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_65);
				if (s >= 0) return s;
				break;
			case 66:
				int LA114_66 = input.LA(1);


				int index114_66 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_66);
				if (s >= 0) return s;
				break;
			case 67:
				int LA114_67 = input.LA(1);


				int index114_67 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_67);
				if (s >= 0) return s;
				break;
			case 68:
				int LA114_68 = input.LA(1);


				int index114_68 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_68);
				if (s >= 0) return s;
				break;
			case 69:
				int LA114_69 = input.LA(1);


				int index114_69 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_69);
				if (s >= 0) return s;
				break;
			case 70:
				int LA114_70 = input.LA(1);


				int index114_70 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_70);
				if (s >= 0) return s;
				break;
			case 71:
				int LA114_71 = input.LA(1);


				int index114_71 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_71);
				if (s >= 0) return s;
				break;
			case 72:
				int LA114_72 = input.LA(1);


				int index114_72 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_72);
				if (s >= 0) return s;
				break;
			case 73:
				int LA114_73 = input.LA(1);


				int index114_73 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_73);
				if (s >= 0) return s;
				break;
			case 74:
				int LA114_74 = input.LA(1);


				int index114_74 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_74);
				if (s >= 0) return s;
				break;
			case 75:
				int LA114_75 = input.LA(1);


				int index114_75 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_75);
				if (s >= 0) return s;
				break;
			case 76:
				int LA114_76 = input.LA(1);


				int index114_76 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_76);
				if (s >= 0) return s;
				break;
			case 77:
				int LA114_77 = input.LA(1);


				int index114_77 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_77);
				if (s >= 0) return s;
				break;
			case 78:
				int LA114_78 = input.LA(1);


				int index114_78 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_78);
				if (s >= 0) return s;
				break;
			case 79:
				int LA114_79 = input.LA(1);


				int index114_79 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_79);
				if (s >= 0) return s;
				break;
			case 80:
				int LA114_80 = input.LA(1);


				int index114_80 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_80);
				if (s >= 0) return s;
				break;
			case 81:
				int LA114_81 = input.LA(1);


				int index114_81 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_81);
				if (s >= 0) return s;
				break;
			case 82:
				int LA114_82 = input.LA(1);


				int index114_82 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_82);
				if (s >= 0) return s;
				break;
			case 83:
				int LA114_83 = input.LA(1);


				int index114_83 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_83);
				if (s >= 0) return s;
				break;
			case 84:
				int LA114_84 = input.LA(1);


				int index114_84 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_84);
				if (s >= 0) return s;
				break;
			case 85:
				int LA114_85 = input.LA(1);


				int index114_85 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_85);
				if (s >= 0) return s;
				break;
			case 86:
				int LA114_86 = input.LA(1);


				int index114_86 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_86);
				if (s >= 0) return s;
				break;
			case 87:
				int LA114_87 = input.LA(1);


				int index114_87 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_87);
				if (s >= 0) return s;
				break;
			case 88:
				int LA114_88 = input.LA(1);


				int index114_88 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_88);
				if (s >= 0) return s;
				break;
			case 89:
				int LA114_89 = input.LA(1);


				int index114_89 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_89);
				if (s >= 0) return s;
				break;
			case 90:
				int LA114_90 = input.LA(1);


				int index114_90 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_90);
				if (s >= 0) return s;
				break;
			case 91:
				int LA114_91 = input.LA(1);


				int index114_91 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_91);
				if (s >= 0) return s;
				break;
			case 92:
				int LA114_92 = input.LA(1);


				int index114_92 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_92);
				if (s >= 0) return s;
				break;
			case 93:
				int LA114_93 = input.LA(1);


				int index114_93 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_93);
				if (s >= 0) return s;
				break;
			case 94:
				int LA114_94 = input.LA(1);


				int index114_94 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_94);
				if (s >= 0) return s;
				break;
			case 95:
				int LA114_95 = input.LA(1);


				int index114_95 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_95);
				if (s >= 0) return s;
				break;
			case 96:
				int LA114_96 = input.LA(1);


				int index114_96 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_96);
				if (s >= 0) return s;
				break;
			case 97:
				int LA114_97 = input.LA(1);


				int index114_97 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_97);
				if (s >= 0) return s;
				break;
			case 98:
				int LA114_98 = input.LA(1);


				int index114_98 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_98);
				if (s >= 0) return s;
				break;
			case 99:
				int LA114_99 = input.LA(1);


				int index114_99 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_99);
				if (s >= 0) return s;
				break;
			case 100:
				int LA114_100 = input.LA(1);


				int index114_100 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_100);
				if (s >= 0) return s;
				break;
			case 101:
				int LA114_101 = input.LA(1);


				int index114_101 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_101);
				if (s >= 0) return s;
				break;
			case 102:
				int LA114_102 = input.LA(1);


				int index114_102 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_102);
				if (s >= 0) return s;
				break;
			case 103:
				int LA114_103 = input.LA(1);


				int index114_103 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_103);
				if (s >= 0) return s;
				break;
			case 104:
				int LA114_104 = input.LA(1);


				int index114_104 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_104);
				if (s >= 0) return s;
				break;
			case 105:
				int LA114_105 = input.LA(1);


				int index114_105 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_105);
				if (s >= 0) return s;
				break;
			case 106:
				int LA114_106 = input.LA(1);


				int index114_106 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_106);
				if (s >= 0) return s;
				break;
			case 107:
				int LA114_107 = input.LA(1);


				int index114_107 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_107);
				if (s >= 0) return s;
				break;
			case 108:
				int LA114_108 = input.LA(1);


				int index114_108 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_108);
				if (s >= 0) return s;
				break;
			case 109:
				int LA114_109 = input.LA(1);


				int index114_109 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_109);
				if (s >= 0) return s;
				break;
			case 110:
				int LA114_110 = input.LA(1);


				int index114_110 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_110);
				if (s >= 0) return s;
				break;
			case 111:
				int LA114_111 = input.LA(1);


				int index114_111 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_111);
				if (s >= 0) return s;
				break;
			case 112:
				int LA114_112 = input.LA(1);


				int index114_112 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_112);
				if (s >= 0) return s;
				break;
			case 113:
				int LA114_113 = input.LA(1);


				int index114_113 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_113);
				if (s >= 0) return s;
				break;
			case 114:
				int LA114_114 = input.LA(1);


				int index114_114 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_114);
				if (s >= 0) return s;
				break;
			case 115:
				int LA114_115 = input.LA(1);


				int index114_115 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_115);
				if (s >= 0) return s;
				break;
			case 116:
				int LA114_116 = input.LA(1);


				int index114_116 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_116);
				if (s >= 0) return s;
				break;
			case 117:
				int LA114_117 = input.LA(1);


				int index114_117 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_117);
				if (s >= 0) return s;
				break;
			case 118:
				int LA114_118 = input.LA(1);


				int index114_118 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_118);
				if (s >= 0) return s;
				break;
			case 119:
				int LA114_119 = input.LA(1);


				int index114_119 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_119);
				if (s >= 0) return s;
				break;
			case 120:
				int LA114_120 = input.LA(1);


				int index114_120 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_120);
				if (s >= 0) return s;
				break;
			case 121:
				int LA114_121 = input.LA(1);


				int index114_121 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_121);
				if (s >= 0) return s;
				break;
			case 122:
				int LA114_122 = input.LA(1);


				int index114_122 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_122);
				if (s >= 0) return s;
				break;
			case 123:
				int LA114_123 = input.LA(1);


				int index114_123 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_123);
				if (s >= 0) return s;
				break;
			case 124:
				int LA114_124 = input.LA(1);


				int index114_124 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_124);
				if (s >= 0) return s;
				break;
			case 125:
				int LA114_125 = input.LA(1);


				int index114_125 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_125);
				if (s >= 0) return s;
				break;
			case 126:
				int LA114_126 = input.LA(1);


				int index114_126 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_126);
				if (s >= 0) return s;
				break;
			case 127:
				int LA114_127 = input.LA(1);


				int index114_127 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_127);
				if (s >= 0) return s;
				break;
			case 128:
				int LA114_128 = input.LA(1);


				int index114_128 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_128);
				if (s >= 0) return s;
				break;
			case 129:
				int LA114_129 = input.LA(1);


				int index114_129 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_129);
				if (s >= 0) return s;
				break;
			case 130:
				int LA114_130 = input.LA(1);


				int index114_130 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_130);
				if (s >= 0) return s;
				break;
			case 131:
				int LA114_131 = input.LA(1);


				int index114_131 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_131);
				if (s >= 0) return s;
				break;
			case 132:
				int LA114_132 = input.LA(1);


				int index114_132 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_132);
				if (s >= 0) return s;
				break;
			case 133:
				int LA114_133 = input.LA(1);


				int index114_133 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_133);
				if (s >= 0) return s;
				break;
			case 134:
				int LA114_134 = input.LA(1);


				int index114_134 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_134);
				if (s >= 0) return s;
				break;
			case 135:
				int LA114_135 = input.LA(1);


				int index114_135 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_135);
				if (s >= 0) return s;
				break;
			case 136:
				int LA114_136 = input.LA(1);


				int index114_136 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_136);
				if (s >= 0) return s;
				break;
			case 137:
				int LA114_137 = input.LA(1);


				int index114_137 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_137);
				if (s >= 0) return s;
				break;
			case 138:
				int LA114_138 = input.LA(1);


				int index114_138 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_138);
				if (s >= 0) return s;
				break;
			case 139:
				int LA114_139 = input.LA(1);


				int index114_139 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_139);
				if (s >= 0) return s;
				break;
			case 140:
				int LA114_140 = input.LA(1);


				int index114_140 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_140);
				if (s >= 0) return s;
				break;
			case 141:
				int LA114_141 = input.LA(1);


				int index114_141 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_141);
				if (s >= 0) return s;
				break;
			case 142:
				int LA114_142 = input.LA(1);


				int index114_142 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_142);
				if (s >= 0) return s;
				break;
			case 143:
				int LA114_143 = input.LA(1);


				int index114_143 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_143);
				if (s >= 0) return s;
				break;
			case 144:
				int LA114_144 = input.LA(1);


				int index114_144 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_144);
				if (s >= 0) return s;
				break;
			case 145:
				int LA114_145 = input.LA(1);


				int index114_145 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_145);
				if (s >= 0) return s;
				break;
			case 146:
				int LA114_146 = input.LA(1);


				int index114_146 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_146);
				if (s >= 0) return s;
				break;
			case 147:
				int LA114_147 = input.LA(1);


				int index114_147 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_147);
				if (s >= 0) return s;
				break;
			case 148:
				int LA114_148 = input.LA(1);


				int index114_148 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_148);
				if (s >= 0) return s;
				break;
			case 149:
				int LA114_149 = input.LA(1);


				int index114_149 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_149);
				if (s >= 0) return s;
				break;
			case 150:
				int LA114_150 = input.LA(1);


				int index114_150 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_150);
				if (s >= 0) return s;
				break;
			case 151:
				int LA114_151 = input.LA(1);


				int index114_151 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_151);
				if (s >= 0) return s;
				break;
			case 152:
				int LA114_152 = input.LA(1);


				int index114_152 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_152);
				if (s >= 0) return s;
				break;
			case 153:
				int LA114_153 = input.LA(1);


				int index114_153 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_153);
				if (s >= 0) return s;
				break;
			case 154:
				int LA114_154 = input.LA(1);


				int index114_154 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_154);
				if (s >= 0) return s;
				break;
			case 155:
				int LA114_155 = input.LA(1);


				int index114_155 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_155);
				if (s >= 0) return s;
				break;
			case 156:
				int LA114_156 = input.LA(1);


				int index114_156 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_156);
				if (s >= 0) return s;
				break;
			case 157:
				int LA114_157 = input.LA(1);


				int index114_157 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_157);
				if (s >= 0) return s;
				break;
			case 158:
				int LA114_158 = input.LA(1);


				int index114_158 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_158);
				if (s >= 0) return s;
				break;
			case 159:
				int LA114_159 = input.LA(1);


				int index114_159 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_159);
				if (s >= 0) return s;
				break;
			case 160:
				int LA114_160 = input.LA(1);


				int index114_160 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_160);
				if (s >= 0) return s;
				break;
			case 161:
				int LA114_161 = input.LA(1);


				int index114_161 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_161);
				if (s >= 0) return s;
				break;
			case 162:
				int LA114_162 = input.LA(1);


				int index114_162 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_162);
				if (s >= 0) return s;
				break;
			case 163:
				int LA114_163 = input.LA(1);


				int index114_163 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_163);
				if (s >= 0) return s;
				break;
			case 164:
				int LA114_164 = input.LA(1);


				int index114_164 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_164);
				if (s >= 0) return s;
				break;
			case 165:
				int LA114_165 = input.LA(1);


				int index114_165 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_165);
				if (s >= 0) return s;
				break;
			case 166:
				int LA114_166 = input.LA(1);


				int index114_166 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_166);
				if (s >= 0) return s;
				break;
			case 167:
				int LA114_167 = input.LA(1);


				int index114_167 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_167);
				if (s >= 0) return s;
				break;
			case 168:
				int LA114_168 = input.LA(1);


				int index114_168 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_168);
				if (s >= 0) return s;
				break;
			case 169:
				int LA114_169 = input.LA(1);


				int index114_169 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_169);
				if (s >= 0) return s;
				break;
			case 170:
				int LA114_170 = input.LA(1);


				int index114_170 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_170);
				if (s >= 0) return s;
				break;
			case 171:
				int LA114_171 = input.LA(1);


				int index114_171 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_171);
				if (s >= 0) return s;
				break;
			case 172:
				int LA114_172 = input.LA(1);


				int index114_172 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_172);
				if (s >= 0) return s;
				break;
			case 173:
				int LA114_173 = input.LA(1);


				int index114_173 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_173);
				if (s >= 0) return s;
				break;
			case 174:
				int LA114_174 = input.LA(1);


				int index114_174 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_174);
				if (s >= 0) return s;
				break;
			case 175:
				int LA114_175 = input.LA(1);


				int index114_175 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_175);
				if (s >= 0) return s;
				break;
			case 176:
				int LA114_176 = input.LA(1);


				int index114_176 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_176);
				if (s >= 0) return s;
				break;
			case 177:
				int LA114_177 = input.LA(1);


				int index114_177 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_177);
				if (s >= 0) return s;
				break;
			case 178:
				int LA114_178 = input.LA(1);


				int index114_178 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_178);
				if (s >= 0) return s;
				break;
			case 179:
				int LA114_179 = input.LA(1);


				int index114_179 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_179);
				if (s >= 0) return s;
				break;
			case 180:
				int LA114_180 = input.LA(1);


				int index114_180 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_180);
				if (s >= 0) return s;
				break;
			case 181:
				int LA114_181 = input.LA(1);


				int index114_181 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_181);
				if (s >= 0) return s;
				break;
			case 182:
				int LA114_182 = input.LA(1);


				int index114_182 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_182);
				if (s >= 0) return s;
				break;
			case 183:
				int LA114_183 = input.LA(1);


				int index114_183 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_183);
				if (s >= 0) return s;
				break;
			case 184:
				int LA114_184 = input.LA(1);


				int index114_184 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_184);
				if (s >= 0) return s;
				break;
			case 185:
				int LA114_185 = input.LA(1);


				int index114_185 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_185);
				if (s >= 0) return s;
				break;
			case 186:
				int LA114_186 = input.LA(1);


				int index114_186 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_186);
				if (s >= 0) return s;
				break;
			case 187:
				int LA114_187 = input.LA(1);


				int index114_187 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_187);
				if (s >= 0) return s;
				break;
			case 188:
				int LA114_188 = input.LA(1);


				int index114_188 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_188);
				if (s >= 0) return s;
				break;
			case 189:
				int LA114_189 = input.LA(1);


				int index114_189 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_189);
				if (s >= 0) return s;
				break;
			case 190:
				int LA114_190 = input.LA(1);


				int index114_190 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_190);
				if (s >= 0) return s;
				break;
			case 191:
				int LA114_191 = input.LA(1);


				int index114_191 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_191);
				if (s >= 0) return s;
				break;
			case 192:
				int LA114_192 = input.LA(1);


				int index114_192 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_192);
				if (s >= 0) return s;
				break;
			case 193:
				int LA114_193 = input.LA(1);


				int index114_193 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_193);
				if (s >= 0) return s;
				break;
			case 194:
				int LA114_194 = input.LA(1);


				int index114_194 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_194);
				if (s >= 0) return s;
				break;
			case 195:
				int LA114_195 = input.LA(1);


				int index114_195 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_195);
				if (s >= 0) return s;
				break;
			case 196:
				int LA114_196 = input.LA(1);


				int index114_196 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_196);
				if (s >= 0) return s;
				break;
			case 197:
				int LA114_197 = input.LA(1);


				int index114_197 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_197);
				if (s >= 0) return s;
				break;
			case 198:
				int LA114_198 = input.LA(1);


				int index114_198 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_198);
				if (s >= 0) return s;
				break;
			case 199:
				int LA114_199 = input.LA(1);


				int index114_199 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_199);
				if (s >= 0) return s;
				break;
			case 200:
				int LA114_200 = input.LA(1);


				int index114_200 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_200);
				if (s >= 0) return s;
				break;
			case 201:
				int LA114_201 = input.LA(1);


				int index114_201 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_201);
				if (s >= 0) return s;
				break;
			case 202:
				int LA114_202 = input.LA(1);


				int index114_202 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_202);
				if (s >= 0) return s;
				break;
			case 203:
				int LA114_203 = input.LA(1);


				int index114_203 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_203);
				if (s >= 0) return s;
				break;
			case 204:
				int LA114_204 = input.LA(1);


				int index114_204 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_204);
				if (s >= 0) return s;
				break;
			case 205:
				int LA114_205 = input.LA(1);


				int index114_205 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_205);
				if (s >= 0) return s;
				break;
			case 206:
				int LA114_206 = input.LA(1);


				int index114_206 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_206);
				if (s >= 0) return s;
				break;
			case 207:
				int LA114_207 = input.LA(1);


				int index114_207 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_207);
				if (s >= 0) return s;
				break;
			case 208:
				int LA114_208 = input.LA(1);


				int index114_208 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_208);
				if (s >= 0) return s;
				break;
			case 209:
				int LA114_209 = input.LA(1);


				int index114_209 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_209);
				if (s >= 0) return s;
				break;
			case 210:
				int LA114_210 = input.LA(1);


				int index114_210 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_210);
				if (s >= 0) return s;
				break;
			case 211:
				int LA114_211 = input.LA(1);


				int index114_211 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_211);
				if (s >= 0) return s;
				break;
			case 212:
				int LA114_212 = input.LA(1);


				int index114_212 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_212);
				if (s >= 0) return s;
				break;
			case 213:
				int LA114_213 = input.LA(1);


				int index114_213 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_213);
				if (s >= 0) return s;
				break;
			case 214:
				int LA114_214 = input.LA(1);


				int index114_214 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_214);
				if (s >= 0) return s;
				break;
			case 215:
				int LA114_215 = input.LA(1);


				int index114_215 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_215);
				if (s >= 0) return s;
				break;
			case 216:
				int LA114_216 = input.LA(1);


				int index114_216 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_216);
				if (s >= 0) return s;
				break;
			case 217:
				int LA114_217 = input.LA(1);


				int index114_217 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_217);
				if (s >= 0) return s;
				break;
			case 218:
				int LA114_218 = input.LA(1);


				int index114_218 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_218);
				if (s >= 0) return s;
				break;
			case 219:
				int LA114_219 = input.LA(1);


				int index114_219 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_219);
				if (s >= 0) return s;
				break;
			case 220:
				int LA114_220 = input.LA(1);


				int index114_220 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_220);
				if (s >= 0) return s;
				break;
			case 221:
				int LA114_221 = input.LA(1);


				int index114_221 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_221);
				if (s >= 0) return s;
				break;
			case 222:
				int LA114_222 = input.LA(1);


				int index114_222 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_222);
				if (s >= 0) return s;
				break;
			case 223:
				int LA114_223 = input.LA(1);


				int index114_223 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_223);
				if (s >= 0) return s;
				break;
			case 224:
				int LA114_224 = input.LA(1);


				int index114_224 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_224);
				if (s >= 0) return s;
				break;
			case 225:
				int LA114_225 = input.LA(1);


				int index114_225 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_225);
				if (s >= 0) return s;
				break;
			case 226:
				int LA114_226 = input.LA(1);


				int index114_226 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_226);
				if (s >= 0) return s;
				break;
			case 227:
				int LA114_227 = input.LA(1);


				int index114_227 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_227);
				if (s >= 0) return s;
				break;
			case 228:
				int LA114_228 = input.LA(1);


				int index114_228 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_228);
				if (s >= 0) return s;
				break;
			case 229:
				int LA114_229 = input.LA(1);


				int index114_229 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_229);
				if (s >= 0) return s;
				break;
			case 230:
				int LA114_230 = input.LA(1);


				int index114_230 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_230);
				if (s >= 0) return s;
				break;
			case 231:
				int LA114_231 = input.LA(1);


				int index114_231 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_231);
				if (s >= 0) return s;
				break;
			case 232:
				int LA114_232 = input.LA(1);


				int index114_232 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_232);
				if (s >= 0) return s;
				break;
			case 233:
				int LA114_233 = input.LA(1);


				int index114_233 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_233);
				if (s >= 0) return s;
				break;
			case 234:
				int LA114_234 = input.LA(1);


				int index114_234 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_234);
				if (s >= 0) return s;
				break;
			case 235:
				int LA114_235 = input.LA(1);


				int index114_235 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_235);
				if (s >= 0) return s;
				break;
			case 236:
				int LA114_236 = input.LA(1);


				int index114_236 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_236);
				if (s >= 0) return s;
				break;
			case 237:
				int LA114_237 = input.LA(1);


				int index114_237 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_237);
				if (s >= 0) return s;
				break;
			case 238:
				int LA114_238 = input.LA(1);


				int index114_238 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_238);
				if (s >= 0) return s;
				break;
			case 239:
				int LA114_239 = input.LA(1);


				int index114_239 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_239);
				if (s >= 0) return s;
				break;
			case 240:
				int LA114_240 = input.LA(1);


				int index114_240 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_240);
				if (s >= 0) return s;
				break;
			case 241:
				int LA114_241 = input.LA(1);


				int index114_241 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_241);
				if (s >= 0) return s;
				break;
			case 242:
				int LA114_242 = input.LA(1);


				int index114_242 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_242);
				if (s >= 0) return s;
				break;
			case 243:
				int LA114_243 = input.LA(1);


				int index114_243 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_243);
				if (s >= 0) return s;
				break;
			case 244:
				int LA114_244 = input.LA(1);


				int index114_244 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_244);
				if (s >= 0) return s;
				break;
			case 245:
				int LA114_245 = input.LA(1);


				int index114_245 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_245);
				if (s >= 0) return s;
				break;
			case 246:
				int LA114_246 = input.LA(1);


				int index114_246 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_246);
				if (s >= 0) return s;
				break;
			case 247:
				int LA114_247 = input.LA(1);


				int index114_247 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_247);
				if (s >= 0) return s;
				break;
			case 248:
				int LA114_248 = input.LA(1);


				int index114_248 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_248);
				if (s >= 0) return s;
				break;
			case 249:
				int LA114_249 = input.LA(1);


				int index114_249 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_249);
				if (s >= 0) return s;
				break;
			case 250:
				int LA114_250 = input.LA(1);


				int index114_250 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_250);
				if (s >= 0) return s;
				break;
			case 251:
				int LA114_251 = input.LA(1);


				int index114_251 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_251);
				if (s >= 0) return s;
				break;
			case 252:
				int LA114_252 = input.LA(1);


				int index114_252 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_252);
				if (s >= 0) return s;
				break;
			case 253:
				int LA114_253 = input.LA(1);


				int index114_253 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_253);
				if (s >= 0) return s;
				break;
			case 254:
				int LA114_254 = input.LA(1);


				int index114_254 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_254);
				if (s >= 0) return s;
				break;
			case 255:
				int LA114_255 = input.LA(1);


				int index114_255 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_255);
				if (s >= 0) return s;
				break;
			case 256:
				int LA114_256 = input.LA(1);


				int index114_256 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_256);
				if (s >= 0) return s;
				break;
			case 257:
				int LA114_257 = input.LA(1);


				int index114_257 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_257);
				if (s >= 0) return s;
				break;
			case 258:
				int LA114_258 = input.LA(1);


				int index114_258 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_258);
				if (s >= 0) return s;
				break;
			case 259:
				int LA114_259 = input.LA(1);


				int index114_259 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_259);
				if (s >= 0) return s;
				break;
			case 260:
				int LA114_260 = input.LA(1);


				int index114_260 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_260);
				if (s >= 0) return s;
				break;
			case 261:
				int LA114_261 = input.LA(1);


				int index114_261 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_261);
				if (s >= 0) return s;
				break;
			case 262:
				int LA114_262 = input.LA(1);


				int index114_262 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_262);
				if (s >= 0) return s;
				break;
			case 263:
				int LA114_263 = input.LA(1);


				int index114_263 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_263);
				if (s >= 0) return s;
				break;
			case 264:
				int LA114_264 = input.LA(1);


				int index114_264 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_264);
				if (s >= 0) return s;
				break;
			case 265:
				int LA114_265 = input.LA(1);


				int index114_265 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_265);
				if (s >= 0) return s;
				break;
			case 266:
				int LA114_266 = input.LA(1);


				int index114_266 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_266);
				if (s >= 0) return s;
				break;
			case 267:
				int LA114_267 = input.LA(1);


				int index114_267 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_267);
				if (s >= 0) return s;
				break;
			case 268:
				int LA114_268 = input.LA(1);


				int index114_268 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_268);
				if (s >= 0) return s;
				break;
			case 269:
				int LA114_269 = input.LA(1);


				int index114_269 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_269);
				if (s >= 0) return s;
				break;
			case 270:
				int LA114_270 = input.LA(1);


				int index114_270 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_270);
				if (s >= 0) return s;
				break;
			case 271:
				int LA114_271 = input.LA(1);


				int index114_271 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_271);
				if (s >= 0) return s;
				break;
			case 272:
				int LA114_272 = input.LA(1);


				int index114_272 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_272);
				if (s >= 0) return s;
				break;
			case 273:
				int LA114_273 = input.LA(1);


				int index114_273 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_273);
				if (s >= 0) return s;
				break;
			case 274:
				int LA114_274 = input.LA(1);


				int index114_274 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_274);
				if (s >= 0) return s;
				break;
			case 275:
				int LA114_275 = input.LA(1);


				int index114_275 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_275);
				if (s >= 0) return s;
				break;
			case 276:
				int LA114_276 = input.LA(1);


				int index114_276 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_276);
				if (s >= 0) return s;
				break;
			case 277:
				int LA114_277 = input.LA(1);


				int index114_277 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_277);
				if (s >= 0) return s;
				break;
			case 278:
				int LA114_278 = input.LA(1);


				int index114_278 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_278);
				if (s >= 0) return s;
				break;
			case 279:
				int LA114_279 = input.LA(1);


				int index114_279 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_279);
				if (s >= 0) return s;
				break;
			case 280:
				int LA114_280 = input.LA(1);


				int index114_280 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_280);
				if (s >= 0) return s;
				break;
			case 281:
				int LA114_281 = input.LA(1);


				int index114_281 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_281);
				if (s >= 0) return s;
				break;
			case 282:
				int LA114_282 = input.LA(1);


				int index114_282 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_282);
				if (s >= 0) return s;
				break;
			case 283:
				int LA114_283 = input.LA(1);


				int index114_283 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_283);
				if (s >= 0) return s;
				break;
			case 284:
				int LA114_284 = input.LA(1);


				int index114_284 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_284);
				if (s >= 0) return s;
				break;
			case 285:
				int LA114_285 = input.LA(1);


				int index114_285 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_285);
				if (s >= 0) return s;
				break;
			case 286:
				int LA114_286 = input.LA(1);


				int index114_286 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_286);
				if (s >= 0) return s;
				break;
			case 287:
				int LA114_287 = input.LA(1);


				int index114_287 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_287);
				if (s >= 0) return s;
				break;
			case 288:
				int LA114_288 = input.LA(1);


				int index114_288 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_288);
				if (s >= 0) return s;
				break;
			case 289:
				int LA114_289 = input.LA(1);


				int index114_289 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_289);
				if (s >= 0) return s;
				break;
			case 290:
				int LA114_290 = input.LA(1);


				int index114_290 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_290);
				if (s >= 0) return s;
				break;
			case 291:
				int LA114_291 = input.LA(1);


				int index114_291 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_291);
				if (s >= 0) return s;
				break;
			case 292:
				int LA114_292 = input.LA(1);


				int index114_292 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_292);
				if (s >= 0) return s;
				break;
			case 293:
				int LA114_293 = input.LA(1);


				int index114_293 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_293);
				if (s >= 0) return s;
				break;
			case 294:
				int LA114_294 = input.LA(1);


				int index114_294 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_294);
				if (s >= 0) return s;
				break;
			case 295:
				int LA114_295 = input.LA(1);


				int index114_295 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_295);
				if (s >= 0) return s;
				break;
			case 296:
				int LA114_296 = input.LA(1);


				int index114_296 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_296);
				if (s >= 0) return s;
				break;
			case 297:
				int LA114_297 = input.LA(1);


				int index114_297 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_297);
				if (s >= 0) return s;
				break;
			case 298:
				int LA114_298 = input.LA(1);


				int index114_298 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_298);
				if (s >= 0) return s;
				break;
			case 299:
				int LA114_299 = input.LA(1);


				int index114_299 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_299);
				if (s >= 0) return s;
				break;
			case 300:
				int LA114_300 = input.LA(1);


				int index114_300 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_300);
				if (s >= 0) return s;
				break;
			case 301:
				int LA114_301 = input.LA(1);


				int index114_301 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_301);
				if (s >= 0) return s;
				break;
			case 302:
				int LA114_302 = input.LA(1);


				int index114_302 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_302);
				if (s >= 0) return s;
				break;
			case 303:
				int LA114_303 = input.LA(1);


				int index114_303 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_303);
				if (s >= 0) return s;
				break;
			case 304:
				int LA114_304 = input.LA(1);


				int index114_304 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_304);
				if (s >= 0) return s;
				break;
			case 305:
				int LA114_305 = input.LA(1);


				int index114_305 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_305);
				if (s >= 0) return s;
				break;
			case 306:
				int LA114_306 = input.LA(1);


				int index114_306 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_306);
				if (s >= 0) return s;
				break;
			case 307:
				int LA114_307 = input.LA(1);


				int index114_307 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_307);
				if (s >= 0) return s;
				break;
			case 308:
				int LA114_308 = input.LA(1);


				int index114_308 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_308);
				if (s >= 0) return s;
				break;
			case 309:
				int LA114_309 = input.LA(1);


				int index114_309 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_309);
				if (s >= 0) return s;
				break;
			case 310:
				int LA114_310 = input.LA(1);


				int index114_310 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_310);
				if (s >= 0) return s;
				break;
			case 311:
				int LA114_311 = input.LA(1);


				int index114_311 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_311);
				if (s >= 0) return s;
				break;
			case 312:
				int LA114_312 = input.LA(1);


				int index114_312 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvalPredicate(index_hint_stack.Peek().namesOptional == true, "$index_hint::namesOptional == true"))) {s = 313;}

				else if ((true)) {s = 314;}


				input.Seek(index114_312);
				if (s >= 0) return s;
				break;
		}
		if (state.backtracking > 0) {state.failed=true; return -1;}
		NoViableAltException nvae = new NoViableAltException(dfa.Description, 114, _s, input);
		dfa.Error(nvae);
		throw nvae;
	}
	private class DFA124 : DFA
	{
		private const string DFA124_eotS =
			"\x17D\xFFFF";
		private const string DFA124_eofS =
			"\x17D\xFFFF";
		private const string DFA124_minS =
			"\x1\x5\x1\x0\x17B\xFFFF";
		private const string DFA124_maxS =
			"\x1\x26F\x1\x0\x17B\xFFFF";
		private const string DFA124_acceptS =
			"\x2\xFFFF\x2\x1\x1\x2\x178\xFFFF";
		private const string DFA124_specialS =
			"\x1\x0\x1\x1\x17B\xFFFF}>";
		private static readonly string[] DFA124_transitionS =
			{
				"\x1\x4\x1\xFFFF\x5\x4\x1\x3\x3\xFFFF\x1\x1\x2\xFFFF\x1\x4\x2\xFFFF\x7"+
				"\x4\x1\xFFFF\x1\x4\x2\xFFFF\x4\x4\x1\xFFFF\x1\x4\x2\xFFFF\x3\x4\x1\xFFFF"+
				"\x3\x4\x1\xFFFF\x1\x4\x1\xFFFF\x2\x4\x2\xFFFF\x1\x4\x1\xFFFF\x2\x4\x1"+
				"\xFFFF\x2\x4\x1\xFFFF\x1\x4\x1\xFFFF\x8\x4\x1\xFFFF\x1\x4\x1\xFFFF\x1"+
				"\x4\x1\xFFFF\x6\x4\x1\xFFFF\x2\x4\x1\xFFFF\x2\x4\x1\xFFFF\x1\x4\x1\xFFFF"+
				"\x2\x4\x2\xFFFF\x6\x4\x1\xFFFF\x1\x4\x2\xFFFF\x2\x4\x1\xFFFF\x4\x4\x1"+
				"\xFFFF\x1\x4\x1\xFFFF\x1\x4\x4\xFFFF\x1\x4\x4\xFFFF\x1\x4\x1\xFFFF\x1"+
				"\x4\x3\xFFFF\x1\x4\x2\xFFFF\x4\x4\x4\xFFFF\x1\x4\x4\xFFFF\x3\x4\x3\xFFFF"+
				"\x1\x4\x1\xFFFF\x5\x4\x1\xFFFF\x2\x4\x2\xFFFF\x5\x4\x1\xFFFF\x1\x4\x1"+
				"\xFFFF\x6\x4\x1\xFFFF\x4\x4\x3\xFFFF\x1\x4\x3\xFFFF\x2\x4\x1\xFFFF\x1"+
				"\x4\x1\xFFFF\x6\x4\x2\xFFFF\x1\x4\x2\xFFFF\x4\x4\x1\xFFFF\x2\x4\x1\xFFFF"+
				"\x3\x4\x3\xFFFF\x3\x4\x1\xFFFF\x1\x4\x2\xFFFF\x1\x4\x1\xFFFF\x1\x4\x1"+
				"\xFFFF\x1\x4\x3\xFFFF\x3\x4\x7\xFFFF\x1\x4\x1\xFFFF\x3\x4\x1\xFFFF\x2"+
				"\x4\x4\xFFFF\x1\x4\x1\xFFFF\x3\x4\x3\xFFFF\x2\x4\x1\xFFFF\x1\x4\x2\xFFFF"+
				"\x1\x4\x4\xFFFF\x2\x4\x1\xFFFF\x1\x4\x3\xFFFF\x2\x4\x2\xFFFF\x1\x4\x5"+
				"\xFFFF\xF\x4\x1\xFFFF\x1\x4\x1\xFFFF\x9\x4\x3\xFFFF\x4\x4\x1\xFFFF\x4"+
				"\x4\x2\xFFFF\x3\x4\x1\xFFFF\x1\x4\x1\xFFFF\x1\x4\x1\xFFFF\x7\x4\x1\xFFFF"+
				"\x7\x4\x2\xFFFF\x3\x4\x1\xFFFF\x1\x4\x1\xFFFF\x1\x4\x1\xFFFF\x3\x4\x1"+
				"\xFFFF\x3\x4\x3\xFFFF\x1\x4\x5\xFFFF\x11\x4\x2\xFFFF\x3\x4\x1\xFFFF"+
				"\x1\x4\x1\xFFFF\x4\x4\x1\xFFFF\x3\x4\x8\xFFFF\x5\x4\x2\xFFFF\x3\x4\x1"+
				"\xFFFF\x2\x4\x1\xFFFF\x6\x4\x1\xFFFF\x3\x4\x1\xFFFF\x1\x4\x1\xFFFF\x1"+
				"\x4\x1\xFFFF\x1\x4\x2\xFFFF\x6\x4\x1\xFFFF\x3\x4\x3\xFFFF\x1\x4\x1\xFFFF"+
				"\x1\x4\x4\xFFFF\x6\x4\x1\xFFFF\x1\x4\x1\xFFFF\x4\x4\x1\xFFFF\x2\x4\x1"+
				"\x2\x3\x4\x7\xFFFF\x2\x4\x1\xFFFF\x1\x4\x1\xFFFF\x1\x4\x1\xFFFF\x1\x4"+
				"\x1\xFFFF\x8\x4\x1\xFFFF\xF\x4\x1\xFFFF\x4\x4\x1\xFFFF\x2\x4\x1\xFFFF"+
				"\x4\x4\x5\xFFFF\x2\x4\x1\xFFFF\x9\x4\x1\xFFFF\x4\x4\x2\xFFFF\x1\x4\x2"+
				"\xFFFF\x1\x4\x1\xFFFF\x1\x4\x2\xFFFF\x1\x4\x2\xFFFF\x1\x4\x1\xFFFF\x4"+
				"\x4\x1\xFFFF\x1\x4\x3\xFFFF\x2\x4\x1\xFFFF\x6\x4\x4\xFFFF\x2\x4\x2\xFFFF"+
				"\x2\x4\x1\xFFFF\x1\x4\x4\xFFFF\x1\x4",
				"\x1\xFFFF",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				""
			};

		private static readonly short[] DFA124_eot = DFA.UnpackEncodedString(DFA124_eotS);
		private static readonly short[] DFA124_eof = DFA.UnpackEncodedString(DFA124_eofS);
		private static readonly char[] DFA124_min = DFA.UnpackEncodedStringToUnsignedChars(DFA124_minS);
		private static readonly char[] DFA124_max = DFA.UnpackEncodedStringToUnsignedChars(DFA124_maxS);
		private static readonly short[] DFA124_accept = DFA.UnpackEncodedString(DFA124_acceptS);
		private static readonly short[] DFA124_special = DFA.UnpackEncodedString(DFA124_specialS);
		private static readonly short[][] DFA124_transition;

		static DFA124()
		{
			int numStates = DFA124_transitionS.Length;
			DFA124_transition = new short[numStates][];
			for ( int i=0; i < numStates; i++ )
			{
				DFA124_transition[i] = DFA.UnpackEncodedString(DFA124_transitionS[i]);
			}
		}

		public DFA124( BaseRecognizer recognizer, SpecialStateTransitionHandler specialStateTransition )
			: base(specialStateTransition)
		{
			this.recognizer = recognizer;
			this.decisionNumber = 124;
			this.eot = DFA124_eot;
			this.eof = DFA124_eof;
			this.min = DFA124_min;
			this.max = DFA124_max;
			this.accept = DFA124_accept;
			this.special = DFA124_special;
			this.transition = DFA124_transition;
		}

		public override string Description { get { return "755:26: ( ( subselect_in_expr_rhs )=> subselect_in_expr_rhs | bitwiseOrExpr )"; } }

		public override void Error(NoViableAltException nvae)
		{
			DebugRecognitionException(nvae);
		}
	}

	private int SpecialStateTransition124(DFA dfa, int s, IIntStream _input)
	{
		ITokenStream input = (ITokenStream)_input;
		int _s = s;
		switch (s)
		{
			case 0:
				int LA124_0 = input.LA(1);


				int index124_0 = input.Index;
				input.Rewind();
				s = -1;
				if ((LA124_0==ANY)) {s = 1;}

				else if ((LA124_0==SOME) && (EvaluatePredicate(synpred4_MySQL51Parser_fragment))) {s = 2;}

				else if ((LA124_0==ALL) && (EvaluatePredicate(synpred4_MySQL51Parser_fragment))) {s = 3;}

				else if ((LA124_0==ACTION||(LA124_0>=ADDDATE && LA124_0<=ALGORITHM)||LA124_0==ASCII||(LA124_0>=AT && LA124_0<=BACKUP)||LA124_0==BEGIN||(LA124_0>=BINARY && LA124_0<=BIT)||LA124_0==BITWISE_INVERSION||(LA124_0>=BIT_AND && LA124_0<=BIT_XOR)||(LA124_0>=BLOCK && LA124_0<=BOOLEAN)||LA124_0==BTREE||(LA124_0>=BYTE && LA124_0<=CACHE)||LA124_0==CASCADED||(LA124_0>=CAST && LA124_0<=CHAIN)||(LA124_0>=CHANGED && LA124_0<=CHAR)||LA124_0==CHARSET||(LA124_0>=CHECKSUM && LA124_0<=COLLATION)||LA124_0==COLUMNS||LA124_0==COMMENT||(LA124_0>=COMMIT && LA124_0<=CONCURRENT)||(LA124_0>=CONNECTION && LA124_0<=CONSISTENT)||(LA124_0>=CONTAINS && LA124_0<=CONTEXT)||LA124_0==CONTRIBUTORS||(LA124_0>=COUNT && LA124_0<=CPU)||(LA124_0>=CUBE && LA124_0<=CURRENT_USER)||LA124_0==CURTIME||(LA124_0>=DATA && LA124_0<=DATABASE)||(LA124_0>=DATAFILE && LA124_0<=DATE_ADD)||LA124_0==DATE_SUB||LA124_0==DAY||LA124_0==DEALLOCATE||LA124_0==DEFINER||LA124_0==DELAY_KEY_WRITE||LA124_0==DES_KEY_FILE||(LA124_0>=DIRECTORY && LA124_0<=DISK)||LA124_0==DO||(LA124_0>=DUMPFILE && LA124_0<=DYNAMIC)||LA124_0==ENABLE||(LA124_0>=END && LA124_0<=ENUM)||(LA124_0>=ERRORS && LA124_0<=ESCAPE)||(LA124_0>=EVENT && LA124_0<=EXISTS)||LA124_0==EXPANSION||(LA124_0>=EXTENDED && LA124_0<=FAULTS)||(LA124_0>=FIELDS && LA124_0<=FIXED)||LA124_0==FLUSH||(LA124_0>=FOUND && LA124_0<=FRAC_SECOND)||LA124_0==FULL||(LA124_0>=FUNCTION && LA124_0<=GLOBAL_VARIABLE)||LA124_0==GRANTS||(LA124_0>=GROUP && LA124_0<=HASH)||(LA124_0>=HELP && LA124_0<=HEXA_VALUE)||(LA124_0>=HOST && LA124_0<=HOUR)||(LA124_0>=ID && LA124_0<=IF)||LA124_0==IMPORT||LA124_0==INDEXES||LA124_0==INITIAL_SIZE||LA124_0==INNOBASE||(LA124_0>=INSERT && LA124_0<=INSTALL)||LA124_0==INTERVAL||(LA124_0>=INVOKER && LA124_0<=IPC)||(LA124_0>=ISOLATION && LA124_0<=ISSUER)||LA124_0==KEY_BLOCK_SIZE||(LA124_0>=LABEL && LA124_0<=LAST)||(LA124_0>=LEAVES && LA124_0<=LEFT)||LA124_0==LESS||LA124_0==LEVEL||(LA124_0>=LINESTRING && LA124_0<=LIST)||LA124_0==LOCAL||(LA124_0>=LOCKS && LA124_0<=LOGFILE)||LA124_0==LOGS||(LA124_0>=LPAREN && LA124_0<=MASTER_SSL_KEY)||LA124_0==MASTER_USER||(LA124_0>=MAX && LA124_0<=MEDIUM)||(LA124_0>=MEMORY && LA124_0<=MID)||(LA124_0>=MIGRATE && LA124_0<=MINUTE)||(LA124_0>=MIN_ROWS && LA124_0<=MODE)||LA124_0==MODIFY||LA124_0==MONTH||(LA124_0>=MULTILINESTRING && LA124_0<=NATIONAL)||(LA124_0>=NCHAR && LA124_0<=NONE)||(LA124_0>=NOT_OP && LA124_0<=NO_WAIT)||LA124_0==NULL||LA124_0==NUMBER||(LA124_0>=NVARCHAR && LA124_0<=OLD_PASSWORD)||(LA124_0>=ONE && LA124_0<=OPEN)||LA124_0==OPTIONS||(LA124_0>=OWNER && LA124_0<=POSITION)||(LA124_0>=PREPARE && LA124_0<=PREV)||LA124_0==PRIVILEGES||(LA124_0>=PROCESS && LA124_0<=PROFILES)||(LA124_0>=QUARTER && LA124_0<=QUICK)||(LA124_0>=REBUILD && LA124_0<=REDUNDANT)||(LA124_0>=RELAY_LOG_FILE && LA124_0<=RELAY_THREAD)||(LA124_0>=RELOAD && LA124_0<=REMOVE)||(LA124_0>=REORGANIZE && LA124_0<=REPLICATION)||(LA124_0>=RESET && LA124_0<=RESTORE)||LA124_0==RESUME||LA124_0==RETURNS||LA124_0==RIGHT||(LA124_0>=ROLLBACK && LA124_0<=ROW_FORMAT)||(LA124_0>=RTREE && LA124_0<=SCHEDULE)||LA124_0==SECOND||LA124_0==SECURITY||(LA124_0>=SERIAL && LA124_0<=SESSION_VARIABLE)||LA124_0==SHARE||(LA124_0>=SHUTDOWN && LA124_0<=SLAVE)||(LA124_0>=SNAPSHOT && LA124_0<=SOCKET)||(LA124_0>=SONAME && LA124_0<=SOURCE)||(LA124_0>=SQL_BUFFER_RESULT && LA124_0<=SQL_CACHE)||LA124_0==SQL_NO_CACHE||LA124_0==SQL_THREAD||LA124_0==START||(LA124_0>=STARTS && LA124_0<=STORAGE)||(LA124_0>=STRING && LA124_0<=SYSTEM_USER)||(LA124_0>=TABLES && LA124_0<=TEMPTABLE)||(LA124_0>=TEXT && LA124_0<=THAN)||(LA124_0>=TIME && LA124_0<=TIMESTAMP_DIFF)||(LA124_0>=TRANSACTION && LA124_0<=TRANSACTIONAL)||(LA124_0>=TRIGGERS && LA124_0<=UNDEFINED)||(LA124_0>=UNDOFILE && LA124_0<=UNINSTALL)||LA124_0==UNKNOWN||LA124_0==UNTIL||LA124_0==UPGRADE||LA124_0==USER||LA124_0==USE_FRM||(LA124_0>=UTC_DATE && LA124_0<=VALUE)||LA124_0==VALUE_PLACEHOLDER||(LA124_0>=VARIABLES && LA124_0<=VARIANCE)||(LA124_0>=VAR_POP && LA124_0<=WEEK)||(LA124_0>=WORK && LA124_0<=WRAPPER)||(LA124_0>=X509 && LA124_0<=XA)||LA124_0==YEAR||LA124_0==CONCAT)) {s = 4;}


				input.Seek(index124_0);
				if (s >= 0) return s;
				break;
			case 1:
				int LA124_1 = input.LA(1);


				int index124_1 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred4_MySQL51Parser_fragment))) {s = 3;}

				else if ((true)) {s = 4;}


				input.Seek(index124_1);
				if (s >= 0) return s;
				break;
		}
		if (state.backtracking > 0) {state.failed=true; return -1;}
		NoViableAltException nvae = new NoViableAltException(dfa.Description, 124, _s, input);
		dfa.Error(nvae);
		throw nvae;
	}
	private class DFA134 : DFA
	{
		private const string DFA134_eotS =
			"\x1B0\xFFFF";
		private const string DFA134_eofS =
			"\x1\x6\x1AF\xFFFF";
		private const string DFA134_minS =
			"\x1\x5\x1AF\xFFFF";
		private const string DFA134_maxS =
			"\x1\x26F\x1AF\xFFFF";
		private const string DFA134_acceptS =
			"\x1\xFFFF\x1\x1\x2\x2\x1\x3\x1\x4\x1\x5\x1A9\xFFFF";
		private const string DFA134_specialS =
			"\x1B0\xFFFF}>";
		private static readonly string[] DFA134_transitionS =
			{
				"\x1\x6\x1\xFFFF\x5\x6\x3\xFFFF\x5\x6\x1\xFFFF\x8\x6\x1\xFFFF\x2\x6\x1"+
				"\xFFFF\x4\x6\x1\xFFFF\x1\x6\x1\x1\x1\xFFFF\x3\x6\x1\xFFFF\x3\x6\x1\xFFFF"+
				"\x1\x6\x1\xFFFF\x2\x6\x2\xFFFF\x4\x6\x1\xFFFF\x2\x6\x1\xFFFF\x1\x6\x1"+
				"\xFFFF\x8\x6\x1\xFFFF\x3\x6\x1\xFFFF\x6\x6\x1\xFFFF\x2\x6\x1\xFFFF\x2"+
				"\x6\x1\xFFFF\x1\x6\x1\xFFFF\x2\x6\x1\xFFFF\x7\x6\x1\xFFFF\x1\x6\x2\xFFFF"+
				"\x2\x6\x1\xFFFF\x4\x6\x1\xFFFF\x1\x6\x1\xFFFF\x6\x6\x4\xFFFF\x1\x6\x1"+
				"\xFFFF\x1\x6\x1\xFFFF\x1\x6\x1\xFFFF\x1\x6\x2\xFFFF\x4\x6\x4\xFFFF\x1"+
				"\x6\x4\xFFFF\x3\x6\x1\xFFFF\x1\x6\x1\xFFFF\x1\x6\x1\xFFFF\x8\x6\x2\xFFFF"+
				"\x5\x6\x1\xFFFF\x1\x6\x1\xFFFF\x6\x6\x1\xFFFF\x4\x6\x3\xFFFF\x2\x6\x2"+
				"\xFFFF\x4\x6\x1\xFFFF\x6\x6\x2\xFFFF\xA\x6\x1\xFFFF\x9\x6\x1\xFFFF\x1"+
				"\x6\x1\x3\x1\xFFFF\x1\x6\x1\xFFFF\x3\x6\x3\xFFFF\x3\x6\x7\xFFFF\x5\x6"+
				"\x1\x5\x2\x6\x1\xFFFF\x1\x6\x2\xFFFF\x1\x6\x1\xFFFF\x3\x6\x3\xFFFF\x2"+
				"\x6\x1\xFFFF\x4\x6\x1\x4\x1\x6\x2\xFFFF\x2\x6\x1\xFFFF\x1\x6\x2\xFFFF"+
				"\x6\x6\x5\xFFFF\xF\x6\x1\xFFFF\x1\x6\x1\xFFFF\x9\x6\x3\xFFFF\x4\x6\x1"+
				"\xFFFF\x9\x6\x1\xFFFF\x1\x6\x1\xFFFF\x1\x6\x1\xFFFF\xF\x6\x1\x2\x4\x6"+
				"\x1\xFFFF\x3\x6\x1\xFFFF\x7\x6\x3\xFFFF\x3\x6\x3\xFFFF\x11\x6\x2\xFFFF"+
				"\x3\x6\x1\xFFFF\x6\x6\x1\xFFFF\x3\x6\x1\xFFFF\x1\x6\x6\xFFFF\x5\x6\x1"+
				"\xFFFF\x4\x6\x1\xFFFF\x2\x6\x1\xFFFF\x6\x6\x1\xFFFF\x3\x6\x1\xFFFF\x1"+
				"\x6\x1\xFFFF\x1\x6\x1\xFFFF\x1\x6\x2\xFFFF\xA\x6\x3\xFFFF\x3\x6\x1\xFFFF"+
				"\x1\x6\x1\xFFFF\x9\x6\x1\xFFFF\x4\x6\x1\xFFFF\x2\x6\x1\xFFFF\x3\x6\x7"+
				"\xFFFF\x2\x6\x1\xFFFF\x1\x6\x1\xFFFF\x1\x6\x1\xFFFF\x1\x6\x1\xFFFF\x18"+
				"\x6\x1\xFFFF\x4\x6\x1\xFFFF\x7\x6\x5\xFFFF\x2\x6\x1\xFFFF\x9\x6\x1\xFFFF"+
				"\x5\x6\x1\xFFFF\x1\x6\x2\xFFFF\x1\x6\x1\xFFFF\x1\x6\x2\xFFFF\x1\x6\x2"+
				"\xFFFF\x6\x6\x1\xFFFF\x1\x6\x3\xFFFF\x2\x6\x1\xFFFF\x8\x6\x1\xFFFF\x3"+
				"\x6\x2\xFFFF\x5\x6\x3\xFFFF\x1\x6",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				""
			};

		private static readonly short[] DFA134_eot = DFA.UnpackEncodedString(DFA134_eotS);
		private static readonly short[] DFA134_eof = DFA.UnpackEncodedString(DFA134_eofS);
		private static readonly char[] DFA134_min = DFA.UnpackEncodedStringToUnsignedChars(DFA134_minS);
		private static readonly char[] DFA134_max = DFA.UnpackEncodedStringToUnsignedChars(DFA134_maxS);
		private static readonly short[] DFA134_accept = DFA.UnpackEncodedString(DFA134_acceptS);
		private static readonly short[] DFA134_special = DFA.UnpackEncodedString(DFA134_specialS);
		private static readonly short[][] DFA134_transition;

		static DFA134()
		{
			int numStates = DFA134_transitionS.Length;
			DFA134_transition = new short[numStates][];
			for ( int i=0; i < numStates; i++ )
			{
				DFA134_transition[i] = DFA.UnpackEncodedString(DFA134_transitionS[i]);
			}
		}

		public DFA134( BaseRecognizer recognizer )
		{
			this.recognizer = recognizer;
			this.decisionNumber = 134;
			this.eot = DFA134_eot;
			this.eof = DFA134_eof;
			this.min = DFA134_min;
			this.max = DFA134_max;
			this.accept = DFA134_accept;
			this.special = DFA134_special;
			this.transition = DFA134_transition;
		}

		public override string Description { get { return "789:5: ( (op+= BITWISE_OR rhs+= bitwiseAndExpr )+ | ( ( NOT )? IN ( parenExprList | subselect ) ) | LIKE unaryExpr ( ESCAPE STRING )? | isOperator )?"; } }

		public override void Error(NoViableAltException nvae)
		{
			DebugRecognitionException(nvae);
		}
	}

	private class DFA139 : DFA
	{
		private const string DFA139_eotS =
			"\x1B3\xFFFF";
		private const string DFA139_eofS =
			"\x1\x1\x1B2\xFFFF";
		private const string DFA139_minS =
			"\x1\x5\x1B2\xFFFF";
		private const string DFA139_maxS =
			"\x1\x26F\x1B2\xFFFF";
		private const string DFA139_acceptS =
			"\x1\xFFFF\x1\x2\x171\xFFFF\x2\x1\x3E\xFFFF";
		private const string DFA139_specialS =
			"\x1B3\xFFFF}>";
		private static readonly string[] DFA139_transitionS =
			{
				"\x1\x1\x1\xFFFF\x5\x1\x3\xFFFF\x5\x1\x1\xFFFF\x8\x1\x1\xFFFF\x2\x1\x1"+
				"\xFFFF\x7\x1\x1\xFFFF\x3\x1\x1\xFFFF\x3\x1\x1\xFFFF\x1\x1\x1\xFFFF\x2"+
				"\x1\x2\xFFFF\x4\x1\x1\xFFFF\x2\x1\x1\xFFFF\x1\x1\x1\xFFFF\x8\x1\x1\xFFFF"+
				"\x3\x1\x1\xFFFF\x6\x1\x1\xFFFF\x2\x1\x1\xFFFF\x2\x1\x1\xFFFF\x1\x1\x1"+
				"\xFFFF\x2\x1\x1\xFFFF\x7\x1\x1\xFFFF\x1\x1\x2\xFFFF\x2\x1\x1\xFFFF\x4"+
				"\x1\x1\xFFFF\x1\x1\x1\xFFFF\x6\x1\x4\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF"+
				"\x1\x1\x1\xFFFF\x1\x1\x2\xFFFF\x4\x1\x4\xFFFF\x1\x1\x4\xFFFF\x3\x1\x1"+
				"\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x8\x1\x2\xFFFF\x5\x1\x1\xFFFF\x1"+
				"\x1\x1\xFFFF\x6\x1\x1\xFFFF\x4\x1\x3\xFFFF\x2\x1\x2\xFFFF\x4\x1\x1\xFFFF"+
				"\x6\x1\x2\xFFFF\xA\x1\x1\xFFFF\x9\x1\x1\xFFFF\x2\x1\x1\xFFFF\x1\x1\x1"+
				"\xFFFF\x3\x1\x3\xFFFF\x3\x1\x7\xFFFF\x8\x1\x1\xFFFF\x1\x1\x2\xFFFF\x1"+
				"\x1\x1\xFFFF\x3\x1\x3\xFFFF\x9\x1\x2\xFFFF\x2\x1\x1\xFFFF\x1\x1\x2\xFFFF"+
				"\x6\x1\x5\xFFFF\xF\x1\x1\xFFFF\x1\x1\x1\xFFFF\x9\x1\x3\xFFFF\x4\x1\x1"+
				"\xFFFF\x2\x1\x1\x173\x6\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x14"+
				"\x1\x1\xFFFF\x3\x1\x1\xFFFF\x7\x1\x3\xFFFF\x3\x1\x3\xFFFF\xC\x1\x1\x174"+
				"\x4\x1\x2\xFFFF\x3\x1\x1\xFFFF\x6\x1\x1\xFFFF\x3\x1\x1\xFFFF\x1\x1\x6"+
				"\xFFFF\x5\x1\x1\xFFFF\x4\x1\x1\xFFFF\x2\x1\x1\xFFFF\x6\x1\x1\xFFFF\x3"+
				"\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x2\x1\x1\xFFFF\xA\x1\x3\xFFFF"+
				"\x3\x1\x1\xFFFF\x1\x1\x1\xFFFF\x9\x1\x1\xFFFF\x4\x1\x1\xFFFF\x2\x1\x1"+
				"\xFFFF\x3\x1\x7\xFFFF\x2\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1"+
				"\x1\x1\xFFFF\x18\x1\x1\xFFFF\x4\x1\x1\xFFFF\x7\x1\x5\xFFFF\x2\x1\x1"+
				"\xFFFF\x9\x1\x1\xFFFF\x5\x1\x1\xFFFF\x1\x1\x2\xFFFF\x1\x1\x1\xFFFF\x1"+
				"\x1\x2\xFFFF\x1\x1\x2\xFFFF\x6\x1\x1\xFFFF\x1\x1\x3\xFFFF\x2\x1\x1\xFFFF"+
				"\x8\x1\x1\xFFFF\x3\x1\x2\xFFFF\x5\x1\x3\xFFFF\x1\x1",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				""
			};

		private static readonly short[] DFA139_eot = DFA.UnpackEncodedString(DFA139_eotS);
		private static readonly short[] DFA139_eof = DFA.UnpackEncodedString(DFA139_eofS);
		private static readonly char[] DFA139_min = DFA.UnpackEncodedStringToUnsignedChars(DFA139_minS);
		private static readonly char[] DFA139_max = DFA.UnpackEncodedStringToUnsignedChars(DFA139_maxS);
		private static readonly short[] DFA139_accept = DFA.UnpackEncodedString(DFA139_acceptS);
		private static readonly short[] DFA139_special = DFA.UnpackEncodedString(DFA139_specialS);
		private static readonly short[][] DFA139_transition;

		static DFA139()
		{
			int numStates = DFA139_transitionS.Length;
			DFA139_transition = new short[numStates][];
			for ( int i=0; i < numStates; i++ )
			{
				DFA139_transition[i] = DFA.UnpackEncodedString(DFA139_transitionS[i]);
			}
		}

		public DFA139( BaseRecognizer recognizer )
		{
			this.recognizer = recognizer;
			this.decisionNumber = 139;
			this.eot = DFA139_eot;
			this.eof = DFA139_eof;
			this.min = DFA139_min;
			this.max = DFA139_max;
			this.accept = DFA139_accept;
			this.special = DFA139_special;
			this.transition = DFA139_transition;
		}

		public override string Description { get { return "()* loopback of 810:27: ( (op+= PLUS |op+= MINUS ) rhs+= multiplicativeExpr )*"; } }

		public override void Error(NoViableAltException nvae)
		{
			DebugRecognitionException(nvae);
		}
	}

	private class DFA146 : DFA
	{
		private const string DFA146_eotS =
			"\x176\xFFFF";
		private const string DFA146_eofS =
			"\x176\xFFFF";
		private const string DFA146_minS =
			"\x1\x5\x1\x0\x174\xFFFF";
		private const string DFA146_maxS =
			"\x1\x26F\x1\x0\x174\xFFFF";
		private const string DFA146_acceptS =
			"\x2\xFFFF\x1\x2\x172\xFFFF\x1\x1";
		private const string DFA146_specialS =
			"\x1\xFFFF\x1\x0\x174\xFFFF}>";
		private static readonly string[] DFA146_transitionS =
			{
				"\x1\x2\x1\xFFFF\x5\x2\x4\xFFFF\x1\x2\x2\xFFFF\x1\x2\x2\xFFFF\x7\x2\x1"+
				"\xFFFF\x1\x2\x3\xFFFF\x3\x2\x4\xFFFF\x3\x2\x1\xFFFF\x3\x2\x1\xFFFF\x1"+
				"\x2\x1\xFFFF\x2\x2\x2\xFFFF\x1\x2\x1\xFFFF\x2\x2\x1\xFFFF\x2\x2\x1\xFFFF"+
				"\x1\x2\x1\xFFFF\x6\x2\x1\xFFFF\x1\x2\x1\xFFFF\x1\x2\x1\xFFFF\x1\x2\x1"+
				"\xFFFF\x6\x2\x1\xFFFF\x2\x2\x1\xFFFF\x2\x2\x1\xFFFF\x1\x2\x1\xFFFF\x2"+
				"\x2\x2\xFFFF\x6\x2\x1\xFFFF\x1\x2\x2\xFFFF\x2\x2\x1\xFFFF\x4\x2\x1\xFFFF"+
				"\x1\x2\x1\xFFFF\x1\x2\x4\xFFFF\x1\x2\x4\xFFFF\x1\x2\x1\xFFFF\x1\x2\x3"+
				"\xFFFF\x1\x2\x2\xFFFF\x4\x2\x4\xFFFF\x1\x2\x4\xFFFF\x3\x2\x3\xFFFF\x1"+
				"\x2\x1\xFFFF\x5\x2\x1\xFFFF\x2\x2\x2\xFFFF\x5\x2\x1\xFFFF\x1\x2\x1\xFFFF"+
				"\x6\x2\x1\xFFFF\x4\x2\x3\xFFFF\x1\x2\x3\xFFFF\x2\x2\x1\xFFFF\x1\x2\x1"+
				"\xFFFF\x6\x2\x2\xFFFF\x1\x2\x2\xFFFF\x4\x2\x1\xFFFF\x2\x2\x1\xFFFF\x3"+
				"\x2\x3\xFFFF\x3\x2\x1\xFFFF\x1\x2\x2\xFFFF\x1\x2\x1\xFFFF\x1\x2\x1\xFFFF"+
				"\x1\x2\x3\xFFFF\x3\x2\x7\xFFFF\x1\x1\x1\xFFFF\x3\x2\x1\xFFFF\x2\x2\x4"+
				"\xFFFF\x1\x2\x1\xFFFF\x3\x2\x3\xFFFF\x2\x2\x1\xFFFF\x1\x2\x2\xFFFF\x1"+
				"\x2\x4\xFFFF\x2\x2\x1\xFFFF\x1\x2\x3\xFFFF\x2\x2\x2\xFFFF\x1\x2\x5\xFFFF"+
				"\xF\x2\x1\xFFFF\x1\x2\x1\xFFFF\x9\x2\x3\xFFFF\x4\x2\x1\xFFFF\x2\x2\x1"+
				"\xFFFF\x1\x2\x2\xFFFF\x3\x2\x1\xFFFF\x1\x2\x1\xFFFF\x1\x2\x1\xFFFF\x7"+
				"\x2\x1\xFFFF\x7\x2\x3\xFFFF\x2\x2\x1\xFFFF\x1\x2\x1\xFFFF\x1\x2\x1\xFFFF"+
				"\x3\x2\x1\xFFFF\x3\x2\x3\xFFFF\x1\x2\x5\xFFFF\xC\x2\x1\xFFFF\x4\x2\x2"+
				"\xFFFF\x3\x2\x1\xFFFF\x1\x2\x1\xFFFF\x4\x2\x1\xFFFF\x3\x2\x8\xFFFF\x5"+
				"\x2\x2\xFFFF\x3\x2\x1\xFFFF\x2\x2\x1\xFFFF\x6\x2\x1\xFFFF\x3\x2\x1\xFFFF"+
				"\x1\x2\x1\xFFFF\x1\x2\x1\xFFFF\x1\x2\x2\xFFFF\x6\x2\x1\xFFFF\x3\x2\x3"+
				"\xFFFF\x1\x2\x1\xFFFF\x1\x2\x4\xFFFF\x6\x2\x1\xFFFF\x1\x2\x1\xFFFF\x4"+
				"\x2\x1\xFFFF\x2\x2\x1\xFFFF\x3\x2\x7\xFFFF\x2\x2\x1\xFFFF\x1\x2\x1\xFFFF"+
				"\x1\x2\x1\xFFFF\x1\x2\x1\xFFFF\x8\x2\x1\xFFFF\xF\x2\x1\xFFFF\x4\x2\x1"+
				"\xFFFF\x2\x2\x1\xFFFF\x4\x2\x5\xFFFF\x2\x2\x1\xFFFF\x9\x2\x1\xFFFF\x4"+
				"\x2\x2\xFFFF\x1\x2\x2\xFFFF\x1\x2\x1\xFFFF\x1\x2\x2\xFFFF\x1\x2\x2\xFFFF"+
				"\x1\x2\x1\xFFFF\x4\x2\x1\xFFFF\x1\x2\x3\xFFFF\x2\x2\x1\xFFFF\x6\x2\x4"+
				"\xFFFF\x2\x2\x2\xFFFF\x2\x2\x1\xFFFF\x1\x2\x4\xFFFF\x1\x2",
				"\x1\xFFFF",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				""
			};

		private static readonly short[] DFA146_eot = DFA.UnpackEncodedString(DFA146_eotS);
		private static readonly short[] DFA146_eof = DFA.UnpackEncodedString(DFA146_eofS);
		private static readonly char[] DFA146_min = DFA.UnpackEncodedStringToUnsignedChars(DFA146_minS);
		private static readonly char[] DFA146_max = DFA.UnpackEncodedStringToUnsignedChars(DFA146_maxS);
		private static readonly short[] DFA146_accept = DFA.UnpackEncodedString(DFA146_acceptS);
		private static readonly short[] DFA146_special = DFA.UnpackEncodedString(DFA146_specialS);
		private static readonly short[][] DFA146_transition;

		static DFA146()
		{
			int numStates = DFA146_transitionS.Length;
			DFA146_transition = new short[numStates][];
			for ( int i=0; i < numStates; i++ )
			{
				DFA146_transition[i] = DFA.UnpackEncodedString(DFA146_transitionS[i]);
			}
		}

		public DFA146( BaseRecognizer recognizer, SpecialStateTransitionHandler specialStateTransition )
			: base(specialStateTransition)
		{
			this.recognizer = recognizer;
			this.decisionNumber = 146;
			this.eot = DFA146_eot;
			this.eof = DFA146_eof;
			this.min = DFA146_min;
			this.max = DFA146_max;
			this.accept = DFA146_accept;
			this.special = DFA146_special;
			this.transition = DFA146_transition;
		}

		public override string Description { get { return "850:1: intervalExpr : ( ( INTERVAL ~ ( LPAREN ) )=> INTERVAL expr timeUnit {...}? -> ^( INTERVAL expr timeUnit ) |lhsPrim= primary -> primary );"; } }

		public override void Error(NoViableAltException nvae)
		{
			DebugRecognitionException(nvae);
		}
	}

	private int SpecialStateTransition146(DFA dfa, int s, IIntStream _input)
	{
		ITokenStream input = (ITokenStream)_input;
		int _s = s;
		switch (s)
		{
			case 0:
				int LA146_1 = input.LA(1);


				int index146_1 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred5_MySQL51Parser_fragment))) {s = 373;}

				else if ((true)) {s = 2;}


				input.Seek(index146_1);
				if (s >= 0) return s;
				break;
		}
		if (state.backtracking > 0) {state.failed=true; return -1;}
		NoViableAltException nvae = new NoViableAltException(dfa.Description, 146, _s, input);
		dfa.Error(nvae);
		throw nvae;
	}
	private class DFA148 : DFA
	{
		private const string DFA148_eotS =
			"\x173\xFFFF";
		private const string DFA148_eofS =
			"\x173\xFFFF";
		private const string DFA148_minS =
			"\x1\x5\xA\xFFFF\x1\x0\x17\xFFFF\x1\x0\x5\xFFFF\x1\x0\x3\xFFFF\x1\x0\x3"+
			"\xFFFF\x2\x0\x3\xFFFF\x5\x0\x1\xFFFF\x1\x0\x1\xFFFF\x2\x0\x1\xFFFF\x8"+
			"\x0\x2\xFFFF\x2\x0\x2\xFFFF\x3\x0\x3\xFFFF\x2\x0\x1\xFFFF\x6\x0\x115"+
			"\xFFFF";
		private const string DFA148_maxS =
			"\x1\x26F\xA\xFFFF\x1\x0\x17\xFFFF\x1\x0\x5\xFFFF\x1\x0\x3\xFFFF\x1\x0"+
			"\x3\xFFFF\x2\x0\x3\xFFFF\x5\x0\x1\xFFFF\x1\x0\x1\xFFFF\x2\x0\x1\xFFFF"+
			"\x8\x0\x2\xFFFF\x2\x0\x2\xFFFF\x3\x0\x3\xFFFF\x2\x0\x1\xFFFF\x6\x0\x115"+
			"\xFFFF";
		private const string DFA148_acceptS =
			"\x1\xFFFF\x1\x1\x1\x2\x1\x3\x1\x4\x1\x5\x1\x6\x1\x7\x1\x8\x1\x9\x1\xA"+
			"\x1\xFFFF\x17\xB\x1\xFFFF\x5\xB\x1\xFFFF\x3\xB\x1\xFFFF\x3\xB\x2\xFFFF"+
			"\x3\xB\x5\xFFFF\x1\xB\x1\xFFFF\x1\xB\x2\xFFFF\x1\xB\x8\xFFFF\x2\xB\x2"+
			"\xFFFF\x2\xB\x3\xFFFF\x3\xB\x2\xFFFF\x1\xB\x6\xFFFF\x1\xC\x114\xFFFF";
		private const string DFA148_specialS =
			"\x1\x0\xA\xFFFF\x1\x1\x17\xFFFF\x1\x2\x5\xFFFF\x1\x3\x3\xFFFF\x1\x4\x3"+
			"\xFFFF\x1\x5\x1\x6\x3\xFFFF\x1\x7\x1\x8\x1\x9\x1\xA\x1\xB\x1\xFFFF\x1"+
			"\xC\x1\xFFFF\x1\xD\x1\xE\x1\xFFFF\x1\xF\x1\x10\x1\x11\x1\x12\x1\x13\x1"+
			"\x14\x1\x15\x1\x16\x2\xFFFF\x1\x17\x1\x18\x2\xFFFF\x1\x19\x1\x1A\x1\x1B"+
			"\x3\xFFFF\x1\x1C\x1\x1D\x1\xFFFF\x1\x1E\x1\x1F\x1\x20\x1\x21\x1\x22\x1"+
			"\x23\x115\xFFFF}>";
		private static readonly string[] DFA148_transitionS =
			{
				"\x1\x5E\x1\xFFFF\x1\x23\x4\x5E\x4\xFFFF\x1\x5E\x2\xFFFF\x1\x36\x2\xFFFF"+
				"\x4\x5E\x1\xB\x2\x5E\x1\xFFFF\x1\x5E\x3\xFFFF\x1\x6\x2\x5E\x4\xFFFF"+
				"\x1\xC\x1\xD\x1\xE\x1\xFFFF\x3\x5E\x1\xFFFF\x1\x5E\x1\xFFFF\x2\x5E\x2"+
				"\xFFFF\x1\x5E\x1\xFFFF\x1\xF\x1\x5E\x1\xFFFF\x1\x5E\x1\x4D\x1\xFFFF"+
				"\x1\x37\x1\xFFFF\x4\x5E\x1\x38\x1\x5E\x1\xFFFF\x1\x39\x1\xFFFF\x1\x5E"+
				"\x1\xFFFF\x1\x5E\x1\xFFFF\x6\x5E\x1\xFFFF\x2\x5E\x1\xFFFF\x1\x3A\x1"+
				"\x5E\x1\xFFFF\x1\x5E\x1\xFFFF\x1\x11\x1\x5E\x2\xFFFF\x1\x5E\x1\x24\x1"+
				"\x25\x1\x27\x1\x2B\x1\x4E\x1\xFFFF\x1\x26\x2\xFFFF\x1\x5E\x1\x3B\x1"+
				"\xFFFF\x1\x5E\x1\x4F\x1\x5E\x1\x12\x1\xFFFF\x1\x13\x1\xFFFF\x1\x50\x4"+
				"\xFFFF\x1\x5E\x4\xFFFF\x1\x5E\x1\xFFFF\x1\x5E\x3\xFFFF\x1\x5E\x2\xFFFF"+
				"\x4\x5E\x4\xFFFF\x1\x5E\x4\xFFFF\x3\x5E\x3\xFFFF\x1\x5E\x1\xFFFF\x5"+
				"\x5E\x1\xFFFF\x2\x5E\x2\xFFFF\x4\x5E\x2\xFFFF\x1\x5E\x1\xFFFF\x2\x5E"+
				"\x1\x28\x1\xA\x2\x5E\x1\xFFFF\x4\x5E\x3\xFFFF\x1\x5E\x3\xFFFF\x2\x5E"+
				"\x1\xFFFF\x1\x5E\x1\xFFFF\x2\x5E\x1\x3C\x1\x29\x1\x5E\x1\x3\x2\xFFFF"+
				"\x1\x5E\x2\xFFFF\x1\x5E\x1\x14\x2\x5E\x1\xFFFF\x1\x5E\x1\x7\x1\xFFFF"+
				"\x2\x5E\x1\x51\x3\xFFFF\x1\x5D\x1\x5E\x1\x3D\x1\xFFFF\x1\x5E\x2\xFFFF"+
				"\x1\x5E\x1\xFFFF\x1\x5E\x1\xFFFF\x1\x5E\x3\xFFFF\x1\x52\x2\x5E\x7\xFFFF"+
				"\x1\x53\x1\xFFFF\x3\x5E\x1\xFFFF\x2\x5E\x4\xFFFF\x1\x5E\x1\xFFFF\x3"+
				"\x5E\x3\xFFFF\x1\x5E\x1\x54\x1\xFFFF\x1\x5E\x2\xFFFF\x1\x5E\x4\xFFFF"+
				"\x1\x3E\x1\x5E\x1\xFFFF\x1\x5E\x3\xFFFF\x2\x5E\x2\xFFFF\x1\x5E\x6\xFFFF"+
				"\xE\x5E\x1\xFFFF\x1\x5E\x1\xFFFF\x1\x15\x8\x5E\x3\xFFFF\x2\x5E\x1\x3F"+
				"\x1\x16\x1\xFFFF\x1\x5E\x1\x17\x1\xFFFF\x1\x55\x2\xFFFF\x1\x5E\x1\x40"+
				"\x1\x5E\x1\xFFFF\x1\x5E\x1\xFFFF\x1\x56\x1\xFFFF\x1\x41\x1\x42\x1\x43"+
				"\x4\x5E\x1\xFFFF\x7\x5E\x3\xFFFF\x1\x2A\x1\x5E\x1\xFFFF\x1\x8\x1\xFFFF"+
				"\x1\x2\x1\xFFFF\x2\x5E\x1\x44\x1\xFFFF\x3\x5E\x3\xFFFF\x1\x5E\x5\xFFFF"+
				"\x8\x5E\x1\x45\x3\x5E\x1\xFFFF\x1\x46\x1\x47\x1\x5E\x1\x2C\x2\xFFFF"+
				"\x3\x5E\x1\xFFFF\x1\x5E\x1\xFFFF\x4\x5E\x1\xFFFF\x1\x48\x2\x5E\x8\xFFFF"+
				"\x5\x5E\x2\xFFFF\x3\x5E\x1\xFFFF\x2\x5E\x1\xFFFF\x2\x5E\x1\x49\x1\x5E"+
				"\x1\x4A\x1\x5E\x1\xFFFF\x3\x5E\x1\xFFFF\x1\x5E\x1\xFFFF\x1\x5E\x1\xFFFF"+
				"\x1\x57\x2\xFFFF\x6\x5E\x1\xFFFF\x3\x5E\x3\xFFFF\x1\x58\x1\xFFFF\x1"+
				"\x5E\x4\xFFFF\x4\x5E\x1\x18\x1\x4\x1\xFFFF\x1\x5E\x1\xFFFF\x4\x5E\x1"+
				"\xFFFF\x2\x5E\x1\xFFFF\x3\x5E\x7\xFFFF\x2\x5E\x1\xFFFF\x1\x5E\x1\xFFFF"+
				"\x1\x5E\x1\xFFFF\x1\x5E\x1\xFFFF\x2\x5E\x1\x19\x1\x1A\x1\x1B\x1\x1C"+
				"\x2\x5E\x1\xFFFF\x1\x1\x1\x5E\x1\x2D\x3\x5E\x1\x2E\x1\x2F\x1\x1D\x4"+
				"\x5E\x1\x30\x1\x1E\x1\xFFFF\x4\x5E\x1\xFFFF\x2\x5E\x1\xFFFF\x1\x59\x1"+
				"\x5A\x1\x31\x1\x32\x5\xFFFF\x2\x5E\x1\xFFFF\x1\x5E\x1\x1F\x1\x9\x1\x4B"+
				"\x5\x5E\x1\xFFFF\x4\x5E\x2\xFFFF\x1\x5E\x2\xFFFF\x1\x5E\x1\xFFFF\x1"+
				"\x5E\x2\xFFFF\x1\x5B\x2\xFFFF\x1\x5E\x1\xFFFF\x1\x33\x1\x35\x1\x34\x1"+
				"\x5E\x1\xFFFF\x1\x5\x3\xFFFF\x1\x5E\x1\x20\x1\xFFFF\x1\x21\x1\x22\x3"+
				"\x5E\x1\x4C\x4\xFFFF\x2\x5E\x2\xFFFF\x2\x5E\x1\xFFFF\x1\x5C\x4\xFFFF"+
				"\x1\x10",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"\x1\xFFFF",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"\x1\xFFFF",
				"",
				"",
				"",
				"",
				"",
				"\x1\xFFFF",
				"",
				"",
				"",
				"\x1\xFFFF",
				"",
				"",
				"",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"",
				"",
				"",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"",
				"\x1\xFFFF",
				"",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"",
				"",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"",
				"",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"",
				"",
				"",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"\x1\xFFFF",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				""
			};

		private static readonly short[] DFA148_eot = DFA.UnpackEncodedString(DFA148_eotS);
		private static readonly short[] DFA148_eof = DFA.UnpackEncodedString(DFA148_eofS);
		private static readonly char[] DFA148_min = DFA.UnpackEncodedStringToUnsignedChars(DFA148_minS);
		private static readonly char[] DFA148_max = DFA.UnpackEncodedStringToUnsignedChars(DFA148_maxS);
		private static readonly short[] DFA148_accept = DFA.UnpackEncodedString(DFA148_acceptS);
		private static readonly short[] DFA148_special = DFA.UnpackEncodedString(DFA148_specialS);
		private static readonly short[][] DFA148_transition;

		static DFA148()
		{
			int numStates = DFA148_transitionS.Length;
			DFA148_transition = new short[numStates][];
			for ( int i=0; i < numStates; i++ )
			{
				DFA148_transition[i] = DFA.UnpackEncodedString(DFA148_transitionS[i]);
			}
		}

		public DFA148( BaseRecognizer recognizer, SpecialStateTransitionHandler specialStateTransition )
			: base(specialStateTransition)
		{
			this.recognizer = recognizer;
			this.decisionNumber = 148;
			this.eot = DFA148_eot;
			this.eof = DFA148_eof;
			this.min = DFA148_min;
			this.max = DFA148_max;
			this.accept = DFA148_accept;
			this.special = DFA148_special;
			this.transition = DFA148_transition;
		}

		public override string Description { get { return "863:1: literal : (value= STRING |value= NUMBER |value= GLOBAL_VARIABLE |value= SESSION_VARIABLE |value= VALUE_PLACEHOLDER |value= BINARY_VALUE |value= HEXA_VALUE |value= NULL |value= TRUE |value= FALSE | ( functionCall )=> functionCall | field_name );"; } }

		public override void Error(NoViableAltException nvae)
		{
			DebugRecognitionException(nvae);
		}
	}

	private int SpecialStateTransition148(DFA dfa, int s, IIntStream _input)
	{
		ITokenStream input = (ITokenStream)_input;
		int _s = s;
		switch (s)
		{
			case 0:
				int LA148_0 = input.LA(1);


				int index148_0 = input.Index;
				input.Rewind();
				s = -1;
				if ((LA148_0==STRING)) {s = 1;}

				else if ((LA148_0==NUMBER)) {s = 2;}

				else if ((LA148_0==GLOBAL_VARIABLE)) {s = 3;}

				else if ((LA148_0==SESSION_VARIABLE)) {s = 4;}

				else if ((LA148_0==VALUE_PLACEHOLDER)) {s = 5;}

				else if ((LA148_0==BINARY_VALUE)) {s = 6;}

				else if ((LA148_0==HEXA_VALUE)) {s = 7;}

				else if ((LA148_0==NULL)) {s = 8;}

				else if ((LA148_0==TRUE)) {s = 9;}

				else if ((LA148_0==FALSE)) {s = 10;}

				else if ((LA148_0==AVG)) {s = 11;}

				else if ((LA148_0==BIT_AND) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 12;}

				else if ((LA148_0==BIT_OR) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 13;}

				else if ((LA148_0==BIT_XOR) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 14;}

				else if ((LA148_0==CAST) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 15;}

				else if ((LA148_0==CONCAT) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 16;}

				else if ((LA148_0==COUNT) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 17;}

				else if ((LA148_0==DATE_ADD) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 18;}

				else if ((LA148_0==DATE_SUB) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 19;}

				else if ((LA148_0==GROUP_CONCAT) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 20;}

				else if ((LA148_0==MAX) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 21;}

				else if ((LA148_0==MID) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 22;}

				else if ((LA148_0==MIN) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 23;}

				else if ((LA148_0==SESSION_USER) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 24;}

				else if ((LA148_0==STD) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 25;}

				else if ((LA148_0==STDDEV) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 26;}

				else if ((LA148_0==STDDEV_POP) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 27;}

				else if ((LA148_0==STDDEV_SAMP) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 28;}

				else if ((LA148_0==SUM) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 29;}

				else if ((LA148_0==SYSTEM_USER) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 30;}

				else if ((LA148_0==TRIM) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 31;}

				else if ((LA148_0==VARIANCE) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 32;}

				else if ((LA148_0==VAR_POP) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 33;}

				else if ((LA148_0==VAR_SAMP) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 34;}

				else if ((LA148_0==ADDDATE)) {s = 35;}

				else if ((LA148_0==CURDATE) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 36;}

				else if ((LA148_0==CURRENT_DATE) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 37;}

				else if ((LA148_0==CURTIME) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 38;}

				else if ((LA148_0==CURRENT_TIME) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 39;}

				else if ((LA148_0==EXTRACT) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 40;}

				else if ((LA148_0==GET_FORMAT)) {s = 41;}

				else if ((LA148_0==NOW) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 42;}

				else if ((LA148_0==CURRENT_TIMESTAMP) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 43;}

				else if ((LA148_0==POSITION) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 44;}

				else if ((LA148_0==SUBDATE)) {s = 45;}

				else if ((LA148_0==SUBSTR) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 46;}

				else if ((LA148_0==SUBSTRING) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 47;}

				else if ((LA148_0==SYSDATE) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 48;}

				else if ((LA148_0==TIMESTAMP_ADD)) {s = 49;}

				else if ((LA148_0==TIMESTAMP_DIFF)) {s = 50;}

				else if ((LA148_0==UTC_DATE) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 51;}

				else if ((LA148_0==UTC_TIMESTAMP) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 52;}

				else if ((LA148_0==UTC_TIME) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 53;}

				else if ((LA148_0==ASCII)) {s = 54;}

				else if ((LA148_0==CHARSET)) {s = 55;}

				else if ((LA148_0==COALESCE)) {s = 56;}

				else if ((LA148_0==COLLATION)) {s = 57;}

				else if ((LA148_0==CONTAINS)) {s = 58;}

				else if ((LA148_0==DATABASE) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 59;}

				else if ((LA148_0==GEOMETRYCOLLECTION)) {s = 60;}

				else if ((LA148_0==IF) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 61;}

				else if ((LA148_0==LINESTRING)) {s = 62;}

				else if ((LA148_0==MICROSECOND)) {s = 63;}

				else if ((LA148_0==MOD) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 64;}

				else if ((LA148_0==MULTILINESTRING)) {s = 65;}

				else if ((LA148_0==MULTIPOINT)) {s = 66;}

				else if ((LA148_0==MULTIPOLYGON)) {s = 67;}

				else if ((LA148_0==OLD_PASSWORD)) {s = 68;}

				else if ((LA148_0==PASSWORD)) {s = 69;}

				else if ((LA148_0==POINT)) {s = 70;}

				else if ((LA148_0==POLYGON)) {s = 71;}

				else if ((LA148_0==QUARTER)) {s = 72;}

				else if ((LA148_0==REPEAT) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 73;}

				else if ((LA148_0==REPLACE) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 74;}

				else if ((LA148_0==TRUNCATE)) {s = 75;}

				else if ((LA148_0==WEEK)) {s = 76;}

				else if ((LA148_0==CHAR) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 77;}

				else if ((LA148_0==CURRENT_USER) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 78;}

				else if ((LA148_0==DATE)) {s = 79;}

				else if ((LA148_0==DAY)) {s = 80;}

				else if ((LA148_0==HOUR)) {s = 81;}

				else if ((LA148_0==INSERT) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 82;}

				else if ((LA148_0==INTERVAL) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 83;}

				else if ((LA148_0==LEFT) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 84;}

				else if ((LA148_0==MINUTE)) {s = 85;}

				else if ((LA148_0==MONTH)) {s = 86;}

				else if ((LA148_0==RIGHT) && (EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((LA148_0==SECOND)) {s = 88;}

				else if ((LA148_0==TIME)) {s = 89;}

				else if ((LA148_0==TIMESTAMP)) {s = 90;}

				else if ((LA148_0==USER)) {s = 91;}

				else if ((LA148_0==YEAR)) {s = 92;}

				else if ((LA148_0==ID)) {s = 93;}

				else if ((LA148_0==ACTION||(LA148_0>=AFTER && LA148_0<=ALGORITHM)||LA148_0==ANY||(LA148_0>=AT && LA148_0<=AUTO_INCREMENT)||(LA148_0>=AVG_ROW_LENGTH && LA148_0<=BACKUP)||LA148_0==BEGIN||(LA148_0>=BINLOG && LA148_0<=BIT)||(LA148_0>=BLOCK && LA148_0<=BOOLEAN)||LA148_0==BTREE||(LA148_0>=BYTE && LA148_0<=CACHE)||LA148_0==CASCADED||LA148_0==CHAIN||LA148_0==CHANGED||(LA148_0>=CHECKSUM && LA148_0<=CLOSE)||LA148_0==CODE||LA148_0==COLUMNS||LA148_0==COMMENT||(LA148_0>=COMMIT && LA148_0<=CONCURRENT)||(LA148_0>=CONNECTION && LA148_0<=CONSISTENT)||LA148_0==CONTEXT||LA148_0==CONTRIBUTORS||LA148_0==CPU||LA148_0==CUBE||LA148_0==DATA||LA148_0==DATAFILE||LA148_0==DATETIME||LA148_0==DEALLOCATE||LA148_0==DEFINER||LA148_0==DELAY_KEY_WRITE||LA148_0==DES_KEY_FILE||(LA148_0>=DIRECTORY && LA148_0<=DISK)||LA148_0==DO||(LA148_0>=DUMPFILE && LA148_0<=DYNAMIC)||LA148_0==ENABLE||(LA148_0>=END && LA148_0<=ENUM)||(LA148_0>=ERRORS && LA148_0<=ESCAPE)||(LA148_0>=EVENT && LA148_0<=EXECUTE)||LA148_0==EXPANSION||(LA148_0>=EXTENDED && LA148_0<=EXTENT_SIZE)||(LA148_0>=FAST && LA148_0<=FAULTS)||(LA148_0>=FIELDS && LA148_0<=FIXED)||LA148_0==FLUSH||(LA148_0>=FOUND && LA148_0<=FRAC_SECOND)||LA148_0==FULL||(LA148_0>=FUNCTION && LA148_0<=GEOMETRY)||LA148_0==GLOBAL||LA148_0==GRANTS||LA148_0==GROUP||(LA148_0>=HANDLER && LA148_0<=HASH)||LA148_0==HELP||(LA148_0>=HOST && LA148_0<=HOSTS)||LA148_0==IDENTIFIED||LA148_0==IMPORT||LA148_0==INDEXES||LA148_0==INITIAL_SIZE||LA148_0==INNOBASE||(LA148_0>=INSERT_METHOD && LA148_0<=INSTALL)||(LA148_0>=INVOKER && LA148_0<=IPC)||(LA148_0>=ISOLATION && LA148_0<=ISSUER)||LA148_0==KEY_BLOCK_SIZE||(LA148_0>=LABEL && LA148_0<=LAST)||LA148_0==LEAVES||LA148_0==LESS||LA148_0==LEVEL||LA148_0==LIST||LA148_0==LOCAL||(LA148_0>=LOCKS && LA148_0<=LOGFILE)||LA148_0==LOGS||(LA148_0>=MASTER && LA148_0<=MASTER_SSL_KEY)||LA148_0==MASTER_USER||(LA148_0>=MAX_CONNECTIONS_PER_HOUR && LA148_0<=MEDIUM)||(LA148_0>=MEMORY && LA148_0<=MERGE)||LA148_0==MIGRATE||LA148_0==MIN_ROWS||LA148_0==MODE||LA148_0==MODIFY||(LA148_0>=MUTEX && LA148_0<=NATIONAL)||(LA148_0>=NCHAR && LA148_0<=NONE)||LA148_0==NO_WAIT||(LA148_0>=NVARCHAR && LA148_0<=OFFSET)||(LA148_0>=ONE && LA148_0<=OPEN)||LA148_0==OPTIONS||(LA148_0>=OWNER && LA148_0<=PARTITIONS)||(LA148_0>=PHASE && LA148_0<=PLUGINS)||LA148_0==PORT||(LA148_0>=PREPARE && LA148_0<=PREV)||LA148_0==PRIVILEGES||(LA148_0>=PROCESS && LA148_0<=PROFILES)||(LA148_0>=QUERY && LA148_0<=QUICK)||(LA148_0>=REBUILD && LA148_0<=REDUNDANT)||(LA148_0>=RELAY_LOG_FILE && LA148_0<=RELAY_THREAD)||(LA148_0>=RELOAD && LA148_0<=REMOVE)||(LA148_0>=REORGANIZE && LA148_0<=REPAIR)||LA148_0==REPEATABLE||LA148_0==REPLICATION||(LA148_0>=RESET && LA148_0<=RESTORE)||LA148_0==RESUME||LA148_0==RETURNS||(LA148_0>=ROLLBACK && LA148_0<=ROW_FORMAT)||(LA148_0>=RTREE && LA148_0<=SCHEDULE)||LA148_0==SECURITY||(LA148_0>=SERIAL && LA148_0<=SESSION)||LA148_0==SHARE||(LA148_0>=SHUTDOWN && LA148_0<=SLAVE)||(LA148_0>=SNAPSHOT && LA148_0<=SOCKET)||(LA148_0>=SONAME && LA148_0<=SOURCE)||(LA148_0>=SQL_BUFFER_RESULT && LA148_0<=SQL_CACHE)||LA148_0==SQL_NO_CACHE||LA148_0==SQL_THREAD||LA148_0==START||(LA148_0>=STARTS && LA148_0<=STATUS)||(LA148_0>=STOP && LA148_0<=STORAGE)||LA148_0==STRING_KEYWORD||(LA148_0>=SUBJECT && LA148_0<=SUBPARTITIONS)||(LA148_0>=SUPER && LA148_0<=SWITCHES)||(LA148_0>=TABLES && LA148_0<=TEMPTABLE)||(LA148_0>=TEXT && LA148_0<=THAN)||(LA148_0>=TRANSACTION && LA148_0<=TRANSACTIONAL)||LA148_0==TRIGGERS||(LA148_0>=TYPE && LA148_0<=UNDEFINED)||(LA148_0>=UNDOFILE && LA148_0<=UNINSTALL)||LA148_0==UNKNOWN||LA148_0==UNTIL||LA148_0==UPGRADE||LA148_0==USE_FRM||LA148_0==VALUE||LA148_0==VARIABLES||(LA148_0>=VIEW && LA148_0<=WARNINGS)||(LA148_0>=WORK && LA148_0<=WRAPPER)||(LA148_0>=X509 && LA148_0<=XA))) {s = 94;}


				input.Seek(index148_0);
				if (s >= 0) return s;
				break;
			case 1:
				int LA148_11 = input.LA(1);


				int index148_11 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_11);
				if (s >= 0) return s;
				break;
			case 2:
				int LA148_35 = input.LA(1);


				int index148_35 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_35);
				if (s >= 0) return s;
				break;
			case 3:
				int LA148_41 = input.LA(1);


				int index148_41 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_41);
				if (s >= 0) return s;
				break;
			case 4:
				int LA148_45 = input.LA(1);


				int index148_45 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_45);
				if (s >= 0) return s;
				break;
			case 5:
				int LA148_49 = input.LA(1);


				int index148_49 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_49);
				if (s >= 0) return s;
				break;
			case 6:
				int LA148_50 = input.LA(1);


				int index148_50 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_50);
				if (s >= 0) return s;
				break;
			case 7:
				int LA148_54 = input.LA(1);


				int index148_54 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_54);
				if (s >= 0) return s;
				break;
			case 8:
				int LA148_55 = input.LA(1);


				int index148_55 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_55);
				if (s >= 0) return s;
				break;
			case 9:
				int LA148_56 = input.LA(1);


				int index148_56 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_56);
				if (s >= 0) return s;
				break;
			case 10:
				int LA148_57 = input.LA(1);


				int index148_57 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_57);
				if (s >= 0) return s;
				break;
			case 11:
				int LA148_58 = input.LA(1);


				int index148_58 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_58);
				if (s >= 0) return s;
				break;
			case 12:
				int LA148_60 = input.LA(1);


				int index148_60 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_60);
				if (s >= 0) return s;
				break;
			case 13:
				int LA148_62 = input.LA(1);


				int index148_62 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_62);
				if (s >= 0) return s;
				break;
			case 14:
				int LA148_63 = input.LA(1);


				int index148_63 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_63);
				if (s >= 0) return s;
				break;
			case 15:
				int LA148_65 = input.LA(1);


				int index148_65 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_65);
				if (s >= 0) return s;
				break;
			case 16:
				int LA148_66 = input.LA(1);


				int index148_66 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_66);
				if (s >= 0) return s;
				break;
			case 17:
				int LA148_67 = input.LA(1);


				int index148_67 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_67);
				if (s >= 0) return s;
				break;
			case 18:
				int LA148_68 = input.LA(1);


				int index148_68 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_68);
				if (s >= 0) return s;
				break;
			case 19:
				int LA148_69 = input.LA(1);


				int index148_69 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_69);
				if (s >= 0) return s;
				break;
			case 20:
				int LA148_70 = input.LA(1);


				int index148_70 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_70);
				if (s >= 0) return s;
				break;
			case 21:
				int LA148_71 = input.LA(1);


				int index148_71 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_71);
				if (s >= 0) return s;
				break;
			case 22:
				int LA148_72 = input.LA(1);


				int index148_72 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_72);
				if (s >= 0) return s;
				break;
			case 23:
				int LA148_75 = input.LA(1);


				int index148_75 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_75);
				if (s >= 0) return s;
				break;
			case 24:
				int LA148_76 = input.LA(1);


				int index148_76 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_76);
				if (s >= 0) return s;
				break;
			case 25:
				int LA148_79 = input.LA(1);


				int index148_79 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_79);
				if (s >= 0) return s;
				break;
			case 26:
				int LA148_80 = input.LA(1);


				int index148_80 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_80);
				if (s >= 0) return s;
				break;
			case 27:
				int LA148_81 = input.LA(1);


				int index148_81 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_81);
				if (s >= 0) return s;
				break;
			case 28:
				int LA148_85 = input.LA(1);


				int index148_85 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_85);
				if (s >= 0) return s;
				break;
			case 29:
				int LA148_86 = input.LA(1);


				int index148_86 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_86);
				if (s >= 0) return s;
				break;
			case 30:
				int LA148_88 = input.LA(1);


				int index148_88 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_88);
				if (s >= 0) return s;
				break;
			case 31:
				int LA148_89 = input.LA(1);


				int index148_89 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_89);
				if (s >= 0) return s;
				break;
			case 32:
				int LA148_90 = input.LA(1);


				int index148_90 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_90);
				if (s >= 0) return s;
				break;
			case 33:
				int LA148_91 = input.LA(1);


				int index148_91 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_91);
				if (s >= 0) return s;
				break;
			case 34:
				int LA148_92 = input.LA(1);


				int index148_92 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_92);
				if (s >= 0) return s;
				break;
			case 35:
				int LA148_93 = input.LA(1);


				int index148_93 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred6_MySQL51Parser_fragment))) {s = 87;}

				else if ((true)) {s = 94;}


				input.Seek(index148_93);
				if (s >= 0) return s;
				break;
		}
		if (state.backtracking > 0) {state.failed=true; return -1;}
		NoViableAltException nvae = new NoViableAltException(dfa.Description, 148, _s, input);
		dfa.Error(nvae);
		throw nvae;
	}
	private class DFA195 : DFA
	{
		private const string DFA195_eotS =
			"\x13C\xFFFF";
		private const string DFA195_eofS =
			"\x13C\xFFFF";
		private const string DFA195_minS =
			"\x1\x5\x13B\xFFFF";
		private const string DFA195_maxS =
			"\x1\x26A\x13B\xFFFF";
		private const string DFA195_acceptS =
			"\x1\xFFFF\x1\x4\xE5\xFFFF\x1\x2\x52\xFFFF\x1\x1\x1\x3";
		private const string DFA195_specialS =
			"\x13C\xFFFF}>";
		private static readonly string[] DFA195_transitionS =
			{
				"\x1\x1\x1\xFFFF\x5\x1\x4\xFFFF\x1\x1\x2\xFFFF\x1\x1\x2\xFFFF\x7\x1\x1"+
				"\xFFFF\x1\x1\x4\xFFFF\x2\x1\x8\xFFFF\x3\x1\x1\xFFFF\x1\x1\x1\xFFFF\x2"+
				"\x1\x2\xFFFF\x1\x1\x2\xFFFF\x1\x1\x1\xFFFF\x1\x1\x2\xFFFF\x1\x1\x1\xFFFF"+
				"\x6\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x6\x1\x1"+
				"\xFFFF\x2\x1\x1\xFFFF\x2\x1\x1\xFFFF\x1\x1\x2\xFFFF\x1\x1\x2\xFFFF\x1"+
				"\x1\x9\xFFFF\x1\x1\x2\xFFFF\x3\x1\x4\xFFFF\x1\x1\x4\xFFFF\x1\x1\x4\xFFFF"+
				"\x1\x1\x1\xFFFF\x1\x1\x3\xFFFF\x1\x1\x2\xFFFF\x4\x1\x4\xFFFF\x1\x1\x4"+
				"\xFFFF\x3\x1\x3\xFFFF\x1\x1\x1\xFFFF\x5\x1\x1\xFFFF\x2\x1\x2\xFFFF\x4"+
				"\x1\x2\xFFFF\x1\x1\x1\xFFFF\x2\x1\x2\xFFFF\x2\x1\x1\xFFFF\x4\x1\x3\xFFFF"+
				"\x1\x1\x3\xFFFF\x4\x1\x1\xFFFF\x5\x1\x3\xFFFF\x1\x1\x2\xFFFF\x1\x1\x1"+
				"\xFFFF\x2\x1\x1\xFFFF\x1\x1\x2\xFFFF\x3\x1\x3\xFFFF\x2\x1\x1\xFFFF\x1"+
				"\x13B\x1\x1\x2\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x4\xFFFF\x2"+
				"\x1\x9\xFFFF\x3\x1\x1\xFFFF\x2\x1\x4\xFFFF\x1\x1\x1\xFFFF\x3\x1\x3\xFFFF"+
				"\x1\x1\x2\xFFFF\x1\x1\x2\xFFFF\x1\x1\x4\xFFFF\x2\x1\x1\xFFFF\x1\x1\x3"+
				"\xFFFF\x2\x1\x2\xFFFF\x1\x1\x4\xFFFF\x1\x13A\x1\xFFFF\xE\x1\x1\xFFFF"+
				"\x1\x1\x2\xFFFF\x8\x1\x3\xFFFF\x3\x1\x2\xFFFF\x1\x1\x2\xFFFF\x1\x1\x2"+
				"\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x7"+
				"\x1\x1\xFFFF\x7\x1\x4\xFFFF\x1\x1\x5\xFFFF\x3\x1\x1\xFFFF\x3\x1\x3\xFFFF"+
				"\x1\x1\x5\xFFFF\xC\x1\x1\xFFFF\x3\x1\x3\xFFFF\x3\x1\x1\xFFFF\x1\x1\x1"+
				"\xFFFF\x4\x1\x1\xFFFF\x2\x1\x1\xE7\x8\xFFFF\x5\x1\x2\xFFFF\x3\x1\x1"+
				"\xFFFF\x2\x1\x1\xFFFF\x2\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x3"+
				"\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x4\xFFFF\x6\x1\x1\xFFFF\x3\x1\x3\xFFFF"+
				"\x1\x1\x1\xFFFF\x1\x1\x4\xFFFF\x4\x1\x3\xFFFF\x1\x1\x1\xFFFF\x4\x1\x1"+
				"\xFFFF\x2\x1\x1\xFFFF\x3\x1\x7\xFFFF\x2\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1"+
				"\x1\x1\xFFFF\x1\x1\x1\xFFFF\x2\x1\x4\xFFFF\x2\x1\x2\xFFFF\x5\x1\x3\xFFFF"+
				"\x4\x1\x3\xFFFF\x4\x1\x1\xFFFF\x2\x1\x1\xFFFF\x4\x1\x5\xFFFF\x2\x1\x1"+
				"\xFFFF\x1\x1\x2\xFFFF\x6\x1\x1\xFFFF\x4\x1\x2\xFFFF\x1\x1\x2\xFFFF\x1"+
				"\x1\x1\xFFFF\x1\x1\x2\xFFFF\x1\x1\x2\xFFFF\x1\x1\x4\xFFFF\x1\x1\x5\xFFFF"+
				"\x1\x1\x4\xFFFF\x4\x1\x4\xFFFF\x2\x1\x2\xFFFF\x2\x1\x1\xFFFF\x1\x1",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				""
			};

		private static readonly short[] DFA195_eot = DFA.UnpackEncodedString(DFA195_eotS);
		private static readonly short[] DFA195_eof = DFA.UnpackEncodedString(DFA195_eofS);
		private static readonly char[] DFA195_min = DFA.UnpackEncodedStringToUnsignedChars(DFA195_minS);
		private static readonly char[] DFA195_max = DFA.UnpackEncodedStringToUnsignedChars(DFA195_maxS);
		private static readonly short[] DFA195_accept = DFA.UnpackEncodedString(DFA195_acceptS);
		private static readonly short[] DFA195_special = DFA.UnpackEncodedString(DFA195_specialS);
		private static readonly short[][] DFA195_transition;

		static DFA195()
		{
			int numStates = DFA195_transitionS.Length;
			DFA195_transition = new short[numStates][];
			for ( int i=0; i < numStates; i++ )
			{
				DFA195_transition[i] = DFA.UnpackEncodedString(DFA195_transitionS[i]);
			}
		}

		public DFA195( BaseRecognizer recognizer )
		{
			this.recognizer = recognizer;
			this.decisionNumber = 195;
			this.eot = DFA195_eot;
			this.eof = DFA195_eof;
			this.min = DFA195_min;
			this.max = DFA195_max;
			this.accept = DFA195_accept;
			this.special = DFA195_special;
			this.transition = DFA195_transition;
		}

		public override string Description { get { return "()* loopback of 1048:3: ( options {k=1; } :opts+= LOW_PRIORITY |opts+= QUICK |opts+= IGNORE )*"; } }

		public override void Error(NoViableAltException nvae)
		{
			DebugRecognitionException(nvae);
		}
	}

	private class DFA265 : DFA
	{
		private const string DFA265_eotS =
			"\x32\xFFFF";
		private const string DFA265_eofS =
			"\x32\xFFFF";
		private const string DFA265_minS =
			"\x1\x7\x6\xFFFF\x1\x128\x26\xFFFF\x1\x5\x3\xFFFF";
		private const string DFA265_maxS =
			"\x1\x26F\x6\xFFFF\x1\x128\x26\xFFFF\x1\x26F\x3\xFFFF";
		private const string DFA265_acceptS =
			"\x1\xFFFF\x1\x1\x1\x2\x1\x3\x1\x4\x1\x5\x1\x6\x1\xFFFF\x1\xA\x1\xB\x1"+
			"\xC\x1\xD\x1\xE\x1\xF\x1\x10\x1\x11\x1\x12\x1\x13\x1\x14\x1\x15\x1\x16"+
			"\x1\x17\x1\x18\x1\x19\x1\x1A\x1\x1B\x1\x1C\x1\x1D\x1\x1E\x1\x1F\x1\x20"+
			"\x1\x21\x1\x22\x1\x23\x1\x24\x1\x25\x1\x26\x1\x27\x1\x28\x1\x29\x1\x2A"+
			"\x1\x2B\x1\x2C\x1\x2D\x1\x2E\x1\x2F\x1\xFFFF\x1\x7\x1\x9\x1\x8";
		private const string DFA265_specialS =
			"\x32\xFFFF}>";
		private static readonly string[] DFA265_transitionS =
			{
				"\x1\x19\xB\xFFFF\x1\x2B\x6\xFFFF\x1\x1\xE\xFFFF\x1\x2\x1\x3\x1\x4\xD"+
				"\xFFFF\x1\x5\x3\xFFFF\x1\x2C\x1\xFFFF\x1\x2B\x5\xFFFF\x1\x2B\x2\xFFFF"+
				"\x1\x2B\xF\xFFFF\x1\x2B\x4\xFFFF\x1\x7\x4\xFFFF\x1\x1A\x1\x1B\x1\x1D"+
				"\x1\x21\x1\x2C\x1\xFFFF\x1\x1C\x3\xFFFF\x1\x2B\x2\xFFFF\x1\x2C\x1\xFFFF"+
				"\x1\x8\x1\xFFFF\x1\x9\x1\xFFFF\x1\x2C\x3B\xFFFF\x1\x1E\x16\xFFFF\x1"+
				"\x2B\x1\x1F\x8\xFFFF\x1\xA\x8\xFFFF\x1\x2C\x3\xFFFF\x1\x2D\x1\xFFFF"+
				"\x1\x2B\xC\xFFFF\x1\x2C\x9\xFFFF\x1\x2C\x14\xFFFF\x1\x2C\x9\xFFFF\x1"+
				"\x2B\x22\xFFFF\x1\xB\xD\xFFFF\x1\x2B\x1\xC\x2\xFFFF\x1\xD\x1\xFFFF\x1"+
				"\x2C\x3\xFFFF\x1\x2B\x4\xFFFF\x1\x2C\x1\xFFFF\x3\x2B\xF\xFFFF\x1\x20"+
				"\x8\xFFFF\x1\x2B\x15\xFFFF\x1\x2B\x4\xFFFF\x2\x2B\x1\xFFFF\x1\x22\xD"+
				"\xFFFF\x1\x2B\x1A\xFFFF\x1\x2B\x1\xFFFF\x1\x2B\xA\xFFFF\x1\x2C\xF\xFFFF"+
				"\x1\x2C\xA\xFFFF\x1\xE\x21\xFFFF\x1\xF\x1\x10\x1\x11\x1\x12\x5\xFFFF"+
				"\x1\x23\x3\xFFFF\x2\x24\x1\x13\x4\xFFFF\x1\x25\x1\x14\x9\xFFFF\x2\x2C"+
				"\x1\x26\x1\x27\x9\xFFFF\x1\x15\x1\xFFFF\x1\x2B\x14\xFFFF\x1\x2C\x4\xFFFF"+
				"\x1\x28\x1\x2A\x1\x29\x7\xFFFF\x1\x16\x1\xFFFF\x1\x17\x1\x18\x3\xFFFF"+
				"\x1\x2B\xB\xFFFF\x1\x2C\x4\xFFFF\x1\x6",
				"",
				"",
				"",
				"",
				"",
				"",
				"\x1\x2E",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"\x1\x31\x1\xFFFF\x5\x31\x4\xFFFF\x1\x31\x2\xFFFF\x1\x31\x2\xFFFF\x7"+
				"\x31\x1\xFFFF\x1\x31\x2\xFFFF\x4\x31\x1\xFFFF\x1\x31\x2\xFFFF\x3\x31"+
				"\x1\xFFFF\x3\x31\x1\xFFFF\x1\x31\x1\xFFFF\x2\x31\x2\xFFFF\x1\x31\x1"+
				"\xFFFF\x2\x31\x1\xFFFF\x2\x31\x1\xFFFF\x1\x31\x1\xFFFF\x8\x31\x1\xFFFF"+
				"\x1\x31\x1\xFFFF\x1\x31\x1\xFFFF\x6\x31\x1\xFFFF\x2\x31\x1\xFFFF\x2"+
				"\x31\x1\xFFFF\x1\x31\x1\xFFFF\x2\x31\x2\xFFFF\x6\x31\x1\xFFFF\x1\x31"+
				"\x2\xFFFF\x2\x31\x1\xFFFF\x4\x31\x1\xFFFF\x1\x31\x1\xFFFF\x1\x31\x4"+
				"\xFFFF\x1\x31\x4\xFFFF\x1\x31\x1\xFFFF\x1\x31\x3\xFFFF\x1\x31\x2\xFFFF"+
				"\x4\x31\x1\x30\x3\xFFFF\x1\x31\x4\xFFFF\x3\x31\x3\xFFFF\x1\x31\x1\xFFFF"+
				"\x5\x31\x1\xFFFF\x2\x31\x2\xFFFF\x5\x31\x1\xFFFF\x1\x31\x1\xFFFF\x6"+
				"\x31\x1\xFFFF\x4\x31\x3\xFFFF\x1\x31\x3\xFFFF\x2\x31\x1\xFFFF\x1\x31"+
				"\x1\xFFFF\x6\x31\x2\xFFFF\x1\x31\x2\xFFFF\x4\x31\x1\xFFFF\x2\x31\x1"+
				"\xFFFF\x3\x31\x3\xFFFF\x3\x31\x1\xFFFF\x1\x31\x2\xFFFF\x1\x31\x1\xFFFF"+
				"\x1\x31\x1\xFFFF\x1\x31\x3\xFFFF\x3\x31\x7\xFFFF\x1\x31\x1\xFFFF\x3"+
				"\x31\x1\xFFFF\x2\x31\x4\xFFFF\x1\x31\x1\xFFFF\x3\x31\x3\xFFFF\x2\x31"+
				"\x1\xFFFF\x1\x31\x2\xFFFF\x1\x31\x4\xFFFF\x2\x31\x1\xFFFF\x1\x31\x3"+
				"\xFFFF\x2\x31\x2\xFFFF\x1\x31\x5\xFFFF\xF\x31\x1\xFFFF\x1\x31\x1\xFFFF"+
				"\x9\x31\x3\xFFFF\x4\x31\x1\xFFFF\x4\x31\x2\xFFFF\x3\x31\x1\xFFFF\x1"+
				"\x31\x1\xFFFF\x1\x31\x1\x2F\x7\x31\x1\xFFFF\x8\x31\x1\xFFFF\x3\x31\x1"+
				"\xFFFF\x1\x31\x1\xFFFF\x1\x31\x1\xFFFF\x3\x31\x1\xFFFF\x3\x31\x3\xFFFF"+
				"\x1\x31\x5\xFFFF\x11\x31\x2\xFFFF\x3\x31\x1\xFFFF\x1\x31\x1\xFFFF\x4"+
				"\x31\x1\xFFFF\x3\x31\x8\xFFFF\x5\x31\x2\xFFFF\x3\x31\x1\xFFFF\x2\x31"+
				"\x1\xFFFF\x6\x31\x1\xFFFF\x3\x31\x1\xFFFF\x1\x31\x1\xFFFF\x1\x31\x1"+
				"\xFFFF\x1\x31\x2\xFFFF\x6\x31\x1\xFFFF\x3\x31\x3\xFFFF\x1\x31\x1\xFFFF"+
				"\x1\x31\x4\xFFFF\x6\x31\x1\xFFFF\x1\x31\x1\xFFFF\x4\x31\x1\xFFFF\x2"+
				"\x31\x1\xFFFF\x3\x31\x7\xFFFF\x2\x31\x1\xFFFF\x1\x31\x1\xFFFF\x1\x31"+
				"\x1\xFFFF\x1\x31\x1\xFFFF\x8\x31\x1\xFFFF\xF\x31\x1\xFFFF\x4\x31\x1"+
				"\xFFFF\x2\x31\x1\xFFFF\x4\x31\x5\xFFFF\x2\x31\x1\xFFFF\x9\x31\x1\xFFFF"+
				"\x4\x31\x2\xFFFF\x1\x31\x2\xFFFF\x1\x31\x1\xFFFF\x1\x31\x2\xFFFF\x1"+
				"\x31\x2\xFFFF\x1\x31\x1\xFFFF\x4\x31\x1\xFFFF\x1\x31\x3\xFFFF\x2\x31"+
				"\x1\xFFFF\x6\x31\x4\xFFFF\x2\x31\x2\xFFFF\x2\x31\x1\xFFFF\x1\x31\x4"+
				"\xFFFF\x1\x31",
				"",
				"",
				""
			};

		private static readonly short[] DFA265_eot = DFA.UnpackEncodedString(DFA265_eotS);
		private static readonly short[] DFA265_eof = DFA.UnpackEncodedString(DFA265_eofS);
		private static readonly char[] DFA265_min = DFA.UnpackEncodedStringToUnsignedChars(DFA265_minS);
		private static readonly char[] DFA265_max = DFA.UnpackEncodedStringToUnsignedChars(DFA265_maxS);
		private static readonly short[] DFA265_accept = DFA.UnpackEncodedString(DFA265_acceptS);
		private static readonly short[] DFA265_special = DFA.UnpackEncodedString(DFA265_specialS);
		private static readonly short[][] DFA265_transition;

		static DFA265()
		{
			int numStates = DFA265_transitionS.Length;
			DFA265_transition = new short[numStates][];
			for ( int i=0; i < numStates; i++ )
			{
				DFA265_transition[i] = DFA.UnpackEncodedString(DFA265_transitionS[i]);
			}
		}

		public DFA265( BaseRecognizer recognizer )
		{
			this.recognizer = recognizer;
			this.decisionNumber = 265;
			this.eot = DFA265_eot;
			this.eof = DFA265_eof;
			this.min = DFA265_min;
			this.max = DFA265_max;
			this.accept = DFA265_accept;
			this.special = DFA265_special;
			this.transition = DFA265_transition;
		}

		public override string Description { get { return "1209:1: functionCall : ( AVG LPAREN expr RPAREN -> ^( FUNC ^( AVG expr ) ) | BIT_AND LPAREN expr RPAREN -> ^( FUNC ^( BIT_AND expr ) ) | BIT_OR LPAREN expr RPAREN -> ^( FUNC ^( BIT_OR expr ) ) | BIT_XOR LPAREN expr RPAREN -> ^( FUNC ^( BIT_XOR expr ) ) | CAST LPAREN expr AS cast_data_type RPAREN -> ^( FUNC ^( CAST expr cast_data_type ) ) | CONCAT LPAREN exprList RPAREN -> ^( FUNC ^( CONCAT exprList ) ) | COUNT LPAREN MULT RPAREN -> ^( FUNC ^( COUNT_STAR[$MULT] ) ) | COUNT LPAREN expr RPAREN -> ^( FUNC ^( COUNT expr ) ) | COUNT LPAREN DISTINCT exprList RPAREN -> ^( FUNC ^( COUNT exprList DISTINCT ) ) | DATE_ADD LPAREN date= expr COMMA INTERVAL interval= expr timeUnit RPAREN -> ^( FUNC ^( DATE_ADD $date $interval timeUnit ) ) | DATE_SUB LPAREN date= expr COMMA INTERVAL interval= expr timeUnit RPAREN -> ^( FUNC ^( DATE_SUB $date $interval timeUnit ) ) | GROUP_CONCAT LPAREN ( DISTINCT )? exprList ( order_by )? ( SEPARATOR text_string )? RPAREN -> ^( FUNC ^( GROUP_CONCAT exprList ( DISTINCT )? ( order_by )? ( text_string )? ) ) | MAX LPAREN ( DISTINCT )? expr RPAREN -> ^( FUNC ^( MAX expr ( DISTINCT )? ) ) | MID LPAREN expr COMMA expr COMMA expr RPAREN -> ^( FUNC ^( MID ( expr )+ ) ) | MIN LPAREN ( DISTINCT )? expr RPAREN -> ^( FUNC ^( MIN expr ( DISTINCT )? ) ) | SESSION_USER LPAREN RPAREN -> ^( FUNC ^( SESSION_USER LPAREN ) ) | STD LPAREN expr RPAREN -> ^( FUNC ^( STD expr ) ) | STDDEV LPAREN expr RPAREN -> ^( FUNC ^( STDDEV expr ) ) | STDDEV_POP LPAREN expr RPAREN -> ^( FUNC ^( STDDEV_POP expr ) ) | STDDEV_SAMP LPAREN expr RPAREN -> ^( FUNC ^( STDDEV_SAMP expr ) ) | SUM LPAREN ( DISTINCT )? expr RPAREN -> ^( FUNC ^( SUM expr ( DISTINCT )? ) ) | SYSTEM_USER LPAREN RPAREN -> ^( FUNC ^( SYSTEM_USER LPAREN ) ) | TRIM LPAREN ( (pos= BOTH |pos= LEADING |pos= TRAILING ) (remstr= expr )? FROM str= expr -> ^( FUNC ^( TRIM $str ( $pos)? ( $remstr)? ) ) |str1= expr ( FROM str2= expr -> ^( FUNC ^( TRIM $str2 $str1) ) | -> ^( FUNC ^( TRIM $str1) ) ) ) RPAREN | VARIANCE LPAREN expr RPAREN -> ^( FUNC ^( VARIANCE expr ) ) | VAR_POP LPAREN expr RPAREN -> ^( FUNC ^( VAR_POP expr ) ) | VAR_SAMP LPAREN expr RPAREN -> ^( FUNC ^( VAR_SAMP expr ) ) | ADDDATE LPAREN date= expr COMMA ( ( INTERVAL )=> INTERVAL interval= expr timeUnit RPAREN -> ^( FUNC ^( ADDDATE $date $interval timeUnit ) ) |days= expr RPAREN -> ^( FUNC ^( ADDDATE $date $days) ) ) | CURDATE LPAREN RPAREN -> ^( FUNC ^( CURDATE LPAREN ) ) | CURRENT_DATE ( LPAREN RPAREN )? -> ^( FUNC ^( CURRENT_DATE ( LPAREN )? ) ) | CURTIME LPAREN RPAREN -> ^( FUNC ^( CURTIME LPAREN ) ) | CURRENT_TIME ( LPAREN RPAREN )? -> ^( FUNC ^( CURRENT_TIME ( LPAREN )? ) ) | EXTRACT LPAREN timeUnit FROM expr RPAREN -> ^( FUNC ^( EXTRACT timeUnit expr ) ) | GET_FORMAT LPAREN (type= DATE |type= TIME |type= DATETIME ) locale= expr RPAREN -> ^( FUNC ^( GET_FORMAT $type $locale) ) | NOW LPAREN RPAREN -> ^( FUNC ^( NOW LPAREN ) ) | CURRENT_TIMESTAMP ( LPAREN RPAREN )? -> ^( FUNC ^( CURRENT_TIMESTAMP ( LPAREN )? ) ) | POSITION LPAREN substr= expr IN str= expr RPAREN -> ^( FUNC ^( POSITION $substr $str) ) | SUBDATE LPAREN date= expr COMMA (days= expr -> ^( FUNC ^( SUBDATE $date $days) ) | ( INTERVAL )=> INTERVAL interval= expr timeUnit -> ^( FUNC ^( SUBDATE $date $interval timeUnit ) ) ) RPAREN | (funcName= SUBSTR |funcName= SUBSTRING ) LPAREN str= expr ( COMMA position= expr COMMA (len= expr )? -> ^( FUNC ^( $funcName $str $position ( $len)? ) ) | FROM position= expr ( FOR len= expr )? -> ^( FUNC ^( $funcName $str $position ( $len)? ( FROM )? ) ) ) RPAREN | SYSDATE LPAREN RPAREN -> ^( FUNC ^( SYSDATE LPAREN ) ) | TIMESTAMP_ADD LPAREN timestampUnit interval= expr date= expr RPAREN -> ^( FUNC ^( TIMESTAMP_ADD $date $interval timestampUnit ) ) | TIMESTAMP_DIFF LPAREN timestampUnit date1= expr date2= expr RPAREN -> ^( FUNC ^( TIMESTAMP_DIFF $date1 $date2 timestampUnit ) ) | UTC_DATE ( LPAREN RPAREN )? -> ^( FUNC ^( UTC_DATE ( LPAREN )? ) ) | UTC_TIMESTAMP ( LPAREN RPAREN )? -> ^( FUNC ^( UTC_TIMESTAMP ( LPAREN )? ) ) | UTC_TIME ( LPAREN RPAREN )? -> ^( FUNC ^( UTC_TIME ( LPAREN )? ) ) | functionCall_conflicts | functionCall_reserved |name= ID args= parenOptExprList -> ^( FUNC ^( $name $args) ) );"; } }

		public override void Error(NoViableAltException nvae)
		{
			DebugRecognitionException(nvae);
		}
	}

	private class DFA252 : DFA
	{
		private const string DFA252_eotS =
			"\x17D\xFFFF";
		private const string DFA252_eofS =
			"\x17D\xFFFF";
		private const string DFA252_minS =
			"\x1\x5\x1\x0\x17B\xFFFF";
		private const string DFA252_maxS =
			"\x1\x26F\x1\x0\x17B\xFFFF";
		private const string DFA252_acceptS =
			"\x2\xFFFF\x1\x2\x179\xFFFF\x1\x1";
		private const string DFA252_specialS =
			"\x1\xFFFF\x1\x0\x17B\xFFFF}>";
		private static readonly string[] DFA252_transitionS =
			{
				"\x1\x2\x1\xFFFF\x5\x2\x4\xFFFF\x1\x2\x2\xFFFF\x1\x2\x2\xFFFF\x7\x2\x1"+
				"\xFFFF\x1\x2\x2\xFFFF\x4\x2\x1\xFFFF\x1\x2\x2\xFFFF\x3\x2\x1\xFFFF\x3"+
				"\x2\x1\xFFFF\x1\x2\x1\xFFFF\x2\x2\x2\xFFFF\x1\x2\x1\xFFFF\x2\x2\x1\xFFFF"+
				"\x2\x2\x1\xFFFF\x1\x2\x1\xFFFF\x8\x2\x1\xFFFF\x1\x2\x1\xFFFF\x1\x2\x1"+
				"\xFFFF\x6\x2\x1\xFFFF\x2\x2\x1\xFFFF\x2\x2\x1\xFFFF\x1\x2\x1\xFFFF\x2"+
				"\x2\x2\xFFFF\x6\x2\x1\xFFFF\x1\x2\x2\xFFFF\x2\x2\x1\xFFFF\x4\x2\x1\xFFFF"+
				"\x1\x2\x1\xFFFF\x1\x2\x4\xFFFF\x1\x2\x4\xFFFF\x1\x2\x1\xFFFF\x1\x2\x3"+
				"\xFFFF\x1\x2\x2\xFFFF\x4\x2\x4\xFFFF\x1\x2\x4\xFFFF\x3\x2\x3\xFFFF\x1"+
				"\x2\x1\xFFFF\x5\x2\x1\xFFFF\x2\x2\x2\xFFFF\x5\x2\x1\xFFFF\x1\x2\x1\xFFFF"+
				"\x6\x2\x1\xFFFF\x4\x2\x3\xFFFF\x1\x2\x3\xFFFF\x2\x2\x1\xFFFF\x1\x2\x1"+
				"\xFFFF\x6\x2\x2\xFFFF\x1\x2\x2\xFFFF\x4\x2\x1\xFFFF\x2\x2\x1\xFFFF\x3"+
				"\x2\x3\xFFFF\x3\x2\x1\xFFFF\x1\x2\x2\xFFFF\x1\x2\x1\xFFFF\x1\x2\x1\xFFFF"+
				"\x1\x2\x3\xFFFF\x3\x2\x7\xFFFF\x1\x1\x1\xFFFF\x3\x2\x1\xFFFF\x2\x2\x4"+
				"\xFFFF\x1\x2\x1\xFFFF\x3\x2\x3\xFFFF\x2\x2\x1\xFFFF\x1\x2\x2\xFFFF\x1"+
				"\x2\x4\xFFFF\x2\x2\x1\xFFFF\x1\x2\x3\xFFFF\x2\x2\x2\xFFFF\x1\x2\x5\xFFFF"+
				"\xF\x2\x1\xFFFF\x1\x2\x1\xFFFF\x9\x2\x3\xFFFF\x4\x2\x1\xFFFF\x4\x2\x2"+
				"\xFFFF\x3\x2\x1\xFFFF\x1\x2\x1\xFFFF\x1\x2\x1\xFFFF\x7\x2\x1\xFFFF\x8"+
				"\x2\x1\xFFFF\x3\x2\x1\xFFFF\x1\x2\x1\xFFFF\x1\x2\x1\xFFFF\x3\x2\x1\xFFFF"+
				"\x3\x2\x3\xFFFF\x1\x2\x5\xFFFF\x11\x2\x2\xFFFF\x3\x2\x1\xFFFF\x1\x2"+
				"\x1\xFFFF\x4\x2\x1\xFFFF\x3\x2\x8\xFFFF\x5\x2\x2\xFFFF\x3\x2\x1\xFFFF"+
				"\x2\x2\x1\xFFFF\x6\x2\x1\xFFFF\x3\x2\x1\xFFFF\x1\x2\x1\xFFFF\x1\x2\x1"+
				"\xFFFF\x1\x2\x2\xFFFF\x6\x2\x1\xFFFF\x3\x2\x3\xFFFF\x1\x2\x1\xFFFF\x1"+
				"\x2\x4\xFFFF\x6\x2\x1\xFFFF\x1\x2\x1\xFFFF\x4\x2\x1\xFFFF\x2\x2\x1\xFFFF"+
				"\x3\x2\x7\xFFFF\x2\x2\x1\xFFFF\x1\x2\x1\xFFFF\x1\x2\x1\xFFFF\x1\x2\x1"+
				"\xFFFF\x8\x2\x1\xFFFF\xF\x2\x1\xFFFF\x4\x2\x1\xFFFF\x2\x2\x1\xFFFF\x4"+
				"\x2\x5\xFFFF\x2\x2\x1\xFFFF\x9\x2\x1\xFFFF\x4\x2\x2\xFFFF\x1\x2\x2\xFFFF"+
				"\x1\x2\x1\xFFFF\x1\x2\x2\xFFFF\x1\x2\x2\xFFFF\x1\x2\x1\xFFFF\x4\x2\x1"+
				"\xFFFF\x1\x2\x3\xFFFF\x2\x2\x1\xFFFF\x6\x2\x4\xFFFF\x2\x2\x2\xFFFF\x2"+
				"\x2\x1\xFFFF\x1\x2\x4\xFFFF\x1\x2",
				"\x1\xFFFF",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				""
			};

		private static readonly short[] DFA252_eot = DFA.UnpackEncodedString(DFA252_eotS);
		private static readonly short[] DFA252_eof = DFA.UnpackEncodedString(DFA252_eofS);
		private static readonly char[] DFA252_min = DFA.UnpackEncodedStringToUnsignedChars(DFA252_minS);
		private static readonly char[] DFA252_max = DFA.UnpackEncodedStringToUnsignedChars(DFA252_maxS);
		private static readonly short[] DFA252_accept = DFA.UnpackEncodedString(DFA252_acceptS);
		private static readonly short[] DFA252_special = DFA.UnpackEncodedString(DFA252_specialS);
		private static readonly short[][] DFA252_transition;

		static DFA252()
		{
			int numStates = DFA252_transitionS.Length;
			DFA252_transition = new short[numStates][];
			for ( int i=0; i < numStates; i++ )
			{
				DFA252_transition[i] = DFA.UnpackEncodedString(DFA252_transitionS[i]);
			}
		}

		public DFA252( BaseRecognizer recognizer, SpecialStateTransitionHandler specialStateTransition )
			: base(specialStateTransition)
		{
			this.recognizer = recognizer;
			this.decisionNumber = 252;
			this.eot = DFA252_eot;
			this.eof = DFA252_eof;
			this.min = DFA252_min;
			this.max = DFA252_max;
			this.accept = DFA252_accept;
			this.special = DFA252_special;
			this.transition = DFA252_transition;
		}

		public override string Description { get { return "1255:3: ( ( INTERVAL )=> INTERVAL interval= expr timeUnit RPAREN -> ^( FUNC ^( ADDDATE $date $interval timeUnit ) ) |days= expr RPAREN -> ^( FUNC ^( ADDDATE $date $days) ) )"; } }

		public override void Error(NoViableAltException nvae)
		{
			DebugRecognitionException(nvae);
		}
	}

	private int SpecialStateTransition252(DFA dfa, int s, IIntStream _input)
	{
		ITokenStream input = (ITokenStream)_input;
		int _s = s;
		switch (s)
		{
			case 0:
				int LA252_1 = input.LA(1);


				int index252_1 = input.Index;
				input.Rewind();
				s = -1;
				if ((EvaluatePredicate(synpred7_MySQL51Parser_fragment))) {s = 380;}

				else if ((true)) {s = 2;}


				input.Seek(index252_1);
				if (s >= 0) return s;
				break;
		}
		if (state.backtracking > 0) {state.failed=true; return -1;}
		NoViableAltException nvae = new NoViableAltException(dfa.Description, 252, _s, input);
		dfa.Error(nvae);
		throw nvae;
	}
	private class DFA257 : DFA
	{
		private const string DFA257_eotS =
			"\x17D\xFFFF";
		private const string DFA257_eofS =
			"\x17D\xFFFF";
		private const string DFA257_minS =
			"\x1\x5\x6\xFFFF\x1\x0\x175\xFFFF";
		private const string DFA257_maxS =
			"\x1\x26F\x6\xFFFF\x1\x0\x175\xFFFF";
		private const string DFA257_acceptS =
			"\x1\xFFFF\x1\x1\x17A\xFFFF\x1\x2";
		private const string DFA257_specialS =
			"\x7\xFFFF\x1\x0\x175\xFFFF}>";
		private static readonly string[] DFA257_transitionS =
			{
				"\x1\x1\x1\xFFFF\x5\x1\x4\xFFFF\x1\x1\x2\xFFFF\x1\x1\x2\xFFFF\x7\x1\x1"+
				"\xFFFF\x1\x1\x2\xFFFF\x4\x1\x1\xFFFF\x1\x1\x2\xFFFF\x3\x1\x1\xFFFF\x3"+
				"\x1\x1\xFFFF\x1\x1\x1\xFFFF\x2\x1\x2\xFFFF\x1\x1\x1\xFFFF\x2\x1\x1\xFFFF"+
				"\x2\x1\x1\xFFFF\x1\x1\x1\xFFFF\x8\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1"+
				"\xFFFF\x6\x1\x1\xFFFF\x2\x1\x1\xFFFF\x2\x1\x1\xFFFF\x1\x1\x1\xFFFF\x2"+
				"\x1\x2\xFFFF\x6\x1\x1\xFFFF\x1\x1\x2\xFFFF\x2\x1\x1\xFFFF\x4\x1\x1\xFFFF"+
				"\x1\x1\x1\xFFFF\x1\x1\x4\xFFFF\x1\x1\x4\xFFFF\x1\x1\x1\xFFFF\x1\x1\x3"+
				"\xFFFF\x1\x1\x2\xFFFF\x4\x1\x4\xFFFF\x1\x1\x4\xFFFF\x3\x1\x3\xFFFF\x1"+
				"\x1\x1\xFFFF\x5\x1\x1\xFFFF\x2\x1\x2\xFFFF\x5\x1\x1\xFFFF\x1\x1\x1\xFFFF"+
				"\x6\x1\x1\xFFFF\x4\x1\x3\xFFFF\x1\x1\x3\xFFFF\x2\x1\x1\xFFFF\x1\x1\x1"+
				"\xFFFF\x6\x1\x2\xFFFF\x1\x1\x2\xFFFF\x4\x1\x1\xFFFF\x2\x1\x1\xFFFF\x3"+
				"\x1\x3\xFFFF\x3\x1\x1\xFFFF\x1\x1\x2\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF"+
				"\x1\x1\x3\xFFFF\x3\x1\x7\xFFFF\x1\x7\x1\xFFFF\x3\x1\x1\xFFFF\x2\x1\x4"+
				"\xFFFF\x1\x1\x1\xFFFF\x3\x1\x3\xFFFF\x2\x1\x1\xFFFF\x1\x1\x2\xFFFF\x1"+
				"\x1\x4\xFFFF\x2\x1\x1\xFFFF\x1\x1\x3\xFFFF\x2\x1\x2\xFFFF\x1\x1\x5\xFFFF"+
				"\xF\x1\x1\xFFFF\x1\x1\x1\xFFFF\x9\x1\x3\xFFFF\x4\x1\x1\xFFFF\x4\x1\x2"+
				"\xFFFF\x3\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x7\x1\x1\xFFFF\x8"+
				"\x1\x1\xFFFF\x3\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x3\x1\x1\xFFFF"+
				"\x3\x1\x3\xFFFF\x1\x1\x5\xFFFF\x11\x1\x2\xFFFF\x3\x1\x1\xFFFF\x1\x1"+
				"\x1\xFFFF\x4\x1\x1\xFFFF\x3\x1\x8\xFFFF\x5\x1\x2\xFFFF\x3\x1\x1\xFFFF"+
				"\x2\x1\x1\xFFFF\x6\x1\x1\xFFFF\x3\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1"+
				"\xFFFF\x1\x1\x2\xFFFF\x6\x1\x1\xFFFF\x3\x1\x3\xFFFF\x1\x1\x1\xFFFF\x1"+
				"\x1\x4\xFFFF\x6\x1\x1\xFFFF\x1\x1\x1\xFFFF\x4\x1\x1\xFFFF\x2\x1\x1\xFFFF"+
				"\x3\x1\x7\xFFFF\x2\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1\xFFFF\x1\x1\x1"+
				"\xFFFF\x8\x1\x1\xFFFF\xF\x1\x1\xFFFF\x4\x1\x1\xFFFF\x2\x1\x1\xFFFF\x4"+
				"\x1\x5\xFFFF\x2\x1\x1\xFFFF\x9\x1\x1\xFFFF\x4\x1\x2\xFFFF\x1\x1\x2\xFFFF"+
				"\x1\x1\x1\xFFFF\x1\x1\x2\xFFFF\x1\x1\x2\xFFFF\x1\x1\x1\xFFFF\x4\x1\x1"+
				"\xFFFF\x1\x1\x3\xFFFF\x2\x1\x1\xFFFF\x6\x1\x4\xFFFF\x2\x1\x2\xFFFF\x2"+
				"\x1\x1\xFFFF\x1\x1\x4\xFFFF\x1\x1",
				"",
				"",
				"",
				"",
				"",
				"",
				"\x1\xFFFF",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				"",
				""
			};

		private static readonly short[] DFA257_eot = DFA.UnpackEncodedString(DFA257_eotS);
		private static readonly short[] DFA257_eof = DFA.UnpackEncodedString(DFA257_eofS);
		private static readonly char[] DFA257_min = DFA.UnpackEncodedStringToUnsignedChars(DFA257_minS);
		private static readonly char[] DFA257_max = DFA.UnpackEncodedStringToUnsignedChars(DFA257_maxS);
		private static readonly short[] DFA257_accept = DFA.UnpackEncodedString(DFA257_acceptS);
		private static readonly short[] DFA257_special = DFA.UnpackEncodedString(DFA257_specialS);
		private static readonly short[][] DFA257_transition;

		static DFA257()
		{
			int numStates = DFA257_transitionS.Length;
			DFA257_transition = new short[numStates][];
			for ( int i=0; i < numStates; i++ )
			{
				DFA257_transition[i] = DFA.UnpackEncodedString(DFA257_transitionS[i]);
			}
		}

		public DFA257( BaseRecognizer recognizer, SpecialStateTransitionHandler specialStateTransition )
			: base(specialStateTransition)
		{
			this.recognizer = recognizer;
			this.decisionNumber = 257;
			this.eot = DFA257_eot;
			this.eof = DFA257_eof;
			this.min = DFA257_min;
			this.max = DFA257_max;
			this.accept = DFA257_accept;
			this.special = DFA257_special;
			this.transition = DFA257_transition;
		}

		public override string Description { get { return "1271:4: (days= expr -> ^( FUNC ^( SUBDATE $date $days) ) | ( INTERVAL )=> INTERVAL interval= expr timeUnit -> ^( FUNC ^( SUBDATE $date $interval timeUnit ) ) )"; } }

		public override void Error(NoViableAltException nvae)
		{
			DebugRecognitionException(nvae);
		}
	}

	private int SpecialStateTransition257(DFA dfa, int s, IIntStream _input)
	{
		ITokenStream input = (ITokenStream)_input;
		int _s = s;
		switch (s)
		{
			case 0:
				int LA257_7 = input.LA(1);


				int index257_7 = input.Index;
				input.Rewind();
				s = -1;
				if ((true)) {s = 1;}

				else if ((EvaluatePredicate(synpred8_MySQL51Parser_fragment))) {s = 380;}


				input.Seek(index257_7);
				if (s >= 0) return s;
				break;
		}
		if (state.backtracking > 0) {state.failed=true; return -1;}
		NoViableAltException nvae = new NoViableAltException(dfa.Description, 257, _s, input);
		dfa.Error(nvae);
		throw nvae;
	}

	#endregion DFA

	#region Follow sets
	private static class Follow
	{
		public static readonly BitSet _statement_in_statement_list121 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10000000UL});
		public static readonly BitSet _SEMI_in_statement_list124 = new BitSet(new ulong[]{0x40000000UL,0x80006000UL,0x400000010004UL,0x400000000000UL,0x10020000000UL,0x0UL,0x20000000000000UL,0xA008080800UL,0x2UL,0x12UL});
		public static readonly BitSet _statement_in_statement_list128 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10000000UL});
		public static readonly BitSet _SEMI_in_statement_list132 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10000000UL});
		public static readonly BitSet _select_in_statement154 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _do_stmt_in_statement160 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _show_stmt_in_statement166 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _explain_stmt_in_statement172 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _insert_in_statement178 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _update_in_statement184 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _delete_in_statement190 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _transaction_in_statement196 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _create_table_in_statement202 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COMMENT_RULE_in_statement208 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DO_in_do_stmt224 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _exprList_in_do_stmt226 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SHOW_in_show_stmt248 = new BitSet(new ulong[]{0x4000000800800000UL,0x200088000500UL,0x10980000000UL,0x80000004450UL,0x4000000UL,0x100000000000000UL,0x76002000UL,0x400200000UL,0x1000018000410UL,0x100000020400000UL});
		public static readonly BitSet _AUTHORS_in_show_stmt263 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BINLOG_in_show_stmt286 = new BitSet(new ulong[]{0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _EVENTS_in_show_stmt288 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x1000000008UL,0x100000UL});
		public static readonly BitSet _IN_in_show_stmt291 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _STRING_in_show_stmt295 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x8UL,0x100000UL});
		public static readonly BitSet _FROM_in_show_stmt300 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL});
		public static readonly BitSet _NUMBER_in_show_stmt302 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x100000UL});
		public static readonly BitSet _limit_in_show_stmt306 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CHARACTER_in_show_stmt337 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000000000UL});
		public static readonly BitSet _SET_in_show_stmt339 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _like_or_where_in_show_stmt341 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COLLATION_in_show_stmt365 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _like_or_where_in_show_stmt367 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FULL_in_show_stmt393 = new BitSet(new ulong[]{0x0UL,0x400UL});
		public static readonly BitSet _COLUMNS_in_show_stmt396 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x1000000008UL});
		public static readonly BitSet _FROM_in_show_stmt399 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _IN_in_show_stmt401 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _simple_table_ref_no_alias_in_show_stmt404 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x1000000008UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _FROM_in_show_stmt408 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _IN_in_show_stmt410 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_show_stmt413 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _like_or_where_in_show_stmt417 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CONTRIBUTORS_in_show_stmt448 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CREATE_in_show_stmt468 = new BitSet(new ulong[]{0x0UL,0x100000000000UL});
		public static readonly BitSet _DATABASE_in_show_stmt470 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_show_stmt472 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CREATE_in_show_stmt495 = new BitSet(new ulong[]{0x0UL,0x0UL,0x8000000000UL});
		public static readonly BitSet _EVENT_in_show_stmt497 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_show_stmt499 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CREATE_in_show_stmt525 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x40UL});
		public static readonly BitSet _FUNCTION_in_show_stmt527 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_show_stmt529 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CREATE_in_show_stmt552 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x4000000UL});
		public static readonly BitSet _PROCEDURE_in_show_stmt554 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_show_stmt556 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CREATE_in_show_stmt580 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x8000000UL});
		public static readonly BitSet _TABLE_in_show_stmt582 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _simple_table_ref_no_alias_in_show_stmt584 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CREATE_in_show_stmt608 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x800000000000UL});
		public static readonly BitSet _TRIGGER_in_show_stmt610 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_show_stmt612 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CREATE_in_show_stmt636 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x8000000UL});
		public static readonly BitSet _VIEW_in_show_stmt638 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_show_stmt640 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DATABASES_in_show_stmt665 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _like_or_where_in_show_stmt667 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ENGINE_in_show_stmt691 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01CD4B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _INNODB_in_show_stmt694 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10000000UL,0x0UL,0x0UL,0x10UL});
		public static readonly BitSet _ident_in_show_stmt698 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10000000UL,0x0UL,0x0UL,0x10UL});
		public static readonly BitSet _STATUS_in_show_stmt704 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MUTEX_in_show_stmt710 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _STORAGE_in_show_stmt760 = new BitSet(new ulong[]{0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _ENGINES_in_show_stmt763 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ERRORS_in_show_stmt785 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x100000UL});
		public static readonly BitSet _limit_in_show_stmt787 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FULL_in_show_stmt814 = new BitSet(new ulong[]{0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _EVENTS_in_show_stmt817 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FUNCTION_in_show_stmt844 = new BitSet(new ulong[]{0x0UL,0x40UL});
		public static readonly BitSet _CODE_in_show_stmt846 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_show_stmt848 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FUNCTION_in_show_stmt873 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10UL});
		public static readonly BitSet _STATUS_in_show_stmt875 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _like_or_where_in_show_stmt877 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _GRANTS_in_show_stmt903 = new BitSet(new ulong[]{0x0UL,0x0UL,0x4000000000000000UL});
		public static readonly BitSet _FOR_in_show_stmt905 = new BitSet(new ulong[]{0x0UL,0x4000000000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x200UL});
		public static readonly BitSet _USER_HOST_in_show_stmt919 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CURRENT_USER_in_show_stmt933 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CURRENT_USER_in_show_stmt947 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_show_stmt949 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_show_stmt951 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INDEX_SYM_in_show_stmt991 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x8UL});
		public static readonly BitSet _FROM_in_show_stmt993 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _simple_table_ref_no_alias_in_show_stmt995 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x1000000008UL});
		public static readonly BitSet _FROM_in_show_stmt999 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _IN_in_show_stmt1001 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_show_stmt1004 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INNODB_in_show_stmt1030 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10UL});
		public static readonly BitSet _STATUS_in_show_stmt1032 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _OPEN_in_show_stmt1057 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10000000UL});
		public static readonly BitSet _TABLES_in_show_stmt1059 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x1000000008UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _FROM_in_show_stmt1063 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _IN_in_show_stmt1065 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_show_stmt1068 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _like_or_where_in_show_stmt1072 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PLUGINS_in_show_stmt1098 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PROCEDURE_in_show_stmt1121 = new BitSet(new ulong[]{0x0UL,0x40UL});
		public static readonly BitSet _CODE_in_show_stmt1123 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_show_stmt1125 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PROCEDURE_in_show_stmt1153 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10UL});
		public static readonly BitSet _STATUS_in_show_stmt1155 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _like_or_where_in_show_stmt1157 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PRIVILEGES_in_show_stmt1181 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FULL_in_show_stmt1205 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10000000UL});
		public static readonly BitSet _PROCESSLIST_in_show_stmt1208 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PROFILE_in_show_stmt1230 = new BitSet(new ulong[]{0x200000001000UL,0x42000000UL,0x0UL,0x1000000000000000UL,0x0UL,0x40UL,0x10UL,0x4000000000000UL,0x800000UL});
		public static readonly BitSet _show_profile_types_in_show_stmt1232 = new BitSet(new ulong[]{0x2UL,0x0UL,0x4000000000000000UL,0x0UL,0x100000UL});
		public static readonly BitSet _FOR_in_show_stmt1235 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x200000000UL});
		public static readonly BitSet _QUERY_in_show_stmt1237 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL});
		public static readonly BitSet _NUMBER_in_show_stmt1239 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x100000UL});
		public static readonly BitSet _limit_in_show_stmt1243 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PROFILES_in_show_stmt1271 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SCHEDULER_in_show_stmt1293 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10UL});
		public static readonly BitSet _STATUS_in_show_stmt1295 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _optScopeModifier_in_show_stmt1317 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10UL});
		public static readonly BitSet _STATUS_in_show_stmt1319 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _like_or_where_in_show_stmt1321 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TABLE_in_show_stmt1348 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10UL});
		public static readonly BitSet _STATUS_in_show_stmt1350 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x1000000008UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _FROM_in_show_stmt1354 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _IN_in_show_stmt1356 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_show_stmt1359 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _like_or_where_in_show_stmt1363 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TABLES_in_show_stmt1397 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x1000000008UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _FROM_in_show_stmt1401 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _IN_in_show_stmt1403 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_show_stmt1406 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _like_or_where_in_show_stmt1410 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TRIGGERS_in_show_stmt1445 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x1000000008UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _FROM_in_show_stmt1449 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _IN_in_show_stmt1451 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_show_stmt1454 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _like_or_where_in_show_stmt1458 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _optScopeModifier_in_show_stmt1491 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x400000UL});
		public static readonly BitSet _VARIABLES_in_show_stmt1493 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x80000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _like_or_where_in_show_stmt1495 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _WARNINGS_in_show_stmt1523 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x100000UL});
		public static readonly BitSet _limit_in_show_stmt1525 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _GLOBAL_in_optScopeModifier1563 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SESSION_in_optScopeModifier1576 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LOCAL_in_optScopeModifier1590 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ALL_in_show_profile_types1620 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BLOCK_in_show_profile_types1626 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x800000000000000UL});
		public static readonly BitSet _IO_in_show_profile_types1628 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CONTEXT_in_show_profile_types1634 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000UL});
		public static readonly BitSet _SWITCHES_in_show_profile_types1636 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CPU_in_show_profile_types1642 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _IPC_in_show_profile_types1648 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MEMORY_in_show_profile_types1654 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PAGE_in_show_profile_types1660 = new BitSet(new ulong[]{0x0UL,0x0UL,0x10000000000000UL});
		public static readonly BitSet _FAULTS_in_show_profile_types1662 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SOURCE_in_show_profile_types1668 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SWAPS_in_show_profile_types1674 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LIKE_in_like_or_where1692 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL,0x40000UL});
		public static readonly BitSet _string_or_placeholder_in_like_or_where1694 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _WHERE_in_like_or_where1710 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_like_or_where1712 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _EXPLAIN_in_explain_stmt1738 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL,0x0UL,0x0UL,0x8000000UL});
		public static readonly BitSet _select_in_explain_stmt1740 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _select_paren_in_select1765 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x4000000000000000UL});
		public static readonly BitSet _UNION_in_select1770 = new BitSet(new ulong[]{0x1000UL,0x0UL,0x1000UL,0x0UL,0x10000000000UL,0x0UL,0x0UL,0x8000000UL});
		public static readonly BitSet _ALL_in_select1775 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL,0x0UL,0x0UL,0x8000000UL});
		public static readonly BitSet _DISTINCT_in_select1781 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL,0x0UL,0x0UL,0x8000000UL});
		public static readonly BitSet _select_in_select1787 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x4000000000000000UL});
		public static readonly BitSet _LPAREN_in_select_paren1831 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL,0x0UL,0x0UL,0x8000000UL});
		public static readonly BitSet _select_paren_in_select_paren1833 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_select_paren1835 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _select_inner_in_select_paren1844 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SELECT_in_select_inner1863 = new BitSet(new ulong[]{0xB69AEE5E5FC91FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E13F22UL,0xDD01C54B8FDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFFAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xFE076F5F851DF957UL,0x3DFF60F6F7FFFFFAUL,0x85987EC5E929UL});
		public static readonly BitSet _select_options_in_select_inner1873 = new BitSet(new ulong[]{0xB69AEE5E5FC91FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E13F22UL,0xDD01C54B8FDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFFAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xFE076F5F851DF957UL,0x3DFF60F6F7FFFFFAUL,0x85987EC5E929UL});
		public static readonly BitSet _select_expr_in_select_inner1881 = new BitSet(new ulong[]{0x2UL,0x800UL,0x0UL,0x8UL,0x100000UL,0x4000000000000000UL});
		public static readonly BitSet _COMMA_in_select_inner1884 = new BitSet(new ulong[]{0xB69AEE5E5FC91FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E13F22UL,0xDD01C54B8FDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFFAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xFE076F5F851DF957UL,0x3DFF60F6F7FFFFFAUL,0x85987EC5E929UL});
		public static readonly BitSet _select_expr_in_select_inner1888 = new BitSet(new ulong[]{0x2UL,0x800UL,0x0UL,0x8UL,0x100000UL,0x4000000000000000UL});
		public static readonly BitSet _FROM_in_select_inner1909 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8F10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B3D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _table_references_in_select_inner1911 = new BitSet(new ulong[]{0x2UL,0x0UL,0x4000000000000000UL,0x200000000220000UL,0x20100000UL,0x4000000000000000UL,0x4000000UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _WHERE_in_select_inner1927 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _where_condition_in_select_inner1931 = new BitSet(new ulong[]{0x2UL,0x0UL,0x4000000000000000UL,0x200000000220000UL,0x20100000UL,0x4000000000000000UL,0x4000000UL});
		public static readonly BitSet _group_by_in_select_inner1947 = new BitSet(new ulong[]{0x2UL,0x0UL,0x4000000000000000UL,0x200000000200000UL,0x20100000UL,0x4000000000000000UL,0x4000000UL});
		public static readonly BitSet _HAVING_in_select_inner1963 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _where_condition_in_select_inner1967 = new BitSet(new ulong[]{0x2UL,0x0UL,0x4000000000000000UL,0x200000000000000UL,0x20100000UL,0x4000000000000000UL,0x4000000UL});
		public static readonly BitSet _order_by_in_select_inner1983 = new BitSet(new ulong[]{0x2UL,0x0UL,0x4000000000000000UL,0x200000000000000UL,0x20100000UL,0x0UL,0x4000000UL});
		public static readonly BitSet _limit_in_select_inner1998 = new BitSet(new ulong[]{0x2UL,0x0UL,0x4000000000000000UL,0x200000000000000UL,0x20000000UL,0x0UL,0x4000000UL});
		public static readonly BitSet _PROCEDURE_in_select_inner2027 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_select_inner2031 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _parenOptExprList_in_select_inner2035 = new BitSet(new ulong[]{0x2UL,0x0UL,0x4000000000000000UL,0x200000000000000UL,0x20000000UL});
		public static readonly BitSet _INTO_in_select_inner2068 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2UL});
		public static readonly BitSet _OUTFILE_in_select_inner2070 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _STRING_in_select_inner2074 = new BitSet(new ulong[]{0x0UL,0x400UL,0x4040000000000000UL,0x0UL,0x20400000UL});
		public static readonly BitSet _infile_options_helper_in_select_inner2078 = new BitSet(new ulong[]{0x2UL,0x0UL,0x4000000000000000UL,0x0UL,0x20000000UL});
		public static readonly BitSet _INTO_in_select_inner2098 = new BitSet(new ulong[]{0x0UL,0x0UL,0x200000UL});
		public static readonly BitSet _DUMPFILE_in_select_inner2100 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _STRING_in_select_inner2104 = new BitSet(new ulong[]{0x2UL,0x0UL,0x4000000000000000UL,0x0UL,0x20000000UL});
		public static readonly BitSet _INTO_in_select_inner2124 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x1000000000UL});
		public static readonly BitSet _variable_in_select_inner2128 = new BitSet(new ulong[]{0x2UL,0x800UL,0x4000000000000000UL,0x0UL,0x20000000UL});
		public static readonly BitSet _COMMA_in_select_inner2131 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x1000000000UL});
		public static readonly BitSet _variable_in_select_inner2135 = new BitSet(new ulong[]{0x2UL,0x800UL,0x4000000000000000UL,0x0UL,0x20000000UL});
		public static readonly BitSet _FOR_in_select_inner2188 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10UL});
		public static readonly BitSet _UPDATE_in_select_inner2190 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LOCK_in_select_inner2196 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x1000000000UL});
		public static readonly BitSet _IN_in_select_inner2198 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x4000000000UL});
		public static readonly BitSet _SHARE_in_select_inner2200 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x80000UL});
		public static readonly BitSet _MODE_in_select_inner2202 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _order_by_in_select_inner2218 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x100000UL});
		public static readonly BitSet _limit_in_select_inner2232 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _limit_in_select_inner2247 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _set_in_infile_options_helper2372 = new BitSet(new ulong[]{0x2UL,0x0UL,0x2010000000UL,0x0UL,0x400000UL,0x800000000000000UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _TERMINATED_in_infile_options_helper2382 = new BitSet(new ulong[]{0x4000000000000UL});
		public static readonly BitSet _BY_in_infile_options_helper2384 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _STRING_in_infile_options_helper2388 = new BitSet(new ulong[]{0x2UL,0x0UL,0x2010000000UL,0x0UL,0x400000UL,0x800000000000000UL});
		public static readonly BitSet _OPTIONALLY_in_infile_options_helper2398 = new BitSet(new ulong[]{0x0UL,0x0UL,0x10000000UL});
		public static readonly BitSet _ENCLOSED_in_infile_options_helper2401 = new BitSet(new ulong[]{0x4000000000000UL});
		public static readonly BitSet _BY_in_infile_options_helper2403 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _STRING_in_infile_options_helper2407 = new BitSet(new ulong[]{0x2UL,0x0UL,0x2000000000UL,0x0UL,0x400000UL});
		public static readonly BitSet _ESCAPED_in_infile_options_helper2419 = new BitSet(new ulong[]{0x4000000000000UL});
		public static readonly BitSet _BY_in_infile_options_helper2421 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _STRING_in_infile_options_helper2425 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x400000UL});
		public static readonly BitSet _LINES_in_infile_options_helper2448 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000004UL});
		public static readonly BitSet _STARTING_in_infile_options_helper2454 = new BitSet(new ulong[]{0x4000000000000UL});
		public static readonly BitSet _BY_in_infile_options_helper2456 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _STRING_in_infile_options_helper2460 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _TERMINATED_in_infile_options_helper2468 = new BitSet(new ulong[]{0x4000000000000UL});
		public static readonly BitSet _BY_in_infile_options_helper2470 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _STRING_in_infile_options_helper2474 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _set_in_variable2491 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LIMIT_in_limit2509 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL,0x0UL,0x0UL,0x0UL,0x40000UL});
		public static readonly BitSet _number_or_placeholder_in_limit2520 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_limit2522 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL,0x0UL,0x0UL,0x0UL,0x40000UL});
		public static readonly BitSet _number_or_placeholder_in_limit2528 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _number_or_placeholder_in_limit2541 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x8000000000000UL});
		public static readonly BitSet _OFFSET_in_limit2545 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL,0x0UL,0x0UL,0x0UL,0x40000UL});
		public static readonly BitSet _number_or_placeholder_in_limit2549 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _set_in_string_or_placeholder2583 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _set_in_number_or_placeholder2599 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _set_in_text_string2615 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _GROUP_in_group_by2638 = new BitSet(new ulong[]{0x4000000000000UL});
		public static readonly BitSet _BY_in_group_by2640 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _order_group_by_elements_in_group_by2648 = new BitSet(new ulong[]{0x2UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x400000000UL});
		public static readonly BitSet _COMMA_in_group_by2651 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _order_group_by_elements_in_group_by2655 = new BitSet(new ulong[]{0x2UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x400000000UL});
		public static readonly BitSet _WITH_in_group_by2665 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _ROLLUP_in_group_by2667 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ORDER_in_order_by2696 = new BitSet(new ulong[]{0x4000000000000UL});
		public static readonly BitSet _BY_in_order_by2698 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _order_group_by_elements_in_order_by2705 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _COMMA_in_order_by2708 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _order_group_by_elements_in_order_by2712 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _expr_in_order_group_by_elements2739 = new BitSet(new ulong[]{0x40002UL,0x0UL,0x8UL});
		public static readonly BitSet _ASC_in_order_group_by_elements2748 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DESC_in_order_group_by_elements2770 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _set_in_select_options2813 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MULT_in_select_expr2879 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _expr_in_select_expr2896 = new BitSet(new ulong[]{0xB69AEE1C5FCB0FA2UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _AS_in_select_expr2899 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_select_expr2902 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _table_ref_in_table_references2954 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _COMMA_in_table_references2969 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8F10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B3D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _table_ref_in_table_references2973 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _table_factor_in_table_ref3008 = new BitSet(new ulong[]{0x2UL,0x100000000UL,0x0UL,0x20000000000UL,0x2002UL,0x100000000UL,0x0UL,0x100UL,0x800UL});
		public static readonly BitSet _LEFT_in_table_ref3033 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x2UL,0x0UL,0x1UL});
		public static readonly BitSet _RIGHT_in_table_ref3037 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x2UL,0x0UL,0x1UL});
		public static readonly BitSet _OUTER_in_table_ref3042 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x2UL});
		public static readonly BitSet _JOIN_in_table_ref3045 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8F10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B3D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _table_ref_in_table_ref3049 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000000000000UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _join_condition_both_in_table_ref3053 = new BitSet(new ulong[]{0x2UL,0x100000000UL,0x0UL,0x20000000000UL,0x2002UL,0x100000000UL,0x0UL,0x100UL,0x800UL});
		public static readonly BitSet _INNER_in_table_ref3086 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x2UL});
		public static readonly BitSet _CROSS_in_table_ref3090 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x2UL});
		public static readonly BitSet _JOIN_in_table_ref3094 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8F10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B3D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _table_factor_in_table_ref3098 = new BitSet(new ulong[]{0x2UL,0x100000000UL,0x0UL,0x20000000000UL,0x2002UL,0x20000100000000UL,0x0UL,0x100UL,0x800UL,0x1000UL});
		public static readonly BitSet _join_condition_both_in_table_ref3102 = new BitSet(new ulong[]{0x2UL,0x100000000UL,0x0UL,0x20000000000UL,0x2002UL,0x100000000UL,0x0UL,0x100UL,0x800UL});
		public static readonly BitSet _STRAIGHT_JOIN_in_table_ref3137 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8F10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B3D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _table_factor_in_table_ref3141 = new BitSet(new ulong[]{0x2UL,0x100000000UL,0x0UL,0x20000000000UL,0x2002UL,0x20000100000000UL,0x0UL,0x100UL,0x800UL});
		public static readonly BitSet _join_condition_on_in_table_ref3157 = new BitSet(new ulong[]{0x2UL,0x100000000UL,0x0UL,0x20000000000UL,0x2002UL,0x100000000UL,0x0UL,0x100UL,0x800UL});
		public static readonly BitSet _NATURAL_in_table_ref3218 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x2002UL,0x0UL,0x0UL,0x100UL});
		public static readonly BitSet _LEFT_in_table_ref3224 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x2UL,0x0UL,0x1UL});
		public static readonly BitSet _RIGHT_in_table_ref3228 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x2UL,0x0UL,0x1UL});
		public static readonly BitSet _OUTER_in_table_ref3233 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x2UL});
		public static readonly BitSet _JOIN_in_table_ref3238 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8F10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B3D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _table_factor_in_table_ref3242 = new BitSet(new ulong[]{0x2UL,0x100000000UL,0x0UL,0x20000000000UL,0x2002UL,0x100000000UL,0x0UL,0x100UL,0x800UL});
		public static readonly BitSet _simple_table_ref_alias_in_table_factor3278 = new BitSet(new ulong[]{0x2UL,0x0UL,0x8000000000000000UL,0x400000000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x80UL});
		public static readonly BitSet _index_hint_list_in_table_factor3280 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LPAREN_in_table_factor3299 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL,0x0UL,0x0UL,0x8000000UL});
		public static readonly BitSet _select_inner_in_table_factor3301 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_table_factor3303 = new BitSet(new ulong[]{0xB69AEE1C5FCB0FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _AS_in_table_factor3305 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_table_factor3308 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LPAREN_in_table_factor3335 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8F10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B3D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _table_ref_in_table_factor3337 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _COMMA_in_table_factor3342 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8F10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B3D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _table_ref_in_table_factor3344 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_table_factor3351 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LCURLY_in_table_factor3370 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_table_factor3372 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8F10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B3D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _table_ref_in_table_factor3376 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x2000UL});
		public static readonly BitSet _LEFT_in_table_factor3378 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1UL});
		public static readonly BitSet _OUTER_in_table_factor3380 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x2UL});
		public static readonly BitSet _JOIN_in_table_factor3382 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8F10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B3D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _table_ref_in_table_factor3386 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000000000000UL});
		public static readonly BitSet _join_condition_on_in_table_factor3388 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000UL});
		public static readonly BitSet _RCURLY_in_table_factor3390 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DUAL_in_table_factor3413 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ON_in_join_condition_on3437 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _where_condition_in_join_condition_on3439 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _join_condition_on_in_join_condition_both3459 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _USING_in_join_condition_both3464 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_join_condition_both3466 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_join_condition_both3470 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _COMMA_in_join_condition_both3473 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_join_condition_both3477 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_join_condition_both3481 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ident_in_simple_table_ref_no_alias3505 = new BitSet(new ulong[]{0x2UL,0x0UL,0x20000UL});
		public static readonly BitSet _DOT_in_simple_table_ref_no_alias3508 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_simple_table_ref_no_alias3512 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ident_in_simple_table_ref_alias3537 = new BitSet(new ulong[]{0xB69AEE1C5FCB0FA2UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E30F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _DOT_in_simple_table_ref_alias3540 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_simple_table_ref_alias3544 = new BitSet(new ulong[]{0xB69AEE1C5FCB0FA2UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _table_alias_in_simple_table_ref_alias3548 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _AS_in_table_alias3573 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_table_alias3578 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ident_in_field_name3603 = new BitSet(new ulong[]{0x2UL,0x0UL,0x20000UL});
		public static readonly BitSet _DOT_in_field_name3617 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFFAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_field_name3630 = new BitSet(new ulong[]{0x2UL,0x0UL,0x20000UL});
		public static readonly BitSet _MULT_in_field_name3636 = new BitSet(new ulong[]{0x2UL,0x0UL,0x20000UL});
		public static readonly BitSet _ASCII_in_ident3689 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BACKUP_in_ident3696 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BEGIN_in_ident3703 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BYTE_in_ident3710 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CACHE_in_ident3717 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CHARSET_in_ident3724 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CHECKSUM_in_ident3731 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CLOSE_in_ident3738 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COMMENT_in_ident3745 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COMMIT_in_ident3752 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CONTAINS_in_ident3759 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DEALLOCATE_in_ident3766 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DO_in_ident3773 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _END_in_ident3780 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _EXECUTE_in_ident3787 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FLUSH_in_ident3794 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _GROUP_in_ident3801 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _HANDLER_in_ident3808 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _HELP_in_ident3815 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _HOST_in_ident3822 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INSTALL_in_ident3829 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LABEL_in_ident3836 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LANGUAGE_in_ident3843 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NO_in_ident3850 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _OPEN_in_ident3857 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _OPTIONS_in_ident3864 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _OWNER_in_ident3871 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PARSER_in_ident3878 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PARTITION_in_ident3885 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PORT_in_ident3892 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PREPARE_in_ident3899 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _REMOVE_in_ident3906 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _REPAIR_in_ident3913 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _RESET_in_ident3920 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _RESTORE_in_ident3927 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ROLLBACK_in_ident3934 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SAVEPOINT_in_ident3941 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SECURITY_in_ident3948 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SERVER_in_ident3955 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SIGNED_in_ident3962 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SOCKET_in_ident3969 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SLAVE_in_ident3976 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SONAME_in_ident3983 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _START_in_ident3990 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _STOP_in_ident3997 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TRUNCATE_in_ident4004 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _UNICODE_in_ident4011 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _UNINSTALL_in_ident4018 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _WRAPPER_in_ident4025 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _XA_in_ident4032 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _UPGRADE_in_ident4039 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ident_sp_label_in_ident4052 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ID_in_ident_sp_label4074 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ACTION_in_ident_sp_label4082 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ADDDATE_in_ident_sp_label4090 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _AFTER_in_ident_sp_label4098 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _AGAINST_in_ident_sp_label4106 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _AGGREGATE_in_ident_sp_label4114 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ALGORITHM_in_ident_sp_label4122 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ANY_in_ident_sp_label4130 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _AT_in_ident_sp_label4138 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _AUTHORS_in_ident_sp_label4146 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _AUTO_INCREMENT_in_ident_sp_label4154 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _AUTOEXTEND_SIZE_in_ident_sp_label4162 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _AVG_ROW_LENGTH_in_ident_sp_label4170 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _AVG_in_ident_sp_label4178 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BINLOG_in_ident_sp_label4186 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BIT_in_ident_sp_label4194 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BLOCK_in_ident_sp_label4202 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BOOL_in_ident_sp_label4210 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BOOLEAN_in_ident_sp_label4218 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BTREE_in_ident_sp_label4226 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CASCADED_in_ident_sp_label4234 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CHAIN_in_ident_sp_label4242 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CHANGED_in_ident_sp_label4250 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CIPHER_in_ident_sp_label4258 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CLIENT_in_ident_sp_label4266 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COALESCE_in_ident_sp_label4274 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CODE_in_ident_sp_label4282 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COLLATION_in_ident_sp_label4290 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COLUMNS_in_ident_sp_label4298 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FIELDS_in_ident_sp_label4306 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COMMITTED_in_ident_sp_label4314 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COMPACT_in_ident_sp_label4322 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COMPLETION_in_ident_sp_label4330 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COMPRESSED_in_ident_sp_label4338 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CONCURRENT_in_ident_sp_label4346 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CONNECTION_in_ident_sp_label4354 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CONSISTENT_in_ident_sp_label4362 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CONTEXT_in_ident_sp_label4370 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CONTRIBUTORS_in_ident_sp_label4378 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CPU_in_ident_sp_label4386 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CUBE_in_ident_sp_label4394 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DATA_in_ident_sp_label4402 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DATAFILE_in_ident_sp_label4410 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DATETIME_in_ident_sp_label4418 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DATE_in_ident_sp_label4426 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DAY_in_ident_sp_label4434 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DEFINER_in_ident_sp_label4442 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DELAY_KEY_WRITE_in_ident_sp_label4450 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DES_KEY_FILE_in_ident_sp_label4458 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DIRECTORY_in_ident_sp_label4466 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DISABLE_in_ident_sp_label4474 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DISCARD_in_ident_sp_label4482 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DISK_in_ident_sp_label4490 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DUMPFILE_in_ident_sp_label4498 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DUPLICATE_in_ident_sp_label4506 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DYNAMIC_in_ident_sp_label4514 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ENDS_in_ident_sp_label4522 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ENUM_in_ident_sp_label4530 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ENGINE_in_ident_sp_label4538 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ENGINES_in_ident_sp_label4546 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ERRORS_in_ident_sp_label4554 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ESCAPE_in_ident_sp_label4562 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _EVENT_in_ident_sp_label4570 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _EVENTS_in_ident_sp_label4578 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _EVERY_in_ident_sp_label4586 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _EXPANSION_in_ident_sp_label4594 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _EXTENDED_in_ident_sp_label4602 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _EXTENT_SIZE_in_ident_sp_label4610 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FAULTS_in_ident_sp_label4618 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FAST_in_ident_sp_label4626 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FOUND_in_ident_sp_label4634 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ENABLE_in_ident_sp_label4642 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FULL_in_ident_sp_label4650 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FILE_in_ident_sp_label4658 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FIRST_in_ident_sp_label4666 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FIXED_in_ident_sp_label4674 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FRAC_SECOND_in_ident_sp_label4682 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _GEOMETRY_in_ident_sp_label4690 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _GEOMETRYCOLLECTION_in_ident_sp_label4698 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _GET_FORMAT_in_ident_sp_label4706 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _GRANTS_in_ident_sp_label4714 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _GLOBAL_in_ident_sp_label4722 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _HASH_in_ident_sp_label4730 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _HOSTS_in_ident_sp_label4738 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _HOUR_in_ident_sp_label4746 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _IDENTIFIED_in_ident_sp_label4754 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INVOKER_in_ident_sp_label4762 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _IMPORT_in_ident_sp_label4770 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INDEXES_in_ident_sp_label4778 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INITIAL_SIZE_in_ident_sp_label4786 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _IO_in_ident_sp_label4794 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _IPC_in_ident_sp_label4802 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ISOLATION_in_ident_sp_label4810 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ISSUER_in_ident_sp_label4818 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INNOBASE_in_ident_sp_label4826 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INSERT_METHOD_in_ident_sp_label4834 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _KEY_BLOCK_SIZE_in_ident_sp_label4842 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LAST_in_ident_sp_label4850 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LEAVES_in_ident_sp_label4858 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LESS_in_ident_sp_label4866 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LEVEL_in_ident_sp_label4874 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LINESTRING_in_ident_sp_label4882 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LIST_in_ident_sp_label4890 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LOCAL_in_ident_sp_label4898 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LOCKS_in_ident_sp_label4906 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LOGFILE_in_ident_sp_label4914 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LOGS_in_ident_sp_label4922 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MAX_ROWS_in_ident_sp_label4930 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MASTER_in_ident_sp_label4938 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MASTER_HOST_in_ident_sp_label4946 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MASTER_PORT_in_ident_sp_label4954 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MASTER_LOG_FILE_in_ident_sp_label4962 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MASTER_LOG_POS_in_ident_sp_label4970 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MASTER_USER_in_ident_sp_label4978 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MASTER_PASSWORD_in_ident_sp_label4986 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MASTER_SERVER_ID_in_ident_sp_label4994 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MASTER_CONNECT_RETRY_in_ident_sp_label5002 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MASTER_SSL_in_ident_sp_label5010 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MASTER_SSL_CA_in_ident_sp_label5018 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MASTER_SSL_CAPATH_in_ident_sp_label5026 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MASTER_SSL_CERT_in_ident_sp_label5034 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MASTER_SSL_CIPHER_in_ident_sp_label5042 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MASTER_SSL_KEY_in_ident_sp_label5050 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MAX_CONNECTIONS_PER_HOUR_in_ident_sp_label5058 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MAX_QUERIES_PER_HOUR_in_ident_sp_label5066 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MAX_SIZE_in_ident_sp_label5074 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MAX_UPDATES_PER_HOUR_in_ident_sp_label5082 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MAX_USER_CONNECTIONS_in_ident_sp_label5090 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MAX_VALUE_in_ident_sp_label5098 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MEDIUM_in_ident_sp_label5106 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MEMORY_in_ident_sp_label5114 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MERGE_in_ident_sp_label5122 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MICROSECOND_in_ident_sp_label5130 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MIGRATE_in_ident_sp_label5138 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MINUTE_in_ident_sp_label5146 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MIN_ROWS_in_ident_sp_label5154 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MODIFY_in_ident_sp_label5162 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MODE_in_ident_sp_label5170 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MONTH_in_ident_sp_label5178 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MULTILINESTRING_in_ident_sp_label5186 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MULTIPOINT_in_ident_sp_label5194 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MULTIPOLYGON_in_ident_sp_label5202 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MUTEX_in_ident_sp_label5210 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NAME_in_ident_sp_label5218 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NAMES_in_ident_sp_label5226 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NATIONAL_in_ident_sp_label5234 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NCHAR_in_ident_sp_label5242 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NDBCLUSTER_in_ident_sp_label5250 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NEXT_in_ident_sp_label5258 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NEW_in_ident_sp_label5266 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NO_WAIT_in_ident_sp_label5274 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NODEGROUP_in_ident_sp_label5282 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NONE_in_ident_sp_label5290 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NVARCHAR_in_ident_sp_label5298 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _OFFSET_in_ident_sp_label5306 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _OLD_PASSWORD_in_ident_sp_label5314 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ONE_SHOT_in_ident_sp_label5322 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ONE_in_ident_sp_label5330 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PACK_KEYS_in_ident_sp_label5338 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PAGE_in_ident_sp_label5346 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PARTIAL_in_ident_sp_label5354 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PARTITIONING_in_ident_sp_label5362 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PARTITIONS_in_ident_sp_label5370 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PASSWORD_in_ident_sp_label5378 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PHASE_in_ident_sp_label5386 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PLUGIN_in_ident_sp_label5394 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PLUGINS_in_ident_sp_label5402 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _POINT_in_ident_sp_label5410 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _POLYGON_in_ident_sp_label5418 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PRESERVE_in_ident_sp_label5426 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PREV_in_ident_sp_label5434 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PRIVILEGES_in_ident_sp_label5442 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PROCESS_in_ident_sp_label5450 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PROCESSLIST_in_ident_sp_label5458 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PROFILE_in_ident_sp_label5466 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PROFILES_in_ident_sp_label5474 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _QUARTER_in_ident_sp_label5482 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _QUERY_in_ident_sp_label5490 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _QUICK_in_ident_sp_label5498 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _REBUILD_in_ident_sp_label5506 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _RECOVER_in_ident_sp_label5514 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _REDO_BUFFER_SIZE_in_ident_sp_label5522 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _REDOFILE_in_ident_sp_label5530 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _REDUNDANT_in_ident_sp_label5538 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _RELAY_LOG_FILE_in_ident_sp_label5546 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _RELAY_LOG_POS_in_ident_sp_label5554 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _RELAY_THREAD_in_ident_sp_label5562 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _RELOAD_in_ident_sp_label5570 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _REORGANIZE_in_ident_sp_label5578 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _REPEATABLE_in_ident_sp_label5586 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _REPLICATION_in_ident_sp_label5594 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _RESOURCES_in_ident_sp_label5602 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _RESUME_in_ident_sp_label5610 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _RETURNS_in_ident_sp_label5618 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ROLLUP_in_ident_sp_label5626 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ROUTINE_in_ident_sp_label5634 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ROWS_in_ident_sp_label5642 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ROW_FORMAT_in_ident_sp_label5650 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ROW_in_ident_sp_label5658 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _RTREE_in_ident_sp_label5666 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SCHEDULE_in_ident_sp_label5674 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SECOND_in_ident_sp_label5682 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SERIAL_in_ident_sp_label5690 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SERIALIZABLE_in_ident_sp_label5698 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SESSION_in_ident_sp_label5706 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SIMPLE_in_ident_sp_label5714 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SHARE_in_ident_sp_label5722 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SHUTDOWN_in_ident_sp_label5730 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SNAPSHOT_in_ident_sp_label5738 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SOUNDS_in_ident_sp_label5746 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SOURCE_in_ident_sp_label5754 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SQL_CACHE_in_ident_sp_label5762 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SQL_BUFFER_RESULT_in_ident_sp_label5770 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SQL_NO_CACHE_in_ident_sp_label5778 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SQL_THREAD_in_ident_sp_label5786 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _STARTS_in_ident_sp_label5794 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _STATUS_in_ident_sp_label5802 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _STORAGE_in_ident_sp_label5810 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _STRING_KEYWORD_in_ident_sp_label5818 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SUBDATE_in_ident_sp_label5826 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SUBJECT_in_ident_sp_label5834 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SUBPARTITION_in_ident_sp_label5842 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SUBPARTITIONS_in_ident_sp_label5850 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SUPER_in_ident_sp_label5858 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SUSPEND_in_ident_sp_label5866 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SWAPS_in_ident_sp_label5874 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SWITCHES_in_ident_sp_label5882 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TABLES_in_ident_sp_label5890 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TABLESPACE_in_ident_sp_label5898 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TEMPORARY_in_ident_sp_label5906 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TEMPTABLE_in_ident_sp_label5914 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TEXT_in_ident_sp_label5922 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _THAN_in_ident_sp_label5930 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TRANSACTION_in_ident_sp_label5938 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TRANSACTIONAL_in_ident_sp_label5946 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TRIGGERS_in_ident_sp_label5954 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TIMESTAMP_in_ident_sp_label5962 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TIMESTAMP_ADD_in_ident_sp_label5970 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TIMESTAMP_DIFF_in_ident_sp_label5978 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TIME_in_ident_sp_label5986 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TYPES_in_ident_sp_label5994 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TYPE_in_ident_sp_label6002 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _UDF_RETURNS_in_ident_sp_label6010 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FUNCTION_in_ident_sp_label6018 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _UNCOMMITTED_in_ident_sp_label6026 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _UNDEFINED_in_ident_sp_label6034 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _UNDO_BUFFER_SIZE_in_ident_sp_label6042 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _UNDOFILE_in_ident_sp_label6050 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _UNKNOWN_in_ident_sp_label6058 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _UNTIL_in_ident_sp_label6066 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _USER_in_ident_sp_label6074 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _USE_FRM_in_ident_sp_label6082 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _VARIABLES_in_ident_sp_label6090 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _VIEW_in_ident_sp_label6098 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _VALUE_in_ident_sp_label6106 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _WARNINGS_in_ident_sp_label6114 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _WAIT_in_ident_sp_label6122 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _WEEK_in_ident_sp_label6130 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _WORK_in_ident_sp_label6138 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _X509_in_ident_sp_label6146 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _YEAR_in_ident_sp_label6154 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _index_hint_in_index_hint_list6173 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _COMMA_in_index_hint_list6176 = new BitSet(new ulong[]{0x0UL,0x0UL,0x8000000000000000UL,0x400000000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x80UL});
		public static readonly BitSet _index_hint_in_index_hint_list6178 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _USE_in_index_hint6210 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x2000000000UL,0x4UL});
		public static readonly BitSet _index_hint_rest_in_index_hint6214 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _IGNORE_in_index_hint6228 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x2000000000UL,0x4UL});
		public static readonly BitSet _index_hint_rest_in_index_hint6232 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FORCE_in_index_hint6245 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x2000000000UL,0x4UL});
		public static readonly BitSet _index_hint_rest_in_index_hint6249 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INDEX_in_index_hint_rest6271 = new BitSet(new ulong[]{0x0UL,0x0UL,0x4000000000000000UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _KEY_in_index_hint_rest6275 = new BitSet(new ulong[]{0x0UL,0x0UL,0x4000000000000000UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _FOR_in_index_hint_rest6279 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x20000UL,0x2UL,0x4000000000000000UL});
		public static readonly BitSet _JOIN_in_index_hint_rest6284 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _ORDER_in_index_hint_rest6290 = new BitSet(new ulong[]{0x4000000000000UL});
		public static readonly BitSet _BY_in_index_hint_rest6292 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _GROUP_in_index_hint_rest6298 = new BitSet(new ulong[]{0x4000000000000UL});
		public static readonly BitSet _BY_in_index_hint_rest6300 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_index_hint_rest6307 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851FF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_index_hint_rest6319 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _COMMA_in_index_hint_rest6322 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_index_hint_rest6326 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _ident_in_index_hint_rest6338 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _COMMA_in_index_hint_rest6341 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_index_hint_rest6345 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_index_hint_rest6356 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _expr_in_exprList6389 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _COMMA_in_exprList6392 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_exprList6396 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _LPAREN_in_parenExpr6415 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_parenExpr6417 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_parenExpr6419 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LPAREN_in_parenExprList6439 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _exprList_in_parenExprList6441 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_parenExprList6443 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LPAREN_in_parenOptExprList6463 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851FF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _exprList_in_parenOptExprList6467 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_parenOptExprList6470 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _assignOrExpr_in_expr6493 = new BitSet(new ulong[]{0x200002UL});
		public static readonly BitSet _ASSIGN_in_expr6498 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_expr6503 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _assignXORExpr_in_assignOrExpr6518 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x200000000UL,0x2000000000000000UL});
		public static readonly BitSet _LOGICAL_OR_in_assignOrExpr6524 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _OR_in_assignOrExpr6531 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _assignXORExpr_in_assignOrExpr6537 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x200000000UL,0x2000000000000000UL});
		public static readonly BitSet _assignAndExpr_in_assignXORExpr6552 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000000000UL});
		public static readonly BitSet _XOR_in_assignXORExpr6557 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _assignAndExpr_in_assignXORExpr6562 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000000000UL});
		public static readonly BitSet _assignNotExpr_in_assignAndExpr6577 = new BitSet(new ulong[]{0x8002UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _LOGICAL_AND_in_assignAndExpr6584 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _AND_in_assignAndExpr6591 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _assignNotExpr_in_assignAndExpr6598 = new BitSet(new ulong[]{0x8002UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _equalityExpr_in_assignNotExpr6613 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NOT_in_assignNotExpr6620 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _equalityExpr_in_assignNotExpr6625 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _bitwiseOrExpr_in_equalityExpr6636 = new BitSet(new ulong[]{0x100000080000002UL,0x0UL,0x402000000UL,0x18000UL,0x30000UL,0x820000000000UL,0x2000000000000UL,0x0UL,0x800000000UL,0x80000000UL});
		public static readonly BitSet _equalityOperator_in_equalityExpr6643 = new BitSet(new ulong[]{0xB69AEE5E5FC91FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC07EF5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _subselect_in_expr_rhs_in_equalityExpr6652 = new BitSet(new ulong[]{0x100000080000002UL,0x0UL,0x402000000UL,0x18000UL,0x30000UL,0x820000000000UL,0x2000000000000UL,0x0UL,0x800000000UL,0x80000000UL});
		public static readonly BitSet _bitwiseOrExpr_in_equalityExpr6656 = new BitSet(new ulong[]{0x100000080000002UL,0x0UL,0x402000000UL,0x18000UL,0x30000UL,0x820000000000UL,0x2000000000000UL,0x0UL,0x800000000UL,0x80000000UL});
		public static readonly BitSet _ANY_in_subselect_in_expr_rhs6673 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _SOME_in_subselect_in_expr_rhs6679 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _ALL_in_subselect_in_expr_rhs6685 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_subselect_in_expr_rhs6688 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL,0x0UL,0x0UL,0x8000000UL});
		public static readonly BitSet _select_in_subselect_in_expr_rhs6690 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_subselect_in_expr_rhs6692 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LPAREN_in_subselect6715 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL,0x0UL,0x0UL,0x8000000UL});
		public static readonly BitSet _select_inner_in_subselect6717 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_subselect6719 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _IS_in_isOperator6738 = new BitSet(new ulong[]{0x0UL,0x0UL,0x4000000000000UL,0x0UL,0x0UL,0x410000000000UL,0x0UL,0x0UL,0x4000000000000UL,0x1UL});
		public static readonly BitSet _NOT_in_isOperator6740 = new BitSet(new ulong[]{0x0UL,0x0UL,0x4000000000000UL,0x0UL,0x0UL,0x400000000000UL,0x0UL,0x0UL,0x4000000000000UL,0x1UL});
		public static readonly BitSet _NULL_in_isOperator6746 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FALSE_in_isOperator6752 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TRUE_in_isOperator6758 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _UNKNOWN_in_isOperator6764 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _EQUALS_in_equalityOperator6792 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NOT_EQUAL_in_equalityOperator6800 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LESS_THAN_in_equalityOperator6808 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LESS_THAN_EQUAL_in_equalityOperator6816 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _GREATER_THAN_in_equalityOperator6824 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _GREATER_THAN_EQUAL_in_equalityOperator6837 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NULL_SAFE_NOT_EQUAL_in_equalityOperator6847 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _REGEXP_in_equalityOperator6856 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BETWEEN_in_equalityOperator6864 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CASE_in_equalityOperator6872 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _WHEN_in_equalityOperator6880 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _THEN_in_equalityOperator6888 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ELSE_in_equalityOperator6896 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _bitwiseAndExpr_in_bitwiseOrExpr6914 = new BitSet(new ulong[]{0x8000000002UL,0x0UL,0x0UL,0x2000001000000000UL,0x80000UL,0x10000000000UL});
		public static readonly BitSet _BITWISE_OR_in_bitwiseOrExpr6926 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _bitwiseAndExpr_in_bitwiseOrExpr6931 = new BitSet(new ulong[]{0x8000000002UL});
		public static readonly BitSet _NOT_in_bitwiseOrExpr6943 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x1000000000UL});
		public static readonly BitSet _IN_in_bitwiseOrExpr6948 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _parenExprList_in_bitwiseOrExpr6952 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _subselect_in_bitwiseOrExpr6956 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LIKE_in_bitwiseOrExpr6966 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _unaryExpr_in_bitwiseOrExpr6969 = new BitSet(new ulong[]{0x2UL,0x0UL,0x1000000000UL});
		public static readonly BitSet _ESCAPE_in_bitwiseOrExpr6972 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _STRING_in_bitwiseOrExpr6974 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _isOperator_in_bitwiseOrExpr6986 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _shiftExpr_in_bitwiseAndExpr7008 = new BitSet(new ulong[]{0x2000000002UL});
		public static readonly BitSet _BITWISE_AND_in_bitwiseAndExpr7013 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _shiftExpr_in_bitwiseAndExpr7018 = new BitSet(new ulong[]{0x2000000002UL});
		public static readonly BitSet _additiveExpr_in_shiftExpr7033 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x4000UL,0x0UL,0x0UL,0x200UL});
		public static readonly BitSet _LEFT_SHIFT_in_shiftExpr7039 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _RIGHT_SHIFT_in_shiftExpr7046 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _additiveExpr_in_shiftExpr7052 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x4000UL,0x0UL,0x0UL,0x200UL});
		public static readonly BitSet _multiplicativeExpr_in_additiveExpr7069 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000UL,0x4000UL});
		public static readonly BitSet _PLUS_in_additiveExpr7075 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _MINUS_in_additiveExpr7080 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _multiplicativeExpr_in_additiveExpr7086 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000UL,0x4000UL});
		public static readonly BitSet _MULT_in_multOperator7101 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DIVISION_in_multOperator7108 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DIV_in_multOperator7115 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MODULO_in_multOperator7122 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _bitwiseXORExpr_in_multiplicativeExpr7135 = new BitSet(new ulong[]{0x2UL,0x0UL,0xC000UL,0x0UL,0x0UL,0x1400000UL});
		public static readonly BitSet _multOperator_in_multiplicativeExpr7140 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _bitwiseXORExpr_in_multiplicativeExpr7145 = new BitSet(new ulong[]{0x2UL,0x0UL,0xC000UL,0x0UL,0x0UL,0x1400000UL});
		public static readonly BitSet _unaryExpr_in_bitwiseXORExpr7160 = new BitSet(new ulong[]{0x10000000002UL});
		public static readonly BitSet _BITWISE_XOR_in_bitwiseXORExpr7165 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _unaryExpr_in_bitwiseXORExpr7170 = new BitSet(new ulong[]{0x10000000002UL});
		public static readonly BitSet _MINUS_in_unaryExpr7185 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _unaryExpr_in_unaryExpr7189 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PLUS_in_unaryExpr7206 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _unaryExpr_in_unaryExpr7210 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BITWISE_INVERSION_in_unaryExpr7227 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _unaryExpr_in_unaryExpr7231 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _unaryNotExpr_in_unaryExpr7247 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NOT_OP_in_unaryNotExpr7265 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _unaryNotExpr_in_unaryNotExpr7269 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _binaryCollateExpr_in_unaryNotExpr7285 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BINARY_in_binaryCollateExpr7302 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _binaryCollateExpr_in_binaryCollateExpr7306 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COLLATE_in_binaryCollateExpr7323 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5CFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _binaryCollateExpr_in_binaryCollateExpr7327 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _intervalExpr_in_binaryCollateExpr7341 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INTERVAL_in_intervalExpr7364 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_intervalExpr7366 = new BitSet(new ulong[]{0x0UL,0x3E0000000000000UL,0x0UL,0x78000000UL,0x0UL,0x81C100UL,0x100000000UL,0x3000000UL,0x0UL,0xC0040000000UL});
		public static readonly BitSet _timeUnit_in_intervalExpr7368 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _primary_in_intervalExpr7387 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _parenExpr_in_primary7405 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _literal_in_primary7416 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _subselect_in_primary7425 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _EXISTS_in_primary7434 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _subselect_in_primary7436 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _STRING_in_literal7459 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NUMBER_in_literal7466 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _GLOBAL_VARIABLE_in_literal7473 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SESSION_VARIABLE_in_literal7480 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _VALUE_PLACEHOLDER_in_literal7487 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BINARY_VALUE_in_literal7494 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _HEXA_VALUE_in_literal7501 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NULL_in_literal7508 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TRUE_in_literal7515 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _FALSE_in_literal7522 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _functionCall_in_literal7531 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _field_name_in_literal7536 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BINARY_in_cast_data_type7548 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_cast_data_type7551 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL});
		public static readonly BitSet _NUMBER_in_cast_data_type7553 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_cast_data_type7555 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CHAR_in_cast_data_type7562 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_cast_data_type7565 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL});
		public static readonly BitSet _NUMBER_in_cast_data_type7567 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_cast_data_type7569 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DATE_in_cast_data_type7576 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DATETIME_in_cast_data_type7581 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TIME_in_cast_data_type7586 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DECIMAL_in_cast_data_type7591 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_cast_data_type7594 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL});
		public static readonly BitSet _NUMBER_in_cast_data_type7598 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_cast_data_type7600 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL});
		public static readonly BitSet _NUMBER_in_cast_data_type7604 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_cast_data_type7606 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SIGNED_in_cast_data_type7613 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x80000000000000UL});
		public static readonly BitSet _INTEGER_in_cast_data_type7615 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _UNSIGNED_in_cast_data_type7621 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x80000000000000UL});
		public static readonly BitSet _INTEGER_in_cast_data_type7623 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _set_in_timeUnit7634 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _set_in_timestampUnit7742 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _expr_in_where_condition7800 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BEGIN_in_transaction7819 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x800000000UL});
		public static readonly BitSet _WORK_in_transaction7822 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _START_in_transaction7847 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x200000000000UL});
		public static readonly BitSet _TRANSACTION_in_transaction7849 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x400000000UL});
		public static readonly BitSet _WITH_in_transaction7852 = new BitSet(new ulong[]{0x0UL,0x400000UL});
		public static readonly BitSet _CONSISTENT_in_transaction7854 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x200000000000UL});
		public static readonly BitSet _SNAPSHOT_in_transaction7856 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COMMIT_in_transaction7877 = new BitSet(new ulong[]{0x8002UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000000000UL,0x20000000000000UL,0x0UL,0x0UL,0x800000000UL});
		public static readonly BitSet _WORK_in_transaction7879 = new BitSet(new ulong[]{0x8002UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000000000UL,0x20000000000000UL});
		public static readonly BitSet _AND_in_transaction7885 = new BitSet(new ulong[]{0x400000000000000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000000000UL});
		public static readonly BitSet _NO_in_transaction7887 = new BitSet(new ulong[]{0x400000000000000UL});
		public static readonly BitSet _CHAIN_in_transaction7890 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000000000UL,0x20000000000000UL});
		public static readonly BitSet _NO_in_transaction7897 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000000000000UL});
		public static readonly BitSet _RELEASE_in_transaction7900 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ROLLBACK_in_transaction7939 = new BitSet(new ulong[]{0x8002UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000000000UL,0x20000000000000UL,0x0UL,0x0UL,0x800000000UL});
		public static readonly BitSet _WORK_in_transaction7941 = new BitSet(new ulong[]{0x8002UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000000000UL,0x20000000000000UL});
		public static readonly BitSet _AND_in_transaction7947 = new BitSet(new ulong[]{0x400000000000000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000000000UL});
		public static readonly BitSet _NO_in_transaction7949 = new BitSet(new ulong[]{0x400000000000000UL});
		public static readonly BitSet _CHAIN_in_transaction7952 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000000000UL,0x20000000000000UL});
		public static readonly BitSet _NO_in_transaction7959 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000000000000UL});
		public static readonly BitSet _RELEASE_in_transaction7962 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SET_in_transaction8004 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x400UL,0x0UL,0x0UL,0x0UL,0x400000000UL,0x200000000000UL});
		public static readonly BitSet _GLOBAL_in_transaction8013 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x200000000000UL});
		public static readonly BitSet _SESSION_in_transaction8022 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x200000000000UL});
		public static readonly BitSet _TRANSACTION_in_transaction8032 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x4000000000000000UL});
		public static readonly BitSet _ISOLATION_in_transaction8034 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x40000UL});
		public static readonly BitSet _LEVEL_in_transaction8036 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000002000000000UL,0x100000000UL});
		public static readonly BitSet _READ_in_transaction8042 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x80000000000000UL});
		public static readonly BitSet _UNCOMMITTED_in_transaction8044 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _READ_in_transaction8063 = new BitSet(new ulong[]{0x0UL,0x8000UL});
		public static readonly BitSet _COMMITTED_in_transaction8065 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _REPEATABLE_in_transaction8086 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000000000UL});
		public static readonly BitSet _READ_in_transaction8088 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SERIALIZABLE_in_transaction8108 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _savepoint_in_transaction8132 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _lockTables_in_transaction8137 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _RELEASE_in_savepoint8151 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x80000UL});
		public static readonly BitSet _SAVEPOINT_in_savepoint8154 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_savepoint8156 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ROLLBACK_in_savepoint8175 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x80000000000UL,0x800000000UL});
		public static readonly BitSet _WORK_in_savepoint8177 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x80000000000UL});
		public static readonly BitSet _TO_in_savepoint8180 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _SAVEPOINT_in_savepoint8182 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _ident_in_savepoint8185 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INSERT_in_insert8209 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F23UL,0xDF01C54F8FDE4FD6UL,0xFD7FFE84C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _LOW_PRIORITY_in_insert8214 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDF01C54F8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _DELAYED_in_insert8220 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDF01C54F8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _HIGH_PRIORITY_in_insert8226 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDF01C54F8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _IGNORE_in_insert8232 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDF01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _INTO_in_insert8235 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _simple_table_ref_no_alias_in_insert8242 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL,0x0UL,0x0UL,0x2008000000UL,0x0UL,0x30000UL});
		public static readonly BitSet _insert_columns_in_insert8248 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000000000000UL});
		public static readonly BitSet _set_columns_in_insert8254 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000000000000UL});
		public static readonly BitSet _select_in_insert8260 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000000000000UL});
		public static readonly BitSet _on_dup_key_in_insert8268 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LPAREN_in_insert_columns8335 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851FF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _column_name_list_in_insert_columns8337 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_insert_columns8340 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x30000UL});
		public static readonly BitSet _VALUE_in_insert_columns8347 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _VALUES_in_insert_columns8349 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_insert_columns8352 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0xC42BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _insert_default_or_expression_in_insert_columns8356 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _COMMA_in_insert_columns8359 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0xC42BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _insert_default_or_expression_in_insert_columns8363 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_insert_columns8367 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DEFAULT_in_insert_default_or_expression8399 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _expr_in_insert_default_or_expression8404 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SET_in_set_columns8416 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _column_assignment_in_set_columns8418 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _COMMA_in_set_columns8421 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _column_assignment_in_set_columns8423 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _ON_in_on_dup_key8445 = new BitSet(new ulong[]{0x0UL,0x0UL,0x400000UL});
		public static readonly BitSet _DUPLICATE_in_on_dup_key8447 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x4UL});
		public static readonly BitSet _KEY_in_on_dup_key8449 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10UL});
		public static readonly BitSet _UPDATE_in_on_dup_key8451 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _column_assignment_in_on_dup_key8455 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _COMMA_in_on_dup_key8458 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _column_assignment_in_on_dup_key8460 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _field_name_in_column_assignment8482 = new BitSet(new ulong[]{0x0UL,0x0UL,0x400000000UL});
		public static readonly BitSet _EQUALS_in_column_assignment8484 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0xC42BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _DEFAULT_in_column_assignment8491 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _expr_in_column_assignment8509 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _field_name_in_column_name_list8537 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _COMMA_in_column_name_list8540 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _field_name_in_column_name_list8542 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _UPDATE_in_update8567 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8F10F22UL,0xDD01C54F8EDE4FD6UL,0xFD7FFF84C584B3D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _LOW_PRIORITY_in_update8569 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8F10F22UL,0xDD01C54F8EDE4FD6UL,0xFD7FFF04C584B3D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _IGNORE_in_update8572 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8F10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B3D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _table_references_in_update8579 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000000000UL});
		public static readonly BitSet _set_columns_in_update8588 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x100000UL,0x4000000000000000UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _WHERE_in_update8593 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _where_condition_in_update8595 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x100000UL,0x4000000000000000UL});
		public static readonly BitSet _order_by_in_update8613 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x100000UL});
		public static readonly BitSet _LIMIT_in_update8620 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL});
		public static readonly BitSet _NUMBER_in_update8622 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DELETE_in_delete8690 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54F8EDE4FDEUL,0xFD7FFE84C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _LOW_PRIORITY_in_delete8705 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54F8EDE4FDEUL,0xFD7FFE84C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _QUICK_in_delete8711 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54F8EDE4FDEUL,0xFD7FFE84C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _IGNORE_in_delete8717 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54F8EDE4FDEUL,0xFD7FFE84C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _FROM_in_delete8727 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _simple_table_ref_no_alias_in_delete8735 = new BitSet(new ulong[]{0x2UL,0x800UL,0x20000UL,0x0UL,0x100000UL,0x4000000000000000UL,0x0UL,0x0UL,0x0UL,0x100001000UL});
		public static readonly BitSet _DOT_in_delete8738 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000UL});
		public static readonly BitSet _MULT_in_delete8740 = new BitSet(new ulong[]{0x2UL,0x800UL,0x0UL,0x0UL,0x100000UL,0x4000000000000000UL,0x0UL,0x0UL,0x0UL,0x100001000UL});
		public static readonly BitSet _COMMA_in_delete8748 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _simple_table_ref_no_alias_in_delete8752 = new BitSet(new ulong[]{0x2UL,0x800UL,0x20000UL,0x0UL,0x100000UL,0x4000000000000000UL,0x0UL,0x0UL,0x0UL,0x100001000UL});
		public static readonly BitSet _DOT_in_delete8755 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000UL});
		public static readonly BitSet _MULT_in_delete8757 = new BitSet(new ulong[]{0x2UL,0x800UL,0x0UL,0x0UL,0x100000UL,0x4000000000000000UL,0x0UL,0x0UL,0x0UL,0x100001000UL});
		public static readonly BitSet _USING_in_delete8770 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8F10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B3D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _table_references_in_delete8774 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x100000UL,0x4000000000000000UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _WHERE_in_delete8784 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _where_condition_in_delete8786 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x100000UL,0x4000000000000000UL});
		public static readonly BitSet _order_by_in_delete8801 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x100000UL});
		public static readonly BitSet _LIMIT_in_delete8809 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL});
		public static readonly BitSet _NUMBER_in_delete8811 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _simple_table_ref_no_alias_in_delete8938 = new BitSet(new ulong[]{0x0UL,0x800UL,0x20000UL,0x8UL});
		public static readonly BitSet _DOT_in_delete8941 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000UL});
		public static readonly BitSet _MULT_in_delete8943 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x8UL});
		public static readonly BitSet _COMMA_in_delete8948 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _simple_table_ref_no_alias_in_delete8952 = new BitSet(new ulong[]{0x0UL,0x800UL,0x20000UL,0x8UL});
		public static readonly BitSet _DOT_in_delete8955 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000UL});
		public static readonly BitSet _MULT_in_delete8957 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x8UL});
		public static readonly BitSet _FROM_in_delete8966 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8F10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B3D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _table_references_in_delete8970 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000UL});
		public static readonly BitSet _WHERE_in_delete8976 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _where_condition_in_delete8978 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LOCK_in_lockTables9038 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10000000UL});
		public static readonly BitSet _TABLES_in_lockTables9040 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _lock_table_ref_in_lockTables9044 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _COMMA_in_lockTables9047 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _lock_table_ref_in_lockTables9051 = new BitSet(new ulong[]{0x2UL,0x800UL});
		public static readonly BitSet _UNLOCK_in_lockTables9067 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10000000UL});
		public static readonly BitSet _TABLES_in_lockTables9069 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _simple_table_ref_alias_in_lock_table_ref9101 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x8000000000UL,0x0UL,0x2000000000UL,0x0UL,0x0UL,0x2000000000UL});
		public static readonly BitSet _READ_in_lock_table_ref9107 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x4000000UL});
		public static readonly BitSet _LOCAL_in_lock_table_ref9111 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LOW_PRIORITY_in_lock_table_ref9136 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000000000UL});
		public static readonly BitSet _WRITE_in_lock_table_ref9141 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CREATE_in_create_table9178 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x48000000UL});
		public static readonly BitSet _TEMPORARY_in_create_table9181 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x8000000UL});
		public static readonly BitSet _TABLE_in_create_table9186 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _IF_in_create_table9191 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _NOT_in_create_table9193 = new BitSet(new ulong[]{0x0UL,0x0UL,0x80000000000UL});
		public static readonly BitSet _EXISTS_in_create_table9195 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _simple_table_ref_no_alias_in_create_table9204 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_create_table9208 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _create_definition_in_create_table9212 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _COMMA_in_create_table9215 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _create_definition_in_create_table9219 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_create_table9223 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ident_in_create_definition9280 = new BitSet(new ulong[]{0x2000101300000000UL,0x1001800000000000UL,0x400000200040000UL,0x82000000000000UL,0x3000000000UL,0x2000000000038UL,0x20000000000UL,0x102000000000UL,0x73200000000UL,0x40000180000UL});
		public static readonly BitSet _column_definition_in_create_definition9282 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _data_type_in_column_definition9308 = new BitSet(new ulong[]{0x40000002000002UL,0x4000000000001000UL,0x0UL,0x0UL,0x4UL,0x412000000000UL,0x1000000UL,0x2000000008UL,0x8000000000000000UL});
		public static readonly BitSet _NOT_in_column_definition9315 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x400000000000UL});
		public static readonly BitSet _NULL_in_column_definition9317 = new BitSet(new ulong[]{0x40000002000002UL,0x4000000000001000UL,0x0UL,0x0UL,0x4UL,0x2000000000UL,0x1000000UL,0x2000000008UL,0x8000000000000000UL});
		public static readonly BitSet _NULL_in_column_definition9323 = new BitSet(new ulong[]{0x40000002000002UL,0x4000000000001000UL,0x0UL,0x0UL,0x4UL,0x2000000000UL,0x1000000UL,0x2000000008UL,0x8000000000000000UL});
		public static readonly BitSet _DEFAULT_in_column_definition9330 = new BitSet(new ulong[]{0xB69AEE1C5FC90FA0UL,0x842BD97E6B6FD57EUL,0x23DFA79BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFE04C584B1D0UL,0x11DD58FEFEAE5BC7UL,0x7EDCF8077AE7BFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _literal_in_column_definition9332 = new BitSet(new ulong[]{0x40000002000002UL,0x1000UL,0x0UL,0x0UL,0x4UL,0x2000000000UL,0x1000000UL,0x2000000008UL,0x8000000000000000UL});
		public static readonly BitSet _AUTO_INCREMENT_in_column_definition9342 = new BitSet(new ulong[]{0x40000000000002UL,0x1000UL,0x0UL,0x0UL,0x4UL,0x2000000000UL,0x1000000UL,0x2000000008UL,0x8000000000000000UL});
		public static readonly BitSet _UNIQUE_in_column_definition9348 = new BitSet(new ulong[]{0x40000000000002UL,0x1000UL,0x0UL,0x0UL,0x4UL,0x2000000000UL,0x0UL,0x2000000008UL});
		public static readonly BitSet _KEY_in_column_definition9352 = new BitSet(new ulong[]{0x40000000000002UL,0x1000UL,0x0UL,0x0UL,0x0UL,0x2000000000UL,0x0UL,0x2000000008UL});
		public static readonly BitSet _PRIMARY_in_column_definition9357 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x4UL});
		public static readonly BitSet _KEY_in_column_definition9362 = new BitSet(new ulong[]{0x40000000000002UL,0x1000UL,0x0UL,0x0UL,0x0UL,0x2000000000UL,0x0UL,0x2000000008UL});
		public static readonly BitSet _COMMENT_in_column_definition9369 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _STRING_in_column_definition9371 = new BitSet(new ulong[]{0x40000000000002UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000000000UL,0x0UL,0x2000000008UL});
		public static readonly BitSet _reference_definition_in_column_definition9378 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BIT_in_data_type9463 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_data_type9470 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL});
		public static readonly BitSet _NUMBER_in_data_type9472 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_data_type9475 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _set_in_data_type9483 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x10000000000UL,0x0UL,0x0UL,0x20000000000UL,0x0UL,0x100000000004UL});
		public static readonly BitSet _LPAREN_in_data_type9535 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL});
		public static readonly BitSet _NUMBER_in_data_type9537 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_data_type9540 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000000000UL,0x0UL,0x100000000004UL});
		public static readonly BitSet _set_in_data_type9546 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000000UL});
		public static readonly BitSet _ZEROFILL_in_data_type9559 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _set_in_data_type9567 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x10000000000UL,0x0UL,0x0UL,0x20000000000UL,0x0UL,0x100000000004UL});
		public static readonly BitSet _LPAREN_in_data_type9613 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL});
		public static readonly BitSet _NUMBER_in_data_type9617 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_data_type9619 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL});
		public static readonly BitSet _NUMBER_in_data_type9623 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_data_type9625 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000000000UL,0x0UL,0x100000000004UL});
		public static readonly BitSet _set_in_data_type9632 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x100000000000UL});
		public static readonly BitSet _ZEROFILL_in_data_type9645 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DATE_in_data_type9653 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TIME_in_data_type9660 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TIMESTAMP_in_data_type9667 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DATETIME_in_data_type9673 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _YEAR_in_data_type9679 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TINYBLOB_in_data_type9686 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BLOB_in_data_type9692 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MEDIUMBLOB_in_data_type9699 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LONGBLOB_in_data_type9705 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _set_in_data_type9711 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_data_type9729 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL});
		public static readonly BitSet _NUMBER_in_data_type9731 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_data_type9734 = new BitSet(new ulong[]{0x4000000000000002UL,0x80UL});
		public static readonly BitSet _charset_in_data_type9739 = new BitSet(new ulong[]{0x2UL,0x80UL});
		public static readonly BitSet _collate_in_data_type9747 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _set_in_data_type9755 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_data_type9774 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000000UL});
		public static readonly BitSet _NUMBER_in_data_type9776 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_data_type9779 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _set_in_data_type9784 = new BitSet(new ulong[]{0x4000000200000002UL,0x80UL});
		public static readonly BitSet _BINARY_in_data_type9818 = new BitSet(new ulong[]{0x4000000000000002UL,0x80UL});
		public static readonly BitSet _charset_in_data_type9826 = new BitSet(new ulong[]{0x2UL,0x80UL});
		public static readonly BitSet _collate_in_data_type9834 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _set_in_data_type9842 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_data_type9861 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _STRING_in_data_type9865 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _COMMA_in_data_type9868 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _STRING_in_data_type9872 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_data_type9876 = new BitSet(new ulong[]{0x4000000000000002UL,0x80UL});
		public static readonly BitSet _charset_in_data_type9882 = new BitSet(new ulong[]{0x2UL,0x80UL});
		public static readonly BitSet _collate_in_data_type9890 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CHARACTER_in_charset9904 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x2000000000UL});
		public static readonly BitSet _SET_in_charset9906 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x80000000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _set_in_charset9910 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COLLATE_in_collate9935 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x80000000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _set_in_collate9940 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _RESTRICT_in_reference_definition9966 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CASCADE_in_reference_definition9972 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SET_in_reference_definition9979 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x400000000000UL});
		public static readonly BitSet _NULL_in_reference_definition9981 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NO_in_reference_definition9987 = new BitSet(new ulong[]{0x20UL});
		public static readonly BitSet _ACTION_in_reference_definition9989 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _AVG_in_functionCall10007 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10009 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10011 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10013 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BIT_AND_in_functionCall10034 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10036 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10038 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10040 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BIT_OR_in_functionCall10058 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10060 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10062 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10064 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _BIT_XOR_in_functionCall10082 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10084 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10086 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10088 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CAST_in_functionCall10106 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10108 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10110 = new BitSet(new ulong[]{0x20000UL});
		public static readonly BitSet _AS_in_functionCall10112 = new BitSet(new ulong[]{0x2000000200000000UL,0x1001800000000000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000000000UL,0x1000000000UL,0x4UL});
		public static readonly BitSet _cast_data_type_in_functionCall10114 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10116 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CONCAT_in_functionCall10138 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10140 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _exprList_in_functionCall10142 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10144 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COUNT_in_functionCall10162 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10164 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000UL});
		public static readonly BitSet _MULT_in_functionCall10166 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10168 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COUNT_in_functionCall10186 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10188 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10190 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10192 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COUNT_in_functionCall10211 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10213 = new BitSet(new ulong[]{0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _DISTINCT_in_functionCall10215 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _exprList_in_functionCall10217 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10219 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DATE_ADD_in_functionCall10239 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10241 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10245 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall10247 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x100000000000000UL});
		public static readonly BitSet _INTERVAL_in_functionCall10249 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10253 = new BitSet(new ulong[]{0x0UL,0x3E0000000000000UL,0x0UL,0x78000000UL,0x0UL,0x81C100UL,0x100000000UL,0x3000000UL,0x0UL,0xC0040000000UL});
		public static readonly BitSet _timeUnit_in_functionCall10255 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10257 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DATE_SUB_in_functionCall10283 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10285 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10289 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall10291 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x100000000000000UL});
		public static readonly BitSet _INTERVAL_in_functionCall10293 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10297 = new BitSet(new ulong[]{0x0UL,0x3E0000000000000UL,0x0UL,0x78000000UL,0x0UL,0x81C100UL,0x100000000UL,0x3000000UL,0x0UL,0xC0040000000UL});
		public static readonly BitSet _timeUnit_in_functionCall10299 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10301 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _GROUP_CONCAT_in_functionCall10325 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10327 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E11F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _DISTINCT_in_functionCall10333 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _exprList_in_functionCall10336 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x4000000000000000UL,0x0UL,0x40020000UL});
		public static readonly BitSet _order_by_in_functionCall10341 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x40020000UL});
		public static readonly BitSet _SEPARATOR_in_functionCall10348 = new BitSet(new ulong[]{0x400000000UL,0x0UL,0x0UL,0x800000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _text_string_in_functionCall10350 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10356 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MAX_in_functionCall10390 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10392 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E11F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _DISTINCT_in_functionCall10394 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10397 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10399 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MID_in_functionCall10423 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10425 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10427 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall10429 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10431 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall10433 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10435 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10437 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MIN_in_functionCall10456 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10458 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E11F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _DISTINCT_in_functionCall10460 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10463 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10465 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SESSION_USER_in_functionCall10489 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10491 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10493 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _STD_in_functionCall10511 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10513 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10515 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10517 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _STDDEV_in_functionCall10535 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10537 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10539 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10541 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _STDDEV_POP_in_functionCall10559 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10561 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10563 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10565 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _STDDEV_SAMP_in_functionCall10583 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10585 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10587 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10589 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SUM_in_functionCall10607 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10609 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E11F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _DISTINCT_in_functionCall10611 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10614 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10616 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SYSTEM_USER_in_functionCall10640 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10642 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10644 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TRIM_in_functionCall10662 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10664 = new BitSet(new ulong[]{0xB69BEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B5D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF70F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _BOTH_in_functionCall10674 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FDEUL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _LEADING_in_functionCall10680 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FDEUL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _TRAILING_in_functionCall10686 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FDEUL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10695 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x8UL});
		public static readonly BitSet _FROM_in_functionCall10698 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10702 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _expr_in_functionCall10733 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x8UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _FROM_in_functionCall10741 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10745 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10805 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _VARIANCE_in_functionCall10810 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10812 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10814 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10816 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _VAR_POP_in_functionCall10834 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10836 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10838 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10840 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _VAR_SAMP_in_functionCall10858 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10860 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10862 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10864 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ADDDATE_in_functionCall10885 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10887 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10891 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall10893 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _INTERVAL_in_functionCall10905 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall10909 = new BitSet(new ulong[]{0x0UL,0x3E0000000000000UL,0x0UL,0x78000000UL,0x0UL,0x81C100UL,0x100000000UL,0x3000000UL,0x0UL,0xC0040000000UL});
		public static readonly BitSet _timeUnit_in_functionCall10911 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10913 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _expr_in_functionCall10940 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10942 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CURDATE_in_functionCall10968 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10970 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10972 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CURRENT_DATE_in_functionCall10990 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall10993 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall10995 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CURTIME_in_functionCall11015 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall11017 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall11019 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CURRENT_TIME_in_functionCall11038 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall11041 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall11043 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _EXTRACT_in_functionCall11063 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall11065 = new BitSet(new ulong[]{0x0UL,0x3E0000000000000UL,0x0UL,0x78000000UL,0x0UL,0x81C100UL,0x100000000UL,0x3000000UL,0x0UL,0xC0040000000UL});
		public static readonly BitSet _timeUnit_in_functionCall11067 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x8UL});
		public static readonly BitSet _FROM_in_functionCall11069 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11071 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall11073 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _GET_FORMAT_in_functionCall11093 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall11095 = new BitSet(new ulong[]{0x0UL,0x1800000000000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000000000UL});
		public static readonly BitSet _DATE_in_functionCall11104 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _TIME_in_functionCall11110 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _DATETIME_in_functionCall11116 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11124 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall11128 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NOW_in_functionCall11156 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall11158 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall11160 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CURRENT_TIMESTAMP_in_functionCall11181 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall11184 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall11186 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _POSITION_in_functionCall11206 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall11208 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11212 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x1000000000UL});
		public static readonly BitSet _IN_in_functionCall11214 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11218 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall11220 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SUBDATE_in_functionCall11244 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall11246 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11250 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall11252 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11261 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _INTERVAL_in_functionCall11290 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11294 = new BitSet(new ulong[]{0x0UL,0x3E0000000000000UL,0x0UL,0x78000000UL,0x0UL,0x81C100UL,0x100000000UL,0x3000000UL,0x0UL,0xC0040000000UL});
		public static readonly BitSet _timeUnit_in_functionCall11296 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall11323 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SUBSTR_in_functionCall11333 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _SUBSTRING_in_functionCall11339 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall11342 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11350 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x8UL});
		public static readonly BitSet _COMMA_in_functionCall11358 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11362 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall11364 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851FF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11368 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _FROM_in_functionCall11401 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11405 = new BitSet(new ulong[]{0x0UL,0x0UL,0x4000000000000000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _FOR_in_functionCall11408 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11412 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall11450 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SYSDATE_in_functionCall11455 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall11457 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall11459 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TIMESTAMP_ADD_in_functionCall11479 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall11481 = new BitSet(new ulong[]{0x0UL,0x20000000000000UL,0x0UL,0x8000004UL,0x0UL,0x804100UL,0x100000000UL,0x1000000UL,0x0UL,0x40040000000UL});
		public static readonly BitSet _timestampUnit_in_functionCall11486 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11493 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11500 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall11505 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TIMESTAMP_DIFF_in_functionCall11535 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall11537 = new BitSet(new ulong[]{0x0UL,0x20000000000000UL,0x0UL,0x8000004UL,0x0UL,0x804100UL,0x100000000UL,0x1000000UL,0x0UL,0x40040000000UL});
		public static readonly BitSet _timestampUnit_in_functionCall11542 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11549 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall11556 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall11561 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _UTC_DATE_in_functionCall11591 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall11594 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall11596 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _UTC_TIMESTAMP_in_functionCall11619 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall11622 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall11624 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _UTC_TIME_in_functionCall11646 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall11649 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall11651 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _functionCall_conflicts_in_functionCall11675 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _functionCall_reserved_in_functionCall11680 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ID_in_functionCall11691 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _parenOptExprList_in_functionCall11695 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _ASCII_in_functionCall_conflicts11730 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts11732 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts11734 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts11736 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CHARSET_in_functionCall_conflicts11754 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts11756 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts11758 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts11760 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COALESCE_in_functionCall_conflicts11778 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts11780 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _exprList_in_functionCall_conflicts11782 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts11784 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _COLLATION_in_functionCall_conflicts11802 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts11804 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts11806 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts11808 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CONTAINS_in_functionCall_conflicts11826 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts11828 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts11832 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall_conflicts11834 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts11838 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts11840 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DATABASE_in_functionCall_conflicts11863 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts11865 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts11867 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _GEOMETRYCOLLECTION_in_functionCall_conflicts11885 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts11887 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _exprList_in_functionCall_conflicts11889 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts11891 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _IF_in_functionCall_conflicts11910 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts11912 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts11916 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall_conflicts11918 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts11922 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall_conflicts11924 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts11928 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts11930 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LINESTRING_in_functionCall_conflicts11954 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts11956 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _exprList_in_functionCall_conflicts11958 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts11960 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MICROSECOND_in_functionCall_conflicts11979 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts11981 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts11983 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts11985 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MOD_in_functionCall_conflicts12003 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts12005 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12009 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall_conflicts12011 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12015 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts12017 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MULTILINESTRING_in_functionCall_conflicts12039 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts12041 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _exprList_in_functionCall_conflicts12043 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts12045 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MULTIPOINT_in_functionCall_conflicts12064 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts12066 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _exprList_in_functionCall_conflicts12068 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts12070 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MULTIPOLYGON_in_functionCall_conflicts12089 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts12091 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _exprList_in_functionCall_conflicts12093 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts12095 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _OLD_PASSWORD_in_functionCall_conflicts12114 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts12116 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12118 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts12120 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _PASSWORD_in_functionCall_conflicts12138 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts12140 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12142 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts12144 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _POINT_in_functionCall_conflicts12162 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts12164 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12168 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall_conflicts12170 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12174 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts12176 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _POLYGON_in_functionCall_conflicts12199 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts12201 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _exprList_in_functionCall_conflicts12203 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts12205 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _QUARTER_in_functionCall_conflicts12224 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts12226 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12228 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts12230 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _REPEAT_in_functionCall_conflicts12248 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts12250 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12254 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall_conflicts12256 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12260 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts12262 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _REPLACE_in_functionCall_conflicts12284 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts12286 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12290 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall_conflicts12292 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12296 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall_conflicts12298 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12302 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts12304 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TRUNCATE_in_functionCall_conflicts12329 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts12331 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12335 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall_conflicts12337 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12341 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts12343 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _WEEK_in_functionCall_conflicts12365 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_conflicts12367 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12371 = new BitSet(new ulong[]{0x0UL,0x800UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _COMMA_in_functionCall_conflicts12374 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_conflicts12378 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_conflicts12382 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CHAR_in_functionCall_reserved12415 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12417 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _exprList_in_functionCall_reserved12419 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL,0x0UL,0x1000UL});
		public static readonly BitSet _USING_in_functionCall_reserved12422 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x80000000UL,0x0UL,0x0UL,0x0UL,0x0UL,0x1000UL});
		public static readonly BitSet _ID_in_functionCall_reserved12427 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _STRING_in_functionCall_reserved12431 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12436 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _CURRENT_USER_in_functionCall_reserved12459 = new BitSet(new ulong[]{0x2UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12462 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12464 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DATE_in_functionCall_reserved12490 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12492 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_reserved12494 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12496 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _DAY_in_functionCall_reserved12514 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12516 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_reserved12518 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12520 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _HOUR_in_functionCall_reserved12538 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12540 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_reserved12542 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12544 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INSERT_in_functionCall_reserved12562 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12564 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_reserved12572 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall_reserved12574 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_reserved12578 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall_reserved12580 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_reserved12584 = new BitSet(new ulong[]{0x0UL,0x800UL});
		public static readonly BitSet _COMMA_in_functionCall_reserved12586 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_reserved12590 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12594 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INTERVAL_in_functionCall_reserved12628 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12630 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _exprList_in_functionCall_reserved12632 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12634 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _LEFT_in_functionCall_reserved12652 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12654 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_reserved12656 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12658 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MINUTE_in_functionCall_reserved12676 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12678 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_reserved12680 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12682 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _MONTH_in_functionCall_reserved12700 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12702 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_reserved12704 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12706 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _RIGHT_in_functionCall_reserved12724 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12726 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_reserved12728 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12730 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _SECOND_in_functionCall_reserved12748 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12750 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_reserved12752 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12754 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TIME_in_functionCall_reserved12772 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12774 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_reserved12776 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12778 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _TIMESTAMP_in_functionCall_reserved12796 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12798 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_reserved12800 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12802 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _USER_in_functionCall_reserved12820 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12822 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12824 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _YEAR_in_functionCall_reserved12842 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x10000000000UL});
		public static readonly BitSet _LPAREN_in_functionCall_reserved12844 = new BitSet(new ulong[]{0xB69AEE5E5FC90FA0UL,0x842BD97E6B6FD5FEUL,0x23DFAF9BE8E10F22UL,0xDD01C54B8EDE4FD6UL,0xFD7FFF04C584B1D0UL,0x11DD5DFEFEAE7BC7UL,0x7EDCF8077AE7FFFCUL,0xAC076F5F851DF957UL,0x3DFF60F6F7FFF7FAUL,0x85987EC5E929UL});
		public static readonly BitSet _expr_in_functionCall_reserved12846 = new BitSet(new ulong[]{0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x0UL,0x20000UL});
		public static readonly BitSet _RPAREN_in_functionCall_reserved12848 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _set_in_synpred1_MySQL51Parser3024 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _join_condition_on_in_synpred2_MySQL51Parser3151 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _NATURAL_in_synpred3_MySQL51Parser3214 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _subselect_in_expr_rhs_in_synpred4_MySQL51Parser6648 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INTERVAL_in_synpred5_MySQL51Parser7355 = new BitSet(new ulong[]{0xFFFFFFFFFFFFFFF0UL,0xFFFFFFFFFFFFFFFFUL,0xFFFFFFFFFFFFFFFFUL,0xFFFFFFFFFFFFFFFFUL,0xFFFFFEFFFFFFFFFFUL,0xFFFFFFFFFFFFFFFFUL,0xFFFFFFFFFFFFFFFFUL,0xFFFFFFFFFFFFFFFFUL,0xFFFFFFFFFFFFFFFFUL,0xFFFFFFFFFFFFFFFFUL});
		public static readonly BitSet _set_in_synpred5_MySQL51Parser7357 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _functionCall_in_synpred6_MySQL51Parser7528 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INTERVAL_in_synpred7_MySQL51Parser10901 = new BitSet(new ulong[]{0x2UL});
		public static readonly BitSet _INTERVAL_in_synpred8_MySQL51Parser11287 = new BitSet(new ulong[]{0x2UL});

	}
	#endregion Follow sets
}

} // namespace MySqlParser
