mysql parser ddl support

This commit is contained in:
温少
2012-05-16 16:58:22 +08:00
4 changed files with 43 additions and 19 deletions
@@ -94,6 +94,7 @@ public class MySqlLexer extends Lexer {
map.put("CAST", Token.CAST);
map.put("IN", Token.IN);
map.put("ASC", Token.ASC);
map.put("DESC", Token.DESC);
map.put("LIKE", Token.LIKE);
map.put("ESCAPE", Token.ESCAPE);
map.put("BETWEEN", Token.BETWEEN);
@@ -244,19 +244,7 @@ public class MySqlStatementParser extends SQLStatementParser {
stmt.setName(this.exprParser.name());
if (identifierEquals("USING")) {
lexer.nextToken();
if (identifierEquals("BTREE")) {
stmt.setType("BTREE");
lexer.nextToken();
} else if (identifierEquals("HASH")) {
stmt.setType("HASH");
lexer.nextToken();
} else {
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
}
}
parseCreateIndexUsing(stmt);
accept(Token.ON);
@@ -275,9 +263,27 @@ public class MySqlStatementParser extends SQLStatementParser {
}
accept(Token.RPAREN);
parseCreateIndexUsing(stmt);
return stmt;
}
private void parseCreateIndexUsing(MySqlCreateIndexStatement stmt) {
if (identifierEquals("USING")) {
lexer.nextToken();
if (identifierEquals("BTREE")) {
stmt.setUsing("BTREE");
lexer.nextToken();
} else if (identifierEquals("HASH")) {
stmt.setUsing("HASH");
lexer.nextToken();
} else {
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
}
}
}
public SQLStatement parseCreateUser() throws ParserException {
if (lexer.token() == Token.CREATE) {
lexer.nextToken();
@@ -2221,18 +2221,17 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
print("INDEX ");
if (x.getUsing() != null) {
print("USING ");
print(x.getUsing());
print(' ');
}
x.getName().accept(this);
print(" ON ");
x.getTable().accept(this);
print(" (");
printAndAccept(x.getItems(), ", ");
print(")");
if (x.getUsing() != null) {
print(" USING ");
print(x.getUsing());
}
return false;
}