expression: implement vectorized evaluation for builtinRTrimSig (#12736)

This commit is contained in:
shihongzhi
2019-10-16 20:34:55 +08:00
committed by goroutine
parent 5564267250
commit 4798f340f8
2 changed files with 28 additions and 3 deletions

View File

@ -638,11 +638,34 @@ func (b *builtinReverseBinarySig) vecEvalString(input *chunk.Chunk, result *chun
}
func (b *builtinRTrimSig) vectorized() bool {
return false
return true
}
// evalString evals a builtinRTrimSig
// See https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_rtrim
func (b *builtinRTrimSig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error {
return errors.Errorf("not implemented")
n := input.NumRows()
buf, err := b.bufAllocator.get(types.ETString, n)
if err != nil {
return err
}
defer b.bufAllocator.put(buf)
if err := b.args[0].VecEvalString(b.ctx, input, buf); err != nil {
return err
}
result.ReserveString(n)
for i := 0; i < n; i++ {
if buf.IsNull(i) {
result.AppendNull()
continue
}
str := buf.GetString(i)
result.AppendString(strings.TrimRight(str, spaceChars))
}
return nil
}
func (b *builtinStrcmpSig) vectorized() bool {

View File

@ -88,7 +88,9 @@ var vecBuiltinStringCases = map[string][]vecExprBenchCase{
{retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString, types.ETString}, geners: []dataGenerator{&randLenStrGener{10, 20}, &randLenStrGener{5, 25}}},
},
ast.LTrim: {},
ast.RTrim: {},
ast.RTrim: {
{retEvalType: types.ETString, childrenTypes: []types.EvalType{types.ETString}, geners: []dataGenerator{&randSpaceStrGener{10, 100}}},
},
ast.Lpad: {
{
retEvalType: types.ETString,