expression: implement vectorized evaluation for 'builtinCastDurationAsJSONSig' (#12797)

This commit is contained in:
tsthght
2019-10-31 19:17:16 +08:00
committed by Yuanjia Zhang
parent 4d1e8e4775
commit dc636afa04
2 changed files with 25 additions and 2 deletions

View File

@ -1209,9 +1209,31 @@ func (b *builtinCastDecimalAsJSONSig) vecEvalJSON(input *chunk.Chunk, result *ch
}
func (b *builtinCastDurationAsJSONSig) vectorized() bool {
return false
return true
}
func (b *builtinCastDurationAsJSONSig) vecEvalJSON(input *chunk.Chunk, result *chunk.Column) error {
return errors.Errorf("not implemented")
n := input.NumRows()
buf, err := b.bufAllocator.get(types.ETDuration, n)
if err != nil {
return err
}
defer b.bufAllocator.put(buf)
if err = b.args[0].VecEvalDuration(b.ctx, input, buf); err != nil {
return err
}
result.ReserveJSON(n)
var dur types.Duration
dur.Fsp = types.MaxFsp
ds := buf.GoDurations()
for i := 0; i < n; i++ {
if buf.IsNull(i) {
result.AppendNull()
continue
}
dur.Duration = ds[i]
result.AppendJSON(json.CreateBinary(dur.String()))
}
return nil
}

View File

@ -51,6 +51,7 @@ var vecBuiltinCastCases = map[string][]vecExprBenchCase{
{retEvalType: types.ETDuration, childrenTypes: []types.EvalType{types.ETDuration}},
{retEvalType: types.ETJson, childrenTypes: []types.EvalType{types.ETInt}},
{retEvalType: types.ETJson, childrenTypes: []types.EvalType{types.ETReal}},
{retEvalType: types.ETJson, childrenTypes: []types.EvalType{types.ETDuration}},
{retEvalType: types.ETJson, childrenTypes: []types.EvalType{types.ETDatetime}},
{retEvalType: types.ETJson, childrenTypes: []types.EvalType{types.ETJson}},
{retEvalType: types.ETJson, childrenTypes: []types.EvalType{types.ETString}, geners: []dataGenerator{&jsonStringGener{}}},