This is an automated email from the ASF dual-hosted git repository.
jimin pushed a commit to branch 2.x
in repository https://gitbox.apache.org/repos/asf/incubator-seata.git
The following commit(s) were added to refs/heads/2.x by this push:
new d239a81404 bugfix: fix DM transaction rollback not using database
auto-increment primary keys (#7643)
d239a81404 is described below
commit d239a814041f81dbe92a8d33938efdf17f498d31
Author: chenmuhu <[email protected]>
AuthorDate: Fri Oct 17 14:09:30 2025 +0800
bugfix: fix DM transaction rollback not using database auto-increment
primary keys (#7643)
---
.../datasource/undo/dm/DmUndoDeleteExecutor.java | 45 +++++++++++++++++-----
1 file changed, 35 insertions(+), 10 deletions(-)
diff --git
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/dm/DmUndoDeleteExecutor.java
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/dm/DmUndoDeleteExecutor.java
index b423e279fb..61e3347eb3 100644
---
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/dm/DmUndoDeleteExecutor.java
+++
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/undo/dm/DmUndoDeleteExecutor.java
@@ -23,6 +23,8 @@ import org.apache.seata.rm.datasource.sql.struct.Row;
import org.apache.seata.rm.datasource.sql.struct.TableRecords;
import org.apache.seata.rm.datasource.undo.AbstractUndoExecutor;
import org.apache.seata.rm.datasource.undo.SQLUndoLog;
+import org.apache.seata.sqlparser.struct.ColumnMeta;
+import org.apache.seata.sqlparser.struct.TableMeta;
import org.apache.seata.sqlparser.util.ColumnUtils;
import org.apache.seata.sqlparser.util.JdbcConstants;
@@ -68,16 +70,39 @@ public class DmUndoDeleteExecutor extends
AbstractUndoExecutor {
.collect(Collectors.joining(", "));
String insertValues = fields.stream().map(field ->
"?").collect(Collectors.joining(", "));
- return "SET IDENTITY_INSERT " + sqlUndoLog.getTableName()
- + " ON; INSERT INTO "
- + sqlUndoLog.getTableName()
- + " ("
- + insertColumns
- + ") VALUES ("
- + insertValues
- + "); SET IDENTITY_INSERT "
- + sqlUndoLog.getTableName()
- + " OFF;";
+ // Check if the table has an auto-increment primary key
+ boolean hasAutoIncrement = false;
+ TableMeta tableMeta = beforeImage.getTableMeta();
+ if (tableMeta != null) {
+ List<String> primaryKeys = tableMeta.getPrimaryKeyOnlyName();
+ for (String pk : primaryKeys) {
+ ColumnMeta columnMeta = tableMeta.getColumnMeta(pk);
+ if (columnMeta != null && columnMeta.isAutoincrement()) {
+ hasAutoIncrement = true;
+ break;
+ }
+ }
+ }
+ if (hasAutoIncrement) {
+ return "SET IDENTITY_INSERT " + sqlUndoLog.getTableName()
+ + " ON; INSERT INTO "
+ + sqlUndoLog.getTableName()
+ + " ("
+ + insertColumns
+ + ") VALUES ("
+ + insertValues
+ + "); SET IDENTITY_INSERT "
+ + sqlUndoLog.getTableName()
+ + " OFF;";
+ } else {
+ return " INSERT INTO " +
+ sqlUndoLog.getTableName() +
+ " (" +
+ insertColumns +
+ ") VALUES (" +
+ insertValues +
+ ");";
+ }
}
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]