Skip to content

Commit d01f447

Browse files
committed
feedback
1 parent 6d16046 commit d01f447

File tree

3 files changed

+20
-17
lines changed

3 files changed

+20
-17
lines changed

replication/row_event.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1341,7 +1341,7 @@ func (e *RowsEvent) decodeValue(data []byte, tp byte, meta uint16, isPartial boo
13411341
hours := int(t / 10000)
13421342
minutes := int((t % 10000) / 100)
13431343
seconds := int(t % 100)
1344-
if months == 0 || days == 0 {
1344+
if !e.parseTime || months == 0 || days == 0 {
13451345
v = fmt.Sprintf("%04d-%02d-%02d %02d:%02d:%02d",
13461346
years, months, days, hours, minutes, seconds)
13471347
} else {
@@ -1361,7 +1361,7 @@ func (e *RowsEvent) decodeValue(data []byte, tp byte, meta uint16, isPartial boo
13611361
}
13621362
}
13631363
case mysql.MYSQL_TYPE_DATETIME2:
1364-
v, n, err = decodeDatetime2(data, meta)
1364+
v, n, err = decodeDatetime2(data, meta, e.parseTime)
13651365
v = e.parseFracTime(v)
13661366
case mysql.MYSQL_TYPE_TIME:
13671367
n = 3
@@ -1686,7 +1686,7 @@ func decodeTimestamp2(data []byte, dec uint16, timestampStringLocation *time.Loc
16861686

16871687
const DATETIMEF_INT_OFS int64 = 0x8000000000
16881688

1689-
func decodeDatetime2(data []byte, dec uint16) (interface{}, int, error) {
1689+
func decodeDatetime2(data []byte, dec uint16, parseTime bool) (interface{}, int, error) {
16901690
// get datetime binary length
16911691
n := int(5 + (dec+1)/2)
16921692

@@ -1736,8 +1736,8 @@ func decodeDatetime2(data []byte, dec uint16) (interface{}, int, error) {
17361736
// minute = 0 = 0b000000
17371737
// second = 0 = 0b000000
17381738
// integer value = 0b1100100000010110000100000000000000000 = 107420450816
1739-
if intPart < 107420450816 || month == 0 || day == 0 {
1740-
return formatBeforeUnixZeroTime(year, month, day, hour, minute, second, int(frac), int(dec)), n, nil
1739+
if !parseTime || intPart < 107420450816 || month == 0 || day == 0 {
1740+
return formatDatetime(year, month, day, hour, minute, second, int(frac), int(dec)), n, nil
17411741
}
17421742

17431743
return fracTime{

replication/row_event_test.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -686,17 +686,20 @@ func TestDecodeDatetime2(t *testing.T) {
686686
{[]byte("\x80\x03\x82\x00\x00\x01\xe2\x40"), uint16(6), false, "0001-01-01 00:00:00.123456"},
687687
}
688688
for _, tc := range testcases {
689-
value, _, err := decodeDatetime2(tc.data, tc.dec)
690-
require.NoError(t, err)
691-
switch v := value.(type) {
692-
case fracTime:
693-
require.True(t, tc.getFracTime)
694-
require.Equal(t, tc.expected, v.String())
695-
case string:
696-
require.False(t, tc.getFracTime)
697-
require.Equal(t, tc.expected, v)
698-
default:
699-
require.FailNow(t, "invalid value type: %T", value)
689+
for _, parseTime := range []bool{true, false} {
690+
value, _, err := decodeDatetime2(tc.data, tc.dec, parseTime)
691+
require.NoError(t, err)
692+
switch v := value.(type) {
693+
case fracTime:
694+
require.True(t, parseTime)
695+
require.True(t, tc.getFracTime)
696+
require.Equal(t, tc.expected, v.String())
697+
case string:
698+
require.False(t, parseTime && tc.getFracTime)
699+
require.Equal(t, tc.expected, v)
700+
default:
701+
require.FailNow(t, "invalid value type: %T", value)
702+
}
700703
}
701704
}
702705
}

replication/time.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func formatZeroTime(frac int, dec int) string {
4444
return s[0 : len(s)-(6-dec)]
4545
}
4646

47-
func formatBeforeUnixZeroTime(year, month, day, hour, minute, second, frac, dec int) string {
47+
func formatDatetime(year, month, day, hour, minute, second, frac, dec int) string {
4848
if dec == 0 {
4949
return fmt.Sprintf("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second)
5050
}

0 commit comments

Comments
 (0)