When SQLite processes a SELECT statement for which the FROM clause contains a
single sub-select that is not eligible for the flattening optimization, it
creates a co-routine that returns one row each time it is invoked to
implement the sub-select.
The vdbe code is:
* Jump to start of main routine,
* Body of co-routine,
* Main routine (invokes sub-routine).
* VerifyCookie routine.
Because of the way the SQL compiler works, the VerifyCookie routine is
currently being invoked the first time the co-routine is invoked, not by the
start of the main routine. If the main routine attempts to access the database
before the co-routine is invoked, then it is an error. This may occur if either
the LIMIT or the OFFSET expression of the main SELECT are themselves
sub-selects that access the database. For example:
<verbatim>
CREATE TABLE abc(a, b, c);
CREATE TABLE def(a, b, c);
SELECT * FROM (SELECT * FROM def LIMIT 1 OFFSET 1) LIMIT (SELECT 20 FROM abc)
</verbatim>

Change detected to "Stress_Testing"

Change foundin to "trunk"

Change severity to "Critical"

Change status to "Open"

Change subsystem to "Code_Generator"

Change title to:

Sub-select in LIMIT clause may access db without locks.

Change type to "Code_Defect"

This page was generated in about
0.017s by
Fossil version 2.4 [0b4c3f5a28] 2017-09-26 20:41:54