From 00c6a4ad2dd2cb557ad2aa07af71da76140cc8ea Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Tue, 1 Sep 2020 21:13:42 +0800 Subject: [PATCH] executor: clean outerMatchedStatus when HashJoin.C ... (#19510) (#19611) --- executor/join.go | 1 + executor/join_test.go | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/executor/join.go b/executor/join.go index 1cc8ad8c502c8..b757b28b7b7d2 100644 --- a/executor/join.go +++ b/executor/join.go @@ -135,6 +135,7 @@ func (e *HashJoinExec) Close() error { e.joinChkResourceCh = nil terror.Call(e.rowContainer.Close) } + e.outerMatchedStatus = e.outerMatchedStatus[:0] if e.runtimeStats != nil { concurrency := cap(e.joiners) diff --git a/executor/join_test.go b/executor/join_test.go index d6150933928e4..91db74432cdbb 100644 --- a/executor/join_test.go +++ b/executor/join_test.go @@ -2254,3 +2254,18 @@ func (s *testSuiteJoin3) TestIssue19498(c *C) { rs = tk.MustQuery("select c_str, (select /*+ INL_MERGE_JOIN(t1,t3) */ max(t1.c_int) from t1, t3 where t1.c_int = t3.c_int and t2.c_str > t3.c_str) q from t2 order by c_str;") rs.Check(testkit.Rows("happy archimedes 2", "happy fermat 2", "happy hypatia 2", "zen sammet 4")) } + +func (s *testSuiteJoin3) TestIssue19500(c *C) { + tk := testkit.NewTestKitWithInit(c, s.store) + tk.MustExec("drop table if exists t1;") + tk.MustExec("create table t1 (c_int int, primary key (c_int));") + tk.MustExec("insert into t1 values (1),(2),(3),(4),(5);") + tk.MustExec("drop table if exists t2;") + tk.MustExec("create table t2 (c_int int unsigned, c_str varchar(40), primary key (c_int), key (c_str));") + tk.MustExec("insert into t2 values (1, 'dazzling panini'),(2, 'infallible perlman'),(3, 'recursing cannon'),(4, 'vigorous satoshi'),(5, 'vigilant gauss'),(6, 'nervous jackson');\n") + tk.MustExec("drop table if exists t3;") + tk.MustExec("create table t3 (c_int int, c_str varchar(40), key (c_str));") + tk.MustExec("insert into t3 values (1, 'sweet morse'),(2, 'reverent golick'),(3, 'clever rubin'),(4, 'flamboyant morse');") + tk.MustQuery("select (select (select sum(c_int) from t3 where t3.c_str > t2.c_str) from t2 where t2.c_int > t1.c_int order by c_int limit 1) q from t1 order by q;"). + Check(testkit.Rows("", "", "3", "3", "3")) +}