diff options
author | drh <drh@noemail.net> | 2009-09-08 01:14:48 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2009-09-08 01:14:48 +0000 |
commit | 3e9ca09453ea4bde487be8365a8e369f1aa809ab (patch) | |
tree | e5d97b8091389faab037235d53caef09a770793e /src/select.c | |
parent | 417168ade2f2c96a1e5800de2ca75f968de5db76 (diff) | |
download | sqlite-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.c | 13 |
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); |