public MySQLDMLParser(MySQLLexer lexer, MySQLExprParser exprParser) : base(lexer) { this.exprParser = exprParser; }
public MySQLSelectParser(MySQLLexer lexer, MySQLExprParser exprParser) : base(lexer, exprParser) { this.exprParser.SelectParser = this; }
public static IStatement Parse(string sql, MySQLLexer lexer, string charset) { try { IStatement stmt; bool isEOF = true; MySQLExprParser exprParser = new MySQLExprParser(lexer, charset); StmtSwitch: switch (lexer.Token()) { //TODO:之后加入DAL的解析后,要改 case MySQLToken.KW_SELECT: case MySQLToken.PUNC_LEFT_PAREN: stmt = new SelectStatement goto StmtSwitch; case MySQLToken.KW_DELETE: goto StmtSwitch; case MySQLToken.KW_INSERT: goto StmtSwitch; case MySQLToken.KW_REPLACE: goto StmtSwitch; case MySQLToken.KW_UPDATE: goto StmtSwitch; case MySQLToken.KW_CALL: goto StmtSwitch; case MySQLToken.KW_SET: goto StmtSwitch; case MySQLToken.KW_SHOW: goto StmtSwitch; case MySQLToken.KW_ALTER: case MySQLToken.KW_CREATE: case MySQLToken.KW_DROP: case MySQLToken.KW_RENAME: goto StmtSwitch; case MySQLToken.KW_RELEASE: goto StmtSwitch; case MySQLToken.IDENTIFIER: goto StmtSwitch; default: throw new SystemException("sql is not a supported statement"); } if (isEOF) { while (lexer.Token() == MySQLToken.PUNC_SEMICOLON) { lexer.NextToken(); } if (lexer.Token() != MySQLToken.EOF) { throw new SystemException("SQL syntax error!"); } } return(stmt); } catch (Exception ex) { throw new SystemException(BuildErrorMsg(ex, lexer, sql)); } }