Fix a problem with a window function in a correlated sub-query where at least one reference to the outer SELECT appears in a FROM clause sub-select.
FossilOrigin-Name: 9aca86f98388ff66b2bccb3fbfc486a3931398d2a8da139f905826ae2cdbb205
This commit is contained in:
+59
-26
@@ -720,32 +720,6 @@ do_execsql_test 17.3 {
|
||||
ORDER BY 10+sum(a) OVER (ORDER BY a) DESC;
|
||||
} {16 13 11}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
reset_db
|
||||
do_execsql_test 18.0 {
|
||||
CREATE TABLE t1 ( t1_id INTEGER PRIMARY KEY );
|
||||
CREATE TABLE t2 ( t2_id INTEGER PRIMARY KEY );
|
||||
CREATE TABLE t3 ( t3_id INTEGER PRIMARY KEY );
|
||||
|
||||
INSERT INTO t1 VALUES(1), (3), (5);
|
||||
INSERT INTO t2 VALUES (3), (5);
|
||||
INSERT INTO t3 VALUES(10), (11), (12);
|
||||
}
|
||||
|
||||
do_execsql_test 18.1 {
|
||||
SELECT t1.* FROM t1, t2 WHERE
|
||||
t1_id=t2_id AND t1_id IN (
|
||||
SELECT t1_id + row_number() OVER ( ORDER BY t1_id ) FROM t3
|
||||
)
|
||||
}
|
||||
|
||||
do_execsql_test 18.2 {
|
||||
SELECT t1.* FROM t1, t2 WHERE
|
||||
t1_id=t2_id AND t1_id IN (
|
||||
SELECT row_number() OVER ( ORDER BY t1_id ) FROM t3
|
||||
)
|
||||
} {3}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Test error cases from chaining window definitions.
|
||||
@@ -1035,6 +1009,65 @@ do_execsql_test 24.2 {
|
||||
SELECT lead(44) OVER ()
|
||||
} {{}}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
reset_db
|
||||
do_execsql_test 25.0 {
|
||||
CREATE TABLE t1 ( t1_id INTEGER PRIMARY KEY );
|
||||
CREATE TABLE t2 ( t2_id INTEGER PRIMARY KEY );
|
||||
CREATE TABLE t3 ( t3_id INTEGER PRIMARY KEY );
|
||||
|
||||
INSERT INTO t1 VALUES(1), (3), (5);
|
||||
INSERT INTO t2 VALUES (3), (5);
|
||||
INSERT INTO t3 VALUES(10), (11), (12);
|
||||
}
|
||||
|
||||
do_execsql_test 25.1 {
|
||||
SELECT t1.* FROM t1, t2 WHERE
|
||||
t1_id=t2_id AND t1_id IN (
|
||||
SELECT t1_id + row_number() OVER ( ORDER BY t1_id ) FROM t3
|
||||
)
|
||||
}
|
||||
|
||||
do_execsql_test 25.2 {
|
||||
SELECT t1.* FROM t1, t2 WHERE
|
||||
t1_id=t2_id AND t1_id IN (
|
||||
SELECT row_number() OVER ( ORDER BY t1_id ) FROM t3
|
||||
)
|
||||
} {3}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
reset_db
|
||||
do_execsql_test 26.0 {
|
||||
CREATE TABLE t1(x);
|
||||
CREATE TABLE t2(c);
|
||||
}
|
||||
|
||||
do_execsql_test 26.1 {
|
||||
SELECT ( SELECT row_number() OVER () FROM ( SELECT c FROM t1 ) ) FROM t2
|
||||
} {}
|
||||
|
||||
do_execsql_test 26.2 {
|
||||
INSERT INTO t1 VALUES(1), (2), (3), (4);
|
||||
INSERT INTO t2 VALUES(2), (6), (8), (4);
|
||||
SELECT c, c IN (
|
||||
SELECT row_number() OVER () FROM ( SELECT c FROM t1 )
|
||||
) FROM t2
|
||||
} {2 1 6 0 8 0 4 1}
|
||||
|
||||
do_execsql_test 26.3 {
|
||||
DELETE FROM t1;
|
||||
DELETE FROM t2;
|
||||
|
||||
INSERT INTO t2 VALUES(1), (2), (3), (4);
|
||||
INSERT INTO t1 VALUES(1), (1), (2), (3), (3), (3), (3), (4), (4);
|
||||
|
||||
SELECT c, c IN (
|
||||
SELECT row_number() OVER () FROM ( SELECT 1 FROM t1 WHERE x=c )
|
||||
) FROM t2
|
||||
} {1 1 2 0 3 1 4 0}
|
||||
|
||||
|
||||
|
||||
finish_test
|
||||
|
||||
|
||||
Reference in New Issue
Block a user