diff --git a/expression/builtin_time_vec.go b/expression/builtin_time_vec.go index 7aa51a1781..37dc627da5 100644 --- a/expression/builtin_time_vec.go +++ b/expression/builtin_time_vec.go @@ -436,11 +436,27 @@ func (b *builtinSubDateIntIntSig) vecEvalTime(input *chunk.Chunk, result *chunk. } func (b *builtinUnixTimestampCurrentSig) vectorized() bool { - return false + return true } func (b *builtinUnixTimestampCurrentSig) vecEvalInt(input *chunk.Chunk, result *chunk.Column) error { - return errors.Errorf("not implemented") + nowTs, err := getStmtTimestamp(b.ctx) + if err != nil { + return err + } + dec, err := goTimeToMysqlUnixTimestamp(nowTs, 1) + if err != nil { + return err + } + intVal, err := dec.ToInt() + terror.Log(err) + n := input.NumRows() + result.ResizeInt64(n, false) + intRes := result.Int64s() + for i := 0; i < n; i++ { + intRes[i] = intVal + } + return nil } func (b *builtinSubDateIntRealSig) vectorized() bool { diff --git a/expression/builtin_time_vec_test.go b/expression/builtin_time_vec_test.go index 104b9418ae..172bd6057f 100644 --- a/expression/builtin_time_vec_test.go +++ b/expression/builtin_time_vec_test.go @@ -209,6 +209,9 @@ var vecBuiltinTimeCases = map[string][]vecExprBenchCase{ {retEvalType: types.ETTimestamp}, {retEvalType: types.ETTimestamp, childrenTypes: []types.EvalType{types.ETInt}, geners: []dataGenerator{&rangeInt64Gener{begin: 0, end: 7}}}, }, + ast.UnixTimestamp: { + {retEvalType: types.ETInt}, + }, ast.UTCTime: { {retEvalType: types.ETDuration}, {retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETInt}, geners: []dataGenerator{&rangeInt64Gener{begin: 0, end: 7}}},