From 6a5b2a3f0be393de06aa194d7b7d471a18468476 Mon Sep 17 00:00:00 2001 From: Ti Chi Robot Date: Mon, 8 Jan 2024 18:24:25 +0800 Subject: [PATCH] executor: use EncodeKey to encode groupkey in StreamAggExec (#49974) (#50024) close pingcap/tidb#49902 --- executor/aggregate.go | 4 ++-- executor/issuetest/executor_issue_test.go | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/executor/aggregate.go b/executor/aggregate.go index 561bd4dcd9502..d34d7be17731c 100644 --- a/executor/aggregate.go +++ b/executor/aggregate.go @@ -1509,12 +1509,12 @@ func (e *vecGroupChecker) splitIntoGroups(chk *chunk.Chunk) (isFirstGroupSameAsP return false, err } } - e.firstGroupKey, err = codec.EncodeValue(e.ctx.GetSessionVars().StmtCtx, e.firstGroupKey, e.firstRowDatums...) + e.firstGroupKey, err = codec.EncodeKey(e.ctx.GetSessionVars().StmtCtx, e.firstGroupKey, e.firstRowDatums...) if err != nil { return false, err } - e.lastGroupKey, err = codec.EncodeValue(e.ctx.GetSessionVars().StmtCtx, e.lastGroupKey, e.lastRowDatums...) + e.lastGroupKey, err = codec.EncodeKey(e.ctx.GetSessionVars().StmtCtx, e.lastGroupKey, e.lastRowDatums...) if err != nil { return false, err } diff --git a/executor/issuetest/executor_issue_test.go b/executor/issuetest/executor_issue_test.go index ddad0a09f286f..06ad38354c408 100644 --- a/executor/issuetest/executor_issue_test.go +++ b/executor/issuetest/executor_issue_test.go @@ -1446,3 +1446,20 @@ PARTITION BY HASH (c5) PARTITIONS 4;`) // Again, a simpler reproduce. tk.MustQuery("select /*+ inl_join (t1, t2) */ t2.c5 from t1 right join t2 on t1.c2 = t2.c5 where not( t1.c2 between '4s7ht' and 'mj' );").Check(testkit.Rows()) } + +func TestIssue49902(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("set @@tidb_max_chunk_size = 32;") + tk.MustExec("drop table if exists t, s;") + tk.MustExec("CREATE TABLE `t` (`c` char(1)) COLLATE=utf8_general_ci ;") + tk.MustExec("insert into t values(\"V\"),(\"v\");") + tk.MustExec("insert into t values(\"V\"),(\"v\"),(\"v\");") + tk.MustExec("CREATE TABLE `s` (`col_61` int);") + tk.MustExec("insert into s values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1);") + tk.MustExec("insert into s values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1);") + tk.MustQuery("SELECT /*+ stream_agg()*/ count(`t`.`c`) FROM (`s`) JOIN `t` GROUP BY `t`.`c`;").Check(testkit.Rows("170")) + tk.MustQuery("SELECT count(`t`.`c`) FROM (`s`) JOIN `t` GROUP BY `t`.`c`;").Check(testkit.Rows("170")) + tk.MustExec("set @@tidb_max_chunk_size = default;") +}