mysql sql parser support 'create database if not exists'

This commit is contained in:
高铁
2016-01-12 10:16:42 +08:00
parent fa444185a8
commit 4536e6e9b6
4 changed files with 63 additions and 0 deletions
@@ -30,6 +30,8 @@ public class SQLCreateDatabaseStatement extends SQLStatementImpl {
private String collate;
private List<SQLCommentHint> hints;
protected boolean ifNotExists = false;
public SQLCreateDatabaseStatement(){
}
@@ -77,5 +79,13 @@ public class SQLCreateDatabaseStatement extends SQLStatementImpl {
public void setHints(List<SQLCommentHint> hints) {
this.hints = hints;
}
public boolean isIfNotExists() {
return ifNotExists;
}
public void setIfNotExists(boolean ifNotExists) {
this.ifNotExists = ifNotExists;
}
}
@@ -2688,6 +2688,14 @@ public class MySqlStatementParser extends SQLStatementParser {
accept(Token.DATABASE);
SQLCreateDatabaseStatement stmt = new SQLCreateDatabaseStatement(JdbcConstants.MYSQL);
if (lexer.token() == Token.IF) {
lexer.nextToken();
accept(Token.NOT);
accept(Token.EXISTS);
stmt.setIfNotExists(true);
}
stmt.setName(this.exprParser.name());
if (lexer.token() == Token.DEFAULT) {
@@ -1601,6 +1601,9 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
@Override
public boolean visit(SQLCreateDatabaseStatement x) {
print0(ucase ? "CREATE DATABASE " : "create database ");
if (x.isIfNotExists()) {
print0(ucase ? "IF NOT EXISTS " : "if not exists ");
}
x.getName().accept(this);
return false;
}