/// <exception cref="System.SqlSyntaxErrorException" /> protected virtual void ScanString() { var dq = false; if (ch == '\'') { } else { if (ch == '"') { dq = true; } else { throw Err("first char must be \" or '"); } } offsetCache = curIndex; var size = 1; sbuf[0] = '\''; if (dq) { while (true) { switch (ScanChar()) { case '\'': { PutChar('\\', size++); PutChar('\'', size++); break; } case '\\': { PutChar('\\', size++); PutChar(ScanChar(), size++); continue; } case '"': { if (sql[curIndex + 1] == '"') { PutChar('"', size++); ScanChar(); continue; } PutChar('\'', size++); ScanChar(); goto loop_break; } default: { if (Eof()) { throw Err("unclosed string"); } PutChar(ch, size++); continue; } } // loop_continue:; } loop_break: ; } else { while (true) { switch (ScanChar()) { case '\\': { PutChar('\\', size++); PutChar(ScanChar(), size++); continue; } case '\'': { if (sql[curIndex + 1] == '\'') { PutChar('\\', size++); PutChar(ScanChar(), size++); continue; } PutChar('\'', size++); ScanChar(); goto loop_break; } default: { if (Eof()) { throw Err("unclosed string"); } PutChar(ch, size++); continue; } } //loop_continue:; } loop_break: ; } sizeCache = size; stringValue = new string(sbuf, 0, size); token = MySqlToken.LiteralChars; }
/// <param name="quoteMode"> /// if false: first <code>0x</code> has been skipped; if /// true: first <code>x'</code> has been skipped /// </param> /// <exception cref="System.SqlSyntaxErrorException" /> protected virtual void ScanHexaDecimal(bool quoteMode) { offsetCache = curIndex; for (; CharTypes.IsHex(ch); ScanChar()) { } sizeCache = curIndex - offsetCache; // if (sizeCache <= 0) { // throw err("expect at least one hexdigit"); // } if (quoteMode) { if (ch != '\'') { throw Err("invalid char for hex: " + ch); } ScanChar(); } else { if (CharTypes.IsIdentifierChar(ch)) { ScanIdentifierFromNumber(offsetCache - 2, sizeCache + 2); return; } } token = MySqlToken.LiteralHex; }
/// <summary>first <code>@</code> is included</summary> /// <exception cref="System.SqlSyntaxErrorException" /> protected virtual void ScanUserVariable() { if (ch != '@') { throw Err("first char must be @"); } offsetCache = curIndex; sizeCache = 1; var dq = false; switch (ScanChar()) { case '"': { dq = true; goto case '\''; } case '\'': { for (++sizeCache;; ++sizeCache) { switch (ScanChar()) { case '\\': { ++sizeCache; ScanChar(); break; } case '"': { if (dq) { ++sizeCache; if (ScanChar() == '"') { break; } goto loop1_break; } break; } case '\'': { if (!dq) { ++sizeCache; if (ScanChar() == '\'') { break; } goto loop1_break; } break; } } //loop1_continue:; } loop1_break: ; break; } case '`': { for (++sizeCache;; ++sizeCache) { switch (ScanChar()) { case '`': { ++sizeCache; if (ScanChar() == '`') { break; } goto loop1_break; } } //loop1_continue:; } loop1_break: ; break; } default: { for (; CharTypes.IsIdentifierChar(ch) || ch == '.'; ++sizeCache) { ScanChar(); } break; } } stringValue = new string(sql, offsetCache, sizeCache); token = MySqlToken.UsrVar; }
/// <summary>first <code>@@</code> is included</summary> /// <exception cref="System.SqlSyntaxErrorException" /> protected virtual void ScanSystemVariable() { if (ch != '@' || sql[curIndex + 1] != '@') { throw Err("first char must be @@"); } offsetCache = curIndex + 2; sizeCache = 0; ScanChar(2); if (ch == '`') { for (++sizeCache;; ++sizeCache) { if (ScanChar() == '`') { ++sizeCache; if (ScanChar() != '`') { break; } } } } else { for (; CharTypes.IsIdentifierChar(ch); ++sizeCache) { ScanChar(); } } UpdateStringValue(sql, offsetCache, sizeCache); token = MySqlToken.SysVar; }
/// <exception cref="System.SqlSyntaxErrorException" /> private MySqlToken NextTokenInternal() { switch (ch) { case '0': { switch (sql[curIndex + 1]) { case 'x': { ScanChar(2); ScanHexaDecimal(false); return token; } case 'b': { ScanChar(2); ScanBitField(false); return token; } } goto case '1'; } case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { ScanNumber(); return token; } case '.': { if (CharTypes.IsDigit(sql[curIndex + 1])) { ScanNumber(); } else { ScanChar(); token = MySqlToken.PuncDot; } return token; } case '\'': case '"': { ScanString(); return token; } case 'n': case 'N': { if (sql[curIndex + 1] == '\'') { ScanChar(); ScanString(); token = MySqlToken.LiteralNchars; return token; } ScanIdentifier(); return token; } case 'x': case 'X': { if (sql[curIndex + 1] == '\'') { ScanChar(2); ScanHexaDecimal(true); return token; } ScanIdentifier(); return token; } case 'b': case 'B': { if (sql[curIndex + 1] == '\'') { ScanChar(2); ScanBitField(true); return token; } ScanIdentifier(); return token; } case '@': { if (sql[curIndex + 1] == '@') { ScanSystemVariable(); return token; } ScanUserVariable(); return token; } case '?': { ScanChar(); token = MySqlToken.QuestionMark; ++paramIndex; return token; } case '(': { ScanChar(); token = MySqlToken.PuncLeftParen; return token; } case ')': { ScanChar(); token = MySqlToken.PuncRightParen; return token; } case '[': { ScanChar(); token = MySqlToken.PuncLeftBracket; return token; } case ']': { ScanChar(); token = MySqlToken.PuncRightBracket; return token; } case '{': { ScanChar(); token = MySqlToken.PuncLeftBrace; return token; } case '}': { ScanChar(); token = MySqlToken.PuncRightBrace; return token; } case ',': { ScanChar(); token = MySqlToken.PuncComma; return token; } case ';': { ScanChar(); token = MySqlToken.PuncSemicolon; return token; } case ':': { if (sql[curIndex + 1] == '=') { ScanChar(2); token = MySqlToken.OpAssign; return token; } ScanChar(); token = MySqlToken.PuncColon; return token; } case '=': { ScanChar(); token = MySqlToken.OpEquals; return token; } case '~': { ScanChar(); token = MySqlToken.OpTilde; return token; } case '*': { if (inCStyleComment && sql[curIndex + 1] == '/') { inCStyleComment = false; inCStyleCommentIgnore = false; ScanChar(2); token = MySqlToken.PuncCStyleCommentEnd; return token; } ScanChar(); token = MySqlToken.OpAsterisk; return token; } case '-': { ScanChar(); token = MySqlToken.OpMinus; return token; } case '+': { ScanChar(); token = MySqlToken.OpPlus; return token; } case '^': { ScanChar(); token = MySqlToken.OpCaret; return token; } case '/': { ScanChar(); token = MySqlToken.OpSlash; return token; } case '%': { ScanChar(); token = MySqlToken.OpPercent; return token; } case '&': { if (sql[curIndex + 1] == '&') { ScanChar(2); token = MySqlToken.OpLogicalAnd; return token; } ScanChar(); token = MySqlToken.OpAmpersand; return token; } case '|': { if (sql[curIndex + 1] == '|') { ScanChar(2); token = MySqlToken.OpLogicalOr; return token; } ScanChar(); token = MySqlToken.OpVerticalBar; return token; } case '!': { if (sql[curIndex + 1] == '=') { ScanChar(2); token = MySqlToken.OpNotEquals; return token; } ScanChar(); token = MySqlToken.OpExclamation; return token; } case '>': { switch (sql[curIndex + 1]) { case '=': { ScanChar(2); token = MySqlToken.OpGreaterOrEquals; return token; } case '>': { ScanChar(2); token = MySqlToken.OpRightShift; return token; } default: { ScanChar(); token = MySqlToken.OpGreaterThan; return token; } } //goto case '<'; } case '<': { switch (sql[curIndex + 1]) { case '=': { if (sql[curIndex + 2] == '>') { ScanChar(3); token = MySqlToken.OpNullSafeEquals; return token; } ScanChar(2); token = MySqlToken.OpLessOrEquals; return token; } case '>': { ScanChar(2); token = MySqlToken.OpLessOrGreater; return token; } case '<': { ScanChar(2); token = MySqlToken.OpLeftShift; return token; } default: { ScanChar(); token = MySqlToken.OpLessThan; return token; } } //goto case '`'; } case '`': { ScanIdentifierWithAccent(); return token; } default: { if (CharTypes.IsIdentifierChar(ch)) { ScanIdentifier(); } else { if (Eof()) { token = MySqlToken.Eof; curIndex = eofIndex; } else { // tokenPos = curIndex; throw Err("unsupported character: " + ch); } } return token; } } }
/// <exception cref="System.SqlSyntaxErrorException" /> public MySqlToken NextToken() { if (tokenCache2 != MySqlToken.None) { tokenCache2 = MySqlToken.None; return tokenCache; } if (tokenCache != MySqlToken.None) { tokenCache = MySqlToken.None; return token; } if (token == MySqlToken.Eof) { throw new SqlSyntaxErrorException("eof for sql is already reached, cannot get new token"); } MySqlToken t; do { SkipSeparator(); t = NextTokenInternal(); } while (inCStyleComment && inCStyleCommentIgnore || MySqlToken.PuncCStyleCommentEnd == t); return t; }
/// <summary>id is included in <code>`</code>.</summary> /// <remarks>id is included in <code>`</code>. first <code>`</code> is included</remarks> /// <exception cref="System.SqlSyntaxErrorException" /> protected virtual void ScanIdentifierWithAccent() { offsetCache = curIndex; for (; ScanChar() != Eoi;) { if (ch == '`' && ScanChar() != '`') { break; } } UpdateStringValue(sql, offsetCache, sizeCache = curIndex - offsetCache); token = MySqlToken.Identifier; }
/// <param name="token">must be a keyword</param> public void AddCacheToke(MySqlToken token) { if (tokenCache != MySqlToken.None) { tokenCache2 = token; } else { tokenCache = token; } }
/// <summary>not Sql syntax</summary> /// <exception cref="System.SqlSyntaxErrorException" /> protected virtual void ScanPlaceHolder() { offsetCache = curIndex + 1; sizeCache = 0; for (ScanChar(); ch != '}' && !Eof(); ++sizeCache) { ScanChar(); } if (ch == '}') { ScanChar(); } UpdateStringValue(sql, offsetCache, sizeCache); token = MySqlToken.PlaceHolder; }
/// <summary> /// NOTE: /// <see cref="MySqlToken.Identifier">id</see> /// dosn't include <code>'.'</code> /// for sake of performance issue (based on <i>shaojin.wensj</i>'s design). /// However, it is not convenient for MySql compatibility. e.g. /// <code>".123f"</code> will be regarded as <code>".123"</code> and /// <code>"f"</code> in MySql, but in this /// <see cref="MySqlLexer" /> /// , it will be /// <code>"."</code> and <code>"123f"</code> because <code>".123f"</code> may /// be part of <code>"db1.123f"</code> and <code>"123f"</code> is the table /// name. /// </summary> /// <param name="initSize">how many char has already been consumed</param> /// <exception cref="System.SqlSyntaxErrorException" /> private void ScanIdentifierFromNumber(int initOffset, int initSize) { offsetCache = initOffset; sizeCache = initSize; for (; CharTypes.IsIdentifierChar(ch); ++sizeCache) { ScanChar(); } UpdateStringValue(sql, offsetCache, sizeCache); var tok = keywods.GetKeyword(stringValueUppercase); token = tok == MySqlToken.None ? MySqlToken.Identifier : tok; }
/// <summary> /// if first char is <code>.</code>, token may be /// <see cref="MySqlToken.PuncDot" /> /// if invalid char is presented after <code>.</code> /// </summary> /// <exception cref="System.SqlSyntaxErrorException" /> protected virtual void ScanNumber() { offsetCache = curIndex; sizeCache = 1; var fstDot = ch == '.'; var dot = fstDot; var sign = false; var state = fstDot ? 1 : 0; for (; ScanChar() != Eoi; ++sizeCache) { switch (state) { case 0: { if (CharTypes.IsDigit(ch)) { } else { if (ch == '.') { dot = true; state = 1; } else { if (ch == 'e' || ch == 'E') { state = 3; } else { if (CharTypes.IsIdentifierChar(ch)) { ScanIdentifierFromNumber(offsetCache, sizeCache); return; } token = MySqlToken.LiteralNumPureDigit; return; } } } break; } case 1: { if (CharTypes.IsDigit(ch)) { state = 2; } else { if (ch == 'e' || ch == 'E') { state = 3; } else { if (CharTypes.IsIdentifierChar(ch) && fstDot) { sizeCache = 1; ch = sql[curIndex = offsetCache + 1]; token = MySqlToken.PuncDot; return; } token = MySqlToken.LiteralNumMixDigit; return; } } break; } case 2: { if (CharTypes.IsDigit(ch)) { } else { if (ch == 'e' || ch == 'E') { state = 3; } else { if (CharTypes.IsIdentifierChar(ch) && fstDot) { sizeCache = 1; ch = sql[curIndex = offsetCache + 1]; token = MySqlToken.PuncDot; return; } token = MySqlToken.LiteralNumMixDigit; return; } } break; } case 3: { if (CharTypes.IsDigit(ch)) { state = 5; } else { if (ch == '+' || ch == '-') { sign = true; state = 4; } else { if (fstDot) { sizeCache = 1; ch = sql[curIndex = offsetCache + 1]; token = MySqlToken.PuncDot; return; } if (!dot) { if (CharTypes.IsIdentifierChar(ch)) { ScanIdentifierFromNumber(offsetCache, sizeCache); } else { UpdateStringValue(sql, offsetCache, sizeCache); var tok = keywods.GetKeyword(stringValueUppercase); token = tok == MySqlToken.None ? MySqlToken.Identifier : tok; } return; } throw Err("invalid char after '.' and 'e' for as part of number: " + ch); } } break; } case 4: { if (CharTypes.IsDigit(ch)) { state = 5; break; } if (fstDot) { sizeCache = 1; ch = sql[curIndex = offsetCache + 1]; token = MySqlToken.PuncDot; } else { if (!dot) { ch = sql[--curIndex]; --sizeCache; UpdateStringValue(sql, offsetCache, sizeCache); var tok = keywods.GetKeyword(stringValueUppercase); token = tok == MySqlToken.None ? MySqlToken.Identifier : tok; } else { throw Err("expect digit char after SIGN for 'e': " + ch); } } return; } case 5: { if (CharTypes.IsDigit(ch)) { break; } if (CharTypes.IsIdentifierChar(ch)) { if (fstDot) { sizeCache = 1; ch = sql[curIndex = offsetCache + 1]; token = MySqlToken.PuncDot; } else { if (!dot) { if (sign) { ch = sql[curIndex = offsetCache]; ScanIdentifierFromNumber(curIndex, 0); } else { ScanIdentifierFromNumber(offsetCache, sizeCache); } } else { token = MySqlToken.LiteralNumMixDigit; } } } else { token = MySqlToken.LiteralNumMixDigit; } return; } } } switch (state) { case 0: { token = MySqlToken.LiteralNumPureDigit; return; } case 1: { if (fstDot) { token = MySqlToken.PuncDot; return; } goto case 2; } case 2: case 5: { token = MySqlToken.LiteralNumMixDigit; return; } case 3: { if (fstDot) { sizeCache = 1; ch = sql[curIndex = offsetCache + 1]; token = MySqlToken.PuncDot; } else { if (!dot) { UpdateStringValue(sql, offsetCache, sizeCache); var tok = keywods.GetKeyword(stringValueUppercase); token = tok == MySqlToken.None ? MySqlToken.Identifier : tok; } else { throw Err("expect digit char after SIGN for 'e': " + ch); } } return; } case 4: { if (fstDot) { sizeCache = 1; ch = sql[curIndex = offsetCache + 1]; token = MySqlToken.PuncDot; } else { if (!dot) { ch = sql[--curIndex]; --sizeCache; UpdateStringValue(sql, offsetCache, sizeCache); var tok = keywods.GetKeyword(stringValueUppercase); token = tok == MySqlToken.None ? MySqlToken.Identifier : tok; } else { throw Err("expect digit char after SIGN for 'e': " + ch); } } return; } } }
/// <param name="quoteMode"> /// if false: first <code>0b</code> has been skipped; if /// true: first <code>b'</code> has been skipped /// </param> /// <exception cref="System.SqlSyntaxErrorException" /> protected virtual void ScanBitField(bool quoteMode) { offsetCache = curIndex; for (; ch == '0' || ch == '1'; ScanChar()) { } sizeCache = curIndex - offsetCache; // if (sizeCache <= 0) { // throw err("expect at least one bit"); // } if (quoteMode) { if (ch != '\'') { throw Err("invalid char for bit: " + ch); } ScanChar(); } else { if (CharTypes.IsIdentifierChar(ch)) { ScanIdentifierFromNumber(offsetCache - 2, sizeCache + 2); return; } } token = MySqlToken.LiteralBit; stringValue = new string(sql, offsetCache, sizeCache); }
// /** @ */ // OP_AT, public static string KeyWordToString(this MySqlToken token) { switch (token) { case MySqlToken.KwAccessible: { return("ACCESSIBLE"); } case MySqlToken.KwAdd: { return("ADD"); } case MySqlToken.KwAll: { return("ALL"); } case MySqlToken.KwAlter: { return("ALTER"); } case MySqlToken.KwAnalyze: { return("ANALYZE"); } case MySqlToken.KwAnd: { return("AND"); } case MySqlToken.KwAs: { return("AS"); } case MySqlToken.KwAsc: { return("ASC"); } case MySqlToken.KwAsensitive: { return("ASENSITIVE"); } case MySqlToken.KwBefore: { return("BEFORE"); } case MySqlToken.KwBetween: { return("BETWEEN"); } case MySqlToken.KwBigint: { return("BIGINT"); } case MySqlToken.KwBinary: { return("BINARY"); } case MySqlToken.KwBlob: { return("BLOB"); } case MySqlToken.KwBoth: { return("BOTH"); } case MySqlToken.KwBy: { return("BY"); } case MySqlToken.KwCall: { return("CALL"); } case MySqlToken.KwCascade: { return("CASCADE"); } case MySqlToken.KwCase: { return("CASE"); } case MySqlToken.KwChange: { return("CHANGE"); } case MySqlToken.KwChar: { return("CHAR"); } case MySqlToken.KwCharacter: { return("CHARACTER"); } case MySqlToken.KwCheck: { return("CHECK"); } case MySqlToken.KwCollate: { return("COLLATE"); } case MySqlToken.KwColumn: { return("COLUMN"); } case MySqlToken.KwCondition: { return("CONDITION"); } case MySqlToken.KwConstraint: { return("CONSTRAINT"); } case MySqlToken.KwContinue: { return("CONTINUE"); } case MySqlToken.KwConvert: { return("CONVERT"); } case MySqlToken.KwCreate: { return("CREATE"); } case MySqlToken.KwCross: { return("CROSS"); } case MySqlToken.KwCurrentDate: { return("CURRENT_DATE"); } case MySqlToken.KwCurrentTime: { return("CURRENT_TIME"); } case MySqlToken.KwCurrentTimestamp: { return("CURRENT_TIMESTAMP"); } case MySqlToken.KwCurrentUser: { return("CURRENT_USER"); } case MySqlToken.KwCursor: { return("CURSOR"); } case MySqlToken.KwDatabase: { return("DATABASE"); } case MySqlToken.KwDatabases: { return("DATABASES"); } case MySqlToken.KwDayHour: { return("DAY_HOUR"); } case MySqlToken.KwDayMicrosecond: { return("DAY_MICROSECOND"); } case MySqlToken.KwDayMinute: { return("DAY_MINUTE"); } case MySqlToken.KwDaySecond: { return("DAY_SECOND"); } case MySqlToken.KwDec: { return("DEC"); } case MySqlToken.KwDecimal: { return("DECIMAL"); } case MySqlToken.KwDeclare: { return("DECLARE"); } case MySqlToken.KwDefault: { return("DEFAULT"); } case MySqlToken.KwDelayed: { return("DELAYED"); } case MySqlToken.KwDelete: { return("DELETE"); } case MySqlToken.KwDesc: { return("DESC"); } case MySqlToken.KwDescribe: { return("DESCRIBE"); } case MySqlToken.KwDeterministic: { return("DETERMINISTIC"); } case MySqlToken.KwDistinct: { return("DISTINCT"); } case MySqlToken.KwDistinctrow: { return("DISTINCTROW"); } case MySqlToken.KwDiv: { return("DIV"); } case MySqlToken.KwDouble: { return("DOUBLE"); } case MySqlToken.KwDrop: { return("DROP"); } case MySqlToken.KwDual: { return("DUAL"); } case MySqlToken.KwEach: { return("EACH"); } case MySqlToken.KwElse: { return("ELSE"); } case MySqlToken.KwElseif: { return("ELSEIF"); } case MySqlToken.KwEnclosed: { return("ENCLOSED"); } case MySqlToken.KwEscaped: { return("ESCAPED"); } case MySqlToken.KwExists: { return("EXISTS"); } case MySqlToken.KwExit: { return("EXIT"); } case MySqlToken.KwExplain: { return("EXPLAIN"); } case MySqlToken.KwFetch: { return("FETCH"); } case MySqlToken.KwFloat: { return("FLOAT"); } case MySqlToken.KwFloat4: { return("FLOAT4"); } case MySqlToken.KwFloat8: { return("FLOAT8"); } case MySqlToken.KwFor: { return("FOR"); } case MySqlToken.KwForce: { return("FORCE"); } case MySqlToken.KwForeign: { return("FOREIGN"); } case MySqlToken.KwFrom: { return("FROM"); } case MySqlToken.KwFulltext: { return("FULLTEXT"); } case MySqlToken.KwGeneral: { return("GENERAL"); } case MySqlToken.KwGrant: { return("GRANT"); } case MySqlToken.KwGroup: { return("GROUP"); } case MySqlToken.KwHaving: { return("HAVING"); } case MySqlToken.KwHighPriority: { return("HIGH_PRIORITY"); } case MySqlToken.KwHourMicrosecond: { return("HOUR_MICROSECOND"); } case MySqlToken.KwHourMinute: { return("HOUR_MINUTE"); } case MySqlToken.KwHourSecond: { return("HOUR_SECOND"); } case MySqlToken.KwIf: { return("IF"); } case MySqlToken.KwIgnore: { return("IGNORE"); } case MySqlToken.KwIgnoreServerIds: { return("IGNORE_SERVER_IDS"); } case MySqlToken.KwIn: { return("IN"); } case MySqlToken.KwIndex: { return("INDEX"); } case MySqlToken.KwInfile: { return("INFILE"); } case MySqlToken.KwInner: { return("INNER"); } case MySqlToken.KwInout: { return("INOUT"); } case MySqlToken.KwInsensitive: { return("INSENSITIVE"); } case MySqlToken.KwInsert: { return("INSERT"); } case MySqlToken.KwInt: { return("INT"); } case MySqlToken.KwInt1: { return("INT1"); } case MySqlToken.KwInt2: { return("INT2"); } case MySqlToken.KwInt3: { return("INT3"); } case MySqlToken.KwInt4: { return("INT4"); } case MySqlToken.KwInt8: { return("INT8"); } case MySqlToken.KwInteger: { return("INTEGER"); } case MySqlToken.KwInterval: { return("INTERVAL"); } case MySqlToken.KwInto: { return("INTO"); } case MySqlToken.KwIs: { return("IS"); } case MySqlToken.KwIterate: { return("ITERATE"); } case MySqlToken.KwJoin: { return("JOIN"); } case MySqlToken.KwKey: { return("KEY"); } case MySqlToken.KwKeys: { return("KEYS"); } case MySqlToken.KwKill: { return("KILL"); } case MySqlToken.KwLeading: { return("LEADING"); } case MySqlToken.KwLeave: { return("LEAVE"); } case MySqlToken.KwLeft: { return("LEFT"); } case MySqlToken.KwLike: { return("LIKE"); } case MySqlToken.KwLimit: { return("LIMIT"); } case MySqlToken.KwLinear: { return("LINEAR"); } case MySqlToken.KwLines: { return("LINES"); } case MySqlToken.KwLoad: { return("LOAD"); } case MySqlToken.KwLocaltime: { return("LOCALTIME"); } case MySqlToken.KwLocaltimestamp: { return("LOCALTIMESTAMP"); } case MySqlToken.KwLock: { return("LOCK"); } case MySqlToken.KwLong: { return("LONG"); } case MySqlToken.KwLongblob: { return("LONGBLOB"); } case MySqlToken.KwLongtext: { return("LONGTEXT"); } case MySqlToken.KwLoop: { return("LOOP"); } case MySqlToken.KwLowPriority: { return("LOW_PRIORITY"); } case MySqlToken.KwMasterHeartbeatPeriod: { return("MASTER_HEARTBEAT_PERIOD"); } case MySqlToken.KwMasterSslVerifyServerCert: { return("MASTER_SSL_VERIFY_SERVER_CERT"); } case MySqlToken.KwMatch: { return("MATCH"); } case MySqlToken.KwMaxvalue: { return("MAXVALUE"); } case MySqlToken.KwMediumblob: { return("MEDIUMBLOB"); } case MySqlToken.KwMediumint: { return("MEDIUMINT"); } case MySqlToken.KwMediumtext: { return("MEDIUMTEXT"); } case MySqlToken.KwMiddleint: { return("MIDdlEINT"); } case MySqlToken.KwMinuteMicrosecond: { return("MINUTE_MICROSECOND"); } case MySqlToken.KwMinuteSecond: { return("MINUTE_SECOND"); } case MySqlToken.KwMod: { return("MOD"); } case MySqlToken.KwModifies: { return("MODIFIES"); } case MySqlToken.KwNatural: { return("NATURAL"); } case MySqlToken.KwNot: { return("NOT"); } case MySqlToken.KwNoWriteToBinlog: { return("NO_WRITE_TO_BINLOG"); } case MySqlToken.KwNumeric: { return("NUMERIC"); } case MySqlToken.KwOn: { return("ON"); } case MySqlToken.KwOptimize: { return("OPTIMIZE"); } case MySqlToken.KwOption: { return("OPTION"); } case MySqlToken.KwOptionally: { return("OPTIONALLY"); } case MySqlToken.KwOr: { return("OR"); } case MySqlToken.KwOrder: { return("ORDER"); } case MySqlToken.KwOut: { return("OUT"); } case MySqlToken.KwOuter: { return("OUTER"); } case MySqlToken.KwOutfile: { return("OUTFILE"); } case MySqlToken.KwPrecision: { return("PRECISION"); } case MySqlToken.KwPrimary: { return("PRIMARY"); } case MySqlToken.KwProcedure: { return("PROCEDURE"); } case MySqlToken.KwPurge: { return("PURGE"); } case MySqlToken.KwRange: { return("RANGE"); } case MySqlToken.KwRead: { return("READ"); } case MySqlToken.KwReads: { return("READS"); } case MySqlToken.KwReadWrite: { return("READ_WRITE"); } case MySqlToken.KwReal: { return("REAL"); } case MySqlToken.KwReferences: { return("REFERENCES"); } case MySqlToken.KwRegexp: { return("REGEXP"); } case MySqlToken.KwRelease: { return("RELEASE"); } case MySqlToken.KwRename: { return("RENAME"); } case MySqlToken.KwRepeat: { return("REPEAT"); } case MySqlToken.KwReplace: { return("REPLACE"); } case MySqlToken.KwRequire: { return("REQUIRE"); } case MySqlToken.KwResignal: { return("RESIGNAL"); } case MySqlToken.KwRestrict: { return("RESTRICT"); } case MySqlToken.KwReturn: { return("RETURN"); } case MySqlToken.KwRevoke: { return("REVOKE"); } case MySqlToken.KwRight: { return("RIGHT"); } case MySqlToken.KwRlike: { return("RLIKE"); } case MySqlToken.KwSchema: { return("SCHEMA"); } case MySqlToken.KwSchemas: { return("SCHEMAS"); } case MySqlToken.KwSecondMicrosecond: { return("SECOND_MICROSECOND"); } case MySqlToken.KwSelect: { return("SELECT"); } case MySqlToken.KwSensitive: { return("SENSITIVE"); } case MySqlToken.KwSeparator: { return("SEPARATOR"); } case MySqlToken.KwSet: { return("SET"); } case MySqlToken.KwShow: { return("SHOW"); } case MySqlToken.KwSignal: { return("SIGNAL"); } case MySqlToken.KwSlow: { return("SLOW"); } case MySqlToken.KwSmallint: { return("SMALLINT"); } case MySqlToken.KwSpatial: { return("SPATIAL"); } case MySqlToken.KwSpecific: { return("SPECIFIC"); } case MySqlToken.KwSql: { return("Sql"); } case MySqlToken.KwSqlexception: { return("SQLEXCEPTION"); } case MySqlToken.KwSqlstate: { return("SQLSTATE"); } case MySqlToken.KwSqlwarning: { return("SQLWARNING"); } case MySqlToken.KwSqlBigResult: { return("SQL_BIG_RESULT"); } case MySqlToken.KwSqlCalcFoundRows: { return("SQL_CALC_FOUND_ROWS"); } case MySqlToken.KwSqlSmallResult: { return("SQL_SMALL_RESULT"); } case MySqlToken.KwSsl: { return("SSL"); } case MySqlToken.KwStarting: { return("STARTING"); } case MySqlToken.KwStraightJoin: { return("STRAIGHT_JOIN"); } case MySqlToken.KwTable: { return("TABLE"); } case MySqlToken.KwTerminated: { return("TERMINATED"); } case MySqlToken.KwThen: { return("THEN"); } case MySqlToken.KwTinyblob: { return("TINYBLOB"); } case MySqlToken.KwTinyint: { return("TINYINT"); } case MySqlToken.KwTinytext: { return("TINYTEXT"); } case MySqlToken.KwTo: { return("TO"); } case MySqlToken.KwTrailing: { return("TRAILING"); } case MySqlToken.KwTrigger: { return("TRIGGER"); } case MySqlToken.KwUndo: { return("UNDO"); } case MySqlToken.KwUnion: { return("UNION"); } case MySqlToken.KwUnique: { return("UNIQUE"); } case MySqlToken.KwUnlock: { return("UNLOCK"); } case MySqlToken.KwUnsigned: { return("UNSIGNED"); } case MySqlToken.KwUpdate: { return("UPDATE"); } case MySqlToken.KwUsage: { return("USAGE"); } case MySqlToken.KwUse: { return("USE"); } case MySqlToken.KwUsing: { return("USING"); } case MySqlToken.KwUtcDate: { return("UTC_DATE"); } case MySqlToken.KwUtcTime: { return("UTC_TIME"); } case MySqlToken.KwUtcTimestamp: { return("UTC_TIMESTAMP"); } case MySqlToken.KwValues: { return("VALUES"); } case MySqlToken.KwVarbinary: { return("VARBINARY"); } case MySqlToken.KwVarchar: { return("VARCHAR"); } case MySqlToken.KwVarcharacter: { return("VARCHARACTER"); } case MySqlToken.KwVarying: { return("VARYING"); } case MySqlToken.KwWhen: { return("WHEN"); } case MySqlToken.KwWhere: { return("WHERE"); } case MySqlToken.KwWhile: { return("WHILE"); } case MySqlToken.KwWith: { return("WITH"); } case MySqlToken.KwWrite: { return("WRITE"); } case MySqlToken.KwXor: { return("XOR"); } case MySqlToken.KwYearMonth: { return("YEAR_MONTH"); } case MySqlToken.KwZerofill: { return("ZEROFILL"); } default: { throw new ArgumentException("token is not keyword: " + token); } } }