From 3267d86fcb3322a8aeb884cb315dee75f3925976 Mon Sep 17 00:00:00 2001 From: Weizhen Wang Date: Mon, 7 Feb 2022 12:23:35 +0800 Subject: [PATCH] executor: migrate test-infra to testify for window_test.go (#32100) close pingcap/tidb#28626 --- executor/window_test.go | 546 +++++++++++++++++++++------------------- 1 file changed, 281 insertions(+), 265 deletions(-) diff --git a/executor/window_test.go b/executor/window_test.go index 97ce36b4f3..8b1c911324 100644 --- a/executor/window_test.go +++ b/executor/window_test.go @@ -16,13 +16,15 @@ package executor_test import ( "fmt" + "testing" - . "github.com/pingcap/check" - "github.com/pingcap/tidb/util/testkit" + "github.com/pingcap/tidb/testkit" ) -func (s *testSuite7) TestWindowFunctions(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestWindowFunctions(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("set @@tidb_window_concurrency = 1") tk.MustExec("set @@tidb_enable_pipelined_window_function = 0") defer func() { @@ -31,8 +33,10 @@ func (s *testSuite7) TestWindowFunctions(c *C) { doTestWindowFunctions(tk) } -func (s *testSuite7) TestWindowParallelFunctions(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestWindowParallelFunctions(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("set @@tidb_window_concurrency = 4") tk.MustExec("set @@tidb_enable_pipelined_window_function = 0") defer func() { @@ -41,20 +45,23 @@ func (s *testSuite7) TestWindowParallelFunctions(c *C) { doTestWindowFunctions(tk) } -func (s *testSuite7) TestPipelinedWindowFunctions(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestPipelinedWindowFunctions(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("set @@tidb_window_concurrency = 1") doTestWindowFunctions(tk) } -func (s *testSuite7) TestPipelinedWindowParallelFunctions(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestPipelinedWindowParallelFunctions(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("set @@tidb_window_concurrency = 4") doTestWindowFunctions(tk) } func doTestWindowFunctions(tk *testkit.TestKit) { - var result *testkit.Result tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int, b int, c int)") @@ -63,129 +70,129 @@ func doTestWindowFunctions(tk *testkit.TestKit) { tk.MustExec("set @@tidb_enable_window_function = 0") }() tk.MustExec("insert into t values (1,2,3),(4,3,2),(2,3,4)") - result = tk.MustQuery("select count(a) over () from t") - result.Check(testkit.Rows("3", "3", "3")) - result = tk.MustQuery("select sum(a) over () + count(a) over () from t") - result.Check(testkit.Rows("10", "10", "10")) - result = tk.MustQuery("select sum(a) over (partition by a) from t").Sort() - result.Check(testkit.Rows("1", "2", "4")) - result = tk.MustQuery("select 1 + sum(a) over (), count(a) over () from t") - result.Check(testkit.Rows("8 3", "8 3", "8 3")) - result = tk.MustQuery("select sum(t1.a) over() from t t1, t t2") - result.Check(testkit.Rows("21", "21", "21", "21", "21", "21", "21", "21", "21")) - result = tk.MustQuery("select _tidb_rowid, sum(t.a) over() from t") - result.Check(testkit.Rows("1 7", "2 7", "3 7")) + tk.MustQuery("select count(a) over () from t"). + Check(testkit.Rows("3", "3", "3")) + tk.MustQuery("select sum(a) over () + count(a) over () from t"). + Check(testkit.Rows("10", "10", "10")) + tk.MustQuery("select sum(a) over (partition by a) from t").Sort(). + Check(testkit.Rows("1", "2", "4")) + tk.MustQuery("select 1 + sum(a) over (), count(a) over () from t"). + Check(testkit.Rows("8 3", "8 3", "8 3")) + tk.MustQuery("select sum(t1.a) over() from t t1, t t2"). + Check(testkit.Rows("21", "21", "21", "21", "21", "21", "21", "21", "21")) + tk.MustQuery("select _tidb_rowid, sum(t.a) over() from t"). + Check(testkit.Rows("1 7", "2 7", "3 7")) - result = tk.MustQuery("select a, row_number() over() from t") - result.Check(testkit.Rows("1 1", "4 2", "2 3")) - result = tk.MustQuery("select a, row_number() over(partition by a) from t").Sort() - result.Check(testkit.Rows("1 1", "2 1", "4 1")) + tk.MustQuery("select a, row_number() over() from t"). + Check(testkit.Rows("1 1", "4 2", "2 3")) + tk.MustQuery("select a, row_number() over(partition by a) from t").Sort(). + Check(testkit.Rows("1 1", "2 1", "4 1")) - result = tk.MustQuery("select a, sum(a) over(rows between unbounded preceding and 1 following) from t") - result.Check(testkit.Rows("1 5", "4 7", "2 7")) - result = tk.MustQuery("select a, sum(a) over(rows between 1 preceding and 1 following) from t") - result.Check(testkit.Rows("1 5", "4 7", "2 6")) - result = tk.MustQuery("select a, sum(a) over(rows between unbounded preceding and 1 preceding) from t") - result.Check(testkit.Rows("1 ", "4 1", "2 5")) + tk.MustQuery("select a, sum(a) over(rows between unbounded preceding and 1 following) from t"). + Check(testkit.Rows("1 5", "4 7", "2 7")) + tk.MustQuery("select a, sum(a) over(rows between 1 preceding and 1 following) from t"). + Check(testkit.Rows("1 5", "4 7", "2 6")) + tk.MustQuery("select a, sum(a) over(rows between unbounded preceding and 1 preceding) from t"). + Check(testkit.Rows("1 ", "4 1", "2 5")) tk.MustExec("drop table t") tk.MustExec("create table t(a int, b date)") tk.MustExec("insert into t values (null,null),(1,20190201),(2,20190202),(3,20190203),(5,20190205)") - result = tk.MustQuery("select a, sum(a) over(order by a range between 1 preceding and 2 following) from t") - result.Check(testkit.Rows(" ", "1 6", "2 6", "3 10", "5 5")) - result = tk.MustQuery("select a, sum(a) over(order by a desc range between 1 preceding and 2 following) from t") - result.Check(testkit.Rows("5 8", "3 6", "2 6", "1 3", " ")) - result = tk.MustQuery("select a, b, sum(a) over(order by b range between interval 1 day preceding and interval 2 day following) from t") - result.Check(testkit.Rows(" ", "1 2019-02-01 6", "2 2019-02-02 6", "3 2019-02-03 10", "5 2019-02-05 5")) - result = tk.MustQuery("select a, b, sum(a) over(order by b desc range between interval 1 day preceding and interval 2 day following) from t") - result.Check(testkit.Rows("5 2019-02-05 8", "3 2019-02-03 6", "2 2019-02-02 6", "1 2019-02-01 3", " ")) + tk.MustQuery("select a, sum(a) over(order by a range between 1 preceding and 2 following) from t"). + Check(testkit.Rows(" ", "1 6", "2 6", "3 10", "5 5")) + tk.MustQuery("select a, sum(a) over(order by a desc range between 1 preceding and 2 following) from t"). + Check(testkit.Rows("5 8", "3 6", "2 6", "1 3", " ")) + tk.MustQuery("select a, b, sum(a) over(order by b range between interval 1 day preceding and interval 2 day following) from t"). + Check(testkit.Rows(" ", "1 2019-02-01 6", "2 2019-02-02 6", "3 2019-02-03 10", "5 2019-02-05 5")) + tk.MustQuery("select a, b, sum(a) over(order by b desc range between interval 1 day preceding and interval 2 day following) from t"). + Check(testkit.Rows("5 2019-02-05 8", "3 2019-02-03 6", "2 2019-02-02 6", "1 2019-02-01 3", " ")) tk.MustExec("drop table t") tk.MustExec("CREATE TABLE t (id INTEGER, sex CHAR(1))") tk.MustExec("insert into t values (1, 'M'), (2, 'F'), (3, 'F'), (4, 'F'), (5, 'M'), (10, NULL), (11, NULL)") - result = tk.MustQuery("SELECT sex, id, RANK() OVER (PARTITION BY sex ORDER BY id DESC) FROM t").Sort() - result.Check(testkit.Rows(" 10 2", " 11 1", "F 2 3", "F 3 2", "F 4 1", "M 1 2", "M 5 1")) + tk.MustQuery("SELECT sex, id, RANK() OVER (PARTITION BY sex ORDER BY id DESC) FROM t").Sort(). + Check(testkit.Rows(" 10 2", " 11 1", "F 2 3", "F 3 2", "F 4 1", "M 1 2", "M 5 1")) tk.MustExec("drop table t") tk.MustExec("create table t(a int, b int)") tk.MustExec("insert into t values (1,1),(1,2),(2,1),(2,2)") - result = tk.MustQuery("select a, b, rank() over() from t") - result.Check(testkit.Rows("1 1 1", "1 2 1", "2 1 1", "2 2 1")) - result = tk.MustQuery("select a, b, rank() over(order by a) from t") - result.Check(testkit.Rows("1 1 1", "1 2 1", "2 1 3", "2 2 3")) - result = tk.MustQuery("select a, b, rank() over(order by a, b) from t") - result.Check(testkit.Rows("1 1 1", "1 2 2", "2 1 3", "2 2 4")) + tk.MustQuery("select a, b, rank() over() from t"). + Check(testkit.Rows("1 1 1", "1 2 1", "2 1 1", "2 2 1")) + tk.MustQuery("select a, b, rank() over(order by a) from t"). + Check(testkit.Rows("1 1 1", "1 2 1", "2 1 3", "2 2 3")) + tk.MustQuery("select a, b, rank() over(order by a, b) from t"). + Check(testkit.Rows("1 1 1", "1 2 2", "2 1 3", "2 2 4")) - result = tk.MustQuery("select a, b, dense_rank() over() from t") - result.Check(testkit.Rows("1 1 1", "1 2 1", "2 1 1", "2 2 1")) - result = tk.MustQuery("select a, b, dense_rank() over(order by a) from t") - result.Check(testkit.Rows("1 1 1", "1 2 1", "2 1 2", "2 2 2")) - result = tk.MustQuery("select a, b, dense_rank() over(order by a, b) from t") - result.Check(testkit.Rows("1 1 1", "1 2 2", "2 1 3", "2 2 4")) + tk.MustQuery("select a, b, dense_rank() over() from t"). + Check(testkit.Rows("1 1 1", "1 2 1", "2 1 1", "2 2 1")) + tk.MustQuery("select a, b, dense_rank() over(order by a) from t"). + Check(testkit.Rows("1 1 1", "1 2 1", "2 1 2", "2 2 2")) + tk.MustQuery("select a, b, dense_rank() over(order by a, b) from t"). + Check(testkit.Rows("1 1 1", "1 2 2", "2 1 3", "2 2 4")) - result = tk.MustQuery("select row_number() over(rows between 1 preceding and 1 following) from t") - result.Check(testkit.Rows("1", "2", "3", "4")) - result = tk.MustQuery("show warnings") - result.Check(testkit.Rows("Note 3599 Window function 'row_number' ignores the frame clause of window '' and aggregates over the whole partition")) + tk.MustQuery("select row_number() over(rows between 1 preceding and 1 following) from t"). + Check(testkit.Rows("1", "2", "3", "4")) + tk.MustQuery("show warnings"). + Check(testkit.Rows("Note 3599 Window function 'row_number' ignores the frame clause of window '' and aggregates over the whole partition")) - result = tk.MustQuery("select a, sum(a) over() from t") - result.Check(testkit.Rows("1 6", "1 6", "2 6", "2 6")) - result = tk.MustQuery("select a, sum(a) over(order by a) from t") - result.Check(testkit.Rows("1 2", "1 2", "2 6", "2 6")) - result = tk.MustQuery("select a, sum(a) over(order by a, b) from t") - result.Check(testkit.Rows("1 1", "1 2", "2 4", "2 6")) + tk.MustQuery("select a, sum(a) over() from t"). + Check(testkit.Rows("1 6", "1 6", "2 6", "2 6")) + tk.MustQuery("select a, sum(a) over(order by a) from t"). + Check(testkit.Rows("1 2", "1 2", "2 6", "2 6")) + tk.MustQuery("select a, sum(a) over(order by a, b) from t"). + Check(testkit.Rows("1 1", "1 2", "2 4", "2 6")) - result = tk.MustQuery("select a, first_value(a) over(), last_value(a) over() from t") - result.Check(testkit.Rows("1 1 2", "1 1 2", "2 1 2", "2 1 2")) - result = tk.MustQuery("select a, first_value(a) over(rows between 1 preceding and 1 following), last_value(a) over(rows between 1 preceding and 1 following) from t") - result.Check(testkit.Rows("1 1 1", "1 1 2", "2 1 2", "2 2 2")) - result = tk.MustQuery("select a, first_value(a) over(rows between 1 following and 1 following), last_value(a) over(rows between 1 following and 1 following) from t") - result.Check(testkit.Rows("1 1 1", "1 2 2", "2 2 2", "2 ")) - result = tk.MustQuery("select a, first_value(rand(0)) over(), last_value(rand(0)) over() from t") - result.Check(testkit.Rows("1 0.15522042769493574 0.33109208227236947", "1 0.15522042769493574 0.33109208227236947", - "2 0.15522042769493574 0.33109208227236947", "2 0.15522042769493574 0.33109208227236947")) + tk.MustQuery("select a, first_value(a) over(), last_value(a) over() from t"). + Check(testkit.Rows("1 1 2", "1 1 2", "2 1 2", "2 1 2")) + tk.MustQuery("select a, first_value(a) over(rows between 1 preceding and 1 following), last_value(a) over(rows between 1 preceding and 1 following) from t"). + Check(testkit.Rows("1 1 1", "1 1 2", "2 1 2", "2 2 2")) + tk.MustQuery("select a, first_value(a) over(rows between 1 following and 1 following), last_value(a) over(rows between 1 following and 1 following) from t"). + Check(testkit.Rows("1 1 1", "1 2 2", "2 2 2", "2 ")) + tk.MustQuery("select a, first_value(rand(0)) over(), last_value(rand(0)) over() from t"). + Check(testkit.Rows("1 0.15522042769493574 0.33109208227236947", "1 0.15522042769493574 0.33109208227236947", + "2 0.15522042769493574 0.33109208227236947", "2 0.15522042769493574 0.33109208227236947")) - result = tk.MustQuery("select a, b, cume_dist() over() from t") - result.Check(testkit.Rows("1 1 1", "1 2 1", "2 1 1", "2 2 1")) - result = tk.MustQuery("select a, b, cume_dist() over(order by a) from t") - result.Check(testkit.Rows("1 1 0.5", "1 2 0.5", "2 1 1", "2 2 1")) - result = tk.MustQuery("select a, b, cume_dist() over(order by a, b) from t") - result.Check(testkit.Rows("1 1 0.25", "1 2 0.5", "2 1 0.75", "2 2 1")) + tk.MustQuery("select a, b, cume_dist() over() from t"). + Check(testkit.Rows("1 1 1", "1 2 1", "2 1 1", "2 2 1")) + tk.MustQuery("select a, b, cume_dist() over(order by a) from t"). + Check(testkit.Rows("1 1 0.5", "1 2 0.5", "2 1 1", "2 2 1")) + tk.MustQuery("select a, b, cume_dist() over(order by a, b) from t"). + Check(testkit.Rows("1 1 0.25", "1 2 0.5", "2 1 0.75", "2 2 1")) - result = tk.MustQuery("select a, nth_value(a, null) over() from t") - result.Check(testkit.Rows("1 ", "1 ", "2 ", "2 ")) - result = tk.MustQuery("select a, nth_value(a, 1) over() from t") - result.Check(testkit.Rows("1 1", "1 1", "2 1", "2 1")) - result = tk.MustQuery("select a, nth_value(a, 4) over() from t") - result.Check(testkit.Rows("1 2", "1 2", "2 2", "2 2")) - result = tk.MustQuery("select a, nth_value(a, 5) over() from t") - result.Check(testkit.Rows("1 ", "1 ", "2 ", "2 ")) + tk.MustQuery("select a, nth_value(a, null) over() from t"). + Check(testkit.Rows("1 ", "1 ", "2 ", "2 ")) + tk.MustQuery("select a, nth_value(a, 1) over() from t"). + Check(testkit.Rows("1 1", "1 1", "2 1", "2 1")) + tk.MustQuery("select a, nth_value(a, 4) over() from t"). + Check(testkit.Rows("1 2", "1 2", "2 2", "2 2")) + tk.MustQuery("select a, nth_value(a, 5) over() from t"). + Check(testkit.Rows("1 ", "1 ", "2 ", "2 ")) - result = tk.MustQuery("select ntile(3) over() from t") - result.Check(testkit.Rows("1", "1", "2", "3")) - result = tk.MustQuery("select ntile(2) over() from t") - result.Check(testkit.Rows("1", "1", "2", "2")) - result = tk.MustQuery("select ntile(null) over() from t") - result.Check(testkit.Rows("", "", "", "")) + tk.MustQuery("select ntile(3) over() from t"). + Check(testkit.Rows("1", "1", "2", "3")) + tk.MustQuery("select ntile(2) over() from t"). + Check(testkit.Rows("1", "1", "2", "2")) + tk.MustQuery("select ntile(null) over() from t"). + Check(testkit.Rows("", "", "", "")) - result = tk.MustQuery("select a, percent_rank() over() from t") - result.Check(testkit.Rows("1 0", "1 0", "2 0", "2 0")) - result = tk.MustQuery("select a, percent_rank() over(order by a) from t") - result.Check(testkit.Rows("1 0", "1 0", "2 0.6666666666666666", "2 0.6666666666666666")) - result = tk.MustQuery("select a, b, percent_rank() over(order by a, b) from t") - result.Check(testkit.Rows("1 1 0", "1 2 0.3333333333333333", "2 1 0.6666666666666666", "2 2 1")) + tk.MustQuery("select a, percent_rank() over() from t"). + Check(testkit.Rows("1 0", "1 0", "2 0", "2 0")) + tk.MustQuery("select a, percent_rank() over(order by a) from t"). + Check(testkit.Rows("1 0", "1 0", "2 0.6666666666666666", "2 0.6666666666666666")) + tk.MustQuery("select a, b, percent_rank() over(order by a, b) from t"). + Check(testkit.Rows("1 1 0", "1 2 0.3333333333333333", "2 1 0.6666666666666666", "2 2 1")) - result = tk.MustQuery("select a, lead(a) over (), lag(a) over() from t") - result.Check(testkit.Rows("1 1 ", "1 2 1", "2 2 1", "2 2")) - result = tk.MustQuery("select a, lead(a, 0) over(), lag(a, 0) over() from t") - result.Check(testkit.Rows("1 1 1", "1 1 1", "2 2 2", "2 2 2")) - result = tk.MustQuery("select a, lead(a, 1, a) over(), lag(a, 1, a) over() from t") - result.Check(testkit.Rows("1 1 1", "1 2 1", "2 2 1", "2 2 2")) - result = tk.MustQuery("select a, lead(a, 1, 'lead') over(), lag(a, 1, 'lag') over() from t") - result.Check(testkit.Rows("1 1 lag", "1 2 1", "2 2 1", "2 lead 2")) + tk.MustQuery("select a, lead(a) over (), lag(a) over() from t"). + Check(testkit.Rows("1 1 ", "1 2 1", "2 2 1", "2 2")) + tk.MustQuery("select a, lead(a, 0) over(), lag(a, 0) over() from t"). + Check(testkit.Rows("1 1 1", "1 1 1", "2 2 2", "2 2 2")) + tk.MustQuery("select a, lead(a, 1, a) over(), lag(a, 1, a) over() from t"). + Check(testkit.Rows("1 1 1", "1 2 1", "2 2 1", "2 2 2")) + tk.MustQuery("select a, lead(a, 1, 'lead') over(), lag(a, 1, 'lag') over() from t"). + Check(testkit.Rows("1 1 lag", "1 2 1", "2 2 1", "2 lead 2")) - result = tk.MustQuery("SELECT CUME_DIST() OVER (ORDER BY null);") - result.Check(testkit.Rows("1")) + tk.MustQuery("SELECT CUME_DIST() OVER (ORDER BY null);"). + Check(testkit.Rows("1")) tk.MustQuery("select lead(a) over(partition by null) from t").Sort().Check(testkit.Rows("1", "2", "2", "")) @@ -207,43 +214,47 @@ func doTestWindowFunctions(tk *testkit.TestKit) { testkit.Rows(" ", "1.00 ", "2.00 "), ) - result = tk.MustQuery("select sum(a) over w, sum(b) over w from t window w as (order by a)") - result.Check(testkit.Rows("2 3", "2 3", "6 6", "6 6")) - result = tk.MustQuery("select row_number() over w, sum(b) over w from t window w as (order by a)") - result.Check(testkit.Rows("1 3", "2 3", "3 6", "4 6")) - result = tk.MustQuery("select row_number() over w, sum(b) over w from t window w as (rows between 1 preceding and 1 following)") - result.Check(testkit.Rows("1 3", "2 4", "3 5", "4 3")) + tk.MustQuery("select sum(a) over w, sum(b) over w from t window w as (order by a)"). + Check(testkit.Rows("2 3", "2 3", "6 6", "6 6")) + tk.MustQuery("select row_number() over w, sum(b) over w from t window w as (order by a)"). + Check(testkit.Rows("1 3", "2 3", "3 6", "4 6")) + tk.MustQuery("select row_number() over w, sum(b) over w from t window w as (rows between 1 preceding and 1 following)"). + Check(testkit.Rows("1 3", "2 4", "3 5", "4 3")) - tk.Se.GetSessionVars().MaxChunkSize = 1 - result = tk.MustQuery("select a, row_number() over (partition by a) from t").Sort() - result.Check(testkit.Rows("1 1", "1 2", "2 1", "2 2")) + tk.Session().GetSessionVars().MaxChunkSize = 1 + tk.MustQuery("select a, row_number() over (partition by a) from t").Sort(). + Check(testkit.Rows("1 1", "1 2", "2 1", "2 2")) } -func (s *testSuite7) TestWindowFunctionsDataReference(c *C) { +func TestWindowFunctionsDataReference(t *testing.T) { // see https://github.com/pingcap/tidb/issues/11614 - tk := testkit.NewTestKit(c, s.store) + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int, b int)") tk.MustExec("insert into t values (2,1),(2,2),(2,3)") - tk.Se.GetSessionVars().MaxChunkSize = 2 - result := tk.MustQuery("select a, b, rank() over (partition by a order by b) from t") - result.Check(testkit.Rows("2 1 1", "2 2 2", "2 3 3")) - result = tk.MustQuery("select a, b, PERCENT_RANK() over (partition by a order by b) from t") - result.Check(testkit.Rows("2 1 0", "2 2 0.5", "2 3 1")) - result = tk.MustQuery("select a, b, CUME_DIST() over (partition by a order by b) from t") - result.Check(testkit.Rows("2 1 0.3333333333333333", "2 2 0.6666666666666666", "2 3 1")) + tk.Session().GetSessionVars().MaxChunkSize = 2 + tk.MustQuery("select a, b, rank() over (partition by a order by b) from t"). + Check(testkit.Rows("2 1 1", "2 2 2", "2 3 3")) + tk.MustQuery("select a, b, PERCENT_RANK() over (partition by a order by b) from t"). + Check(testkit.Rows("2 1 0", "2 2 0.5", "2 3 1")) + tk.MustQuery("select a, b, CUME_DIST() over (partition by a order by b) from t"). + Check(testkit.Rows("2 1 0.3333333333333333", "2 2 0.6666666666666666", "2 3 1")) // see https://github.com/pingcap/tidb/issues/12415 - result = tk.MustQuery("select b, first_value(b) over (order by b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) from t") - result.Check(testkit.Rows("1 1", "2 1", "3 1")) - result = tk.MustQuery("select b, first_value(b) over (order by b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) from t") - result.Check(testkit.Rows("1 1", "2 1", "3 1")) + tk.MustQuery("select b, first_value(b) over (order by b RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) from t"). + Check(testkit.Rows("1 1", "2 1", "3 1")) + tk.MustQuery("select b, first_value(b) over (order by b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) from t"). + Check(testkit.Rows("1 1", "2 1", "3 1")) } -func (s *testSuite7) TestSlidingWindowFunctions(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestSlidingWindowFunctions(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("set @@tidb_enable_pipelined_window_function=0;") defer func() { @@ -261,8 +272,10 @@ func (s *testSuite7) TestSlidingWindowFunctions(c *C) { } } -func (s *testSuite7) TestPipelinedSlidingWindowFunctions(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestPipelinedSlidingWindowFunctions(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") idTypes := []string{"FLOAT", "DOUBLE"} useHighPrecisions := []string{"ON", "OFF"} @@ -277,7 +290,6 @@ func (s *testSuite7) TestPipelinedSlidingWindowFunctions(c *C) { } func baseTestSlidingWindowFunctions(tk *testkit.TestKit) { - var result *testkit.Result tk.MustExec("insert into t values (1,'M')") tk.MustExec("insert into t values (2,'F')") tk.MustExec("insert into t values (3,'F')") @@ -289,163 +301,165 @@ func baseTestSlidingWindowFunctions(tk *testkit.TestKit) { tk.MustExec("PREPARE p FROM 'SELECT sex, COUNT(id) OVER (ORDER BY id ROWS BETWEEN ? PRECEDING and ? PRECEDING) FROM t';") tk.MustExec("SET @p1= 1;") tk.MustExec("SET @p2= 2;") - result = tk.MustQuery("EXECUTE p USING @p1, @p2;") - result.Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) - result = tk.MustQuery("EXECUTE p USING @p2, @p1;") - result.Check(testkit.Rows("M 0", "F 1", "F 2", "F 2", "M 2", " 2", " 2")) + tk.MustQuery("EXECUTE p USING @p1, @p2;"). + Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) + tk.MustQuery("EXECUTE p USING @p2, @p1;"). + Check(testkit.Rows("M 0", "F 1", "F 2", "F 2", "M 2", " 2", " 2")) tk.MustExec("DROP PREPARE p;") tk.MustExec("PREPARE p FROM 'SELECT sex, COUNT(id) OVER (ORDER BY id ROWS BETWEEN ? FOLLOWING and ? FOLLOWING) FROM t';") tk.MustExec("SET @p1= 1;") tk.MustExec("SET @p2= 2;") - result = tk.MustQuery("EXECUTE p USING @p2, @p1;") - result.Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) - result = tk.MustQuery("EXECUTE p USING @p1, @p2;") - result.Check(testkit.Rows("M 2", "F 2", "F 2", "F 2", "M 2", " 1", " 0")) + tk.MustQuery("EXECUTE p USING @p2, @p1;"). + Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) + tk.MustQuery("EXECUTE p USING @p1, @p2;"). + Check(testkit.Rows("M 2", "F 2", "F 2", "F 2", "M 2", " 1", " 0")) tk.MustExec("DROP PREPARE p;") // COUNT ROWS - result = tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id ROWS BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 2", "F 2", "F 2", "F 2", "M 2", " 1", " 0")) - result = tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id ROWS BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) - result = tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id ROWS BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;") - result.Check(testkit.Rows("M 0", "F 1", "F 2", "F 2", "M 2", " 2", " 2")) - result = tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING and 3 PRECEDING) FROM t;") - result.Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) + tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id ROWS BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 2", "F 2", "F 2", "F 2", "M 2", " 1", " 0")) + tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id ROWS BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) + tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id ROWS BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;"). + Check(testkit.Rows("M 0", "F 1", "F 2", "F 2", "M 2", " 2", " 2")) + tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING and 3 PRECEDING) FROM t;"). + Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) // COUNT RANGE - result = tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id RANGE BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 2", "F 2", "F 2", "F 1", "M 0", " 1", " 0")) - result = tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id RANGE BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) - result = tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id RANGE BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;") - result.Check(testkit.Rows("M 0", "F 1", "F 2", "F 2", "M 2", " 0", " 1")) - result = tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id RANGE BETWEEN 1 PRECEDING and 3 PRECEDING) FROM t;") - result.Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) + tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id RANGE BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 2", "F 2", "F 2", "F 1", "M 0", " 1", " 0")) + tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id RANGE BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) + tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id RANGE BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;"). + Check(testkit.Rows("M 0", "F 1", "F 2", "F 2", "M 2", " 0", " 1")) + tk.MustQuery("SELECT sex, COUNT(id) OVER (ORDER BY id RANGE BETWEEN 1 PRECEDING and 3 PRECEDING) FROM t;"). + Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) // SUM ROWS - result = tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id ROWS BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 5", "F 7", "F 9", "F 15", "M 21", " 11", " ")) - result = tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id ROWS BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) - result = tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id ROWS BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;") - result.Check(testkit.Rows("M ", "F 1", "F 3", "F 5", "M 7", " 9", " 15")) - result = tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING and 3 PRECEDING) FROM t;") - result.Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) - result = tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 3", "F 6", "F 10", "F 15", "M 25", " 36", " 36")) + tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id ROWS BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 5", "F 7", "F 9", "F 15", "M 21", " 11", " ")) + tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id ROWS BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) + tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id ROWS BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;"). + Check(testkit.Rows("M ", "F 1", "F 3", "F 5", "M 7", " 9", " 15")) + tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING and 3 PRECEDING) FROM t;"). + Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) + tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 3", "F 6", "F 10", "F 15", "M 25", " 36", " 36")) // SUM RANGE - result = tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id RANGE BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 5", "F 7", "F 9", "F 5", "M ", " 11", " ")) - result = tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id RANGE BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) - result = tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id RANGE BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;") - result.Check(testkit.Rows("M ", "F 1", "F 3", "F 5", "M 7", " ", " 10")) - result = tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 6", "F 10", "F 14", "F 12", "M 9", " 21", " 21")) - result = tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id DESC RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows(" 21", " 21", "M 12", "F 14", "F 10", "F 6", "M 3")) + tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id RANGE BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 5", "F 7", "F 9", "F 5", "M ", " 11", " ")) + tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id RANGE BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) + tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id RANGE BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;"). + Check(testkit.Rows("M ", "F 1", "F 3", "F 5", "M 7", " ", " 10")) + tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 6", "F 10", "F 14", "F 12", "M 9", " 21", " 21")) + tk.MustQuery("SELECT sex, SUM(id) OVER (ORDER BY id DESC RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows(" 21", " 21", "M 12", "F 14", "F 10", "F 6", "M 3")) // AVG ROWS - result = tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id ROWS BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 2.5", "F 3.5", "F 4.5", "F 7.5", "M 10.5", " 11", " ")) - result = tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id ROWS BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) - result = tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id ROWS BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;") - result.Check(testkit.Rows("M ", "F 1", "F 1.5", "F 2.5", "M 3.5", " 4.5", " 7.5")) - result = tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING and 3 PRECEDING) FROM t;") - result.Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) - result = tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 1.5", "F 2", "F 2.5", "F 3", "M 4.166666666666667", " 5.142857142857143", " 5.142857142857143")) + tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id ROWS BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 2.5", "F 3.5", "F 4.5", "F 7.5", "M 10.5", " 11", " ")) + tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id ROWS BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) + tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id ROWS BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;"). + Check(testkit.Rows("M ", "F 1", "F 1.5", "F 2.5", "M 3.5", " 4.5", " 7.5")) + tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING and 3 PRECEDING) FROM t;"). + Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) + tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 1.5", "F 2", "F 2.5", "F 3", "M 4.166666666666667", " 5.142857142857143", " 5.142857142857143")) // AVG RANGE - result = tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id RANGE BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 2.5", "F 3.5", "F 4.5", "F 5", "M ", " 11", " ")) - result = tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id RANGE BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) - result = tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id RANGE BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;") - result.Check(testkit.Rows("M ", "F 1", "F 1.5", "F 2.5", "M 3.5", " ", " 10")) - result = tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 2", "F 2.5", "F 3.5", "F 4", "M 4.5", " 10.5", " 10.5")) - result = tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id DESC RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows(" 10.5", " 10.5", "M 4", "F 3.5", "F 2.5", "F 2", "M 1.5")) + tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id RANGE BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 2.5", "F 3.5", "F 4.5", "F 5", "M ", " 11", " ")) + tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id RANGE BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) + tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id RANGE BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;"). + Check(testkit.Rows("M ", "F 1", "F 1.5", "F 2.5", "M 3.5", " ", " 10")) + tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 2", "F 2.5", "F 3.5", "F 4", "M 4.5", " 10.5", " 10.5")) + tk.MustQuery("SELECT sex, AVG(id) OVER (ORDER BY id DESC RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows(" 10.5", " 10.5", "M 4", "F 3.5", "F 2.5", "F 2", "M 1.5")) // BIT_XOR ROWS - result = tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id ROWS BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 1", "F 7", "F 1", "F 15", "M 1", " 11", " 0")) - result = tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id ROWS BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) - result = tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id ROWS BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;") - result.Check(testkit.Rows("M 0", "F 1", "F 3", "F 1", "M 7", " 1", " 15")) - result = tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING and 3 PRECEDING) FROM t;") - result.Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) - result = tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 3", "F 0", "F 4", "F 1", "M 11", " 0", " 0")) + tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id ROWS BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 1", "F 7", "F 1", "F 15", "M 1", " 11", " 0")) + tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id ROWS BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) + tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id ROWS BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;"). + Check(testkit.Rows("M 0", "F 1", "F 3", "F 1", "M 7", " 1", " 15")) + tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING and 3 PRECEDING) FROM t;"). + Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) + tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 3", "F 0", "F 4", "F 1", "M 11", " 0", " 0")) // BIT_XOR RANGE - result = tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id RANGE BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 1", "F 7", "F 1", "F 5", "M 0", " 11", " 0")) - result = tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id RANGE BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) - result = tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id RANGE BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;") - result.Check(testkit.Rows("M 0", "F 1", "F 3", "F 1", "M 7", " 0", " 10")) - result = tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 0", "F 4", "F 0", "F 2", "M 1", " 1", " 1")) - result = tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id DESC RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows(" 1", " 1", "M 2", "F 0", "F 4", "F 0", "M 3")) + tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id RANGE BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 1", "F 7", "F 1", "F 5", "M 0", " 11", " 0")) + tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id RANGE BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 0", "F 0", "F 0", "F 0", "M 0", " 0", " 0")) + tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id RANGE BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;"). + Check(testkit.Rows("M 0", "F 1", "F 3", "F 1", "M 7", " 0", " 10")) + tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 0", "F 4", "F 0", "F 2", "M 1", " 1", " 1")) + tk.MustQuery("SELECT sex, BIT_XOR(id) OVER (ORDER BY id DESC RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows(" 1", " 1", "M 2", "F 0", "F 4", "F 0", "M 3")) // MIN ROWS - result = tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id ROWS BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 2", "F 3", "F 4", "F 5", "M 10", " 11", " ")) - result = tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id ROWS BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) - result = tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id ROWS BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;") - result.Check(testkit.Rows("M ", "F 1", "F 1", "F 2", "M 3", " 4", " 5")) - result = tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING and 3 PRECEDING) FROM t;") - result.Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) - result = tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 1", "F 1", "F 1", "F 1", "M 1", " 1", " 1")) + tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id ROWS BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 2", "F 3", "F 4", "F 5", "M 10", " 11", " ")) + tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id ROWS BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) + tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id ROWS BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;"). + Check(testkit.Rows("M ", "F 1", "F 1", "F 2", "M 3", " 4", " 5")) + tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING and 3 PRECEDING) FROM t;"). + Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) + tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 1", "F 1", "F 1", "F 1", "M 1", " 1", " 1")) // MIN RANGE - result = tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id RANGE BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 2", "F 3", "F 4", "F 5", "M ", " 11", " ")) - result = tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id RANGE BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) - result = tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id RANGE BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;") - result.Check(testkit.Rows("M ", "F 1", "F 1", "F 2", "M 3", " ", " 10")) - result = tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 1", "F 1", "F 2", "F 3", "M 4", " 10", " 10")) - result = tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id DESC RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows(" 10", " 10", "M 3", "F 2", "F 1", "F 1", "M 1")) + tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id RANGE BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 2", "F 3", "F 4", "F 5", "M ", " 11", " ")) + tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id RANGE BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) + tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id RANGE BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;"). + Check(testkit.Rows("M ", "F 1", "F 1", "F 2", "M 3", " ", " 10")) + tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 1", "F 1", "F 2", "F 3", "M 4", " 10", " 10")) + tk.MustQuery("SELECT sex, MIN(id) OVER (ORDER BY id DESC RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows(" 10", " 10", "M 3", "F 2", "F 1", "F 1", "M 1")) // MAX ROWS - result = tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id ROWS BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 3", "F 4", "F 5", "F 10", "M 11", " 11", " ")) - result = tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id ROWS BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) - result = tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id ROWS BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;") - result.Check(testkit.Rows("M ", "F 1", "F 2", "F 3", "M 4", " 5", " 10")) - result = tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING and 3 PRECEDING) FROM t;") - result.Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) - result = tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 2", "F 3", "F 4", "F 5", "M 10", " 11", " 11")) + tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id ROWS BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 3", "F 4", "F 5", "F 10", "M 11", " 11", " ")) + tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id ROWS BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) + tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id ROWS BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;"). + Check(testkit.Rows("M ", "F 1", "F 2", "F 3", "M 4", " 5", " 10")) + tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING and 3 PRECEDING) FROM t;"). + Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) + tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 2", "F 3", "F 4", "F 5", "M 10", " 11", " 11")) // MAX RANGE - result = tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id RANGE BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 3", "F 4", "F 5", "F 5", "M ", " 11", " ")) - result = tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id RANGE BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) - result = tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id RANGE BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;") - result.Check(testkit.Rows("M ", "F 1", "F 2", "F 3", "M 4", " ", " 10")) - result = tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows("M 3", "F 4", "F 5", "F 5", "M 5", " 11", " 11")) - result = tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id DESC RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;") - result.Check(testkit.Rows(" 11", " 11", "M 5", "F 5", "F 4", "F 3", "M 2")) + tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id RANGE BETWEEN 1 FOLLOWING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 3", "F 4", "F 5", "F 5", "M ", " 11", " ")) + tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id RANGE BETWEEN 3 FOLLOWING and 1 FOLLOWING) FROM t;"). + Check(testkit.Rows("M ", "F ", "F ", "F ", "M ", " ", " ")) + tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id RANGE BETWEEN 2 PRECEDING and 1 PRECEDING) FROM t;"). + Check(testkit.Rows("M ", "F 1", "F 2", "F 3", "M 4", " ", " 10")) + tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows("M 3", "F 4", "F 5", "F 5", "M 5", " 11", " 11")) + tk.MustQuery("SELECT sex, MAX(id) OVER (ORDER BY id DESC RANGE BETWEEN 1 PRECEDING and 2 FOLLOWING) FROM t;"). + Check(testkit.Rows(" 11", " 11", "M 5", "F 5", "F 4", "F 3", "M 2")) } -func (s *testSuite7) TestIssue24264(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestIssue24264(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists tbl_2") tk.MustExec("create table tbl_2 ( col_10 char(65) collate utf8mb4_unicode_ci not null , col_11 bigint not null , col_12 datetime not null , col_13 bigint unsigned default 327695751717730004 , col_14 timestamp default '2010-11-18' not null , primary key idx_5 ( col_11,col_13 ) /*T![clustered_index] clustered */ , unique key idx_6 ( col_10,col_11,col_13 ) , unique key idx_7 ( col_14,col_12,col_13 ) )") @@ -472,8 +486,10 @@ func (s *testSuite7) TestIssue24264(c *C) { "")) } -func (s *testSuite7) TestIssue29947(c *C) { - tk := testkit.NewTestKit(c, s.store) +func TestIssue29947(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec(`drop table if exists t_tir89b, t_vejdy`)