diff --git a/expression/builtin_math_vec.go b/expression/builtin_math_vec.go index e2855989b3a99..bf87634e3b868 100644 --- a/expression/builtin_math_vec.go +++ b/expression/builtin_math_vec.go @@ -108,6 +108,24 @@ func (b *builtinAsinSig) vectorized() bool { return true } +func (b *builtinAtan1ArgSig) vecEvalReal(input *chunk.Chunk, result *chunk.Column) error { + if err := b.args[0].VecEvalReal(b.ctx, input, result); err != nil { + return err + } + f64s := result.Float64s() + for i := 0; i < len(f64s); i++ { + if result.IsNull(i) { + continue + } + f64s[i] = math.Atan(f64s[i]) + } + return nil +} + +func (b *builtinAtan1ArgSig) vectorized() bool { + return true +} + func (b *builtinAtan2ArgsSig) vecEvalReal(input *chunk.Chunk, result *chunk.Column) error { n := input.NumRows() if err := b.args[0].VecEvalReal(b.ctx, input, result); err != nil { diff --git a/expression/builtin_math_vec_test.go b/expression/builtin_math_vec_test.go index 02bf6b212af4b..8bae76c449878 100644 --- a/expression/builtin_math_vec_test.go +++ b/expression/builtin_math_vec_test.go @@ -34,6 +34,9 @@ var vecBuiltinMathCases = map[string][]vecExprBenchCase{ ast.Asin: { {types.ETReal, []types.EvalType{types.ETReal}, nil}, }, + ast.Atan: { + {types.ETReal, []types.EvalType{types.ETReal}, nil}, + }, ast.Atan2: { {types.ETReal, []types.EvalType{types.ETReal, types.ETReal}, nil}, },