This is an automated email from the ASF dual-hosted git repository.

zfeng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-seata-go.git


The following commit(s) were added to refs/heads/master by this push:
     new 774046b2 optimize: optimize parsePkValues to reduce nested loops 
(#1018)
774046b2 is described below

commit 774046b21a81259e56b8d2825276276e94a410fa
Author: EVERFID <[email protected]>
AuthorDate: Sat Dec 6 20:09:02 2025 +0800

    optimize: optimize parsePkValues to reduce nested loops (#1018)
    
    * optimize: optimize parsePkValues to reduce nested loops
    
    * optimize parsePkValues primary key extraction
    
    * fix
---
 pkg/datasource/sql/undo/executor/executor.go | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/pkg/datasource/sql/undo/executor/executor.go 
b/pkg/datasource/sql/undo/executor/executor.go
index eafab8e7..5b1b01f5 100644
--- a/pkg/datasource/sql/undo/executor/executor.go
+++ b/pkg/datasource/sql/undo/executor/executor.go
@@ -168,21 +168,28 @@ func (b *BaseExecutor) queryCurrentRecords(ctx 
context.Context, conn *sql.Conn)
 }
 
 func (b *BaseExecutor) parsePkValues(rows []types.RowImage, pkNameList 
[]string) map[string][]types.ColumnImage {
+       if len(rows) == 0 {
+               return make(map[string][]types.ColumnImage)
+       }
+
+       pkLookup := make(map[string]string, len(pkNameList))
+       for _, pk := range pkNameList {
+               pkLookup[strings.ToLower(pk)] = pk
+       }
+
        pkValues := make(map[string][]types.ColumnImage)
-       // todo optimize 3 fors
+
        for _, row := range rows {
                for _, column := range row.Columns {
-                       for _, pk := range pkNameList {
-                               if strings.EqualFold(pk, column.ColumnName) {
-                                       values := pkValues[strings.ToUpper(pk)]
-                                       if values == nil {
-                                               values = 
make([]types.ColumnImage, 0)
-                                       }
-                                       values = append(values, column)
-                                       pkValues[pk] = values
+                       columnNameLower := strings.ToLower(column.ColumnName)
+                       if originalPk, exists := pkLookup[columnNameLower]; 
exists {
+                               if pkValues[originalPk] == nil {
+                                       pkValues[originalPk] = 
make([]types.ColumnImage, 0, len(rows))
                                }
+                               pkValues[originalPk] = 
append(pkValues[originalPk], column)
                        }
                }
        }
+
        return pkValues
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to