From a9c4098b86f0147383c3bbc6274adc4c7f4aaca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Sun, 8 Nov 2020 11:46:13 +0800 Subject: [PATCH] improve 'build table tablename force=true'; --- .../sql/ast/statement/SQLBuildTableStatement.java | 9 +++++++++ .../dialect/mysql/parser/MySqlStatementParser.java | 14 ++++++++++++++ .../druid/sql/visitor/SQLASTOutputVisitor.java | 6 ++++++ 3 files changed, 29 insertions(+) diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLBuildTableStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLBuildTableStatement.java index cbe108fed3..4862db75e7 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLBuildTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLBuildTableStatement.java @@ -24,6 +24,7 @@ public class SQLBuildTableStatement extends SQLStatementImpl { private SQLName table; private SQLIntegerExpr version; private boolean withSplit = false; + private boolean force = false; @Override protected void accept0(SQLASTVisitor visitor) { @@ -57,4 +58,12 @@ public class SQLBuildTableStatement extends SQLStatementImpl { public void setWithSplit(boolean withSplit) { this.withSplit = withSplit; } + + public boolean isForce() { + return force; + } + + public void setForce(boolean force) { + this.force = force; + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java index 7c8f9ee353..f5fbf86c68 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java @@ -1935,6 +1935,20 @@ public class MySqlStatementParser extends SQLStatementParser { stmt.setWithSplit(true); } + if (lexer.identifierEquals(FnvHash.Constants.FORCE)) { + lexer.nextToken(); + + accept(EQ); + + if (lexer.token() == TRUE) { + lexer.nextToken(); + stmt.setForce(true); + } else if (lexer.token() == FALSE) { + lexer.nextToken(); + stmt.setForce(false); + } + } + return stmt; } 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 25be7f23d6..efd93d9c78 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -10666,6 +10666,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet print0(ucase ? " WITH SPLIT" : " with split"); } + if (x.isForce()) { + print0(ucase ? " FORCE = true" : " force = true"); + } else { + print0(ucase ? " FORCE = false" : " force = false"); + } + return false; } @Override