Skip to content

Commit 13d123b

Browse files
authored
Merge pull request #529 from hamburgerbox/master
fix a bug that values of time(1),time(3),time(5) will generate 00:00:00
2 parents a18ba90 + d2d9bcb commit 13d123b

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

replication/row_event.go

+10-8
Original file line numberDiff line numberDiff line change
@@ -1410,11 +1410,10 @@ func decodeTime2(data []byte, dec uint16) (string, int, error) {
14101410
intPart := int64(0)
14111411
frac := int64(0)
14121412
switch dec {
1413-
case 1:
1414-
case 2:
1413+
case 1, 2:
14151414
intPart = int64(BFixedLengthInt(data[0:3])) - TIMEF_INT_OFS
14161415
frac = int64(data[3])
1417-
if intPart < 0 && frac > 0 {
1416+
if intPart < 0 && frac != 0 {
14181417
/*
14191418
Negative values are stored with reverse fractional part order,
14201419
for binary sort compatibility.
@@ -1436,11 +1435,10 @@ func decodeTime2(data []byte, dec uint16) (string, int, error) {
14361435
frac -= 0x100 /* -(0x100 - frac) */
14371436
}
14381437
tmp = intPart<<24 + frac*10000
1439-
case 3:
1440-
case 4:
1438+
case 3, 4:
14411439
intPart = int64(BFixedLengthInt(data[0:3])) - TIMEF_INT_OFS
14421440
frac = int64(binary.BigEndian.Uint16(data[3:5]))
1443-
if intPart < 0 && frac > 0 {
1441+
if intPart < 0 && frac != 0 {
14441442
/*
14451443
Fix reverse fractional part order: "0x10000 - frac".
14461444
See comments for FSP=1 and FSP=2 above.
@@ -1450,9 +1448,9 @@ func decodeTime2(data []byte, dec uint16) (string, int, error) {
14501448
}
14511449
tmp = intPart<<24 + frac*100
14521450

1453-
case 5:
1454-
case 6:
1451+
case 5, 6:
14551452
tmp = int64(BFixedLengthInt(data[0:6])) - TIMEF_OFS
1453+
return timeFormat(tmp, n)
14561454
default:
14571455
intPart = int64(BFixedLengthInt(data[0:3])) - TIMEF_INT_OFS
14581456
tmp = intPart << 24
@@ -1462,6 +1460,10 @@ func decodeTime2(data []byte, dec uint16) (string, int, error) {
14621460
return "00:00:00", n, nil
14631461
}
14641462

1463+
return timeFormat(tmp, n)
1464+
}
1465+
1466+
func timeFormat(tmp int64, n int) (string, int, error) {
14651467
hms := int64(0)
14661468
sign := ""
14671469
if tmp < 0 {

0 commit comments

Comments
 (0)