Skip to content

Commit c0ec81b

Browse files
authored
*: fix a timezone data race which may cause wrong row data (#41146) (#41182)
close #40710
1 parent 00c7ffc commit c0ec81b

28 files changed

+120
-109
lines changed

br/pkg/task/backup.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -543,7 +543,7 @@ func ParseTSString(ts string) (uint64, error) {
543543
sc := &stmtctx.StatementContext{
544544
TimeZone: loc,
545545
}
546-
t, err := types.ParseTime(sc, ts, mysql.TypeTimestamp, types.MaxFsp)
546+
t, err := types.ParseTime(sc, ts, mysql.TypeTimestamp, types.MaxFsp, nil)
547547
if err != nil {
548548
return 0, errors.Trace(err)
549549
}

ddl/ddl_api.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -820,7 +820,7 @@ func checkColumnDefaultValue(ctx sessionctx.Context, col *table.Column, value in
820820
if value != nil && ctx.GetSessionVars().SQLMode.HasNoZeroDateMode() &&
821821
ctx.GetSessionVars().SQLMode.HasStrictMode() && types.IsTypeTime(col.GetType()) {
822822
if vv, ok := value.(string); ok {
823-
timeValue, err := expression.GetTimeValue(ctx, vv, col.GetType(), col.GetDecimal())
823+
timeValue, err := expression.GetTimeValue(ctx, vv, col.GetType(), col.GetDecimal(), nil)
824824
if err != nil {
825825
return hasDefaultValue, value, errors.Trace(err)
826826
}
@@ -845,7 +845,7 @@ func convertTimestampDefaultValToUTC(ctx sessionctx.Context, defaultVal interfac
845845
}
846846
if vv, ok := defaultVal.(string); ok {
847847
if vv != types.ZeroDatetimeStr && !strings.EqualFold(vv, ast.CurrentTimestamp) {
848-
t, err := types.ParseTime(ctx.GetSessionVars().StmtCtx, vv, col.GetType(), col.GetDecimal())
848+
t, err := types.ParseTime(ctx.GetSessionVars().StmtCtx, vv, col.GetType(), col.GetDecimal(), nil)
849849
if err != nil {
850850
return defaultVal, errors.Trace(err)
851851
}
@@ -1093,7 +1093,7 @@ func getDefaultValue(ctx sessionctx.Context, col *table.Column, option *ast.Colu
10931093
}
10941094

10951095
if tp == mysql.TypeTimestamp || tp == mysql.TypeDatetime {
1096-
vd, err := expression.GetTimeValue(ctx, option.Expr, tp, fsp)
1096+
vd, err := expression.GetTimeValue(ctx, option.Expr, tp, fsp, nil)
10971097
value := vd.GetValue()
10981098
if err != nil {
10991099
return nil, false, dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O)

executor/brie.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ func (bq *brieQueue) clearTask(sc *stmtctx.StatementContext) {
188188

189189
func (b *executorBuilder) parseTSString(ts string) (uint64, error) {
190190
sc := &stmtctx.StatementContext{TimeZone: b.ctx.GetSessionVars().Location()}
191-
t, err := types.ParseTime(sc, ts, mysql.TypeTimestamp, types.MaxFsp)
191+
t, err := types.ParseTime(sc, ts, mysql.TypeTimestamp, types.MaxFsp, nil)
192192
if err != nil {
193193
return 0, err
194194
}

executor/executor_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -2497,7 +2497,7 @@ func TestTimestampDefaultValueTimeZone(t *testing.T) {
24972497
tk.MustExec(`set time_zone = '+00:00'`)
24982498
timeIn0 := tk.MustQuery("select b from t").Rows()[0][0]
24992499
require.NotEqual(t, timeIn8, timeIn0)
2500-
datumTimeIn8, err := expression.GetTimeValue(tk.Session(), timeIn8, mysql.TypeTimestamp, 0)
2500+
datumTimeIn8, err := expression.GetTimeValue(tk.Session(), timeIn8, mysql.TypeTimestamp, 0, nil)
25012501
require.NoError(t, err)
25022502
tIn8To0 := datumTimeIn8.GetMysqlTime()
25032503
timeZoneIn8, err := time.LoadLocation("Asia/Shanghai")

executor/inspection_result_test.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ func TestInspectionResult(t *testing.T) {
181181
}
182182

183183
func parseTime(t *testing.T, se session.Session, str string) types.Time {
184-
time, err := types.ParseTime(se.GetSessionVars().StmtCtx, str, mysql.TypeDatetime, types.MaxFsp)
184+
time, err := types.ParseTime(se.GetSessionVars().StmtCtx, str, mysql.TypeDatetime, types.MaxFsp, nil)
185185
require.NoError(t, err)
186186
return time
187187
}
@@ -342,7 +342,7 @@ func TestThresholdCheckInspection2(t *testing.T) {
342342
tk := testkit.NewTestKit(t, store)
343343
tk.MustExec("use test")
344344
datetime := func(s string) types.Time {
345-
time, err := types.ParseTime(tk.Session().GetSessionVars().StmtCtx, s, mysql.TypeDatetime, types.MaxFsp)
345+
time, err := types.ParseTime(tk.Session().GetSessionVars().StmtCtx, s, mysql.TypeDatetime, types.MaxFsp, nil)
346346
require.NoError(t, err)
347347
return time
348348
}
@@ -427,7 +427,7 @@ func TestThresholdCheckInspection3(t *testing.T) {
427427
tk := testkit.NewTestKit(t, store)
428428
tk.MustExec("use test")
429429
datetime := func(s string) types.Time {
430-
time, err := types.ParseTime(tk.Session().GetSessionVars().StmtCtx, s, mysql.TypeDatetime, types.MaxFsp)
430+
time, err := types.ParseTime(tk.Session().GetSessionVars().StmtCtx, s, mysql.TypeDatetime, types.MaxFsp, nil)
431431
require.NoError(t, err)
432432
return time
433433
}
@@ -638,7 +638,7 @@ func TestNodeLoadInspection(t *testing.T) {
638638
tk := testkit.NewTestKit(t, store)
639639
tk.MustExec("use test")
640640
datetime := func(s string) types.Time {
641-
time, err := types.ParseTime(tk.Session().GetSessionVars().StmtCtx, s, mysql.TypeDatetime, types.MaxFsp)
641+
time, err := types.ParseTime(tk.Session().GetSessionVars().StmtCtx, s, mysql.TypeDatetime, types.MaxFsp, nil)
642642
require.NoError(t, err)
643643
return time
644644
}
@@ -716,7 +716,7 @@ func TestConfigCheckOfStorageBlockCacheSize(t *testing.T) {
716716
tk := testkit.NewTestKit(t, store)
717717
tk.MustExec("use test")
718718
datetime := func(s string) types.Time {
719-
time, err := types.ParseTime(tk.Session().GetSessionVars().StmtCtx, s, mysql.TypeDatetime, types.MaxFsp)
719+
time, err := types.ParseTime(tk.Session().GetSessionVars().StmtCtx, s, mysql.TypeDatetime, types.MaxFsp, nil)
720720
require.NoError(t, err)
721721
return time
722722
}

executor/inspection_summary_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func TestInspectionSummary(t *testing.T) {
5252
defer func() { require.NoError(t, failpoint.Disable(fpName)) }()
5353

5454
datetime := func(s string) types.Time {
55-
time, err := types.ParseTime(tk.Session().GetSessionVars().StmtCtx, s, mysql.TypeDatetime, types.MaxFsp)
55+
time, err := types.ParseTime(tk.Session().GetSessionVars().StmtCtx, s, mysql.TypeDatetime, types.MaxFsp, nil)
5656
require.NoError(t, err)
5757
return time
5858
}

executor/write.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func updateRecord(ctx context.Context, sctx sessionctx.Context, h kv.Handle, old
133133
// Fill values into on-update-now fields, only if they are really changed.
134134
for i, col := range t.Cols() {
135135
if mysql.HasOnUpdateNowFlag(col.GetFlag()) && !modified[i] && !onUpdateSpecified[i] {
136-
if v, err := expression.GetTimeValue(sctx, strings.ToUpper(ast.CurrentTimestamp), col.GetType(), col.GetDecimal()); err == nil {
136+
if v, err := expression.GetTimeValue(sctx, strings.ToUpper(ast.CurrentTimestamp), col.GetType(), col.GetDecimal(), nil); err == nil {
137137
newData[i] = v
138138
modified[i] = true
139139
} else {

expression/builtin_cast.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -890,7 +890,7 @@ func (b *builtinCastRealAsTimeSig) evalTime(row chunk.Row) (types.Time, bool, er
890890
return types.ZeroTime, false, nil
891891
}
892892
sc := b.ctx.GetSessionVars().StmtCtx
893-
res, err := types.ParseTime(sc, fv, b.tp.GetType(), b.tp.GetDecimal())
893+
res, err := types.ParseTime(sc, fv, b.tp.GetType(), b.tp.GetDecimal(), nil)
894894
if err != nil {
895895
return types.ZeroTime, true, handleInvalidTimeError(b.ctx, err)
896896
}
@@ -1288,7 +1288,7 @@ func (b *builtinCastStringAsTimeSig) evalTime(row chunk.Row) (res types.Time, is
12881288
return res, isNull, err
12891289
}
12901290
sc := b.ctx.GetSessionVars().StmtCtx
1291-
res, err = types.ParseTime(sc, val, b.tp.GetType(), b.tp.GetDecimal())
1291+
res, err = types.ParseTime(sc, val, b.tp.GetType(), b.tp.GetDecimal(), nil)
12921292
if err != nil {
12931293
return types.ZeroTime, true, handleInvalidTimeError(b.ctx, err)
12941294
}
@@ -1734,7 +1734,7 @@ func (b *builtinCastJSONAsTimeSig) evalTime(row chunk.Row) (res types.Time, isNu
17341734
return res, false, err
17351735
}
17361736
sc := b.ctx.GetSessionVars().StmtCtx
1737-
res, err = types.ParseTime(sc, s, b.tp.GetType(), b.tp.GetDecimal())
1737+
res, err = types.ParseTime(sc, s, b.tp.GetType(), b.tp.GetDecimal(), nil)
17381738
if err != nil {
17391739
return types.ZeroTime, true, handleInvalidTimeError(b.ctx, err)
17401740
}

expression/builtin_cast_vec.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ func (b *builtinCastJSONAsTimeSig) vecEvalTime(input *chunk.Chunk, result *chunk
492492
if err != nil {
493493
return err
494494
}
495-
tm, err := types.ParseTime(stmtCtx, s, b.tp.GetType(), fsp)
495+
tm, err := types.ParseTime(stmtCtx, s, b.tp.GetType(), fsp, nil)
496496
if err != nil {
497497
if err = handleInvalidTimeError(b.ctx, err); err != nil {
498498
return err
@@ -539,7 +539,7 @@ func (b *builtinCastRealAsTimeSig) vecEvalTime(input *chunk.Chunk, result *chunk
539539
times[i] = types.ZeroTime
540540
continue
541541
}
542-
tm, err := types.ParseTime(stmt, fv, b.tp.GetType(), fsp)
542+
tm, err := types.ParseTime(stmt, fv, b.tp.GetType(), fsp, nil)
543543
if err != nil {
544544
if err = handleInvalidTimeError(b.ctx, err); err != nil {
545545
return err
@@ -1692,7 +1692,7 @@ func (b *builtinCastStringAsTimeSig) vecEvalTime(input *chunk.Chunk, result *chu
16921692
if result.IsNull(i) {
16931693
continue
16941694
}
1695-
tm, err := types.ParseTime(stmtCtx, buf.GetString(i), b.tp.GetType(), fsp)
1695+
tm, err := types.ParseTime(stmtCtx, buf.GetString(i), b.tp.GetType(), fsp, nil)
16961696
if err != nil {
16971697
if err = handleInvalidTimeError(b.ctx, err); err != nil {
16981698
return err

expression/builtin_time.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -2778,7 +2778,7 @@ func (du *baseDateArithmetical) getDateFromString(ctx sessionctx.Context, args [
27782778
}
27792779

27802780
sc := ctx.GetSessionVars().StmtCtx
2781-
date, err := types.ParseTime(sc, dateStr, dateTp, types.MaxFsp)
2781+
date, err := types.ParseTime(sc, dateStr, dateTp, types.MaxFsp, nil)
27822782
if err != nil {
27832783
err = handleInvalidTimeError(ctx, err)
27842784
if err != nil {
@@ -3057,7 +3057,7 @@ func (du *baseDateArithmetical) vecGetDateFromString(b *baseBuiltinFunc, input *
30573057
dateTp = mysql.TypeDatetime
30583058
}
30593059

3060-
date, err := types.ParseTime(sc, dateStr, dateTp, types.MaxFsp)
3060+
date, err := types.ParseTime(sc, dateStr, dateTp, types.MaxFsp, nil)
30613061
if err != nil {
30623062
err = handleInvalidTimeError(b.ctx, err)
30633063
if err != nil {
@@ -5175,7 +5175,7 @@ func (b *builtinTimestamp1ArgSig) evalTime(row chunk.Row) (types.Time, bool, err
51755175
if b.isFloat {
51765176
tm, err = types.ParseTimeFromFloatString(sc, s, mysql.TypeDatetime, types.GetFsp(s))
51775177
} else {
5178-
tm, err = types.ParseTime(sc, s, mysql.TypeDatetime, types.GetFsp(s))
5178+
tm, err = types.ParseTime(sc, s, mysql.TypeDatetime, types.GetFsp(s), nil)
51795179
}
51805180
if err != nil {
51815181
return types.ZeroTime, true, handleInvalidTimeError(b.ctx, err)
@@ -5207,7 +5207,7 @@ func (b *builtinTimestamp2ArgsSig) evalTime(row chunk.Row) (types.Time, bool, er
52075207
if b.isFloat {
52085208
tm, err = types.ParseTimeFromFloatString(sc, arg0, mysql.TypeDatetime, types.GetFsp(arg0))
52095209
} else {
5210-
tm, err = types.ParseTime(sc, arg0, mysql.TypeDatetime, types.GetFsp(arg0))
5210+
tm, err = types.ParseTime(sc, arg0, mysql.TypeDatetime, types.GetFsp(arg0), nil)
52115211
}
52125212
if err != nil {
52135213
return types.ZeroTime, true, handleInvalidTimeError(b.ctx, err)
@@ -5258,7 +5258,7 @@ func (c *timestampLiteralFunctionClass) getFunction(ctx sessionctx.Context, args
52585258
if !timestampPattern.MatchString(str) {
52595259
return nil, types.ErrWrongValue.GenWithStackByArgs(types.DateTimeStr, str)
52605260
}
5261-
tm, err := types.ParseTime(ctx.GetSessionVars().StmtCtx, str, mysql.TypeDatetime, types.GetFsp(str))
5261+
tm, err := types.ParseTime(ctx.GetSessionVars().StmtCtx, str, mysql.TypeDatetime, types.GetFsp(str), nil)
52625262
if err != nil {
52635263
return nil, err
52645264
}
@@ -5366,7 +5366,7 @@ func isDuration(str string) bool {
53665366

53675367
// strDatetimeAddDuration adds duration to datetime string, returns a string value.
53685368
func strDatetimeAddDuration(sc *stmtctx.StatementContext, d string, arg1 types.Duration) (result string, isNull bool, err error) {
5369-
arg0, err := types.ParseTime(sc, d, mysql.TypeDatetime, types.MaxFsp)
5369+
arg0, err := types.ParseTime(sc, d, mysql.TypeDatetime, types.MaxFsp, nil)
53705370
if err != nil {
53715371
// Return a warning regardless of the sql_mode, this is compatible with MySQL.
53725372
sc.AppendWarning(err)
@@ -5403,7 +5403,7 @@ func strDurationAddDuration(sc *stmtctx.StatementContext, d string, arg1 types.D
54035403

54045404
// strDatetimeSubDuration subtracts duration from datetime string, returns a string value.
54055405
func strDatetimeSubDuration(sc *stmtctx.StatementContext, d string, arg1 types.Duration) (result string, isNull bool, err error) {
5406-
arg0, err := types.ParseTime(sc, d, mysql.TypeDatetime, types.MaxFsp)
5406+
arg0, err := types.ParseTime(sc, d, mysql.TypeDatetime, types.MaxFsp, nil)
54075407
if err != nil {
54085408
// Return a warning regardless of the sql_mode, this is compatible with MySQL.
54095409
sc.AppendWarning(err)

expression/builtin_time_vec.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -2669,7 +2669,7 @@ func (b *builtinTimestamp1ArgSig) vecEvalTime(input *chunk.Chunk, result *chunk.
26692669
if b.isFloat {
26702670
tm, err = types.ParseTimeFromFloatString(sc, s, mysql.TypeDatetime, types.GetFsp(s))
26712671
} else {
2672-
tm, err = types.ParseTime(sc, s, mysql.TypeDatetime, types.GetFsp(s))
2672+
tm, err = types.ParseTime(sc, s, mysql.TypeDatetime, types.GetFsp(s), nil)
26732673
}
26742674
if err != nil {
26752675
if err = handleInvalidTimeError(b.ctx, err); err != nil {
@@ -2722,7 +2722,7 @@ func (b *builtinTimestamp2ArgsSig) vecEvalTime(input *chunk.Chunk, result *chunk
27222722
if b.isFloat {
27232723
tm, err = types.ParseTimeFromFloatString(sc, arg0, mysql.TypeDatetime, types.GetFsp(arg0))
27242724
} else {
2725-
tm, err = types.ParseTime(sc, arg0, mysql.TypeDatetime, types.GetFsp(arg0))
2725+
tm, err = types.ParseTime(sc, arg0, mysql.TypeDatetime, types.GetFsp(arg0), nil)
27262726
}
27272727
if err != nil {
27282728
if err = handleInvalidTimeError(b.ctx, err); err != nil {

expression/helper.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func getTimeCurrentTimeStamp(ctx sessionctx.Context, tp byte, fsp int) (t types.
8484
}
8585

8686
// GetTimeValue gets the time value with type tp.
87-
func GetTimeValue(ctx sessionctx.Context, v interface{}, tp byte, fsp int) (d types.Datum, err error) {
87+
func GetTimeValue(ctx sessionctx.Context, v interface{}, tp byte, fsp int, explicitTz *time.Location) (d types.Datum, err error) {
8888
var value types.Time
8989

9090
sc := ctx.GetSessionVars().StmtCtx
@@ -99,15 +99,15 @@ func GetTimeValue(ctx sessionctx.Context, v interface{}, tp byte, fsp int) (d ty
9999
value, err = types.ParseTimeFromNum(sc, 0, tp, fsp)
100100
terror.Log(err)
101101
} else {
102-
value, err = types.ParseTime(sc, x, tp, fsp)
102+
value, err = types.ParseTime(sc, x, tp, fsp, explicitTz)
103103
if err != nil {
104104
return d, err
105105
}
106106
}
107107
case *driver.ValueExpr:
108108
switch x.Kind() {
109109
case types.KindString:
110-
value, err = types.ParseTime(sc, x.GetString(), tp, fsp)
110+
value, err = types.ParseTime(sc, x.GetString(), tp, fsp, nil)
111111
if err != nil {
112112
return d, err
113113
}

expression/helper_test.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import (
3434

3535
func TestGetTimeValue(t *testing.T) {
3636
ctx := mock.NewContext()
37-
v, err := GetTimeValue(ctx, "2012-12-12 00:00:00", mysql.TypeTimestamp, types.MinFsp)
37+
v, err := GetTimeValue(ctx, "2012-12-12 00:00:00", mysql.TypeTimestamp, types.MinFsp, nil)
3838
require.NoError(t, err)
3939

4040
require.Equal(t, types.KindMysqlTime, v.Kind())
@@ -44,7 +44,7 @@ func TestGetTimeValue(t *testing.T) {
4444
sessionVars := ctx.GetSessionVars()
4545
err = variable.SetSessionSystemVar(sessionVars, "timestamp", "0")
4646
require.NoError(t, err)
47-
v, err = GetTimeValue(ctx, "2012-12-12 00:00:00", mysql.TypeTimestamp, types.MinFsp)
47+
v, err = GetTimeValue(ctx, "2012-12-12 00:00:00", mysql.TypeTimestamp, types.MinFsp, nil)
4848
require.NoError(t, err)
4949

5050
require.Equal(t, types.KindMysqlTime, v.Kind())
@@ -53,7 +53,7 @@ func TestGetTimeValue(t *testing.T) {
5353

5454
err = variable.SetSessionSystemVar(sessionVars, "timestamp", "0")
5555
require.NoError(t, err)
56-
v, err = GetTimeValue(ctx, "2012-12-12 00:00:00", mysql.TypeTimestamp, types.MinFsp)
56+
v, err = GetTimeValue(ctx, "2012-12-12 00:00:00", mysql.TypeTimestamp, types.MinFsp, nil)
5757
require.NoError(t, err)
5858

5959
require.Equal(t, types.KindMysqlTime, v.Kind())
@@ -62,7 +62,7 @@ func TestGetTimeValue(t *testing.T) {
6262

6363
err = variable.SetSessionSystemVar(sessionVars, "timestamp", "")
6464
require.Error(t, err, "Incorrect argument type to variable 'timestamp'")
65-
v, err = GetTimeValue(ctx, "2012-12-12 00:00:00", mysql.TypeTimestamp, types.MinFsp)
65+
v, err = GetTimeValue(ctx, "2012-12-12 00:00:00", mysql.TypeTimestamp, types.MinFsp, nil)
6666
require.NoError(t, err)
6767

6868
require.Equal(t, types.KindMysqlTime, v.Kind())
@@ -100,7 +100,7 @@ func TestGetTimeValue(t *testing.T) {
100100

101101
for i, tbl := range tbls {
102102
comment := fmt.Sprintf("expr: %d", i)
103-
v, err := GetTimeValue(ctx, tbl.Expr, mysql.TypeTimestamp, types.MinFsp)
103+
v, err := GetTimeValue(ctx, tbl.Expr, mysql.TypeTimestamp, types.MinFsp, nil)
104104
require.NoError(t, err)
105105

106106
switch v.Kind() {
@@ -122,7 +122,7 @@ func TestGetTimeValue(t *testing.T) {
122122
}
123123

124124
for _, tbl := range errTbl {
125-
_, err := GetTimeValue(ctx, tbl.Expr, mysql.TypeTimestamp, types.MinFsp)
125+
_, err := GetTimeValue(ctx, tbl.Expr, mysql.TypeTimestamp, types.MinFsp, nil)
126126
require.Error(t, err)
127127
}
128128
}
@@ -165,7 +165,7 @@ func TestCurrentTimestampTimeZone(t *testing.T) {
165165
require.NoError(t, err)
166166
err = variable.SetSessionSystemVar(sessionVars, "time_zone", "+00:00")
167167
require.NoError(t, err)
168-
v, err := GetTimeValue(ctx, ast.CurrentTimestamp, mysql.TypeTimestamp, types.MinFsp)
168+
v, err := GetTimeValue(ctx, ast.CurrentTimestamp, mysql.TypeTimestamp, types.MinFsp, nil)
169169
require.NoError(t, err)
170170
require.EqualValues(t, types.NewTime(
171171
types.FromDate(1970, 1, 1, 0, 20, 34, 0),
@@ -176,7 +176,7 @@ func TestCurrentTimestampTimeZone(t *testing.T) {
176176
// would get different value.
177177
err = variable.SetSessionSystemVar(sessionVars, "time_zone", "+08:00")
178178
require.NoError(t, err)
179-
v, err = GetTimeValue(ctx, ast.CurrentTimestamp, mysql.TypeTimestamp, types.MinFsp)
179+
v, err = GetTimeValue(ctx, ast.CurrentTimestamp, mysql.TypeTimestamp, types.MinFsp, nil)
180180
require.NoError(t, err)
181181
require.EqualValues(t, types.NewTime(
182182
types.FromDate(1970, 1, 1, 8, 20, 34, 0),

planner/core/expression_rewriter.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -2045,7 +2045,7 @@ func (er *expressionRewriter) evalDefaultExpr(v *ast.DefaultExpr) {
20452045
var val *expression.Constant
20462046
switch {
20472047
case isCurrentTimestamp && (col.GetType() == mysql.TypeDatetime || col.GetType() == mysql.TypeTimestamp):
2048-
t, err := expression.GetTimeValue(er.sctx, ast.CurrentTimestamp, col.GetType(), col.GetDecimal())
2048+
t, err := expression.GetTimeValue(er.sctx, ast.CurrentTimestamp, col.GetType(), col.GetDecimal(), nil)
20492049
if err != nil {
20502050
return
20512051
}

server/statistics_handler.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func (sh StatsHistoryHandler) ServeHTTP(w http.ResponseWriter, req *http.Request
9696
defer se.Close()
9797

9898
se.GetSessionVars().StmtCtx.TimeZone = time.Local
99-
t, err := types.ParseTime(se.GetSessionVars().StmtCtx, params[pSnapshot], mysql.TypeTimestamp, 6)
99+
t, err := types.ParseTime(se.GetSessionVars().StmtCtx, params[pSnapshot], mysql.TypeTimestamp, 6, nil)
100100
if err != nil {
101101
writeError(w, err)
102102
return

server/util_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ func TestDumpTextValue(t *testing.T) {
186186
require.NoError(t, err)
187187
sc.TimeZone = losAngelesTz
188188

189-
time, err := types.ParseTime(sc, "2017-01-05 23:59:59.575601", mysql.TypeDatetime, 0)
189+
time, err := types.ParseTime(sc, "2017-01-05 23:59:59.575601", mysql.TypeDatetime, 0, nil)
190190
require.NoError(t, err)
191191
d.SetMysqlTime(time)
192192
columns[0].Type = mysql.TypeDatetime

sessionctx/variable/varsutil.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ func setSnapshotTS(s *SessionVars, sVal string) error {
445445
return nil
446446
}
447447

448-
t, err := types.ParseTime(s.StmtCtx, sVal, mysql.TypeTimestamp, types.MaxFsp)
448+
t, err := types.ParseTime(s.StmtCtx, sVal, mysql.TypeTimestamp, types.MaxFsp, nil)
449449
if err != nil {
450450
return err
451451
}
@@ -463,7 +463,7 @@ func setTxnReadTS(s *SessionVars, sVal string) error {
463463
return nil
464464
}
465465

466-
t, err := types.ParseTime(s.StmtCtx, sVal, mysql.TypeTimestamp, types.MaxFsp)
466+
t, err := types.ParseTime(s.StmtCtx, sVal, mysql.TypeTimestamp, types.MaxFsp, nil)
467467
if err != nil {
468468
return err
469469
}

0 commit comments

Comments
 (0)