From 2a97934924a2c31b37ff5c3533abbfeedf42caf5 Mon Sep 17 00:00:00 2001 From: T45K Date: Mon, 21 Sep 2020 23:54:00 +0900 Subject: [PATCH 1/3] Use JdbcUtils#isOracleDbType --- .../java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 af8d022c5a..b43b9eade6 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -3145,7 +3145,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet @Override public boolean visit(SQLSetStatement x) { - boolean printSet = x.getAttribute("parser.set") == Boolean.TRUE || !JdbcConstants.ORACLE.equals(dbType); + boolean printSet = x.getAttribute("parser.set") == Boolean.TRUE || !JdbcUtils.isOracleDbType(dbType); if (printSet) { print0(ucase ? "SET " : "set "); } From 7507d3848da813c86484fe20c8e9af0e9e4fcc8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Tue, 3 Nov 2020 13:11:25 +0800 Subject: [PATCH 2/3] fix testcase --- .../druid/bvt/sql/mysql/create/MySqlCreateProcedureTest15.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateProcedureTest15.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateProcedureTest15.java index c3bbab0f54..ca5c4e8233 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateProcedureTest15.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/create/MySqlCreateProcedureTest15.java @@ -50,7 +50,7 @@ public class MySqlCreateProcedureTest15 extends MysqlTest { "\tINSERT INTO part_tab\n" + "\tVALUES (v, 'testing partitions', ADDDATE('1995-01-01', RAND(v) * 36520 % 3652));\n" + "\tSET v = v + 1;\n" + - "\tEND WHILE\n" + + "\tEND WHILE;\n" + "END", SQLUtils.toMySqlString(stmt)); SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.MYSQL); From 342862a1c05baf1028f18b24b66c1eb5aa7d8b54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Tue, 3 Nov 2020 13:17:23 +0800 Subject: [PATCH 3/3] add mysql json table expr --- .../mysql/ast/expr/MySqlJSONTableExpr.java | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/expr/MySqlJSONTableExpr.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/expr/MySqlJSONTableExpr.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/expr/MySqlJSONTableExpr.java new file mode 100644 index 0000000000..29e78f5042 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/expr/MySqlJSONTableExpr.java @@ -0,0 +1,164 @@ +package com.alibaba.druid.sql.dialect.mysql.ast.expr; + +import com.alibaba.druid.sql.ast.*; +import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; + +import java.util.ArrayList; +import java.util.List; + +public class MySqlJSONTableExpr extends MySqlExprImpl { + private final List columns = new ArrayList(); + private SQLExpr expr; + private SQLExpr path; + + @Override + public void accept0(MySqlASTVisitor v) { + if (v.visit(this)) { + acceptChild(v, expr); + acceptChild(v, path); + acceptChild(v, columns); + } + v.endVisit(this); + } + + @Override + public List getChildren() { + return null; + } + + public SQLExpr getExpr() { + return expr; + } + + public void setExpr(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + + this.expr = x; + } + + public SQLExpr getPath() { + return path; + } + + public void setPath(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.path = x; + } + + public List getColumns() { + return columns; + } + + public void addColumn(Column column) { + column.setParent(this); + this.columns.add(column); + } + + public static class Column extends MySqlObjectImpl { + private final List nestedColumns = new ArrayList(); + private SQLName name; + private SQLDataType dataType; + private SQLExpr path; + private boolean ordinality; + private boolean exists; + private SQLExpr onError; + private SQLExpr onEmpty; + + @Override + public void accept0(MySqlASTVisitor v) { + if (v.visit(this)) { + acceptChild(v, name); + acceptChild(v, dataType); + acceptChild(v, path); + acceptChild(v, onEmpty); + acceptChild(v, onError); + } + v.endVisit(this); + } + + public SQLName getName() { + return name; + } + + public void setName(SQLName x) { + if (x != null) { + x.setParent(this); + } + this.name = x; + } + + public SQLDataType getDataType() { + return dataType; + } + + public void setDataType(SQLDataType x) { + if (x != null) { + x.setParent(this); + } + this.dataType = x; + } + + public SQLExpr getPath() { + return path; + } + + public void setPath(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.path = x; + } + + public boolean isOrdinality() { + return ordinality; + } + + public void setOrdinality(boolean ordinality) { + this.ordinality = ordinality; + } + + public boolean isExists() { + return exists; + } + + public void setExists(boolean exists) { + this.exists = exists; + } + + public SQLExpr getOnError() { + return onError; + } + + public void setOnError(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.onError = x; + } + + public SQLExpr getOnEmpty() { + return onEmpty; + } + + public void setOnEmpty(SQLExpr x) { + if (x != null) { + x.setParent(this); + } + this.onEmpty = x; + } + + public List getNestedColumns() { + return nestedColumns; + } + + public void addNestedColumn(Column column) { + column.setParent(this); + this.nestedColumns.add(column); + } + } +}