Skip to content
Snippets Groups Projects
Unverified Commit 23e61192 authored by 张嘉伟's avatar 张嘉伟 Committed by GitHub
Browse files

optimize: optimize the error of join table syntax (#3638)

parent d8c09ab9
No related branches found
No related tags found
No related merge requests found
...@@ -87,6 +87,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 ...@@ -87,6 +87,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单
- [[#3589](https://github.com/seata/seata/pull/3589)] 使用JUnit API做异常检查 - [[#3589](https://github.com/seata/seata/pull/3589)] 使用JUnit API做异常检查
- [[#3601](https://github.com/seata/seata/pull/3601)] 使`LoadBalanceProperties``spring-boot:2.x`及以上版本兼容 - [[#3601](https://github.com/seata/seata/pull/3601)] 使`LoadBalanceProperties``spring-boot:2.x`及以上版本兼容
- [[#3631](https://github.com/seata/seata/pull/3631)] 优化 运行 nacos-config.py 参数问题 - [[#3631](https://github.com/seata/seata/pull/3631)] 优化 运行 nacos-config.py 参数问题
- [[#3638](https://github.com/seata/seata/pull/3638)] 优化使用连表update和delete的SQL语法时错误提示
### test ### test
......
...@@ -88,6 +88,7 @@ ...@@ -88,6 +88,7 @@
- [[#3589](https://github.com/seata/seata/pull/3589)] Changed exception check by JUnit API usage - [[#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 - [[#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 - [[#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 ### test
......
...@@ -18,9 +18,12 @@ package io.seata.sqlparser.druid.mysql; ...@@ -18,9 +18,12 @@ package io.seata.sqlparser.druid.mysql;
import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; 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.ast.statement.MySqlDeleteStatement;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import io.seata.common.exception.NotSupportYetException;
import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.ParametersHolder;
import io.seata.sqlparser.SQLDeleteRecognizer; import io.seata.sqlparser.SQLDeleteRecognizer;
import io.seata.sqlparser.SQLType; import io.seata.sqlparser.SQLType;
...@@ -71,11 +74,25 @@ public class MySQLDeleteRecognizer extends BaseMySQLRecognizer implements SQLDel ...@@ -71,11 +74,25 @@ public class MySQLDeleteRecognizer extends BaseMySQLRecognizer implements SQLDel
printTableSourceExpr(x.getExpr()); printTableSourceExpr(x.getExpr());
return false; 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) { 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 { } else {
visitor.visit((SQLExprTableSource) ast.getFrom()); throw new NotSupportYetException("not support the syntax of delete with unknow");
} }
return sb.toString(); return sb.toString();
} }
......
...@@ -22,10 +22,13 @@ import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; ...@@ -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.SQLValuableExpr;
import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; 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.ast.statement.SQLUpdateSetItem;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import io.seata.common.exception.NotSupportYetException;
import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.ParametersHolder;
import io.seata.sqlparser.SQLParsingException; import io.seata.sqlparser.SQLParsingException;
import io.seata.sqlparser.SQLType; import io.seata.sqlparser.SQLType;
...@@ -128,9 +131,21 @@ public class MySQLUpdateRecognizer extends BaseMySQLRecognizer implements SQLUpd ...@@ -128,9 +131,21 @@ public class MySQLUpdateRecognizer extends BaseMySQLRecognizer implements SQLUpd
printTableSourceExpr(x.getExpr()); printTableSourceExpr(x.getExpr());
return false; 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(); return sb.toString();
} }
......
...@@ -18,9 +18,12 @@ package io.seata.sqlparser.druid.oracle; ...@@ -18,9 +18,12 @@ package io.seata.sqlparser.druid.oracle;
import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; 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.ast.stmt.OracleDeleteStatement;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor;
import io.seata.common.exception.NotSupportYetException;
import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.ParametersHolder;
import io.seata.sqlparser.SQLDeleteRecognizer; import io.seata.sqlparser.SQLDeleteRecognizer;
import io.seata.sqlparser.SQLType; import io.seata.sqlparser.SQLType;
...@@ -68,8 +71,26 @@ public class OracleDeleteRecognizer extends BaseOracleRecognizer implements SQLD ...@@ -68,8 +71,26 @@ public class OracleDeleteRecognizer extends BaseOracleRecognizer implements SQLD
printTableSourceExpr(x.getExpr()); printTableSourceExpr(x.getExpr());
return false; 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(); return sb.toString();
} }
......
...@@ -25,10 +25,13 @@ import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; ...@@ -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.SQLValuableExpr;
import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; 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.ast.statement.SQLUpdateSetItem;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor;
import io.seata.common.exception.NotSupportYetException;
import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.ParametersHolder;
import io.seata.sqlparser.SQLParsingException; import io.seata.sqlparser.SQLParsingException;
import io.seata.sqlparser.SQLType; import io.seata.sqlparser.SQLType;
...@@ -128,9 +131,20 @@ public class OracleUpdateRecognizer extends BaseOracleRecognizer implements SQLU ...@@ -128,9 +131,20 @@ public class OracleUpdateRecognizer extends BaseOracleRecognizer implements SQLU
printTableSourceExpr(x.getExpr()); printTableSourceExpr(x.getExpr());
return false; 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(); SQLTableSource tableSource = ast.getTableSource();
visitor.visit(tableSource); 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(); return sb.toString();
} }
......
...@@ -18,8 +18,11 @@ package io.seata.sqlparser.druid.postgresql; ...@@ -18,8 +18,11 @@ package io.seata.sqlparser.druid.postgresql;
import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; 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.ast.stmt.PGDeleteStatement;
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor;
import io.seata.common.exception.NotSupportYetException;
import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.ParametersHolder;
import io.seata.sqlparser.SQLDeleteRecognizer; import io.seata.sqlparser.SQLDeleteRecognizer;
import io.seata.sqlparser.SQLType; import io.seata.sqlparser.SQLType;
...@@ -64,8 +67,26 @@ public class PostgresqlDeleteRecognizer extends BasePostgresqlRecognizer impleme ...@@ -64,8 +67,26 @@ public class PostgresqlDeleteRecognizer extends BasePostgresqlRecognizer impleme
printTableSourceExpr(x.getExpr()); printTableSourceExpr(x.getExpr());
return false; 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(); return sb.toString();
} }
......
...@@ -22,9 +22,12 @@ import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; ...@@ -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.SQLValuableExpr;
import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; 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.ast.statement.SQLUpdateSetItem;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement;
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor;
import io.seata.common.exception.NotSupportYetException;
import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.ParametersHolder;
import io.seata.sqlparser.SQLParsingException; import io.seata.sqlparser.SQLParsingException;
import io.seata.sqlparser.SQLType; import io.seata.sqlparser.SQLType;
...@@ -124,9 +127,20 @@ public class PostgresqlUpdateRecognizer extends BasePostgresqlRecognizer impleme ...@@ -124,9 +127,20 @@ public class PostgresqlUpdateRecognizer extends BasePostgresqlRecognizer impleme
printTableSourceExpr(x.getExpr()); printTableSourceExpr(x.getExpr());
return false; 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(); SQLTableSource tableSource = ast.getTableSource();
visitor.visit(tableSource); 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(); return sb.toString();
} }
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment