Skip to content

Commit

Permalink
This is an automated cherry-pick of pingcap#12038
Browse files Browse the repository at this point in the history
Signed-off-by: ti-chi-bot <[email protected]>
  • Loading branch information
wk989898 authored and ti-chi-bot committed Feb 8, 2025
1 parent e150d73 commit 8ea362f
Show file tree
Hide file tree
Showing 11 changed files with 426 additions and 22 deletions.
6 changes: 3 additions & 3 deletions cdc/entry/mounter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1679,13 +1679,13 @@ func TestNewDMRowChange(t *testing.T) {
cdcTableInfo := model.WrapTableInfo(0, "test", 0, originTI)
cols := []*model.Column{
{
Name: "id", Type: 3, Charset: "binary", Flag: 65, Value: 1, Default: nil,
Name: "id", Type: 3, Charset: "binary", Flag: 65, Value: 1,
},
{
Name: "a1", Type: 3, Charset: "binary", Flag: 51, Value: 1, Default: nil,
Name: "a1", Type: 3, Charset: "binary", Flag: 51, Value: 1,
},
{
Name: "a3", Type: 3, Charset: "binary", Flag: 51, Value: 2, Default: nil,
Name: "a3", Type: 3, Charset: "binary", Flag: 51, Value: 2,
},
}
recoveredTI := model.BuildTiDBTableInfo(cdcTableInfo.TableName.Table, cols, cdcTableInfo.IndexColumnsOffset)
Expand Down
1 change: 0 additions & 1 deletion cdc/model/codec/codec.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,6 @@ func columnFromV1(c *codecv1.Column) *model.Column {
Charset: c.Charset,
Flag: c.Flag,
Value: c.Value,
Default: c.Default,
ApproximateBytes: c.ApproximateBytes,
}
}
11 changes: 0 additions & 11 deletions cdc/model/schema_storage.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import (
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/types"
"github.com/pingcap/tidb/pkg/table/tables"
datumTypes "github.com/pingcap/tidb/pkg/types"
"github.com/pingcap/tidb/pkg/util/rowcodec"
"go.uber.org/zap"
)
Expand Down Expand Up @@ -501,13 +500,3 @@ func (ti *TableInfo) GetPrimaryKeyColumnNames() []string {
}
return result
}

// GetColumnDefaultValue returns the default definition of a column.
func GetColumnDefaultValue(col *model.ColumnInfo) interface{} {
defaultValue := col.GetDefaultValue()
if defaultValue == nil {
defaultValue = col.GetOriginDefaultValue()
}
defaultDatum := datumTypes.NewDatum(defaultValue)
return defaultDatum.GetValue()
}
95 changes: 93 additions & 2 deletions cdc/model/sink.go
Original file line number Diff line number Diff line change
Expand Up @@ -479,7 +479,6 @@ func columnData2Column(col *ColumnData, tableInfo *TableInfo) *Column {
Collation: colInfo.GetCollate(),
Flag: tableInfo.ColumnsFlag[colID],
Value: col.Value,
Default: GetColumnDefaultValue(colInfo),
}
}

Expand Down Expand Up @@ -624,7 +623,6 @@ type Column struct {
Collation string `msg:"collation"`
Flag ColumnFlagType `msg:"-"`
Value interface{} `msg:"-"`
Default interface{} `msg:"-"`

// ApproximateBytes is approximate bytes consumed by the column.
ApproximateBytes int `msg:"-"`
Expand Down Expand Up @@ -1292,3 +1290,96 @@ type TopicPartitionKey struct {
PartitionKey string
TotalPartition int32
}
<<<<<<< HEAD
=======

// ColumnDataX is like ColumnData, but contains more informations.
//
//msgp:ignore RowChangedEvent
type ColumnDataX struct {
*ColumnData
flag *ColumnFlagType
info *model.ColumnInfo
}

// GetColumnDataX encapsures ColumnData to ColumnDataX.
func GetColumnDataX(col *ColumnData, tb *TableInfo) ColumnDataX {
x := ColumnDataX{ColumnData: col}
if x.ColumnData != nil {
x.flag = tb.ColumnsFlag[col.ColumnID]
x.info = tb.Columns[tb.columnsOffset[col.ColumnID]]
}
return x
}

// GetName returns name.
func (x ColumnDataX) GetName() string {
return x.info.Name.O
}

// GetType returns type.
func (x ColumnDataX) GetType() byte {
return x.info.GetType()
}

// GetCharset returns charset.
func (x ColumnDataX) GetCharset() string {
return x.info.GetCharset()
}

// GetCollation returns collation.
func (x ColumnDataX) GetCollation() string {
return x.info.GetCollate()
}

// GetFlag returns flag.
func (x ColumnDataX) GetFlag() ColumnFlagType {
return *x.flag
}

// GetDefaultValue return default value.
func (x ColumnDataX) GetDefaultValue() interface{} {
return x.info.GetDefaultValue()
}

// GetColumnInfo returns column info.
func (x ColumnDataX) GetColumnInfo() *model.ColumnInfo {
return x.info
}

// Columns2ColumnDataForTest is for tests.
func Columns2ColumnDataForTest(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.ColumnsFlag[columnID] = new(ColumnFlagType)
*info.ColumnsFlag[columnID] = column.Flag

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

return colDatas, info
}

// Column2ColumnDataXForTest is for tests.
func Column2ColumnDataXForTest(column *Column) ColumnDataX {
datas, info := Columns2ColumnDataForTest([]*Column{column})
return GetColumnDataX(datas[0], info)
}
>>>>>>> 600286c56d (sink(ticdc): fix incorrect `default` field (#12038))
2 changes: 1 addition & 1 deletion pkg/sink/cloudstorage/table_definition.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func (t *TableCol) FromTiColumnInfo(col *timodel.ColumnInfo, outputColumnID bool
if mysql.HasNotNullFlag(col.GetFlag()) {
t.Nullable = "false"
}
t.Default = model.GetColumnDefaultValue(col)
t.Default = col.GetDefaultValue()

switch col.GetType() {
case mysql.TypeTimestamp, mysql.TypeDatetime, mysql.TypeDuration:
Expand Down
6 changes: 6 additions & 0 deletions pkg/sink/codec/debezium/codec.go
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,12 @@ func (c *dbzCodec) writeDebeziumFieldValue(
ft *types.FieldType,
) error {
value := col.Value
<<<<<<< HEAD
=======
if value == nil {
value = col.GetDefaultValue()
}
>>>>>>> 600286c56d (sink(ticdc): fix incorrect `default` field (#12038))
if value == nil {
value = col.Default
}
Expand Down
Loading

0 comments on commit 8ea362f

Please sign in to comment.