aboutsummaryrefslogtreecommitdiff
path: root/src/select.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2009-09-08 01:14:48 +0000
committerdrh <drh@noemail.net>2009-09-08 01:14:48 +0000
commit3e9ca09453ea4bde487be8365a8e369f1aa809ab (patch)
treee5d97b8091389faab037235d53caef09a770793e /src/select.c
parent417168ade2f2c96a1e5800de2ca75f968de5db76 (diff)
downloadsqlite-3e9ca09453ea4bde487be8365a8e369f1aa809ab.tar.gz
sqlite-3e9ca09453ea4bde487be8365a8e369f1aa809ab.zip
Code simplifications, especially to the pseudo-table logic, and comment
improvements. FossilOrigin-Name: 52449a9569b7142095cc88ee208b31cc59a3cab4
Diffstat (limited to 'src/select.c')
-rw-r--r--src/select.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/select.c b/src/select.c
index ecdc63187..21bc2be23 100644
--- a/src/select.c
+++ b/src/select.c
@@ -766,14 +766,16 @@ static void generateSortTail(
int regRowid;
iTab = pOrderBy->iECursor;
+ regRow = sqlite3GetTempReg(pParse);
if( eDest==SRT_Output || eDest==SRT_Coroutine ){
pseudoTab = pParse->nTab++;
- sqlite3VdbeAddOp3(v, OP_OpenPseudo, pseudoTab, eDest==SRT_Output, nColumn);
+ sqlite3VdbeAddOp3(v, OP_OpenPseudo, pseudoTab, regRow, nColumn);
+ regRowid = 0;
+ }else{
+ regRowid = sqlite3GetTempReg(pParse);
}
addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak);
codeOffset(v, p, addrContinue);
- regRow = sqlite3GetTempReg(pParse);
- regRowid = sqlite3GetTempReg(pParse);
sqlite3VdbeAddOp3(v, OP_Column, iTab, pOrderBy->nExpr + 1, regRow);
switch( eDest ){
case SRT_Table:
@@ -805,11 +807,12 @@ static void generateSortTail(
assert( eDest==SRT_Output || eDest==SRT_Coroutine );
testcase( eDest==SRT_Output );
testcase( eDest==SRT_Coroutine );
- sqlite3VdbeAddOp2(v, OP_Integer, 1, regRowid);
- sqlite3VdbeAddOp3(v, OP_Insert, pseudoTab, regRow, regRowid);
for(i=0; i<nColumn; i++){
assert( regRow!=pDest->iMem+i );
sqlite3VdbeAddOp3(v, OP_Column, pseudoTab, i, pDest->iMem+i);
+ if( i==0 ){
+ sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE);
+ }
}
if( eDest==SRT_Output ){
sqlite3VdbeAddOp2(v, OP_ResultRow, pDest->iMem, nColumn);