From 350e030b4c678e551ea695c10280452ba45c17fd Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 19 Sep 2022 14:47:01 +0800 Subject: [PATCH] executor: fix pipelined window invalid memory address (#30418) (#30458) close pingcap/tidb#30326 --- executor/pipelined_window.go | 2 +- expression/integration_test.go | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/executor/pipelined_window.go b/executor/pipelined_window.go index add7fa2ff453b..0ce861ddf19a6 100644 --- a/executor/pipelined_window.go +++ b/executor/pipelined_window.go @@ -178,7 +178,7 @@ func (e *PipelinedWindowExec) getRowsInPartition(ctx context.Context) (err error var drained, samePartition bool drained, err = e.fetchChild(ctx) if err != nil { - err = errors.Trace(err) + return errors.Trace(err) } // we return immediately to use a combination of true newPartition but 0 in e.rowToConsume to indicate the data source is drained, if drained { diff --git a/expression/integration_test.go b/expression/integration_test.go index 296a82fb91075..0e00f7ced43ec 100644 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -9947,6 +9947,18 @@ func (s *testIntegrationSuite) TestConstPropNullFunctions(c *C) { tk.MustQuery("select * from t2 where t2.i2=((select count(1) from t1 where t1.i1=t2.i2))").Check(testkit.Rows("1 0.1")) } +func (s *testIntegrationSuite) TestIssue30326(c *C) { + tk := testkit.NewTestKit(c, s.store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(a int);") + tk.MustExec("insert into t values(1),(1),(2),(2);") + tk.MustExec("set tidb_window_concurrency = 1;") + err := tk.QueryToErr("select (FIRST_VALUE(1) over (partition by v.a)) as c3 from (select a from t where t.a = (select a from t t2 where t.a = t2.a)) as v;") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, "[executor:1242]Subquery returns more than 1 row") +} + func (s *testIntegrationSuite) TestIssue28643(c *C) { tk := testkit.NewTestKit(c, s.store) tk.MustExec("use test")