From 6bf7b943886ca15bad1869049b2b9aa871f91d55 Mon Sep 17 00:00:00 2001 From: FinnTew Date: Sat, 14 Dec 2024 16:51:50 +0800 Subject: [PATCH] fix: bypassing modifying the primary key (#727) * adjust unit tests to verify the issue of "bypassing modifying the primary key" * fix: bypass modify the primary key --- .../mysql_insertonduplicate_update_undo_log_builder.go | 10 +++++----- ...l_insertonduplicate_update_undo_log_builder_test.go | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pkg/datasource/sql/undo/builder/mysql_insertonduplicate_update_undo_log_builder.go b/pkg/datasource/sql/undo/builder/mysql_insertonduplicate_update_undo_log_builder.go index 4a23dedda..6b82d5370 100644 --- a/pkg/datasource/sql/undo/builder/mysql_insertonduplicate_update_undo_log_builder.go +++ b/pkg/datasource/sql/undo/builder/mysql_insertonduplicate_update_undo_log_builder.go @@ -128,7 +128,7 @@ func (u *MySQLInsertOnDuplicateUndoLogBuilder) buildBeforeImageSQL(insertStmt *a columnIsNull := true uniqueList := make([]string, 0) for _, columnMeta := range index.Columns { - columnName := columnMeta.ColumnName + columnName := strings.ToLower(columnMeta.ColumnName) imageParameters, ok := paramMap[columnName] if !ok && columnMeta.ColumnDef != nil { if strings.EqualFold("PRIMARY", index.Name) { @@ -222,7 +222,7 @@ func (u *MySQLInsertOnDuplicateUndoLogBuilder) buildAfterImageSQL(ctx context.Co func checkDuplicateKeyUpdate(insert *ast.InsertStmt, metaData types.TableMeta) error { duplicateColsMap := make(map[string]bool) for _, v := range insert.OnDuplicate { - duplicateColsMap[v.Column.Name.L] = true + duplicateColsMap[strings.ToLower(v.Column.Name.L)] = true } if len(duplicateColsMap) == 0 { return nil @@ -254,7 +254,7 @@ func (u *MySQLInsertOnDuplicateUndoLogBuilder) buildImageParameters(insert *ast. return nil, fmt.Errorf("insert row's column size not equal to insert column size") } for i, col := range insertColumns { - columnName := executor.DelEscape(col, types.DBTypeMySQL) + columnName := strings.ToLower(executor.DelEscape(col, types.DBTypeMySQL)) val := row[i] rStr, ok := val.(string) if ok && strings.EqualFold(rStr, SqlPlaceholder) { @@ -279,14 +279,14 @@ func getInsertColumns(insertStmt *ast.InsertStmt) []string { } var list []string for _, col := range colList { - list = append(list, col.Name.L) + list = append(list, strings.ToLower(col.Name.L)) } return list } func isIndexValueNotNull(indexMeta types.IndexMeta, imageParameterMap map[string][]driver.Value, rowIndex int) bool { for _, colMeta := range indexMeta.Columns { - columnName := colMeta.ColumnName + columnName := strings.ToLower(colMeta.ColumnName) imageParameters := imageParameterMap[columnName] if imageParameters == nil && colMeta.ColumnDef == nil { return false diff --git a/pkg/datasource/sql/undo/builder/mysql_insertonduplicate_update_undo_log_builder_test.go b/pkg/datasource/sql/undo/builder/mysql_insertonduplicate_update_undo_log_builder_test.go index 03e028fe3..59e673f7d 100644 --- a/pkg/datasource/sql/undo/builder/mysql_insertonduplicate_update_undo_log_builder_test.go +++ b/pkg/datasource/sql/undo/builder/mysql_insertonduplicate_update_undo_log_builder_test.go @@ -46,7 +46,7 @@ func TestInsertOnDuplicateBuildBeforeImageSQL(t *testing.T) { ) columnId := types.ColumnMeta{ ColumnDef: nil, - ColumnName: "id", + ColumnName: "ID", } columnName := types.ColumnMeta{ ColumnDef: nil, @@ -56,12 +56,12 @@ func TestInsertOnDuplicateBuildBeforeImageSQL(t *testing.T) { ColumnDef: nil, ColumnName: "age", } - columns["id"] = columnId + columns["ID"] = columnId columns["name"] = columnName columns["age"] = columnAge columnMeta1 = append(columnMeta1, columnId) columnMeta2 = append(columnMeta2, columnName, columnAge) - index["id"] = types.IndexMeta{ + index["ID"] = types.IndexMeta{ Name: "PRIMARY", IType: types.IndexTypePrimaryKey, Columns: columnMeta1, @@ -72,7 +72,7 @@ func TestInsertOnDuplicateBuildBeforeImageSQL(t *testing.T) { Columns: columnMeta2, } - ColumnNames = []string{"id", "name", "age"} + ColumnNames = []string{"ID", "name", "age"} tableMeta1 = types.TableMeta{ TableName: "t_user", Columns: columns,