diff --git a/src/box/sql/window.c b/src/box/sql/window.c index 9e2bd5236c822098218450446bba8b8f8160fd25..629a5d20749038b86d5911a395738bc23f6d5911 100644 --- a/src/box/sql/window.c +++ b/src/box/sql/window.c @@ -358,7 +358,7 @@ int sqlWindowRewrite(Parse *pParse, Select *p) { int rc = 0; - if (p->pWin) { + if (p->pWin && p->pPrior == 0) { Vdbe *v = sqlGetVdbe(pParse); /* The subquery */ Select *pSub = 0; diff --git a/test/sql-tap/window1.test.lua b/test/sql-tap/window1.test.lua index 2575f4cb5b13cc6a7ab9f76c9977bb53fe0a5167..145c3a7487e70f7443906a6a115f5dddf9cd45db 100755 --- a/test/sql-tap/window1.test.lua +++ b/test/sql-tap/window1.test.lua @@ -1,6 +1,6 @@ #!/usr/bin/env tarantool local test = require("sqltester") -test:plan(59) +test:plan(66) test:execsql( [[ DROP TABLE IF EXISTS t1; @@ -750,4 +750,72 @@ test:do_execsql_test( '1', '1.5', '2.5', '3.5' }) +-- NOTE(gmoshkin): had to change query in test, because tarantool requires a +-- primary key to be specified for all tables +test:do_execsql_test( + "window1-13.1", + [[ + DROP TABLE IF EXISTS t1; + CREATE TABLE t1(a int primary key, b int); + INSERT INTO t1 VALUES(1,11); + INSERT INTO t1 VALUES(2,12); + ]] +) + +-- NOTE(gmoshkin): had to split this test into 2, because tarantool doesn't +-- support multiple queries in one call to box.execute +test:do_execsql_test( + "window1-13.2.1.1", + [[ + SELECT a, row_number() OVER(ORDER BY b) FROM t1; + ]], + { 1, 1, 2, 2, } +) +test:do_execsql_test( + "window1-13.2.1.2", + [[ + SELECT a, row_number() OVER(ORDER BY b DESC) FROM t1; + ]], + { 2, 1, 1, 2, } +) + +test:do_execsql_test( + "window1-13.2.2", + [[ + SELECT a, row_number() OVER(ORDER BY b) FROM t1 + UNION ALL + SELECT a, row_number() OVER(ORDER BY b DESC) FROM t1; + ]], + { 1, 1, 2, 2, 2, 1, 1, 2, } +) +test:do_execsql_test( + "window1-13.3", + [[ + SELECT a, row_number() OVER(ORDER BY b) FROM t1 + UNION + SELECT a, row_number() OVER(ORDER BY b DESC) FROM t1; + ]], + { 1, 1, 1, 2, 2, 1, 2, 2, } +) + +test:do_execsql_test( + "window1-13.4", + [[ + SELECT a, row_number() OVER(ORDER BY b) FROM t1 + EXCEPT + SELECT a, row_number() OVER(ORDER BY b DESC) FROM t1; + ]], + { 1, 1, 2, 2, } +) + +test:do_execsql_test( + "window1-13.5", + [[ + SELECT a, row_number() OVER(ORDER BY b) FROM t1 + INTERSECT + SELECT a, row_number() OVER(ORDER BY b DESC) FROM t1; + ]], + {} +) + test:finish_test()