expression: implement vectorized evaluation for 'builtinCastDurationAsJSONSig' (#12797)
This commit is contained in:
@ -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
|
||||
}
|
||||
|
||||
@ -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{}}},
|
||||
|
||||
Reference in New Issue
Block a user