public virtual void Visit(ExtDdlCreatePolicy node) { }
/// <summary>nothing has been pre-consumed</summary> /// <exception cref="System.SqlSyntaxErrorException" /> public virtual IDdlStatement DdlStmt() { Identifier idTemp1; Identifier idTemp2; SpecialIdentifier siTemp; switch (lexer.Token()) { case MySqlToken.KwAlter: { var ignore = false; if (lexer.NextToken() == MySqlToken.KwIgnore) { ignore = true; lexer.NextToken(); } switch (lexer.Token()) { case MySqlToken.KwTable: { lexer.NextToken(); idTemp1 = Identifier(); var alterTableStatement = new DdlAlterTableStatement(ignore, idTemp1); return AlterTable(alterTableStatement); } default: { throw Err("Only ALTER TABLE is supported"); } } //goto case MySqlToken.KwCreate; } case MySqlToken.KwCreate: { switch (lexer.NextToken()) { case MySqlToken.KwUnique: case MySqlToken.KwFulltext: case MySqlToken.KwSpatial: { lexer.NextToken(); goto case MySqlToken.KwIndex; } case MySqlToken.KwIndex: { lexer.NextToken(); idTemp1 = Identifier(); for (; lexer.Token() != MySqlToken.KwOn; lexer.NextToken()) { } lexer.NextToken(); idTemp2 = Identifier(); return new DdlCreateIndexStatement(idTemp1, idTemp2); } case MySqlToken.KwTable: { lexer.NextToken(); return CreateTable(false); } case MySqlToken.Identifier: { siTemp = specialIdentifiers.GetValue(lexer.GetStringValueUppercase()); if (siTemp != SpecialIdentifier.None) { switch (siTemp) { case SpecialIdentifier.Temporary: { lexer.NextToken(); Match(MySqlToken.KwTable); return CreateTable(true); } case SpecialIdentifier.Policy: { lexer.NextToken(); var policyName = Identifier(); Match(MySqlToken.PuncLeftParen); var policy = new ExtDdlCreatePolicy(policyName); for (var j = 0; lexer.Token() != MySqlToken.PuncRightParen; ++j) { if (j > 0) { Match(MySqlToken.PuncComma); } var id = (int)lexer.GetIntegerValue(); Match(MySqlToken.LiteralNumPureDigit); var val = exprParser.Expression(); policy.AddProportion(id, val); } Match(MySqlToken.PuncRightParen); return policy; } } } goto default; } default: { throw Err("unsupported Ddl for CREATE"); } } //goto case MySqlToken.KwDrop; } case MySqlToken.KwDrop: { switch (lexer.NextToken()) { case MySqlToken.KwIndex: { lexer.NextToken(); idTemp1 = Identifier(); Match(MySqlToken.KwOn); idTemp2 = Identifier(); return new DdlDropIndexStatement(idTemp1, idTemp2); } case MySqlToken.KwTable: { lexer.NextToken(); return DropTable(false); } case MySqlToken.Identifier: { siTemp = specialIdentifiers.GetValue(lexer.GetStringValueUppercase()); if (siTemp != SpecialIdentifier.None) { switch (siTemp) { case SpecialIdentifier.Temporary: { lexer.NextToken(); Match(MySqlToken.KwTable); return DropTable(true); } case SpecialIdentifier.Policy: { lexer.NextToken(); var policyName = Identifier(); return new ExtDdlDropPolicy(policyName); } } } goto default; } default: { throw Err("unsupported Ddl for DROP"); } } //goto case MySqlToken.KwRename; } case MySqlToken.KwRename: { lexer.NextToken(); Match(MySqlToken.KwTable); idTemp1 = Identifier(); Match(MySqlToken.KwTo); idTemp2 = Identifier(); IList<Pair<Identifier, Identifier>> list; if (lexer.Token() != MySqlToken.PuncComma) { list = new List<Pair<Identifier, Identifier>>(1); list.Add(new Pair<Identifier, Identifier>(idTemp1, idTemp2)); return new DdlRenameTableStatement(list); } list = new List<Pair<Identifier, Identifier>>(); list.Add(new Pair<Identifier, Identifier>(idTemp1, idTemp2)); for (; lexer.Token() == MySqlToken.PuncComma;) { lexer.NextToken(); idTemp1 = Identifier(); Match(MySqlToken.KwTo); idTemp2 = Identifier(); list.Add(new Pair<Identifier, Identifier>(idTemp1, idTemp2)); } return new DdlRenameTableStatement(list); } case MySqlToken.Identifier: { var si = specialIdentifiers.GetValue(lexer.GetStringValueUppercase()); if (si != SpecialIdentifier.None) { switch (si) { case SpecialIdentifier.Truncate: { return Truncate(); } } } goto default; } default: { throw Err("unsupported Ddl"); } } }