Skip to content

Commit

Permalink
fix tests
Browse files Browse the repository at this point in the history
Signed-off-by: qupeng <[email protected]>
  • Loading branch information
hicqu committed Sep 24, 2024
1 parent 5b3d086 commit 6310bce
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 26 deletions.
31 changes: 31 additions & 0 deletions cdc/model/sink.go
Original file line number Diff line number Diff line change
Expand Up @@ -1347,3 +1347,34 @@ func (x ColumnDataX) GetDefaultValue() interface{} {
func (x ColumnDataX) GetColumnInfo() *model.ColumnInfo {
return x.info
}

// Column2ColumnDataForTest is for tests.
func Column2ColumnDataForTest(columns []*Column) ([]*ColumnData, *TableInfo) {
info := &TableInfo{
TableInfo: &model.TableInfo{
Columns: make([]*model.ColumnInfo, len(columns)),
},
ColumnsFlag: make(map[int64]*ColumnFlagType, len(columns)),
columnsOffset: make(map[int64]int),
}
colDatas := make([]*ColumnData, 0, len(columns))

for i, column := range columns {
var columnID int64 = int64(i)
info.columnsOffset[columnID] = i

info.Columns[i] = &model.ColumnInfo{}
info.Columns[i].Name.O = column.Name
info.Columns[i].SetType(column.Type)
info.Columns[i].SetCharset(column.Charset)
info.Columns[i].SetCollate(column.Collation)
info.Columns[i].DefaultValue = column.Default

info.ColumnsFlag[columnID] = new(ColumnFlagType)
*info.ColumnsFlag[columnID] = column.Flag

colDatas = append(colDatas, &ColumnData{ColumnID: columnID, Value: column.Value})
}

return colDatas, info
}
12 changes: 6 additions & 6 deletions cdc/sink/dmlsink/txn/event_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,24 +25,24 @@ import (
func TestGenKeyListCaseInSensitive(t *testing.T) {
t.Parallel()

columns := []*model.Column{
columns, tb := model.Column2ColumnDataForTest([]*model.Column{
{
Value: "XyZ",
Type: mysql.TypeVarchar,
Collation: "utf8_unicode_ci",
},
}
})

first := genKeyList(columns, 0, []int{0}, 1)
first := genKeyList(columns, tb, 0, []int{0}, 1)

columns = []*model.Column{
columns, tb = model.Column2ColumnDataForTest([]*model.Column{
{
Value: "xYZ",
Type: mysql.TypeVarchar,
Collation: "utf8_unicode_ci",
},
}
second := genKeyList(columns, 0, []int{0}, 1)
})
second := genKeyList(columns, tb, 0, []int{0}, 1)

require.Equal(t, first, second)
}
Expand Down
24 changes: 10 additions & 14 deletions cdc/sink/dmlsink/txn/mysql/dml.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,29 +157,25 @@ func prepareDelete(quoteTable string, cols []*model.ColumnData, tb *model.TableI
// whereSlice builds a parametric WHERE clause as following
// sql: `WHERE {} = ? AND {} > ?`
func whereSlice(cols []*model.ColumnData, tb *model.TableInfo, forceReplicate bool) (colNames []string, args []interface{}) {
// If no explicit row id but force replicate, use all key-values in where condition.
// Try to use unique key values when available
for _, col := range cols {
colx := model.GetColumnDataX(col, tb)
if colx.ColumnData == nil || !colx.GetFlag().IsHandleKey() {
continue
}
colNames = append(colNames, colx.GetName())
args = appendQueryArgs(args, colx)
}
// if no explicit row id but force replicate, use all key-values in where condition
if len(colNames) == 0 && forceReplicate {
colNames = make([]string, 0, len(cols))
args = make([]interface{}, 0, len(cols))
for _, col := range cols {
colx := model.GetColumnDataX(col, tb)
if colx.ColumnData == nil {
continue
}
colNames = append(colNames, colx.GetName())
args = appendQueryArgs(args, colx)
}
} else { // Try to use unique key values when available.
for _, col := range cols {
colx := model.GetColumnDataX(col, tb)
if colx.ColumnData == nil || !colx.GetFlag().IsHandleKey() {
continue
}
colNames = append(colNames, colx.GetName())
args = appendQueryArgs(args, colx)
}
}

return
}

Expand Down
17 changes: 11 additions & 6 deletions cdc/sink/dmlsink/txn/mysql/dml_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,9 @@ func TestPrepareUpdate(t *testing.T) {
},
}
for _, tc := range testCases {
query, args := prepareUpdate(tc.quoteTable, tc.preCols, tc.cols, false)
preDatas, info := model.Column2ColumnDataForTest(tc.preCols)
datas, _ := model.Column2ColumnDataForTest(tc.cols)
query, args := prepareUpdate(tc.quoteTable, preDatas, datas, info, false)
require.Equal(t, tc.expectedSQL, query)
require.Equal(t, tc.expectedArgs, args)
}
Expand Down Expand Up @@ -392,7 +394,8 @@ func TestPrepareDelete(t *testing.T) {
},
}
for _, tc := range testCases {
query, args := prepareDelete(tc.quoteTable, tc.preCols, false)
preDatas, info := model.Column2ColumnDataForTest(tc.preCols)
query, args := prepareDelete(tc.quoteTable, preDatas, info, false)
require.Equal(t, tc.expectedSQL, query)
require.Equal(t, tc.expectedArgs, args)
}
Expand Down Expand Up @@ -601,9 +604,10 @@ func TestWhereSlice(t *testing.T) {
expectedArgs: []interface{}{1, "你好", 100},
},
}
for _, tc := range testCases {
colNames, args := whereSlice(tc.cols, tc.forceReplicate)
require.Equal(t, tc.expectedColNames, colNames)
for i, tc := range testCases {
datas, info := model.Column2ColumnDataForTest(tc.cols)
colNames, args := whereSlice(datas, info, tc.forceReplicate)
require.Equal(t, tc.expectedColNames, colNames, "case %d fails", i)
require.Equal(t, tc.expectedArgs, args)
}
}
Expand Down Expand Up @@ -713,7 +717,8 @@ func TestMapReplace(t *testing.T) {
for _, tc := range testCases {
// multiple times to verify the stability of column sequence in query string
for i := 0; i < 10; i++ {
query, args := prepareReplace(tc.quoteTable, tc.cols, false, false)
datas, info := model.Column2ColumnDataForTest(tc.cols)
query, args := prepareReplace(tc.quoteTable, datas, info, false, false)
require.Equal(t, tc.expectedQuery, query)
require.Equal(t, tc.expectedArgs, args)
}
Expand Down

0 comments on commit 6310bce

Please sign in to comment.