diff --git a/changes/1.5.0.md b/changes/1.5.0.md index f4e9665a9aef32569c3885648d90eaa5668442aa..17e5f5ace8c799736431b81bc760c3239cc58ea3 100644 --- a/changes/1.5.0.md +++ b/changes/1.5.0.md @@ -87,6 +87,7 @@ Seata 鏄竴娆惧紑婧愮殑鍒嗗竷寮忎簨鍔¤В鍐虫柟妗堬紝鎻愪緵楂樻€ц兘鍜岀畝鍗� - [[#3589](https://github.com/seata/seata/pull/3589)] 浣跨敤JUnit API鍋氬紓甯告鏌� - [[#3601](https://github.com/seata/seata/pull/3601)] 浣縛LoadBalanceProperties`涓巂spring-boot:2.x`鍙婁互涓婄増鏈吋瀹� - [[#3631](https://github.com/seata/seata/pull/3631)] 浼樺寲 杩愯 nacos-config.py 鍙傛暟闂 + - [[#3638](https://github.com/seata/seata/pull/3638)] 浼樺寲浣跨敤杩炶〃update鍜宒elete鐨凷QL璇硶鏃堕敊璇彁绀� ### test diff --git a/changes/en-us/1.5.0.md b/changes/en-us/1.5.0.md index 77fe481712c04b12e1dc39c6ac5a3fe518503dc0..91c7f2b7226d1fdb13fd0a8d941f2047711ebc33 100644 --- a/changes/en-us/1.5.0.md +++ b/changes/en-us/1.5.0.md @@ -88,6 +88,7 @@ - [[#3589](https://github.com/seata/seata/pull/3589)] Changed exception check by JUnit API usage - [[#3601](https://github.com/seata/seata/pull/3601)] make `LoadBalanceProperties` compatible with `spring-boot:2.x` and above - [[#3631](https://github.com/seata/seata/pull/3631)] optimize nacos-config.py parameter + - [[#3638](https://github.com/seata/seata/pull/3638)] optimize the error when use update or delete with join in sql ### test diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLDeleteRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLDeleteRecognizer.java index 6dcf19870e37867cd72b339bc4eb3df231723b3d..c6b542131ccd8b7ca993e2484016c1ad3f13d7d0 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLDeleteRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLDeleteRecognizer.java @@ -18,9 +18,12 @@ package io.seata.sqlparser.druid.mysql; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; +import io.seata.common.exception.NotSupportYetException; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLDeleteRecognizer; import io.seata.sqlparser.SQLType; @@ -71,11 +74,25 @@ public class MySQLDeleteRecognizer extends BaseMySQLRecognizer implements SQLDel printTableSourceExpr(x.getExpr()); return false; } + + @Override + public boolean visit(SQLJoinTableSource x) { + throw new NotSupportYetException("not support the syntax of delete with join table"); + } }; + SQLTableSource tableSource; if (ast.getFrom() == null) { - visitor.visit((SQLExprTableSource) ast.getTableSource()); + tableSource = ast.getTableSource(); + } else { + tableSource = ast.getFrom(); + } + + if (tableSource instanceof SQLExprTableSource) { + visitor.visit((SQLExprTableSource) tableSource); + } else if (tableSource instanceof SQLJoinTableSource) { + visitor.visit((SQLJoinTableSource) tableSource); } else { - visitor.visit((SQLExprTableSource) ast.getFrom()); + throw new NotSupportYetException("not support the syntax of delete with unknow"); } return sb.toString(); } diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java index 1dc1935a4142d35aa260c90945410231a62c5290..4bb9c019d4cfd1db7b9c911f5a61eaa796f9e850 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLUpdateRecognizer.java @@ -22,10 +22,13 @@ import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; import com.alibaba.druid.sql.ast.expr.SQLValuableExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; +import io.seata.common.exception.NotSupportYetException; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLParsingException; import io.seata.sqlparser.SQLType; @@ -128,9 +131,21 @@ public class MySQLUpdateRecognizer extends BaseMySQLRecognizer implements SQLUpd printTableSourceExpr(x.getExpr()); return false; } + + @Override + public boolean visit(SQLJoinTableSource x) { + throw new NotSupportYetException("not support the syntax of update with join table"); + } }; - SQLExprTableSource tableSource = (SQLExprTableSource)ast.getTableSource(); - visitor.visit(tableSource); + + SQLTableSource tableSource = ast.getTableSource(); + if (tableSource instanceof SQLExprTableSource) { + visitor.visit((SQLExprTableSource) tableSource); + } else if (tableSource instanceof SQLJoinTableSource) { + visitor.visit((SQLJoinTableSource) tableSource); + } else { + throw new NotSupportYetException("not support the syntax of update with unknow"); + } return sb.toString(); } diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleDeleteRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleDeleteRecognizer.java index fd7e85eccb4202467e4ad0320e3194e0a15b92ce..76ca2c5d65b8ea4e7c430afb357670081ef9fcda 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleDeleteRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleDeleteRecognizer.java @@ -18,9 +18,12 @@ package io.seata.sqlparser.druid.oracle; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor; +import io.seata.common.exception.NotSupportYetException; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLDeleteRecognizer; import io.seata.sqlparser.SQLType; @@ -68,8 +71,26 @@ public class OracleDeleteRecognizer extends BaseOracleRecognizer implements SQLD printTableSourceExpr(x.getExpr()); return false; } + + @Override + public boolean visit(SQLJoinTableSource x) { + throw new NotSupportYetException("not support the syntax of delete with join table"); + } }; - visitor.visit((SQLExprTableSource)ast.getTableSource()); + SQLTableSource tableSource; + if (ast.getFrom() == null) { + tableSource = ast.getTableSource(); + } else { + tableSource = ast.getFrom(); + } + + if (tableSource instanceof SQLExprTableSource) { + visitor.visit((SQLExprTableSource) tableSource); + } else if (tableSource instanceof SQLJoinTableSource) { + visitor.visit((SQLJoinTableSource) tableSource); + } else { + throw new NotSupportYetException("not support the syntax of delete with unknow"); + } return sb.toString(); } diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java index 896f7ec912ba1caadf849ef83110eb067e057bf2..3a7313c7ec001c28283cb6c4471a2b88ae1c850c 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleUpdateRecognizer.java @@ -25,10 +25,13 @@ import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; import com.alibaba.druid.sql.ast.expr.SQLValuableExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor; +import io.seata.common.exception.NotSupportYetException; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLParsingException; import io.seata.sqlparser.SQLType; @@ -128,9 +131,20 @@ public class OracleUpdateRecognizer extends BaseOracleRecognizer implements SQLU printTableSourceExpr(x.getExpr()); return false; } + + @Override + public boolean visit(SQLJoinTableSource x) { + throw new NotSupportYetException("not support the syntax of update with join table"); + } }; - SQLExprTableSource tableSource = (SQLExprTableSource)ast.getTableSource(); - visitor.visit(tableSource); + SQLTableSource tableSource = ast.getTableSource(); + if (tableSource instanceof SQLExprTableSource) { + visitor.visit((SQLExprTableSource) tableSource); + } else if (tableSource instanceof SQLJoinTableSource) { + visitor.visit((SQLJoinTableSource) tableSource); + } else { + throw new NotSupportYetException("not support the syntax of update with unknow"); + } return sb.toString(); } diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlDeleteRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlDeleteRecognizer.java index 3b76e0f63baaa0e61850f032222f6ef24b89b6a1..8d45d786993f00f628cfab7c40929b76e8fd889f 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlDeleteRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlDeleteRecognizer.java @@ -18,8 +18,11 @@ package io.seata.sqlparser.druid.postgresql; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGDeleteStatement; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor; +import io.seata.common.exception.NotSupportYetException; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLDeleteRecognizer; import io.seata.sqlparser.SQLType; @@ -64,8 +67,26 @@ public class PostgresqlDeleteRecognizer extends BasePostgresqlRecognizer impleme printTableSourceExpr(x.getExpr()); return false; } + + @Override + public boolean visit(SQLJoinTableSource x) { + throw new NotSupportYetException("not support the syntax of delete with join table"); + } }; - visitor.visit((SQLExprTableSource) ast.getTableSource()); + SQLTableSource tableSource; + if (ast.getFrom() == null) { + tableSource = ast.getTableSource(); + } else { + tableSource = ast.getFrom(); + } + + if (tableSource instanceof SQLExprTableSource) { + visitor.visit((SQLExprTableSource) tableSource); + } else if (tableSource instanceof SQLJoinTableSource) { + visitor.visit((SQLJoinTableSource) tableSource); + } else { + throw new NotSupportYetException("not support the syntax of delete with unknow"); + } return sb.toString(); } diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java index 715c58ee94a340acd1ca139b66d3873dc06302b8..3e8b35a332c5d5ed86e90f89df261f05fca81b4d 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlUpdateRecognizer.java @@ -22,9 +22,12 @@ import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; import com.alibaba.druid.sql.ast.expr.SQLValuableExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; +import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor; +import io.seata.common.exception.NotSupportYetException; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLParsingException; import io.seata.sqlparser.SQLType; @@ -124,9 +127,20 @@ public class PostgresqlUpdateRecognizer extends BasePostgresqlRecognizer impleme printTableSourceExpr(x.getExpr()); return false; } + + @Override + public boolean visit(SQLJoinTableSource x) { + throw new NotSupportYetException("not support the syntax of update with join table"); + } }; - SQLExprTableSource tableSource = (SQLExprTableSource) ast.getTableSource(); - visitor.visit(tableSource); + SQLTableSource tableSource = ast.getTableSource(); + if (tableSource instanceof SQLExprTableSource) { + visitor.visit((SQLExprTableSource) tableSource); + } else if (tableSource instanceof SQLJoinTableSource) { + visitor.visit((SQLJoinTableSource) tableSource); + } else { + throw new NotSupportYetException("not support the syntax of update with unknow"); + } return sb.toString(); }