diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java index 45e6bad152..ba530ca5b0 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlCreateTableParser.java @@ -195,7 +195,15 @@ public class MySqlCreateTableParser extends SQLCreateTableParser { if (lexer.token() == Token.EQ) { lexer.nextToken(); } - stmt.getTableOptions().put("ENGINE", this.exprParser.expr()); + + SQLExpr expr = null; + if (lexer.token() == Token.MERGE) { + expr = new SQLIdentifierExpr(lexer.stringVal()); + lexer.nextToken(); + } else { + expr = this.exprParser.expr(); + } + stmt.getTableOptions().put("ENGINE", expr); continue; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java index 991ce1ec0a..0a4c8f99eb 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java @@ -2097,7 +2097,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS @Override public boolean visit(OracleCreateTableStatement x) { - printCreateTable(x); + printCreateTable(x, false); if (x.getOf() != null) { println(); diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index 0c22bc9def..bda6a668d9 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -2367,12 +2367,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet } public boolean visit(SQLCreateTableStatement x) { - printCreateTable(x); + printCreateTable(x, true); return false; } - protected void printCreateTable(SQLCreateTableStatement x) { + protected void printCreateTable(SQLCreateTableStatement x, boolean printSelect) { print0(ucase ? "CREATE " : "create "); final SQLCreateTableStatement.Type tableType = x.getType(); @@ -2394,7 +2394,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet } SQLSelect select = x.getSelect(); - if (select != null) { + if (printSelect && select != null) { println(); print0(ucase ? "AS" : "as");