Skip to content

Commit

Permalink
cherry pick pingcap#18428 to release-3.0
Browse files Browse the repository at this point in the history
Signed-off-by: ti-srebot <[email protected]>
  • Loading branch information
dyzsr authored and ti-srebot committed Jul 22, 2020
1 parent 459787a commit 7ff2d8c
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 6 deletions.
17 changes: 11 additions & 6 deletions types/format_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,16 @@ func (s *testTimeSuite) TestStrToDate(c *C) {
{`May 01, 2013`, `%M %d,%Y`, types.FromDate(2013, 5, 1, 0, 0, 0, 0)},
{`a09:30:17`, `a%h:%i:%s`, types.FromDate(0, 0, 0, 9, 30, 17, 0)},
{`09:30:17a`, `%h:%i:%s`, types.FromDate(0, 0, 0, 9, 30, 17, 0)},
<<<<<<< HEAD
{`abc`, `abc`, types.ZeroTime},
=======
{`12:43:24`, `%h:%i:%s`, types.FromDate(0, 0, 0, 0, 43, 24, 0)},
{`abc`, `abc`, types.ZeroCoreTime},
>>>>>>> cc0b6f1... types: fix STR_TO_DATE handling for %h, %r (#18171) (#18428)
{`09`, `%m`, types.FromDate(0, 9, 0, 0, 0, 0, 0)},
{`09`, `%s`, types.FromDate(0, 0, 0, 0, 0, 9, 0)},
{`12:43:24 AM`, `%r`, types.FromDate(0, 0, 0, 12, 43, 24, 0)},
{`12:43:24 AM`, `%r`, types.FromDate(0, 0, 0, 0, 43, 24, 0)},
{`12:43:24 PM`, `%r`, types.FromDate(0, 0, 0, 12, 43, 24, 0)},
{`11:43:24 PM`, `%r`, types.FromDate(0, 0, 0, 23, 43, 24, 0)},
{`00:12:13`, `%T`, types.FromDate(0, 0, 0, 0, 12, 13, 0)},
{`23:59:59`, `%T`, types.FromDate(0, 0, 0, 23, 59, 59, 0)},
Expand Down Expand Up @@ -129,18 +135,17 @@ func (s *testTimeSuite) TestStrToDate(c *C) {
}{
{`04/31/2004`, `%m/%d/%Y`},
{`a09:30:17`, `%h:%i:%s`}, // format mismatch
{`12:43:24 PM`, `%r`},
{`12:43:24`, `%r`}, // no PM or AM followed
{`23:60:12`, `%T`}, // invalid minute
{`12:43:24`, `%r`}, // no PM or AM followed
{`23:60:12`, `%T`}, // invalid minute
{`18`, `%l`},
{`00:21:22 AM`, `%h:%i:%s %p`},
{`100/10/22`, `%y/%m/%d`},
{"2010-11-12 11 am", `%Y-%m-%d %H %p`},
{"2010-11-12 13 am", `%Y-%m-%d %h %p`},
{"2010-11-12 0 am", `%Y-%m-%d %h %p`},
}
for _, tt := range errTests {
for i, tt := range errTests {
var t types.Time
c.Assert(t.StrToDate(sc, tt.input, tt.format), IsFalse)
c.Assert(t.StrToDate(sc, tt.input, tt.format), IsFalse, Commentf("no.%d failed", i))
}
}
13 changes: 13 additions & 0 deletions types/time.go
Original file line number Diff line number Diff line change
Expand Up @@ -2190,6 +2190,10 @@ func mysqlTimeFix(t *MysqlTime, ctx map[string]int) error {
if valueAMorPm == constForPM {
t.hour += 12
}
} else {
if _, ok := ctx["%h"]; ok && t.Hour() == 12 {
t.setHour(0)
}
}
return nil
}
Expand Down Expand Up @@ -2405,6 +2409,10 @@ func time12Hour(t *MysqlTime, input string, ctx map[string]int) (string, bool) {
if !succ || hour > 12 || hour == 0 || input[2] != ':' {
return input, false
}
// 12:34:56 AM -> 00:34:56
if hour == 12 {
hour = 0
}

minute, succ := parseDigits(input[3:], 2)
if !succ || minute > 59 || input[5] != ':' {
Expand Down Expand Up @@ -2549,7 +2557,12 @@ func hour12Numeric(t *MysqlTime, input string, ctx map[string]int) (string, bool
if !ok || v > 12 || v == 0 {
return input, false
}
<<<<<<< HEAD
t.hour = v
=======
t.setHour(uint8(v))
ctx["%h"] = v
>>>>>>> cc0b6f1... types: fix STR_TO_DATE handling for %h, %r (#18171) (#18428)
return input[length:], true
}

Expand Down

0 comments on commit 7ff2d8c

Please sign in to comment.