|
23 | 23 | import org.apache.seata.rm.datasource.sql.struct.TableRecords; |
24 | 24 | import org.apache.seata.rm.datasource.undo.AbstractUndoExecutor; |
25 | 25 | import org.apache.seata.rm.datasource.undo.SQLUndoLog; |
| 26 | +import org.apache.seata.sqlparser.struct.ColumnMeta; |
| 27 | +import org.apache.seata.sqlparser.struct.TableMeta; |
26 | 28 | import org.apache.seata.sqlparser.util.ColumnUtils; |
27 | 29 | import org.apache.seata.sqlparser.util.JdbcConstants; |
28 | 30 |
|
@@ -68,16 +70,39 @@ protected String buildUndoSQL() { |
68 | 70 | .collect(Collectors.joining(", ")); |
69 | 71 | String insertValues = fields.stream().map(field -> "?").collect(Collectors.joining(", ")); |
70 | 72 |
|
71 | | - return "SET IDENTITY_INSERT " + sqlUndoLog.getTableName() |
72 | | - + " ON; INSERT INTO " |
73 | | - + sqlUndoLog.getTableName() |
74 | | - + " (" |
75 | | - + insertColumns |
76 | | - + ") VALUES (" |
77 | | - + insertValues |
78 | | - + "); SET IDENTITY_INSERT " |
79 | | - + sqlUndoLog.getTableName() |
80 | | - + " OFF;"; |
| 73 | + // Check if the table has an auto-increment primary key |
| 74 | + boolean hasAutoIncrement = false; |
| 75 | + TableMeta tableMeta = beforeImage.getTableMeta(); |
| 76 | + if (tableMeta != null) { |
| 77 | + List<String> primaryKeys = tableMeta.getPrimaryKeyOnlyName(); |
| 78 | + for (String pk : primaryKeys) { |
| 79 | + ColumnMeta columnMeta = tableMeta.getColumnMeta(pk); |
| 80 | + if (columnMeta != null && columnMeta.isAutoincrement()) { |
| 81 | + hasAutoIncrement = true; |
| 82 | + break; |
| 83 | + } |
| 84 | + } |
| 85 | + } |
| 86 | + if (hasAutoIncrement) { |
| 87 | + return "SET IDENTITY_INSERT " + sqlUndoLog.getTableName() |
| 88 | + + " ON; INSERT INTO " |
| 89 | + + sqlUndoLog.getTableName() |
| 90 | + + " (" |
| 91 | + + insertColumns |
| 92 | + + ") VALUES (" |
| 93 | + + insertValues |
| 94 | + + "); SET IDENTITY_INSERT " |
| 95 | + + sqlUndoLog.getTableName() |
| 96 | + + " OFF;"; |
| 97 | + } else { |
| 98 | + return " INSERT INTO " + |
| 99 | + sqlUndoLog.getTableName() + |
| 100 | + " (" + |
| 101 | + insertColumns + |
| 102 | + ") VALUES (" + |
| 103 | + insertValues + |
| 104 | + ");"; |
| 105 | + } |
81 | 106 | } |
82 | 107 |
|
83 | 108 | @Override |
|
0 commit comments