From e1517fb1d8779106b043edf50a4e7fab9519b6ec Mon Sep 17 00:00:00 2001 From: Lonng Date: Tue, 12 Nov 2019 20:55:29 +0800 Subject: [PATCH] expression: fix panic while call `Column.VecEvalInt` (#13401) Signed-off-by: Lonng --- expression/column.go | 2 +- expression/column_test.go | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/expression/column.go b/expression/column.go index 8e33b65041b8c..c5c41ed7c54b0 100644 --- a/expression/column.go +++ b/expression/column.go @@ -211,7 +211,7 @@ func (col *Column) Equal(_ sessionctx.Context, expr Expression) bool { func (col *Column) VecEvalInt(ctx sessionctx.Context, input *chunk.Chunk, result *chunk.Column) error { if col.RetType.Hybrid() { it := chunk.NewIterator4Chunk(input) - result.Reset() + result.ResizeInt64(0, false) for row := it.Begin(); row != it.End(); row = it.Next() { v, null, err := col.EvalInt(ctx, row) if err != nil { diff --git a/expression/column_test.go b/expression/column_test.go index 07e136d0f6e60..38a7384773272 100644 --- a/expression/column_test.go +++ b/expression/column_test.go @@ -183,6 +183,16 @@ func (s *testEvaluatorSuite) TestColHybird(c *C) { c.Assert(v, Equals, result.GetInt64(i)) } + // use a container which has the different field type with bit + result, err = newBuffer(types.ETString, 1024) + c.Assert(err, IsNil) + c.Assert(col.VecEvalInt(ctx, input, result), IsNil) + for row, i := it.Begin(), 0; row != it.End(); row, i = it.Next(), i+1 { + v, _, err := col.EvalInt(ctx, row) + c.Assert(err, IsNil) + c.Assert(v, Equals, result.GetInt64(i)) + } + // enum ft = types.NewFieldType(mysql.TypeEnum) col.RetType = ft