diff --git a/expression/builtin_compare_vec_generated.go b/expression/builtin_compare_vec_generated.go index 61c81409c9ab5..5f627ff8ed385 100644 --- a/expression/builtin_compare_vec_generated.go +++ b/expression/builtin_compare_vec_generated.go @@ -1953,7 +1953,8 @@ func (b *builtinCoalesceStringSig) vecEvalString(input *chunk.Chunk, result *chu argLen := len(b.args) bufs := make([]*chunk.Column, argLen) - + sc := b.ctx.GetSessionVars().StmtCtx + beforeWarns := sc.WarningCount() for i := 0; i < argLen; i++ { buf, err := b.bufAllocator.get(types.ETInt, n) if err != nil { @@ -1961,8 +1962,12 @@ func (b *builtinCoalesceStringSig) vecEvalString(input *chunk.Chunk, result *chu } defer b.bufAllocator.put(buf) err = b.args[i].VecEvalString(b.ctx, input, buf) - if err != nil { - return err + afterWarns := sc.WarningCount() + if err != nil || afterWarns > beforeWarns { + if afterWarns > beforeWarns { + sc.TruncateWarnings(int(beforeWarns)) + } + return b.fallbackEvalString(input, result) } bufs[i] = buf } @@ -2125,7 +2130,8 @@ func (b *builtinCoalesceJSONSig) vecEvalJSON(input *chunk.Chunk, result *chunk.C argLen := len(b.args) bufs := make([]*chunk.Column, argLen) - + sc := b.ctx.GetSessionVars().StmtCtx + beforeWarns := sc.WarningCount() for i := 0; i < argLen; i++ { buf, err := b.bufAllocator.get(types.ETInt, n) if err != nil { @@ -2133,8 +2139,12 @@ func (b *builtinCoalesceJSONSig) vecEvalJSON(input *chunk.Chunk, result *chunk.C } defer b.bufAllocator.put(buf) err = b.args[i].VecEvalJSON(b.ctx, input, buf) - if err != nil { - return err + afterWarns := sc.WarningCount() + if err != nil || afterWarns > beforeWarns { + if afterWarns > beforeWarns { + sc.TruncateWarnings(int(beforeWarns)) + } + return b.fallbackEvalJSON(input, result) } bufs[i] = buf } diff --git a/expression/generator/compare_vec.go b/expression/generator/compare_vec.go index bff26891e4516..5864e61c02c3c 100644 --- a/expression/generator/compare_vec.go +++ b/expression/generator/compare_vec.go @@ -248,7 +248,8 @@ func (b *builtin{{ .compare.CompareName }}{{ .type.TypeName }}Sig) vecEval{{ .ty argLen := len(b.args) bufs := make([]*chunk.Column, argLen) - + sc := b.ctx.GetSessionVars().StmtCtx + beforeWarns := sc.WarningCount() for i := 0; i < argLen; i++ { buf, err := b.bufAllocator.get(types.ETInt, n) if err != nil { @@ -256,8 +257,12 @@ func (b *builtin{{ .compare.CompareName }}{{ .type.TypeName }}Sig) vecEval{{ .ty } defer b.bufAllocator.put(buf) err = b.args[i].VecEval{{ .type.TypeName }}(b.ctx, input, buf) - if err != nil { - return err + afterWarns := sc.WarningCount() + if err != nil || afterWarns > beforeWarns { + if afterWarns > beforeWarns { + sc.TruncateWarnings(int(beforeWarns)) + } + return b.fallbackEval{{ .type.TypeName }}(input, result) } bufs[i]=buf }