Skip to content

Commit 774046b

Browse files
authored
optimize: optimize parsePkValues to reduce nested loops (#1018)
* optimize: optimize parsePkValues to reduce nested loops * optimize parsePkValues primary key extraction * fix
1 parent b818a65 commit 774046b

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

pkg/datasource/sql/undo/executor/executor.go

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -168,21 +168,28 @@ func (b *BaseExecutor) queryCurrentRecords(ctx context.Context, conn *sql.Conn)
168168
}
169169

170170
func (b *BaseExecutor) parsePkValues(rows []types.RowImage, pkNameList []string) map[string][]types.ColumnImage {
171+
if len(rows) == 0 {
172+
return make(map[string][]types.ColumnImage)
173+
}
174+
175+
pkLookup := make(map[string]string, len(pkNameList))
176+
for _, pk := range pkNameList {
177+
pkLookup[strings.ToLower(pk)] = pk
178+
}
179+
171180
pkValues := make(map[string][]types.ColumnImage)
172-
// todo optimize 3 fors
181+
173182
for _, row := range rows {
174183
for _, column := range row.Columns {
175-
for _, pk := range pkNameList {
176-
if strings.EqualFold(pk, column.ColumnName) {
177-
values := pkValues[strings.ToUpper(pk)]
178-
if values == nil {
179-
values = make([]types.ColumnImage, 0)
180-
}
181-
values = append(values, column)
182-
pkValues[pk] = values
184+
columnNameLower := strings.ToLower(column.ColumnName)
185+
if originalPk, exists := pkLookup[columnNameLower]; exists {
186+
if pkValues[originalPk] == nil {
187+
pkValues[originalPk] = make([]types.ColumnImage, 0, len(rows))
183188
}
189+
pkValues[originalPk] = append(pkValues[originalPk], column)
184190
}
185191
}
186192
}
193+
187194
return pkValues
188195
}

0 commit comments

Comments
 (0)