diff --git a/changes/en-us/1.5.2.md b/changes/en-us/1.5.2.md index fa472060f63..603e54dc1c7 100644 --- a/changes/en-us/1.5.2.md +++ b/changes/en-us/1.5.2.md @@ -47,6 +47,8 @@ The version is updated as follows: - [[#4626](https://github.com/seata/seata/pull/4626)] Replace `flatten-maven-plugin` with `easyj-maven-plugin` to fix the conflict between `shade` and `flatten` - [[#4629](https://github.com/seata/seata/pull/4629)] check relation of before status and after status when updating global session - [[#4662](https://github.com/seata/seata/pull/4662)] make EnhancedServiceLoader more readable +- [[#4445](https://github.com/seata/seata/pull/4445)] optimize transaction timeout judgment +- [[#4958](https://github.com/seata/seata/pull/4958)] do not execute triggerAfterCommit() in case of timeout ### test: @@ -73,6 +75,7 @@ Thanks to these contributors for their code commits. Please report an unintended - [AYue-94](https://github.com/AYue-94) - [lingxiao-wu](https://github.com/lingxiao-wu) - [caohdgege](https://github.com/caohdgege) +- [miaoxueyu](https://github.com/miaoxueyu) Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/changes/en-us/develop.md b/changes/en-us/develop.md index e4894e828e2..31a412600d8 100644 --- a/changes/en-us/develop.md +++ b/changes/en-us/develop.md @@ -47,6 +47,8 @@ Add changes here for all PR submitted to the develop branch. - [[#4962](https://github.com/seata/seata/pull/4962)] optimize build and fix the base image - [[#4974](https://github.com/seata/seata/pull/4974)] optimize cancel the limit on the number of globalStatus queries in Redis mode - [[#4981](https://github.com/seata/seata/pull/4981)] optimize tcc fence record not exists errMessage +- [[#4985](https://github.com/seata/seata/pull/4985)] fix undo_log id repeat + ### test: - [[#4794](https://github.com/seata/seata/pull/4794)] try to fix the test `DataSourceProxyTest.getResourceIdTest()` @@ -70,5 +72,6 @@ Thanks to these contributors for their code commits. Please report an unintended - [jsbxyyx](https://github.com/jsbxyyx) - [tuwenlin](https://github.com/tuwenlin) - [CrazyLionLi](https://github.com/JavaLionLi) +- [whxxxxx](https://github.com/whxxxxx) Also, we receive many valuable issues, questions and advices from our community. Thanks for you all. diff --git a/changes/zh-cn/1.5.2.md b/changes/zh-cn/1.5.2.md index 6d4d36e3581..28bcf089535 100644 --- a/changes/zh-cn/1.5.2.md +++ b/changes/zh-cn/1.5.2.md @@ -47,6 +47,8 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [[#4626](https://github.com/seata/seata/pull/4626)] 使用 `easyj-maven-plugin` 插件代替 `flatten-maven-plugin`插件,以修复`shade` 插件与 `flatten` 插件不兼容的问题 - [[#4629](https://github.com/seata/seata/pull/4629)] 更新globalSession状态时检查更改前后的约束关系 - [[#4662](https://github.com/seata/seata/pull/4662)] 优化 EnhancedServiceLoader 可读性 +- [[#4445](https://github.com/seata/seata/pull/4445)] 优化事务超时判断 +- [[#4958](https://github.com/seata/seata/pull/4958)] 优化当本地事务超时回滚后after commit事件被调用 ### test: @@ -75,6 +77,7 @@ Seata 是一款开源的分布式事务解决方案,提供高性能和简单 - [AYue-94](https://github.com/AYue-94) - [lingxiao-wu](https://github.com/lingxiao-wu) - [caohdgege](https://github.com/caohdgege) +- [miaoxueyu](https://github.com/miaoxueyu) 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/changes/zh-cn/develop.md b/changes/zh-cn/develop.md index 8efe05aeed0..6aa6e8bd69c 100644 --- a/changes/zh-cn/develop.md +++ b/changes/zh-cn/develop.md @@ -22,6 +22,7 @@ - [[#4928](https://github.com/seata/seata/pull/4928)] 修复 rpcContext.getClientRMHolderMap NPE 问题 - [[#4953](https://github.com/seata/seata/pull/4953)] 修复InsertOnDuplicateUpdate可绕过修改主键的问题 - [[#4978](https://github.com/seata/seata/pull/4978)] 修复 kryo 支持循环依赖 +- [[#4985](https://github.com/seata/seata/pull/4985)] 修复 undo_log id重复的问题 ### optimize: - [[#4774](https://github.com/seata/seata/pull/4774)] 优化 seataio/seata-server 镜像中的 mysql8 依赖 @@ -70,5 +71,6 @@ - [jsbxyyx](https://github.com/jsbxyyx) - [tuwenlin](https://github.com/tuwenlin) - [CrazyLionLi](https://github.com/JavaLionLi) +- [whxxxxx](https://github.com/whxxxxx) 同时,我们收到了社区反馈的很多有价值的issue和建议,非常感谢大家。 diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/SqlGenerateUtils.java b/rm-datasource/src/main/java/io/seata/rm/datasource/SqlGenerateUtils.java index 5d7cf987455..3451aee5d21 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/SqlGenerateUtils.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/SqlGenerateUtils.java @@ -21,6 +21,7 @@ import java.util.Map; import io.seata.rm.datasource.sql.struct.Field; +import io.seata.sqlparser.util.ColumnUtils; /** * generate sql and set value to sql diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseInsertExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseInsertExecutor.java index cd964526334..63dbcbf18f7 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseInsertExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseInsertExecutor.java @@ -31,7 +31,7 @@ import io.seata.common.exception.ShouldNeverHappenException; import io.seata.common.util.CollectionUtils; import io.seata.common.util.StringUtils; -import io.seata.rm.datasource.ColumnUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.rm.datasource.PreparedStatementProxy; import io.seata.rm.datasource.StatementProxy; import io.seata.rm.datasource.sql.struct.ColumnMeta; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseTransactionalExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseTransactionalExecutor.java index ada15ceebf0..074618bf450 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseTransactionalExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/BaseTransactionalExecutor.java @@ -35,7 +35,7 @@ import io.seata.config.ConfigurationFactory; import io.seata.core.constants.ConfigurationKeys; import io.seata.core.context.RootContext; -import io.seata.rm.datasource.ColumnUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.rm.datasource.ConnectionProxy; import io.seata.rm.datasource.SqlGenerateUtils; import io.seata.rm.datasource.StatementProxy; @@ -497,7 +497,7 @@ protected TableRecords buildTableRecords(Map> pkValuesMap) List insertColumns = recognizer.getInsertColumns(); if (ONLY_CARE_UPDATE_COLUMNS && CollectionUtils.isNotEmpty(insertColumns)) { Set columns = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); - columns.addAll(recognizer.getInsertColumns()); + columns.addAll(recognizer.getInsertColumnsIsSimplified()); columns.addAll(pkColumnNameList); for (String columnName : columns) { selectSQLJoin.add(columnName); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/DeleteExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/DeleteExecutor.java index 48330587fb9..6f0d3da274b 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/DeleteExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/DeleteExecutor.java @@ -22,7 +22,7 @@ import java.util.StringJoiner; import io.seata.common.util.StringUtils; -import io.seata.rm.datasource.ColumnUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.rm.datasource.StatementProxy; import io.seata.rm.datasource.sql.struct.TableMeta; import io.seata.rm.datasource.sql.struct.TableRecords; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiDeleteExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiDeleteExecutor.java index 1db29483fe0..3606b049511 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiDeleteExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiDeleteExecutor.java @@ -19,7 +19,7 @@ import io.seata.common.util.StringUtils; -import io.seata.rm.datasource.ColumnUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.rm.datasource.StatementProxy; import io.seata.rm.datasource.sql.struct.TableMeta; import io.seata.rm.datasource.sql.struct.TableRecords; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiUpdateExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiUpdateExecutor.java index 4af4ea2696e..0f0c59c63af 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiUpdateExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/MultiUpdateExecutor.java @@ -32,7 +32,7 @@ import io.seata.config.ConfigurationFactory; import io.seata.core.constants.ConfigurationKeys; import io.seata.common.DefaultValues; -import io.seata.rm.datasource.ColumnUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.rm.datasource.SqlGenerateUtils; import io.seata.rm.datasource.StatementProxy; import io.seata.rm.datasource.sql.struct.TableMeta; @@ -88,7 +88,7 @@ protected TableRecords beforeImage() throws SQLException { throw new NotSupportYetException("Multi update SQL with orderBy condition is not support yet !"); } - List updateColumns = sqlUpdateRecognizer.getUpdateColumns(); + List updateColumns = sqlUpdateRecognizer.getUpdateColumnsIsSimplified(); updateColumnsSet.addAll(updateColumns); if (noWhereCondition) { continue; @@ -155,7 +155,7 @@ private String buildAfterImageSQL(TableMeta tableMeta, TableRecords beforeImage) for (SQLRecognizer recognizer : sqlRecognizers) { sqlRecognizer = recognizer; SQLUpdateRecognizer sqlUpdateRecognizer = (SQLUpdateRecognizer) sqlRecognizer; - updateColumnsSet.addAll(sqlUpdateRecognizer.getUpdateColumns()); + updateColumnsSet.addAll(sqlUpdateRecognizer.getUpdateColumnsIsSimplified()); } StringBuilder prefix = new StringBuilder("SELECT "); String suffix = " FROM " + getFromTableInSQL() + " WHERE " + SqlGenerateUtils.buildWhereConditionByPKs(tableMeta.getPrimaryKeyOnlyName(), beforeImage.pkRows().size(), getDbType()); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/UpdateExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/UpdateExecutor.java index 62b7a25bc1b..33e6474b552 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/exec/UpdateExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/exec/UpdateExecutor.java @@ -29,7 +29,7 @@ import io.seata.config.ConfigurationFactory; import io.seata.core.constants.ConfigurationKeys; import io.seata.common.DefaultValues; -import io.seata.rm.datasource.ColumnUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.rm.datasource.SqlGenerateUtils; import io.seata.rm.datasource.StatementProxy; import io.seata.rm.datasource.sql.struct.TableMeta; @@ -89,7 +89,7 @@ private String buildBeforeImageSQL(TableMeta tableMeta, ArrayList> } suffix.append(" FOR UPDATE"); StringJoiner selectSQLJoin = new StringJoiner(", ", prefix.toString(), suffix.toString()); - List needUpdateColumns = getNeedUpdateColumns(tableMeta.getTableName(), sqlRecognizer.getTableAlias(), recognizer.getUpdateColumns()); + List needUpdateColumns = getNeedUpdateColumns(tableMeta.getTableName(), sqlRecognizer.getTableAlias(), getUpdateColumnsIsSimplified()); for (String needUpdateColumn : needUpdateColumns) { selectSQLJoin.add(needUpdateColumn); } diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/TableMeta.java b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/TableMeta.java index 3221e5640eb..c58869103f8 100755 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/TableMeta.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/TableMeta.java @@ -26,7 +26,7 @@ import io.seata.common.exception.NotSupportYetException; import io.seata.common.util.CollectionUtils; import io.seata.common.util.LowerCaseLinkHashMap; -import io.seata.rm.datasource.ColumnUtils; +import io.seata.sqlparser.util.ColumnUtils; /** * The type Table meta. diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/cache/MysqlTableMetaCache.java b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/cache/MysqlTableMetaCache.java index ef2a6e02a63..3d6b65679fb 100755 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/cache/MysqlTableMetaCache.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/sql/struct/cache/MysqlTableMetaCache.java @@ -25,7 +25,7 @@ import io.seata.common.exception.NotSupportYetException; import io.seata.common.exception.ShouldNeverHappenException; import io.seata.common.loader.LoadLevel; -import io.seata.rm.datasource.ColumnUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.rm.datasource.sql.struct.ColumnMeta; import io.seata.rm.datasource.sql.struct.IndexMeta; import io.seata.rm.datasource.sql.struct.IndexType; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoExecutor.java index 31c173fca64..656ab7c03b2 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/AbstractUndoExecutor.java @@ -34,7 +34,7 @@ import io.seata.config.ConfigurationFactory; import io.seata.core.constants.ConfigurationKeys; import io.seata.core.model.Result; -import io.seata.rm.datasource.ColumnUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.rm.datasource.DataCompareUtils; import io.seata.rm.datasource.SqlGenerateUtils; import io.seata.rm.datasource.sql.serial.SerialArray; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoDeleteExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoDeleteExecutor.java index 56bc951d351..056f762752b 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoDeleteExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoDeleteExecutor.java @@ -17,7 +17,7 @@ import io.seata.common.exception.ShouldNeverHappenException; import io.seata.common.util.CollectionUtils; -import io.seata.rm.datasource.ColumnUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.rm.datasource.sql.struct.Field; import io.seata.rm.datasource.sql.struct.Row; import io.seata.rm.datasource.sql.struct.TableRecords; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoUpdateExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoUpdateExecutor.java index 063f831af40..52df100d047 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoUpdateExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/MySQLUndoUpdateExecutor.java @@ -20,7 +20,7 @@ import io.seata.common.exception.ShouldNeverHappenException; import io.seata.common.util.CollectionUtils; -import io.seata.rm.datasource.ColumnUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.rm.datasource.SqlGenerateUtils; import io.seata.rm.datasource.sql.struct.Field; import io.seata.rm.datasource.sql.struct.Row; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/keyword/MySQLKeywordChecker.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/keyword/MySQLKeywordChecker.java index 7589f468e18..f060dce5c1e 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/keyword/MySQLKeywordChecker.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/mysql/keyword/MySQLKeywordChecker.java @@ -20,7 +20,7 @@ import java.util.stream.Collectors; import io.seata.common.loader.LoadLevel; -import io.seata.rm.datasource.undo.KeywordChecker; +import io.seata.sqlparser.KeywordChecker; import io.seata.sqlparser.util.JdbcConstants; /** diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoDeleteExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoDeleteExecutor.java index 570d1941844..40dd3fe28e6 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoDeleteExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoDeleteExecutor.java @@ -17,7 +17,7 @@ import io.seata.common.exception.ShouldNeverHappenException; import io.seata.common.util.CollectionUtils; -import io.seata.rm.datasource.ColumnUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.rm.datasource.sql.struct.Field; import io.seata.rm.datasource.sql.struct.Row; import io.seata.rm.datasource.sql.struct.TableRecords; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoUpdateExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoUpdateExecutor.java index 220875ce77f..33db960be2d 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoUpdateExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/OracleUndoUpdateExecutor.java @@ -20,7 +20,7 @@ import io.seata.common.exception.ShouldNeverHappenException; import io.seata.common.util.CollectionUtils; -import io.seata.rm.datasource.ColumnUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.rm.datasource.SqlGenerateUtils; import io.seata.rm.datasource.sql.struct.Field; import io.seata.rm.datasource.sql.struct.Row; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/keyword/OracleKeywordChecker.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/keyword/OracleKeywordChecker.java index 6b82e72d6b4..22b4dc6febb 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/keyword/OracleKeywordChecker.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/oracle/keyword/OracleKeywordChecker.java @@ -20,7 +20,7 @@ import java.util.stream.Collectors; import io.seata.common.loader.LoadLevel; -import io.seata.rm.datasource.undo.KeywordChecker; +import io.seata.sqlparser.KeywordChecker; import io.seata.sqlparser.util.JdbcConstants; /** diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/PostgresqlUndoDeleteExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/PostgresqlUndoDeleteExecutor.java index 0ed7a34f7fe..791195d4835 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/PostgresqlUndoDeleteExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/PostgresqlUndoDeleteExecutor.java @@ -17,7 +17,7 @@ import io.seata.common.exception.ShouldNeverHappenException; import io.seata.common.util.CollectionUtils; -import io.seata.rm.datasource.ColumnUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.rm.datasource.sql.struct.Field; import io.seata.rm.datasource.sql.struct.Row; import io.seata.rm.datasource.sql.struct.TableRecords; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/PostgresqlUndoUpdateExecutor.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/PostgresqlUndoUpdateExecutor.java index 5c6488a8475..8b16fe9c2a4 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/PostgresqlUndoUpdateExecutor.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/PostgresqlUndoUpdateExecutor.java @@ -20,7 +20,7 @@ import io.seata.common.exception.ShouldNeverHappenException; import io.seata.common.util.CollectionUtils; -import io.seata.rm.datasource.ColumnUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.rm.datasource.SqlGenerateUtils; import io.seata.rm.datasource.sql.struct.Field; import io.seata.rm.datasource.sql.struct.Row; diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/keyword/PostgresqlKeywordChecker.java b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/keyword/PostgresqlKeywordChecker.java index 75abbada8c8..f35f4ffa114 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/keyword/PostgresqlKeywordChecker.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/undo/postgresql/keyword/PostgresqlKeywordChecker.java @@ -20,7 +20,7 @@ import java.util.stream.Collectors; import io.seata.common.loader.LoadLevel; -import io.seata.rm.datasource.undo.KeywordChecker; +import io.seata.sqlparser.KeywordChecker; import io.seata.sqlparser.util.JdbcConstants; /** diff --git a/rm-datasource/src/main/resources/META-INF/services/io.seata.rm.datasource.undo.KeywordChecker b/rm-datasource/src/main/resources/META-INF/services/io.seata.sqlparser.KeywordChecker similarity index 100% rename from rm-datasource/src/main/resources/META-INF/services/io.seata.rm.datasource.undo.KeywordChecker rename to rm-datasource/src/main/resources/META-INF/services/io.seata.sqlparser.KeywordChecker diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/ColumnUtilsTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/ColumnUtilsTest.java index 864c5571336..617a63dc15d 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/ColumnUtilsTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/ColumnUtilsTest.java @@ -15,6 +15,7 @@ */ package io.seata.rm.datasource; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.sqlparser.util.JdbcConstants; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/KeywordCheckerFactoryTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/KeywordCheckerFactoryTest.java index d49619d1bee..8747af451fd 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/KeywordCheckerFactoryTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/KeywordCheckerFactoryTest.java @@ -16,6 +16,7 @@ package io.seata.rm.datasource.undo; import io.seata.common.loader.EnhancedServiceNotFoundException; +import io.seata.sqlparser.KeywordCheckerFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/keyword/MySQLKeywordCheckerTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/keyword/MySQLKeywordCheckerTest.java index 72fb6d0f1c1..093520d7f72 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/keyword/MySQLKeywordCheckerTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/mysql/keyword/MySQLKeywordCheckerTest.java @@ -15,11 +15,10 @@ */ package io.seata.rm.datasource.undo.mysql.keyword; -import java.sql.SQLException; import java.sql.Types; -import io.seata.rm.datasource.undo.KeywordChecker; -import io.seata.rm.datasource.undo.KeywordCheckerFactory; +import io.seata.sqlparser.KeywordChecker; +import io.seata.sqlparser.KeywordCheckerFactory; import io.seata.rm.datasource.undo.SQLUndoLog; import io.seata.rm.datasource.undo.mysql.MySQLUndoDeleteExecutor; import io.seata.rm.datasource.undo.mysql.MySQLUndoInsertExecutor; diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/oracle/keyword/OracleKeywordCheckerTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/oracle/keyword/OracleKeywordCheckerTest.java index 4344c54493a..2d00d1df907 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/oracle/keyword/OracleKeywordCheckerTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/oracle/keyword/OracleKeywordCheckerTest.java @@ -18,8 +18,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import io.seata.rm.datasource.undo.KeywordChecker; -import io.seata.rm.datasource.undo.KeywordCheckerFactory; +import io.seata.sqlparser.KeywordChecker; +import io.seata.sqlparser.KeywordCheckerFactory; import io.seata.sqlparser.util.JdbcConstants; /** diff --git a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/postgresql/keyword/PostgresqlKeywordCheckerTest.java b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/postgresql/keyword/PostgresqlKeywordCheckerTest.java index 84b7b06ef6f..41b2959027c 100644 --- a/rm-datasource/src/test/java/io/seata/rm/datasource/undo/postgresql/keyword/PostgresqlKeywordCheckerTest.java +++ b/rm-datasource/src/test/java/io/seata/rm/datasource/undo/postgresql/keyword/PostgresqlKeywordCheckerTest.java @@ -18,8 +18,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import io.seata.rm.datasource.undo.KeywordChecker; -import io.seata.rm.datasource.undo.KeywordCheckerFactory; +import io.seata.sqlparser.KeywordChecker; +import io.seata.sqlparser.KeywordCheckerFactory; import io.seata.sqlparser.util.JdbcConstants; /** diff --git a/rm-datasource/src/test/resources/META-INF/services/io.seata.rm.datasource.undo.KeywordChecker b/rm-datasource/src/test/resources/META-INF/services/io.seata.sqlparser.KeywordChecker similarity index 100% rename from rm-datasource/src/test/resources/META-INF/services/io.seata.rm.datasource.undo.KeywordChecker rename to rm-datasource/src/test/resources/META-INF/services/io.seata.sqlparser.KeywordChecker diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLInsertRecognizer.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLInsertRecognizer.java index 5d168c90772..894e67368a7 100644 --- a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLInsertRecognizer.java +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLInsertRecognizer.java @@ -15,12 +15,14 @@ */ package io.seata.sqlparser.antlr.mysql; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.sqlparser.SQLInsertRecognizer; import io.seata.sqlparser.SQLType; import io.seata.sqlparser.antlr.mysql.parser.MySqlLexer; import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; import io.seata.sqlparser.antlr.mysql.stream.ANTLRNoCaseStringStream; import io.seata.sqlparser.antlr.mysql.visit.InsertStatementSqlVisitor; +import io.seata.sqlparser.util.JdbcConstants; import org.antlr.v4.runtime.CommonTokenStream; import java.util.ArrayList; @@ -105,4 +107,10 @@ public List getInsertParamsValue() { public List getDuplicateKeyUpdate() { return null; } + + @Override + public List getInsertColumnsIsSimplified() { + List insertColumns = getInsertColumns(); + return ColumnUtils.delEscape(insertColumns, JdbcConstants.MYSQL); + } } \ No newline at end of file diff --git a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLUpdateRecognizer.java b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLUpdateRecognizer.java index d81ad82a2a7..55d61a5671b 100644 --- a/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLUpdateRecognizer.java +++ b/sqlparser/seata-sqlparser-antlr/src/main/java/io/seata/sqlparser/antlr/mysql/AntlrMySQLUpdateRecognizer.java @@ -15,6 +15,7 @@ */ package io.seata.sqlparser.antlr.mysql; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLType; import io.seata.sqlparser.SQLUpdateRecognizer; @@ -22,6 +23,7 @@ import io.seata.sqlparser.antlr.mysql.parser.MySqlLexer; import io.seata.sqlparser.antlr.mysql.parser.MySqlParser; import io.seata.sqlparser.antlr.mysql.stream.ANTLRNoCaseStringStream; +import io.seata.sqlparser.util.JdbcConstants; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.tree.ParseTreeWalker; @@ -72,6 +74,12 @@ public List getUpdateValues() { return updateForValues.stream().map(updateValues -> updateValues.getUpdateValue()).collect(Collectors.toList()); } + @Override + public List getUpdateColumnsIsSimplified() { + List updateColumns = getUpdateColumns(); + return ColumnUtils.delEscape(updateColumns, JdbcConstants.MYSQL); + } + @Override public String getWhereCondition(ParametersHolder parametersHolder, ArrayList> paramAppenderList) { return sqlContext.getWhereCondition(); diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/KeywordChecker.java b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/KeywordChecker.java similarity index 97% rename from rm-datasource/src/main/java/io/seata/rm/datasource/undo/KeywordChecker.java rename to sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/KeywordChecker.java index 170aee1fbee..2972319e90e 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/KeywordChecker.java +++ b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/KeywordChecker.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.seata.rm.datasource.undo; +package io.seata.sqlparser; /** * The interface Keyword checker. diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/KeywordCheckerFactory.java b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/KeywordCheckerFactory.java similarity index 97% rename from rm-datasource/src/main/java/io/seata/rm/datasource/undo/KeywordCheckerFactory.java rename to sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/KeywordCheckerFactory.java index a944204431e..9db5eaa0f98 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/undo/KeywordCheckerFactory.java +++ b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/KeywordCheckerFactory.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.seata.rm.datasource.undo; +package io.seata.sqlparser; import io.seata.common.loader.EnhancedServiceLoader; import io.seata.common.util.CollectionUtils; diff --git a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SQLInsertRecognizer.java b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SQLInsertRecognizer.java index e83c5699abf..c9a6d43ff4c 100644 --- a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SQLInsertRecognizer.java +++ b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SQLInsertRecognizer.java @@ -59,4 +59,11 @@ public interface SQLInsertRecognizer extends SQLRecognizer { * @return the duplicateKey columns */ List getDuplicateKeyUpdate(); + + /** + * Gets insert columns is Simplified. + * + * @return (`a`, `b`, `c`) -> (a, b, c) + */ + List getInsertColumnsIsSimplified(); } diff --git a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SQLUpdateRecognizer.java b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SQLUpdateRecognizer.java index 25664de4dbd..f44e7c53670 100644 --- a/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SQLUpdateRecognizer.java +++ b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/SQLUpdateRecognizer.java @@ -48,4 +48,9 @@ public interface SQLUpdateRecognizer extends WhereRecognizer { default String getTableAlias(String tableName) { return null; } + * Gets update columns is Simplified. + * + * @return (`a`, `b`, `c`) -> (a, b, c) + */ + List getUpdateColumnsIsSimplified(); } diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/ColumnUtils.java b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/util/ColumnUtils.java similarity index 97% rename from rm-datasource/src/main/java/io/seata/rm/datasource/ColumnUtils.java rename to sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/util/ColumnUtils.java index 505973d311c..c979c2fa627 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/ColumnUtils.java +++ b/sqlparser/seata-sqlparser-core/src/main/java/io/seata/sqlparser/util/ColumnUtils.java @@ -13,13 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.seata.rm.datasource; +package io.seata.sqlparser.util; import io.seata.common.util.CollectionUtils; import io.seata.common.util.StringUtils; -import io.seata.rm.datasource.undo.KeywordChecker; -import io.seata.rm.datasource.undo.KeywordCheckerFactory; -import io.seata.sqlparser.util.JdbcConstants; +import io.seata.sqlparser.KeywordChecker; +import io.seata.sqlparser.KeywordCheckerFactory; import java.util.ArrayList; import java.util.List; diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/BaseMySQLRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/BaseMySQLRecognizer.java index 6d3cba92d55..33633c83a8f 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/BaseMySQLRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/BaseMySQLRecognizer.java @@ -27,6 +27,7 @@ import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.druid.BaseRecognizer; import io.seata.sqlparser.struct.Null; +import io.seata.sqlparser.util.JdbcConstants; /** * @author will @@ -132,4 +133,7 @@ protected String getOrderByCondition(SQLOrderBy sqlOrderBy, final ParametersHold return sb.toString(); } + public String getDbType() { + return JdbcConstants.MYSQL; + } } diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLInsertRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLInsertRecognizer.java index 4b1e4fb8ec2..13d0ff84698 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLInsertRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/mysql/MySQLInsertRecognizer.java @@ -31,6 +31,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import io.seata.common.util.CollectionUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.sqlparser.SQLInsertRecognizer; import io.seata.sqlparser.SQLType; import io.seata.sqlparser.struct.NotPlaceholderExpr; @@ -167,6 +168,12 @@ public List getDuplicateKeyUpdate() { return list; } + @Override + public List getInsertColumnsIsSimplified() { + List insertColumns = getInsertColumns(); + return ColumnUtils.delEscape(insertColumns, getDbType()); + } + @Override protected SQLStatement getAst() { return ast; 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 0f042ca9053..db896e48e90 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 @@ -34,6 +34,7 @@ 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.sqlparser.util.ColumnUtils; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLType; import io.seata.sqlparser.SQLUpdateRecognizer; @@ -107,6 +108,12 @@ public List getUpdateValues() { return list; } + @Override + public List getUpdateColumnsIsSimplified() { + List updateColumns = getUpdateColumns(); + return ColumnUtils.delEscape(updateColumns, getDbType()); + } + @Override public String getWhereCondition(final ParametersHolder parametersHolder, final ArrayList> paramAppenderList) { diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/BaseOracleRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/BaseOracleRecognizer.java index 4440436aaef..24f027f5fd1 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/BaseOracleRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/BaseOracleRecognizer.java @@ -39,6 +39,7 @@ import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.druid.BaseRecognizer; import io.seata.sqlparser.struct.Null; +import io.seata.sqlparser.util.JdbcConstants; /** * @author will @@ -187,4 +188,8 @@ public boolean visit(SQLInsertStatement x) { getAst().accept(visitor); return true; } + + public String getDbType() { + return JdbcConstants.ORACLE; + } } diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleInsertRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleInsertRecognizer.java index a135199bb2c..424ee2653c0 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleInsertRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/oracle/OracleInsertRecognizer.java @@ -31,6 +31,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleInsertStatement; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor; import io.seata.common.util.CollectionUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.sqlparser.SQLInsertRecognizer; import io.seata.sqlparser.SQLType; import io.seata.sqlparser.struct.NotPlaceholderExpr; @@ -150,6 +151,12 @@ public List getDuplicateKeyUpdate() { return null; } + @Override + public List getInsertColumnsIsSimplified() { + List insertColumns = getInsertColumns(); + return ColumnUtils.delEscape(insertColumns, getDbType()); + } + @Override protected SQLStatement getAst() { return ast; 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 d2669b9e512..47d041ad17b 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 @@ -30,6 +30,7 @@ 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.util.ColumnUtils; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLType; import io.seata.sqlparser.SQLUpdateRecognizer; @@ -100,6 +101,12 @@ public List getUpdateValues() { return list; } + @Override + public List getUpdateColumnsIsSimplified() { + List updateColumns = getUpdateColumns(); + return ColumnUtils.delEscape(updateColumns, getDbType()); + } + @Override public String getWhereCondition(final ParametersHolder parametersHolder, final ArrayList> paramAppenderList) { diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/BasePostgresqlRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/BasePostgresqlRecognizer.java index 7cc533b99b6..9a0c02e57e8 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/BasePostgresqlRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/BasePostgresqlRecognizer.java @@ -33,6 +33,8 @@ import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.druid.BaseRecognizer; import io.seata.sqlparser.struct.Null; +import io.seata.sqlparser.util.JdbcConstants; + import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -194,4 +196,8 @@ protected String getOrderByCondition(SQLOrderBy sqlOrderBy, final ParametersHold executeOrderBy(sqlOrderBy, createOutputVisitor(parametersHolder, paramAppenderList, sb)); return sb.toString(); } + + public String getDbType() { + return JdbcConstants.POSTGRESQL; + } } diff --git a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlInsertRecognizer.java b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlInsertRecognizer.java index 2f6fca2bf73..79e68354c6a 100644 --- a/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlInsertRecognizer.java +++ b/sqlparser/seata-sqlparser-druid/src/main/java/io/seata/sqlparser/druid/postgresql/PostgresqlInsertRecognizer.java @@ -33,6 +33,7 @@ import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor; import io.seata.common.util.CollectionUtils; import io.seata.common.util.StringUtils; +import io.seata.sqlparser.util.ColumnUtils; import io.seata.sqlparser.SQLInsertRecognizer; import io.seata.sqlparser.SQLType; import io.seata.sqlparser.struct.NotPlaceholderExpr; @@ -160,6 +161,12 @@ public List getDuplicateKeyUpdate() { return null; } + @Override + public List getInsertColumnsIsSimplified() { + List insertColumns = getInsertColumns(); + return ColumnUtils.delEscape(insertColumns, getDbType()); + } + @Override protected SQLStatement getAst() { return ast; 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 114001f3ed1..e3c1f89f778 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 @@ -30,6 +30,7 @@ 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.util.ColumnUtils; import io.seata.sqlparser.ParametersHolder; import io.seata.sqlparser.SQLType; import io.seata.sqlparser.SQLUpdateRecognizer; @@ -98,6 +99,12 @@ public List getUpdateValues() { return list; } + @Override + public List getUpdateColumnsIsSimplified() { + List updateColumns = getUpdateColumns(); + return ColumnUtils.delEscape(updateColumns, getDbType()); + } + @Override public String getWhereCondition(final ParametersHolder parametersHolder, final ArrayList> paramAppenderList) { diff --git a/sqlparser/seata-sqlparser-druid/src/test/java/io/seata/sqlparser/druid/MySQLInsertRecognizerTest.java b/sqlparser/seata-sqlparser-druid/src/test/java/io/seata/sqlparser/druid/MySQLInsertRecognizerTest.java index 57987c868e4..5775745d3a3 100644 --- a/sqlparser/seata-sqlparser-druid/src/test/java/io/seata/sqlparser/druid/MySQLInsertRecognizerTest.java +++ b/sqlparser/seata-sqlparser-druid/src/test/java/io/seata/sqlparser/druid/MySQLInsertRecognizerTest.java @@ -174,4 +174,26 @@ public void testGetInsertRows() { public String getDbType() { return JdbcConstants.MYSQL; } + + @Test + public void testGetInsertColumns_2() { + String sql = "insert into t(`id`, `no`, `name`, `age`) values (1, 'no001', 'aaa', '20')"; + List asts = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL); + MySQLInsertRecognizer recognizer = new MySQLInsertRecognizer(sql, asts.get(0)); + List insertColumns = recognizer.getInsertColumns(); + for (String insertColumn : insertColumns) { + Assertions.assertTrue(insertColumn.contains("`")); + } + } + + @Test + public void testGetInsertColumnsIsSimplified() { + String sql = "insert into t(`id`, `no`, `name`, `age`) values (1, 'no001', 'aaa', '20')"; + List asts = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL); + MySQLInsertRecognizer recognizer = new MySQLInsertRecognizer(sql, asts.get(0)); + List insertColumns = recognizer.getInsertColumnsIsSimplified(); + for (String insertColumn : insertColumns) { + Assertions.assertFalse(insertColumn.contains("`")); + } + } } diff --git a/sqlparser/seata-sqlparser-druid/src/test/java/io/seata/sqlparser/druid/MySQLUpdateRecognizerTest.java b/sqlparser/seata-sqlparser-druid/src/test/java/io/seata/sqlparser/druid/MySQLUpdateRecognizerTest.java index 731fcb87932..5ba096a84a0 100644 --- a/sqlparser/seata-sqlparser-druid/src/test/java/io/seata/sqlparser/druid/MySQLUpdateRecognizerTest.java +++ b/sqlparser/seata-sqlparser-druid/src/test/java/io/seata/sqlparser/druid/MySQLUpdateRecognizerTest.java @@ -363,4 +363,26 @@ public void testUpdateJoinSql() { public String getDbType() { return JdbcConstants.MYSQL; } + + @Test + public void testGetUpdateColumns_2() { + String sql = "update t set `a` = 1, `b` = 2, `c` = 3"; + List asts = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL); + MySQLUpdateRecognizer recognizer = new MySQLUpdateRecognizer(sql, asts.get(0)); + List updateColumns = recognizer.getUpdateColumns(); + for (String updateColumn : updateColumns) { + Assertions.assertTrue(updateColumn.contains("`")); + } + } + + @Test + public void testGetUpdateColumnsIsSimplified() { + String sql = "update t set `a` = 1, `b` = 2, `c` = 3"; + List asts = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL); + MySQLUpdateRecognizer recognizer = new MySQLUpdateRecognizer(sql, asts.get(0)); + List updateColumns = recognizer.getUpdateColumnsIsSimplified(); + for (String updateColumn : updateColumns) { + Assertions.assertFalse(updateColumn.contains("`")); + } + } } diff --git a/tm/src/main/java/io/seata/tm/api/TransactionalTemplate.java b/tm/src/main/java/io/seata/tm/api/TransactionalTemplate.java index 7355093af8e..3694d29d994 100644 --- a/tm/src/main/java/io/seata/tm/api/TransactionalTemplate.java +++ b/tm/src/main/java/io/seata/tm/api/TransactionalTemplate.java @@ -211,18 +211,19 @@ private void commitTransaction(GlobalTransaction tx, TransactionInfo txInfo) try { triggerBeforeCommit(); tx.commit(); + + if (Arrays.asList(GlobalStatus.TimeoutRollbacking, GlobalStatus.TimeoutRollbacked).contains(tx.getLocalStatus())) { + throw new TransactionalExecutor.ExecutionException(tx, + new TimeoutException(String.format("Global transaction[%s] is timeout and will be rollback[TC].", tx.getXid())), + TransactionalExecutor.Code.TimeoutRollback); + } + triggerAfterCommit(); } catch (TransactionException txe) { // 4.1 Failed to commit throw new TransactionalExecutor.ExecutionException(tx, txe, TransactionalExecutor.Code.CommitFailure); } - - if (Arrays.asList(GlobalStatus.TimeoutRollbacking, GlobalStatus.TimeoutRollbacked).contains(tx.getLocalStatus())) { - throw new TransactionalExecutor.ExecutionException(tx, - new TimeoutException(String.format("Global transaction[%s] is timeout and will be rollback[TC].", tx.getXid())), - TransactionalExecutor.Code.TimeoutRollback); - } } private void rollbackTransaction(GlobalTransaction tx, Throwable originalException) throws TransactionException, TransactionalExecutor.ExecutionException { @@ -331,4 +332,4 @@ private void cleanUp() { private List getCurrentHooks() { return TransactionHookManager.getHooks(); } -} +} \ No newline at end of file