Skip to content

Commit

Permalink
Fix enum&set default value
Browse files Browse the repository at this point in the history
  • Loading branch information
july2993 committed Nov 16, 2020
1 parent 91cc776 commit 18393fe
Showing 1 changed file with 45 additions and 0 deletions.
45 changes: 45 additions & 0 deletions drainer/translator/translator.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
package translator

import (
"reflect"
"time"

"github.com/pingcap/errors"
Expand Down Expand Up @@ -82,6 +83,34 @@ func insertRowToDatums(table *model.TableInfo, row []byte) (pk types.Datum, datu
return
}

func getEnumDatum(getCol *model.ColumnInfo) (data types.Datum, err error) {
ivalue := getCol.GetOriginDefaultValue()
switch value := ivalue.(type) {
case string:
enum, err := types.ParseEnumName(getCol.Elems, value, "")
if err != nil {
return types.Datum{}, errors.AddStack(err)
}
return types.NewDatum(enum), nil
}

return types.Datum{}, errors.Errorf("unknown type: %v", reflect.TypeOf(ivalue))
}

func getSetDatum(getCol *model.ColumnInfo) (data types.Datum, err error) {
ivalue := getCol.GetOriginDefaultValue()
switch value := ivalue.(type) {
case string:
enum, err := types.ParseSetName(getCol.Elems, value, "")
if err != nil {
return types.Datum{}, errors.AddStack(err)
}
return types.NewDatum(enum), nil
}

return types.Datum{}, errors.Errorf("unknown type: %v", reflect.TypeOf(ivalue))
}

func transTimestampToLocal(getCol *model.ColumnInfo) (string, error) {
ivalue := getCol.GetOriginDefaultValue()
value, ok := ivalue.(string)
Expand Down Expand Up @@ -120,6 +149,22 @@ func getDefaultOrZeroValue(tableInfo *model.TableInfo, col *model.ColumnInfo) ty
} else {
return types.NewDatum(value)
}
} else if getCol.Tp == mysql.TypeEnum {
data, err := getEnumDatum(getCol)
if err != nil {
log.Warn("failed to get enum datam", zap.Reflect("value", getCol.GetOriginDefaultValue()),
zap.Error(err))
} else {
return data
}
} else if getCol.Tp == mysql.TypeSet {
data, err := getSetDatum(getCol)
if err != nil {
log.Warn("failed to get set datam", zap.Reflect("value", getCol.GetOriginDefaultValue()),
zap.Error(err))
} else {
return data
}
}

return types.NewDatum(getCol.GetOriginDefaultValue())
Expand Down

0 comments on commit 18393fe

Please sign in to comment.