diff --git a/core/src/main/java/com/alibaba/druid/sql/dialect/hive/visitor/HiveASTVisitor.java b/core/src/main/java/com/alibaba/druid/sql/dialect/hive/visitor/HiveASTVisitor.java index 756487c877..54bd3a1606 100644 --- a/core/src/main/java/com/alibaba/druid/sql/dialect/hive/visitor/HiveASTVisitor.java +++ b/core/src/main/java/com/alibaba/druid/sql/dialect/hive/visitor/HiveASTVisitor.java @@ -20,6 +20,7 @@ import com.alibaba.druid.sql.dialect.hive.ast.HiveInsertStatement; import com.alibaba.druid.sql.dialect.hive.ast.HiveMultiInsertStatement; import com.alibaba.druid.sql.dialect.hive.stmt.HiveCreateFunctionStatement; +import com.alibaba.druid.sql.dialect.hive.stmt.HiveCreateTableStatement; import com.alibaba.druid.sql.dialect.hive.stmt.HiveLoadDataStatement; import com.alibaba.druid.sql.dialect.hive.stmt.HiveMsckRepairStatement; import com.alibaba.druid.sql.visitor.SQLASTVisitor; @@ -73,4 +74,11 @@ default boolean visit(HiveAddJarStatement x) { default void endVisit(HiveAddJarStatement x) { } + + default boolean visit(HiveCreateTableStatement x) { + return true; + } + + default void endVisit(HiveCreateTableStatement x) { + } } diff --git a/core/src/main/java/com/alibaba/druid/sql/dialect/hive/visitor/HiveOutputVisitor.java b/core/src/main/java/com/alibaba/druid/sql/dialect/hive/visitor/HiveOutputVisitor.java index a41f6ebd45..ca70b39a2f 100644 --- a/core/src/main/java/com/alibaba/druid/sql/dialect/hive/visitor/HiveOutputVisitor.java +++ b/core/src/main/java/com/alibaba/druid/sql/dialect/hive/visitor/HiveOutputVisitor.java @@ -518,11 +518,19 @@ protected void printTableOptionsPrefix(SQLCreateTableStatement x) { } @Override - public boolean visit(SQLCreateTableStatement x) { - printCreateTable((HiveCreateTableStatement) x, true, true); + public boolean visit(HiveCreateTableStatement x) { + printCreateTable(x, true, true); return false; } + @Override + public boolean visit(SQLCreateTableStatement x) { + if (x instanceof HiveCreateTableStatement) { + return visit((HiveCreateTableStatement) x); + } + return super.visit(x); + } + protected void printCreateTable(HiveCreateTableStatement x, boolean printSelect, boolean printCommentAdvance) { final SQLObject parent = x.getParent(); diff --git a/core/src/main/java/com/alibaba/druid/sql/dialect/impala/visitor/ImpalaASTVisitor.java b/core/src/main/java/com/alibaba/druid/sql/dialect/impala/visitor/ImpalaASTVisitor.java new file mode 100644 index 0000000000..f9e2d795d1 --- /dev/null +++ b/core/src/main/java/com/alibaba/druid/sql/dialect/impala/visitor/ImpalaASTVisitor.java @@ -0,0 +1,12 @@ +package com.alibaba.druid.sql.dialect.impala.visitor; + +import com.alibaba.druid.sql.dialect.impala.stmt.ImpalaCreateTableStatement; + +public interface ImpalaASTVisitor { + default boolean visit(ImpalaCreateTableStatement x) { + return true; + } + + default void endVisit(ImpalaCreateTableStatement x) { + } +} diff --git a/core/src/main/java/com/alibaba/druid/sql/dialect/impala/visitor/ImpalaOutputVisitor.java b/core/src/main/java/com/alibaba/druid/sql/dialect/impala/visitor/ImpalaOutputVisitor.java index a0794ff888..511d42bafb 100644 --- a/core/src/main/java/com/alibaba/druid/sql/dialect/impala/visitor/ImpalaOutputVisitor.java +++ b/core/src/main/java/com/alibaba/druid/sql/dialect/impala/visitor/ImpalaOutputVisitor.java @@ -12,7 +12,7 @@ import java.util.List; -public class ImpalaOutputVisitor extends HiveOutputVisitor { +public class ImpalaOutputVisitor extends HiveOutputVisitor implements ImpalaASTVisitor { public ImpalaOutputVisitor(StringBuilder appender) { super(appender); dbType = DbType.impala; @@ -58,11 +58,18 @@ protected void printCached(SQLCreateTableStatement x) { } @Override - public boolean visit(SQLCreateTableStatement x) { - printCreateTable((ImpalaCreateTableStatement) x, true, false); + public boolean visit(ImpalaCreateTableStatement x) { + printCreateTable(x, true, false); return false; } + @Override + public boolean visit(SQLCreateTableStatement x) { + if (x instanceof ImpalaCreateTableStatement) { + return visit((ImpalaCreateTableStatement) x); + } + return super.visit(x); + } @Override protected void printSortedBy(List sortedBy) { if (sortedBy.size() > 0) { diff --git a/core/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java b/core/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java index 8177f0dd30..9f8f36dd0e 100644 --- a/core/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java +++ b/core/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java @@ -63,6 +63,15 @@ public OdpsOutputVisitor(StringBuilder appender) { super(appender, DbType.odps); } + @Override + public boolean visit(SQLCreateTableStatement x) { + if (x instanceof OdpsCreateTableStatement) { + return visit((OdpsCreateTableStatement) x); + } + return super.visit(x); + } + + @Override public boolean visit(OdpsCreateTableStatement x) { List headHints = x.getHeadHintsDirect(); if (headHints != null) { diff --git a/core/src/main/java/com/alibaba/druid/sql/dialect/spark/visitor/SparkOutputVisitor.java b/core/src/main/java/com/alibaba/druid/sql/dialect/spark/visitor/SparkOutputVisitor.java index 804436467b..e221e07728 100644 --- a/core/src/main/java/com/alibaba/druid/sql/dialect/spark/visitor/SparkOutputVisitor.java +++ b/core/src/main/java/com/alibaba/druid/sql/dialect/spark/visitor/SparkOutputVisitor.java @@ -9,6 +9,7 @@ import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.expr.SQLHexExpr; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; +import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem; import com.alibaba.druid.sql.ast.statement.SQLTableElement; @@ -36,6 +37,15 @@ public SparkOutputVisitor(StringBuilder appender) { } //add using statment + + @Override + public boolean visit(SQLCreateTableStatement x) { + if (x instanceof SparkCreateTableStatement) { + return visit((SparkCreateTableStatement) x); + } + return super.visit(x); + } + @Override public boolean visit(SparkCreateTableStatement x) { print0(ucase ? "CREATE " : "create ");