mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
mysql parser ddl support
This commit is contained in:
@@ -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);
|
||||
|
||||
+19
-13
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user