Skip to content

Commit d50b6b6

Browse files
committed
mysql: map 00 day/month to 01
1 parent 4d6dc24 commit d50b6b6

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

flow/connectors/mysql/qvalue_convert.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ func QValueFromMysqlFieldValue(qkind types.QValueKind, mytype byte, fv mysql.Fie
316316
if strings.HasPrefix(unsafeString, "0000-00-00") {
317317
return types.QValueTimestamp{Val: time.Unix(0, 0)}, nil
318318
}
319-
val, err := time.Parse("2006-01-02 15:04:05.999999", unsafeString)
319+
val, err := time.Parse("2006-01-02 15:04:05.999999", strings.ReplaceAll(unsafeString, "-00", "-01"))
320320
if err != nil {
321321
return nil, err
322322
}
@@ -334,7 +334,7 @@ func QValueFromMysqlFieldValue(qkind types.QValueKind, mytype byte, fv mysql.Fie
334334
if unsafeString == "0000-00-00" {
335335
return types.QValueDate{Val: time.Unix(0, 0)}, nil
336336
}
337-
val, err := time.Parse(time.DateOnly, unsafeString)
337+
val, err := time.Parse(time.DateOnly, strings.ReplaceAll(unsafeString, "-00", "-01"))
338338
if err != nil {
339339
return nil, err
340340
}
@@ -469,13 +469,13 @@ func QValueFromMysqlRowEvent(
469469
return types.QValueTime{Val: tm}, nil
470470
case types.QValueKindDate:
471471
if val == "0000-00-00" {
472-
return types.QValueDate{Val: time.Unix(0, 0)}, nil
472+
return types.QValueDate{Val: time.Unix(0, 0).UTC()}, nil
473473
}
474-
val, err := time.Parse(time.DateOnly, val)
474+
val, err := time.Parse(time.DateOnly, strings.ReplaceAll(val, "-00", "-01"))
475475
if err != nil {
476476
return nil, err
477477
}
478-
return types.QValueDate{Val: val}, nil
478+
return types.QValueDate{Val: val.UTC()}, nil
479479
case types.QValueKindTimestamp: // 0000-00-00 ends up here
480480
if mytype == mysql.MYSQL_TYPE_TIME || mytype == mysql.MYSQL_TYPE_TIME2 {
481481
tm, err := processTime(val)
@@ -485,13 +485,13 @@ func QValueFromMysqlRowEvent(
485485
return types.QValueTimestamp{Val: time.Unix(0, 0).UTC().Add(tm)}, nil
486486
}
487487
if strings.HasPrefix(val, "0000-00-00") {
488-
return types.QValueTimestamp{Val: time.Unix(0, 0)}, nil
488+
return types.QValueTimestamp{Val: time.Unix(0, 0).UTC()}, nil
489489
}
490-
tm, err := time.Parse("2006-01-02 15:04:05.999999", val)
490+
tm, err := time.Parse("2006-01-02 15:04:05.999999", strings.ReplaceAll(val, "-00", "-01"))
491491
if err != nil {
492492
return nil, err
493493
}
494-
return types.QValueTimestamp{Val: tm}, nil
494+
return types.QValueTimestamp{Val: tm.UTC()}, nil
495495
}
496496
}
497497
return nil, fmt.Errorf("unexpected type %T for mysql type %d, qkind %s", val, mytype, qkind)

flow/e2e/clickhouse/mysql_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ func (s ClickHouseSuite) Test_MySQL_Time() {
8888
require.NoError(s.t, s.source.Exec(s.t.Context(), fmt.Sprintf(`INSERT INTO %s ("key",d,dt,tm,t) VALUES
8989
('init','1935-01-01','1953-02-02 12:01:02','1973-02-02 13:01:02.123','14:21.654321'),
9090
('init','0000-00-00','0000-00-00 00:00:00','0000-00-00 00:00:00.000','00:00'),
91-
('init','0000-00-00','0000-00-00 00:00:00','0000-00-00 00:00:00.000','-800:0:1')`,
91+
('init','2000-01-00','2000-00-01 00:00:00','2000-01-01 00:00:00.000','-800:0:1')`,
9292
quotedSrcFullName)))
9393

9494
connectionGen := e2e.FlowConnectionGenerationConfig{
@@ -108,7 +108,7 @@ func (s ClickHouseSuite) Test_MySQL_Time() {
108108
require.NoError(s.t, s.source.Exec(s.t.Context(), fmt.Sprintf(`INSERT INTO %s ("key",d,dt,tm,t) VALUES
109109
('cdc','1935-01-01','1953-02-02 12:01:02','1973-02-02 13:01:02.123','14:21.654321'),
110110
('cdc','0000-00-00','0000-00-00 00:00:00','0000-00-00 00:00:00.000','00:00'),
111-
('cdc','0000-00-00','0000-00-00 00:00:00','0000-00-00 00:00:00.000','-800:0:1')`,
111+
('cdc','2000-01-00','2000-00-01 00:00:00','2000-01-01 00:00:00.000','-800:0:1')`,
112112
quotedSrcFullName)))
113113

114114
e2e.EnvWaitForEqualTablesWithNames(env, s, "waiting on cdc", srcTableName, dstTableName, "id,\"key\",d,dt,tm,t")

0 commit comments

Comments
 (0)