Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Simplification of the ORDER BY code generator logic, requiring fewer calls to OP_Column. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
eddeadfc272239803fc87d0fd5d1dcc0 |
User & Date: | drh 2013-07-30 12:14:42.768 |
Context
2013-07-30
| ||
13:22 | Remove unused P4 parameter type codes. Other cleanup of P4. check-in: 3fa3e910e2 user: drh tags: trunk | |
12:14 | Simplification of the ORDER BY code generator logic, requiring fewer calls to OP_Column. check-in: eddeadfc27 user: drh tags: trunk | |
11:55 | Reenable fts5 hooks in where.c. check-in: c748d90f94 user: dan tags: trunk | |
Changes
Changes to src/select.c.
︙ | ︙ | |||
916 917 918 919 920 921 922 | SelectDest *pDest /* Write the sorted results here */ ){ int addrBreak = sqlite4VdbeMakeLabel(v); /* Jump here to exit loop */ int addrContinue = sqlite4VdbeMakeLabel(v); /* Jump here for next cycle */ int addr; int iTab; /* Sorter object cursor */ ExprList *pOrderBy = p->pOrderBy; | < | < < < < < < < | < < < < < | | < < > > > > > > > | | < | > > | 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 | SelectDest *pDest /* Write the sorted results here */ ){ int addrBreak = sqlite4VdbeMakeLabel(v); /* Jump here to exit loop */ int addrContinue = sqlite4VdbeMakeLabel(v); /* Jump here for next cycle */ int addr; int iTab; /* Sorter object cursor */ ExprList *pOrderBy = p->pOrderBy; int eDest = pDest->eDest; int iParm = pDest->iParm; int op; /* Opcode use to sort results */ iTab = pOrderBy->iECursor; op = (p->selFlags & SF_UseSorter) ? OP_SorterSort : OP_Sort; addr = 1 + sqlite4VdbeAddOp2(v, op, iTab, addrBreak); codeOffset(v, p, addrContinue); switch( eDest ){ case SRT_Table: case SRT_EphemTab: { int regRowid = sqlite4GetTempReg(pParse); int regRow = sqlite4GetTempReg(pParse); testcase( eDest==SRT_Table ); testcase( eDest==SRT_EphemTab ); sqlite4VdbeAddOp2(v, OP_NewRowid, iParm, regRowid); sqlite4VdbeAddOp2(v, OP_RowData, iTab, regRow); sqlite4VdbeAddOp3(v, OP_Insert, iParm, regRow, regRowid); sqlite4VdbeChangeP5(v, OPFLAG_APPEND); sqlite4ReleaseTempReg(pParse, regRow); sqlite4ReleaseTempReg(pParse, regRowid); break; } #ifndef SQLITE4_OMIT_SUBQUERY case SRT_Set: { int regRes = sqlite4GetTempReg(pParse); int regKey = sqlite4GetTempReg(pParse); int regValue = sqlite4GetTempReg(pParse); assert( nColumn==1 ); sqlite4VdbeAddOp3(v, OP_Column, iTab, 0, regRes); sqlite4VdbeAddOp2(v, OP_MakeKey, iParm, regKey); sqlite4VdbeAddOp4(v, OP_MakeRecord, regRes, 1, regValue, &p->affinity, 1); sqlite4VdbeAddOp3(v, OP_Insert, iParm, regValue, regKey); sqlite4ReleaseTempReg(pParse, regKey); sqlite4ReleaseTempReg(pParse, regRes); sqlite4ReleaseTempReg(pParse, regValue); break; } case SRT_Mem: { assert( nColumn==1 ); sqlite4VdbeAddOp3(v, OP_Column, iTab, 0, iParm); /* The LIMIT clause will terminate the loop for us */ break; |
︙ | ︙ | |||
989 990 991 992 993 994 995 | sqlite4ExprCacheAffinityChange(pParse, pDest->iMem, nColumn); }else{ sqlite4VdbeAddOp1(v, OP_Yield, pDest->iParm); } break; } } | < < | 982 983 984 985 986 987 988 989 990 991 992 993 994 995 | sqlite4ExprCacheAffinityChange(pParse, pDest->iMem, nColumn); }else{ sqlite4VdbeAddOp1(v, OP_Yield, pDest->iParm); } break; } } /* The bottom of the loop */ sqlite4VdbeResolveLabel(v, addrContinue); if( p->selFlags & SF_UseSorter ){ sqlite4VdbeAddOp2(v, OP_SorterNext, iTab, addr); }else{ |
︙ | ︙ |