Skip to content

Commit 4090b3f

Browse files
committed
refactor: remove CastRowToStringSafe and improve error handling in CastToString methods
1 parent 2c43bf2 commit 4090b3f

3 files changed

Lines changed: 17 additions & 60 deletions

File tree

core/dbio/iop/datastream.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -321,15 +321,6 @@ func (ds *Datastream) CastRowToString(row []any) []string {
321321
return rowStr
322322
}
323323

324-
// CastRowToStringSafe returns the row as string casted (safer)
325-
func (ds *Datastream) CastRowToStringSafe(row []any) []string {
326-
rowStr := make([]string, len(row))
327-
for i, val := range row {
328-
rowStr[i] = ds.Sp.CastToStringSafe(i, val, ds.Columns[i].Type)
329-
}
330-
return rowStr
331-
}
332-
333324
// CastToStringSafeMask returns the row as string mask casted ( evensafer)
334325
func (ds *Datastream) CastToStringSafeMask(row []any) []string {
335326
rowStr := make([]string, len(row))

core/dbio/iop/datatype_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,16 @@ func TestParseDate(t *testing.T) {
301301
g.P(sp.ParseString(val))
302302
val = `1/17/20`
303303
g.P(sp.ParseString(val))
304+
val = `0001-01-01 00:00:00.000`
305+
valT, err := sp.CastToTime(val)
306+
if assert.NoError(t, err) {
307+
g.P(valT)
308+
g.P(valT.IsZero())
309+
g.P(valT.Format(time.DateTime))
310+
}
311+
val = `0000-00-00 00:00:00.000`
312+
_, err = sp.CastToTime(val)
313+
assert.Error(t, err)
304314
}
305315

306316
func TestParseDecimal(t *testing.T) {

core/dbio/iop/stream_processor.go

Lines changed: 7 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -925,7 +925,7 @@ func (sp *StreamProcessor) CastVal(i int, val interface{}, col *Column) interfac
925925
sVal = cast.ToString(val)
926926
sp.rowChecksum[i] = uint64(len(sVal))
927927
nVal = sVal
928-
} else if dVal.IsZero() || g.In(val, "0000-00-00", "0000-00-00 00:00:00") {
928+
} else if g.In(val, "0000-00-00", "0000-00-00 00:00:00") {
929929
nVal = nil
930930
cs.NullCnt++
931931
sp.rowBlankValCnt++
@@ -1013,15 +1013,15 @@ func (sp *StreamProcessor) CastToString(i int, val interface{}, valType ...Colum
10131013
return cast.ToString(val)
10141014
// return fmt.Sprintf("%v", val)
10151015
case typ.IsDate():
1016-
tVal, _ := sp.CastToTime(val)
1017-
if tVal.IsZero() {
1018-
return ""
1016+
tVal, err := sp.CastToTime(val)
1017+
if err != nil {
1018+
return cast.ToString(val)
10191019
}
10201020
return tVal.Format("2006-01-02")
10211021
case typ.IsDatetime():
1022-
tVal, _ := sp.CastToTime(val)
1023-
if tVal.IsZero() {
1024-
return ""
1022+
tVal, err := sp.CastToTime(val)
1023+
if err != nil {
1024+
return cast.ToString(val)
10251025
} else if sp.Config.DatetimeFormat != "" && strings.ToLower(sp.Config.DatetimeFormat) != "auto" {
10261026
return tVal.Format(sp.Config.DatetimeFormat)
10271027
} else if tVal.Location() == nil {
@@ -1040,48 +1040,6 @@ func (sp *StreamProcessor) CastToString(i int, val interface{}, valType ...Colum
10401040
}
10411041
}
10421042

1043-
// CastToStringSafe to string (safer)
1044-
func (sp *StreamProcessor) CastToStringSafe(i int, val interface{}, valType ...ColumnType) string {
1045-
typ := ColumnType("")
1046-
switch v := val.(type) {
1047-
case time.Time:
1048-
typ = DatetimeType
1049-
default:
1050-
_ = v
1051-
}
1052-
1053-
if len(valType) > 0 {
1054-
typ = valType[0]
1055-
}
1056-
1057-
switch {
1058-
case val == nil:
1059-
return ""
1060-
case sp.Config.BoolAsInt && typ.IsBool():
1061-
switch cast.ToString(val) {
1062-
case "true", "1", "TRUE":
1063-
return "1"
1064-
}
1065-
return "0"
1066-
case typ.IsDecimal() || typ.IsFloat():
1067-
return cast.ToString(val)
1068-
case typ.IsDate():
1069-
tVal, _ := sp.CastToTime(val)
1070-
if tVal.IsZero() {
1071-
return ""
1072-
}
1073-
return tVal.UTC().Format("2006-01-02")
1074-
case typ.IsDatetime():
1075-
tVal, _ := sp.CastToTime(val)
1076-
if tVal.IsZero() {
1077-
return ""
1078-
}
1079-
return tVal.UTC().Format("2006-01-02 15:04:05.999999") + " +00"
1080-
default:
1081-
return cast.ToString(val)
1082-
}
1083-
}
1084-
10851043
// CastToStringSafe to masks to count bytes (even safer)
10861044
func (sp *StreamProcessor) CastToStringSafeMask(i int, val interface{}, valType ...ColumnType) string {
10871045
typ := ColumnType("")
@@ -1155,8 +1113,6 @@ func (sp *StreamProcessor) CastValWithoutStats(i int, val interface{}, typ Colum
11551113
dVal, err := sp.CastToTime(val)
11561114
if err != nil {
11571115
nVal = val // keep string
1158-
} else if dVal.IsZero() {
1159-
nVal = nil
11601116
} else {
11611117
nVal = dVal
11621118
}

0 commit comments

Comments
 (0)