Skip to content

Commit

Permalink
*: fix dm integration test failure (#10631)
Browse files Browse the repository at this point in the history
ref #10386
  • Loading branch information
lidezhu authored and 3AceShowHand committed Feb 22, 2024
1 parent 7fbd077 commit fa615c6
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 25 deletions.
8 changes: 0 additions & 8 deletions pkg/sqlmodel/multirow.go
Original file line number Diff line number Diff line change
Expand Up @@ -178,10 +178,6 @@ func GenUpdateSQL(changes ...*RowChange) (string, []any) {
for i, col := range first.sourceTableInfo.Columns {
if _, ok := targetGeneratedColSet[col.Name.L]; ok {
skipColIdx = append(skipColIdx, i)
//// non cdc visible column's value won't be in `RowChange`
//if model.IsColCDCVisible(col) {
// skipColIdx = append(skipColIdx, i)
//}
continue
}
assignValueColumnCount++
Expand Down Expand Up @@ -255,10 +251,6 @@ func GenInsertSQL(tp DMLType, changes ...*RowChange) (string, []interface{}) {
for i, col := range first.sourceTableInfo.Columns {
if _, ok := generatedColumns[col.Name.L]; ok {
skipColIdx = append(skipColIdx, i)
//// non cdc visible column's value won't be in `RowChange`
//if model.IsColCDCVisible(col) {
// skipColIdx = append(skipColIdx, i)
//}
continue
}

Expand Down
23 changes: 8 additions & 15 deletions pkg/sqlmodel/multirow_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,11 +127,9 @@ func testGenUpdateMultiRowsWithVirtualGeneratedColumn(t *testing.T, genUpdate ge
sourceTI := mockTableInfo(t, "CREATE TABLE tb1 (c INT, c1 int as (c+100) virtual not null, c2 INT, c3 INT, PRIMARY KEY (c))")
targetTI := mockTableInfo(t, "CREATE TABLE tb (c INT, c1 int as (c+100) virtual not null, c2 INT, c3 INT, PRIMARY KEY (c))")

sourceTI = cdcmodel.BuildTiDBTableInfoWithoutVirtualColumns(sourceTI)

change1 := NewRowChange(source, target, []interface{}{1, 2, 3}, []interface{}{10, 20, 30}, sourceTI, targetTI, nil)
change2 := NewRowChange(source, target, []interface{}{4, 5, 6}, []interface{}{40, 50, 60}, sourceTI, targetTI, nil)
change3 := NewRowChange(source, target, []interface{}{7, 8, 9}, []interface{}{70, 80, 90}, sourceTI, targetTI, nil)
change1 := NewRowChange(source, target, []interface{}{1, 101, 2, 3}, []interface{}{10, 110, 20, 30}, sourceTI, targetTI, nil)
change2 := NewRowChange(source, target, []interface{}{4, 104, 5, 6}, []interface{}{40, 140, 50, 60}, sourceTI, targetTI, nil)
change3 := NewRowChange(source, target, []interface{}{7, 107, 8, 9}, []interface{}{70, 170, 80, 90}, sourceTI, targetTI, nil)
sql, args := genUpdate(change1, change2, change3)

expectedSQL := "UPDATE `db`.`tb` SET " +
Expand Down Expand Up @@ -160,11 +158,9 @@ func testGenUpdateMultiRowsWithVirtualGeneratedColumns(t *testing.T, genUpdate g
targetTI := mockTableInfo(t, `CREATE TABLE tb (c0 int as (c4*c4) virtual not null,
c1 int as (c+100) virtual not null, c2 INT, c3 INT, c4 INT, PRIMARY KEY (c4))`)

sourceTI = cdcmodel.BuildTiDBTableInfoWithoutVirtualColumns(sourceTI)

change1 := NewRowChange(source, target, []interface{}{2, 3, 1}, []interface{}{20, 30, 10}, sourceTI, targetTI, nil)
change2 := NewRowChange(source, target, []interface{}{5, 6, 4}, []interface{}{50, 60, 40}, sourceTI, targetTI, nil)
change3 := NewRowChange(source, target, []interface{}{8, 9, 7}, []interface{}{80, 90, 70}, sourceTI, targetTI, nil)
change1 := NewRowChange(source, target, []interface{}{1, 101, 2, 3, 1}, []interface{}{100, 110, 20, 30, 10}, sourceTI, targetTI, nil)
change2 := NewRowChange(source, target, []interface{}{16, 104, 5, 6, 4}, []interface{}{1600, 140, 50, 60, 40}, sourceTI, targetTI, nil)
change3 := NewRowChange(source, target, []interface{}{49, 107, 8, 9, 7}, []interface{}{4900, 170, 80, 90, 70}, sourceTI, targetTI, nil)
sql, args := genUpdate(change1, change2, change3)

expectedSQL := "UPDATE `db`.`tb` SET " +
Expand Down Expand Up @@ -222,11 +218,8 @@ func TestGenInsertMultiRows(t *testing.T) {
sourceTI2 := mockTableInfo(t, "CREATE TABLE tb2 (gen INT AS (c+1), c INT PRIMARY KEY, c2 INT)")
targetTI := mockTableInfo(t, "CREATE TABLE tb (gen INT AS (c+1), c INT PRIMARY KEY, c2 INT)")

sourceTI1 = cdcmodel.BuildTiDBTableInfoWithoutVirtualColumns(sourceTI1)
sourceTI2 = cdcmodel.BuildTiDBTableInfoWithoutVirtualColumns(sourceTI2)

change1 := NewRowChange(source1, target, nil, []interface{}{1, 2}, sourceTI1, targetTI, nil)
change2 := NewRowChange(source2, target, nil, []interface{}{3, 4}, sourceTI2, targetTI, nil)
change1 := NewRowChange(source1, target, nil, []interface{}{2, 1, 2}, sourceTI1, targetTI, nil)
change2 := NewRowChange(source2, target, nil, []interface{}{4, 3, 4}, sourceTI2, targetTI, nil)

sql, args := GenInsertSQL(DMLInsert, change1, change2)
require.Equal(t, "INSERT INTO `db`.`tb` (`c`,`c2`) VALUES (?,?),(?,?)", sql)
Expand Down
13 changes: 11 additions & 2 deletions pkg/sqlmodel/row_change_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -330,19 +330,28 @@ func TestGenInsert(t *testing.T) {
{
"CREATE TABLE tb1 (c INT PRIMARY KEY, c2 INT AS (c+1))",
"CREATE TABLE tb2 (c INT PRIMARY KEY, c2 INT AS (c+1))",
[]interface{}{1},
[]interface{}{1, 2},

"INSERT INTO `db`.`tb2` (`c`) VALUES (?)",
"REPLACE INTO `db`.`tb2` (`c`) VALUES (?)",
"INSERT INTO `db`.`tb2` (`c`) VALUES (?) ON DUPLICATE KEY UPDATE `c`=VALUES(`c`)",
[]interface{}{1},
},
{
"CREATE TABLE tb1 (c INT PRIMARY KEY, c2 INT AS (c+1))",
"CREATE TABLE tb2 (c INT PRIMARY KEY, c2 INT)",
[]interface{}{1, 2},

"INSERT INTO `db`.`tb2` (`c`,`c2`) VALUES (?,?)",
"REPLACE INTO `db`.`tb2` (`c`,`c2`) VALUES (?,?)",
"INSERT INTO `db`.`tb2` (`c`,`c2`) VALUES (?,?) ON DUPLICATE KEY UPDATE `c`=VALUES(`c`),`c2`=VALUES(`c2`)",
[]interface{}{1, 2},
},
}

for _, c := range cases {
sourceTI := mockTableInfo(t, c.sourceCreateSQL)
targetTI := mockTableInfo(t, c.targetCreateSQL)
sourceTI = cdcmodel.BuildTiDBTableInfoWithoutVirtualColumns(sourceTI)
change := NewRowChange(source, target, nil, c.postValues, sourceTI, targetTI, nil)
sql, args := change.GenSQL(DMLInsert)
require.Equal(t, c.expectedInsertSQL, sql)
Expand Down

0 comments on commit fa615c6

Please sign in to comment.