SQLite

View Ticket
Login
Ticket Hash: db4d96798da8b9707f76509e57d745d64a92e880
Title: LIMIT does not work with nested views containing UNION ALL
Status: Fixed Type: Code_Defect
Severity: Important Priority: Immediate
Subsystem: Unknown Resolution: Fixed
Last Modified: 2013-01-29 23:55:55
Version Found In: 3.7.15.2
User Comments:
drh added on 2013-01-28 19:34:30: (text/x-fossil-wiki)
The LIMIT on the final SELECT in the following code does not work:

<verbatim>
CREATE TABLE t1(x);
INSERT INTO t1 VALUES(5);
CREATE VIEW v1 AS SELECT x*2 FROM t1;
CREATE VIEW v2 AS SELECT * FROM v1 UNION ALL SELECT * FROM v1;
CREATE VIEW v4 AS SELECT * FROM v2 UNION ALL SELECT * FROM v2;
SELECT * FROM v4 LIMIT 3;
</verbatim>

The problem seems to have been introduced by check-ins [3ef468e7046b209]
or [a79786a961dba8] on 2008-07-01.  The problem first appeared in version
3.6.1.  The problem was detected during internal testing and has never
been seen in the wild.

drh added on 2013-01-29 23:32:51: (text/x-fossil-wiki)
A related problem:  The following SQL leaks memory - lookaside memory in
particular which will result in an assert() fault when run with SQLITE_DEBUG.

<verbatim>
CREATE TABLE t1(x);
INSERT INTO t1 VALUES(1),(2);
SELECT z FROM (
    SELECT y AS z FROM (SELECT x AS y FROM t1)
    UNION ALL
    SELECT y+10 FROM (SELECT x AS y FROM t1)
)
LIMIT 3 OFFSET 2;
</verbatim>