1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-12 13:01:09 +03:00

Fix the LIMIT and OFFSET handling for UNION ALL queries that contain a

subquery with ORDER BY on the right-hand side.  Fix for ticket
[b65cb2c8d91f668584].

FossilOrigin-Name: 4b631364354068af95a01630469cb6fbfe8b52fd
This commit is contained in:
drh
2015-10-06 17:27:18 +00:00
parent 8d9837acd5
commit 9f1ef45f6a
4 changed files with 180 additions and 8 deletions

View File

@@ -2273,6 +2273,16 @@ static int multiSelect(
if( p->iLimit ){
addr = sqlite3VdbeAddOp1(v, OP_IfNot, p->iLimit); VdbeCoverage(v);
VdbeComment((v, "Jump ahead if LIMIT reached"));
if( p->iOffset ){
int addr2;
sqlite3VdbeAddOp3(v, OP_Add, p->iLimit, p->iOffset, p->iOffset+1);
addr2 = sqlite3VdbeAddOp1(v, OP_IfPos, p->iOffset); VdbeCoverage(v);
sqlite3VdbeAddOp2(v, OP_SCopy, p->iLimit, p->iOffset+1);
sqlite3VdbeJumpHere(v, addr2);
addr2 = sqlite3VdbeAddOp1(v, OP_IfPos, p->iLimit); VdbeCoverage(v);
sqlite3VdbeAddOp2(v, OP_Integer, -1, p->iOffset+1);
sqlite3VdbeJumpHere(v, addr2);
}
}
explainSetInteger(iSub2, pParse->iNextSelectId);
rc = sqlite3Select(pParse, p, &dest);