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]

Reply via email to