Lines Matching refs:pSorter

14682   VdbeSorter *pSorter;  /* Sorter object for OP_SorterOpen cursors */  member
72167 #define isSorter(x) ((x)->pSorter!=0)
75590 assert( pC->pSorter );
77185 if( pC->pSorter ){
77186 sqlite3VdbeSorterReset(db, pC->pSorter);
79540 VdbeSorter *pSorter; /* Sorter that owns this sub-task */
79857 if( pFile->iEof<=(i64)(pTask->pSorter->db->nMaxSorterMmap) ){
79893 int pgsz = pTask->pSorter->pgsz;
80007 sqlite3VdbeRecordUnpack(pTask->pSorter->pKeyInfo, nKey2, pKey2, r2);
80034 sqlite3VdbeRecordUnpack(pTask->pSorter->pKeyInfo, nKey2, pKey2, r2);
80068 if( pTask->pSorter->pKeyInfo->nField>1 ){
80074 if( pTask->pSorter->pKeyInfo->aSortOrder[0] ){
80138 if( pTask->pSorter->pKeyInfo->nField>1 ){
80143 }else if( pTask->pSorter->pKeyInfo->aSortOrder[0] ){
80177 VdbeSorter *pSorter; /* The new sorter */
80209 pSorter = (VdbeSorter*)sqlite3DbMallocZero(db, sz + szKeyInfo);
80210 pCsr->pSorter = pSorter;
80211 if( pSorter==0 ){
80214 pSorter->pKeyInfo = pKeyInfo = (KeyInfo*)((u8*)pSorter + sz);
80221 pSorter->pgsz = pgsz = sqlite3BtreeGetPageSize(db->aDb[0].pBt);
80222 pSorter->nTask = nWorker + 1;
80223 pSorter->iPrev = nWorker-1;
80224 pSorter->bUseThreads = (pSorter->nTask>1);
80225 pSorter->db = db;
80226 for(i=0; i<pSorter->nTask; i++){
80227 SortSubtask *pTask = &pSorter->aTask[i];
80228 pTask->pSorter = pSorter;
80233 pSorter->mnPmaSize = szPma * pgsz;
80236 pSorter->mxPmaSize = MIN((i64)mxCache*pgsz, SQLITE_MAX_PMASZ);
80243 assert( pSorter->iMemory==0 );
80244 pSorter->nMemory = pgsz;
80245 pSorter->list.aMemory = (u8*)sqlite3Malloc(pgsz);
80246 if( !pSorter->list.aMemory ) rc = SQLITE_NOMEM;
80253 pSorter->typeMask = SORTER_TYPE_INTEGER | SORTER_TYPE_TEXT;
80302 int iTask = (pTask - pTask->pSorter->aTask);
80303 sqlite3OsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t);
80316 int iTask = (pTask - pTask->pSorter->aTask);
80317 sqlite3OsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t);
80327 sqlite3OsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t);
80376 static int vdbeSorterJoinAll(VdbeSorter *pSorter, int rcin){
80387 for(i=pSorter->nTask-1; i>=0; i--){
80388 SortSubtask *pTask = &pSorter->aTask[i];
80460 SQLITE_PRIVATE void sqlite3VdbeSorterReset(sqlite3 *db, VdbeSorter *pSorter){
80462 (void)vdbeSorterJoinAll(pSorter, SQLITE_OK);
80463 assert( pSorter->bUseThreads || pSorter->pReader==0 );
80465 if( pSorter->pReader ){
80466 vdbePmaReaderClear(pSorter->pReader);
80467 sqlite3DbFree(db, pSorter->pReader);
80468 pSorter->pReader = 0;
80471 vdbeMergeEngineFree(pSorter->pMerger);
80472 pSorter->pMerger = 0;
80473 for(i=0; i<pSorter->nTask; i++){
80474 SortSubtask *pTask = &pSorter->aTask[i];
80476 pTask->pSorter = pSorter;
80478 if( pSorter->list.aMemory==0 ){
80479 vdbeSorterRecordFree(0, pSorter->list.pList);
80481 pSorter->list.pList = 0;
80482 pSorter->list.szPMA = 0;
80483 pSorter->bUsePMA = 0;
80484 pSorter->iMemory = 0;
80485 pSorter->mxKeysize = 0;
80486 sqlite3DbFree(db, pSorter->pUnpacked);
80487 pSorter->pUnpacked = 0;
80494 VdbeSorter *pSorter = pCsr->pSorter;
80495 if( pSorter ){
80496 sqlite3VdbeSorterReset(db, pSorter);
80497 sqlite3_free(pSorter->list.aMemory);
80498 sqlite3DbFree(db, pSorter);
80499 pCsr->pSorter = 0;
80563 pTask->pSorter->pKeyInfo, 0, 0, &pFree
80567 pTask->pUnpacked->nField = pTask->pSorter->pKeyInfo->nField;
80637 pTask->xCompare = vdbeSorterGetCompare(pTask->pSorter);
80778 sqlite3 *db = pTask->pSorter->db;
80814 vdbePmaWriterInit(pTask->file.pFd, &writer, pTask->pSorter->pgsz,
80926 static int vdbeSorterFlushPMA(VdbeSorter *pSorter){
80928 pSorter->bUsePMA = 1;
80929 return vdbeSorterListToPMA(&pSorter->aTask[0], &pSorter->list);
80934 int nWorker = (pSorter->nTask-1);
80938 pSorter->bUsePMA = 1;
80949 int iTest = (pSorter->iPrev + i + 1) % nWorker;
80950 pTask = &pSorter->aTask[iTest];
80960 rc = vdbeSorterListToPMA(&pSorter->aTask[nWorker], &pSorter->list);
80968 assert( pTask->list.aMemory==0 || pSorter->list.aMemory!=0 );
80970 pSorter->iPrev = (u8)(pTask - pSorter->aTask);
80971 pTask->list = pSorter->list;
80972 pSorter->list.pList = 0;
80973 pSorter->list.szPMA = 0;
80975 pSorter->list.aMemory = aMem;
80976 pSorter->nMemory = sqlite3MallocSize(aMem);
80977 }else if( pSorter->list.aMemory ){
80978 pSorter->list.aMemory = sqlite3Malloc(pSorter->nMemory);
80979 if( !pSorter->list.aMemory ) return SQLITE_NOMEM;
80997 VdbeSorter *pSorter = pCsr->pSorter;
81008 pSorter->typeMask &= SORTER_TYPE_INTEGER;
81010 pSorter->typeMask &= SORTER_TYPE_TEXT;
81012 pSorter->typeMask = 0;
81015 assert( pSorter );
81035 if( pSorter->mxPmaSize ){
81036 if( pSorter->list.aMemory ){
81037 bFlush = pSorter->iMemory && (pSorter->iMemory+nReq) > pSorter->mxPmaSize;
81040 (pSorter->list.szPMA > pSorter->mxPmaSize)
81041 || (pSorter->list.szPMA > pSorter->mnPmaSize && sqlite3HeapNearlyFull())
81045 rc = vdbeSorterFlushPMA(pSorter);
81046 pSorter->list.szPMA = 0;
81047 pSorter->iMemory = 0;
81048 assert( rc!=SQLITE_OK || pSorter->list.pList==0 );
81052 pSorter->list.szPMA += nPMA;
81053 if( nPMA>pSorter->mxKeysize ){
81054 pSorter->mxKeysize = nPMA;
81057 if( pSorter->list.aMemory ){
81058 int nMin = pSorter->iMemory + nReq;
81060 if( nMin>pSorter->nMemory ){
81062 int nNew = pSorter->nMemory * 2;
81064 if( nNew > pSorter->mxPmaSize ) nNew = pSorter->mxPmaSize;
81067 aNew = sqlite3Realloc(pSorter->list.aMemory, nNew);
81069 pSorter->list.pList = (SorterRecord*)(
81070 aNew + ((u8*)pSorter->list.pList - pSorter->list.aMemory)
81072 pSorter->list.aMemory = aNew;
81073 pSorter->nMemory = nNew;
81076 pNew = (SorterRecord*)&pSorter->list.aMemory[pSorter->iMemory];
81077 pSorter->iMemory += ROUND8(nReq);
81078 pNew->u.iNext = (int)((u8*)(pSorter->list.pList) - pSorter->list.aMemory);
81084 pNew->u.pNext = pSorter->list.pList;
81089 pSorter->list.pList = pNew;
81111 vdbePmaWriterInit(pOut->pFd, &writer, pTask->pSorter->pgsz, iStart);
81225 pIncr->mxSz = MAX(pTask->pSorter->mxKeysize+9,pTask->pSorter->mxPmaSize/2);
81408 sqlite3 *db = pTask->pSorter->db;
81636 VdbeSorter *pSorter, /* The VDBE cursor that implements the sort */
81647 assert( pSorter->bUseThreads || pSorter->nTask==1 );
81648 if( pSorter->nTask>1 ){
81649 pMain = vdbeMergeEngineNew(pSorter->nTask);
81654 for(iTask=0; rc==SQLITE_OK && iTask<pSorter->nTask; iTask++){
81655 SortSubtask *pTask = &pSorter->aTask[iTask];
81714 static int vdbeSorterSetupMerge(VdbeSorter *pSorter){
81716 SortSubtask *pTask0 = &pSorter->aTask[0];
81719 sqlite3 *db = pTask0->pSorter->db;
81721 SorterCompare xCompare = vdbeSorterGetCompare(pSorter);
81722 for(i=0; i<pSorter->nTask; i++){
81723 pSorter->aTask[i].xCompare = xCompare;
81727 rc = vdbeSorterMergeTreeBuild(pSorter, &pMain);
81730 assert( pSorter->bUseThreads==0 || pSorter->nTask>1 );
81731 if( pSorter->bUseThreads ){
81734 SortSubtask *pLast = &pSorter->aTask[pSorter->nTask-1];
81738 pSorter->pReader = pReadr;
81745 for(iTask=0; iTask<(pSorter->nTask-1); iTask++){
81752 for(iTask=0; rc==SQLITE_OK && iTask<pSorter->nTask; iTask++){
81764 (p->pIncr->pTask==&pSorter->aTask[iTask]) /* a */
81765 && (iTask!=pSorter->nTask-1 || p->pIncr->bUseThread==0) /* b */
81779 pSorter->pMerger = pMain;
81797 VdbeSorter *pSorter = pCsr->pSorter;
81800 assert( pSorter );
81805 if( pSorter->bUsePMA==0 ){
81806 if( pSorter->list.pList ){
81808 rc = vdbeSorterSort(&pSorter->aTask[0], &pSorter->list);
81819 assert( pSorter->list.pList );
81820 rc = vdbeSorterFlushPMA(pSorter);
81823 rc = vdbeSorterJoinAll(pSorter, rc);
81829 assert( pSorter->pReader==0 );
81831 rc = vdbeSorterSetupMerge(pSorter);
81843 VdbeSorter *pSorter = pCsr->pSorter;
81846 assert( pSorter->bUsePMA || (pSorter->pReader==0 && pSorter->pMerger==0) );
81847 if( pSorter->bUsePMA ){
81848 assert( pSorter->pReader==0 || pSorter->pMerger==0 );
81849 assert( pSorter->bUseThreads==0 || pSorter->pReader );
81850 assert( pSorter->bUseThreads==1 || pSorter->pMerger );
81852 if( pSorter->bUseThreads ){
81853 rc = vdbePmaReaderNext(pSorter->pReader);
81854 *pbEof = (pSorter->pReader->pFd==0);
81858 assert( pSorter->pMerger!=0 );
81859 assert( pSorter->pMerger->pTask==(&pSorter->aTask[0]) );
81860 rc = vdbeMergeEngineStep(pSorter->pMerger, pbEof);
81863 SorterRecord *pFree = pSorter->list.pList;
81864 pSorter->list.pList = pFree->u.pNext;
81866 if( pSorter->list.aMemory==0 ) vdbeSorterRecordFree(db, pFree);
81867 *pbEof = !pSorter->list.pList;
81878 const VdbeSorter *pSorter, /* Sorter object */
81882 if( pSorter->bUsePMA ){
81885 if( pSorter->bUseThreads ){
81886 pReader = pSorter->pReader;
81890 pReader = &pSorter->pMerger->aReadr[pSorter->pMerger->aTree[1]];
81895 *pnKey = pSorter->list.pList->nVal;
81896 pKey = SRVAL(pSorter->list.pList);
81905 VdbeSorter *pSorter = pCsr->pSorter;
81908 pKey = vdbeSorterRowkey(pSorter, &nKey);
81941 VdbeSorter *pSorter = pCsr->pSorter;
81942 UnpackedRecord *r2 = pSorter->pUnpacked;
81949 r2 = pSorter->pUnpacked = sqlite3VdbeAllocUnpackedRecord(pKeyInfo,0,0,&p);
81950 assert( pSorter->pUnpacked==(UnpackedRecord*)p );
81956 pKey = vdbeSorterRowkey(pSorter, &nKey);