pTask 78156 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask; /* Used by this thread only */ pTask 78295 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask; /* Task that owns this merger */ pTask 78511 ext/sqlite3/libsqlite/sqlite3.c static int vdbeSorterMapFile(SortSubtask *pTask, SorterFile *pFile, u8 **pp){ pTask 78513 ext/sqlite3/libsqlite/sqlite3.c if( pFile->iEof<=(i64)(pTask->pSorter->db->nMaxSorterMmap) ){ pTask 78529 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask, /* Task context */ pTask 78547 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterMapFile(pTask, pFile, &pReadr->aMap); pTask 78549 ext/sqlite3/libsqlite/sqlite3.c int pgsz = pTask->pSorter->pgsz; pTask 78587 ext/sqlite3/libsqlite/sqlite3.c pIncr->pTask, pReadr, &pIncr->aFile[0], pIncr->iStartOff pTask 78623 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask, /* Task context */ pTask 78636 ext/sqlite3/libsqlite/sqlite3.c rc = vdbePmaReaderSeek(pTask, pReadr, pFile, iStart); pTask 78656 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask, /* Subtask context (for pKeyInfo) */ pTask 78661 ext/sqlite3/libsqlite/sqlite3.c UnpackedRecord *r2 = pTask->pUnpacked; pTask 78663 ext/sqlite3/libsqlite/sqlite3.c sqlite3VdbeRecordUnpack(pTask->pSorter->pKeyInfo, nKey2, pKey2, r2); pTask 78683 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask, /* Subtask context (for pKeyInfo) */ pTask 78688 ext/sqlite3/libsqlite/sqlite3.c UnpackedRecord *r2 = pTask->pUnpacked; pTask 78690 ext/sqlite3/libsqlite/sqlite3.c sqlite3VdbeRecordUnpack(pTask->pSorter->pKeyInfo, nKey2, pKey2, r2); pTask 78702 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask, /* Subtask context (for pKeyInfo) */ pTask 78724 ext/sqlite3/libsqlite/sqlite3.c if( pTask->pSorter->pKeyInfo->nField>1 ){ pTask 78726 ext/sqlite3/libsqlite/sqlite3.c pTask, pbKey2Cached, pKey1, nKey1, pKey2, nKey2 pTask 78730 ext/sqlite3/libsqlite/sqlite3.c if( pTask->pSorter->pKeyInfo->aSortOrder[0] ){ pTask 78743 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask, /* Subtask context (for pKeyInfo) */ pTask 78794 ext/sqlite3/libsqlite/sqlite3.c if( pTask->pSorter->pKeyInfo->nField>1 ){ pTask 78796 ext/sqlite3/libsqlite/sqlite3.c pTask, pbKey2Cached, pKey1, nKey1, pKey2, nKey2 pTask 78799 ext/sqlite3/libsqlite/sqlite3.c }else if( pTask->pSorter->pKeyInfo->aSortOrder[0] ){ pTask 78883 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask = &pSorter->aTask[i]; pTask 78884 ext/sqlite3/libsqlite/sqlite3.c pTask->pSorter = pSorter; pTask 78933 ext/sqlite3/libsqlite/sqlite3.c static void vdbeSortSubtaskCleanup(sqlite3 *db, SortSubtask *pTask){ pTask 78934 ext/sqlite3/libsqlite/sqlite3.c sqlite3DbFree(db, pTask->pUnpacked); pTask 78938 ext/sqlite3/libsqlite/sqlite3.c if( pTask->list.aMemory ){ pTask 78939 ext/sqlite3/libsqlite/sqlite3.c sqlite3_free(pTask->list.aMemory); pTask 78943 ext/sqlite3/libsqlite/sqlite3.c assert( pTask->list.aMemory==0 ); pTask 78944 ext/sqlite3/libsqlite/sqlite3.c vdbeSorterRecordFree(0, pTask->list.pList); pTask 78946 ext/sqlite3/libsqlite/sqlite3.c if( pTask->file.pFd ){ pTask 78947 ext/sqlite3/libsqlite/sqlite3.c sqlite3OsCloseFree(pTask->file.pFd); pTask 78949 ext/sqlite3/libsqlite/sqlite3.c if( pTask->file2.pFd ){ pTask 78950 ext/sqlite3/libsqlite/sqlite3.c sqlite3OsCloseFree(pTask->file2.pFd); pTask 78952 ext/sqlite3/libsqlite/sqlite3.c memset(pTask, 0, sizeof(SortSubtask)); pTask 78956 ext/sqlite3/libsqlite/sqlite3.c static void vdbeSorterWorkDebug(SortSubtask *pTask, const char *zEvent){ pTask 78958 ext/sqlite3/libsqlite/sqlite3.c int iTask = (pTask - pTask->pSorter->aTask); pTask 78959 ext/sqlite3/libsqlite/sqlite3.c sqlite3OsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t); pTask 78968 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask, pTask 78972 ext/sqlite3/libsqlite/sqlite3.c int iTask = (pTask - pTask->pSorter->aTask); pTask 78973 ext/sqlite3/libsqlite/sqlite3.c sqlite3OsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t); pTask 78977 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask, pTask 78983 ext/sqlite3/libsqlite/sqlite3.c sqlite3OsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t); pTask 78998 ext/sqlite3/libsqlite/sqlite3.c static int vdbeSorterJoinThread(SortSubtask *pTask){ pTask 79000 ext/sqlite3/libsqlite/sqlite3.c if( pTask->pThread ){ pTask 79002 ext/sqlite3/libsqlite/sqlite3.c int bDone = pTask->bDone; pTask 79005 ext/sqlite3/libsqlite/sqlite3.c vdbeSorterBlockDebug(pTask, !bDone, "enter"); pTask 79006 ext/sqlite3/libsqlite/sqlite3.c (void)sqlite3ThreadJoin(pTask->pThread, &pRet); pTask 79007 ext/sqlite3/libsqlite/sqlite3.c vdbeSorterBlockDebug(pTask, !bDone, "exit"); pTask 79009 ext/sqlite3/libsqlite/sqlite3.c assert( pTask->bDone==1 ); pTask 79010 ext/sqlite3/libsqlite/sqlite3.c pTask->bDone = 0; pTask 79011 ext/sqlite3/libsqlite/sqlite3.c pTask->pThread = 0; pTask 79020 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask, /* Thread will use this task object */ pTask 79024 ext/sqlite3/libsqlite/sqlite3.c assert( pTask->pThread==0 && pTask->bDone==0 ); pTask 79025 ext/sqlite3/libsqlite/sqlite3.c return sqlite3ThreadCreate(&pTask->pThread, xTask, pIn); pTask 79044 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask = &pSorter->aTask[i]; pTask 79045 ext/sqlite3/libsqlite/sqlite3.c int rc2 = vdbeSorterJoinThread(pTask); pTask 79052 ext/sqlite3/libsqlite/sqlite3.c # define vdbeSorterJoinThread(pTask) SQLITE_OK pTask 79075 ext/sqlite3/libsqlite/sqlite3.c pNew->pTask = 0; pTask 79103 ext/sqlite3/libsqlite/sqlite3.c vdbeSorterJoinThread(pIncr->pTask); pTask 79130 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask = &pSorter->aTask[i]; pTask 79131 ext/sqlite3/libsqlite/sqlite3.c vdbeSortSubtaskCleanup(db, pTask); pTask 79132 ext/sqlite3/libsqlite/sqlite3.c pTask->pSorter = pSorter; pTask 79215 ext/sqlite3/libsqlite/sqlite3.c static int vdbeSortAllocUnpacked(SortSubtask *pTask){ pTask 79216 ext/sqlite3/libsqlite/sqlite3.c if( pTask->pUnpacked==0 ){ pTask 79218 ext/sqlite3/libsqlite/sqlite3.c pTask->pUnpacked = sqlite3VdbeAllocUnpackedRecord( pTask 79219 ext/sqlite3/libsqlite/sqlite3.c pTask->pSorter->pKeyInfo, 0, 0, &pFree pTask 79221 ext/sqlite3/libsqlite/sqlite3.c assert( pTask->pUnpacked==(UnpackedRecord*)pFree ); pTask 79223 ext/sqlite3/libsqlite/sqlite3.c pTask->pUnpacked->nField = pTask->pSorter->pKeyInfo->nField; pTask 79224 ext/sqlite3/libsqlite/sqlite3.c pTask->pUnpacked->errCode = 0; pTask 79235 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask, /* Calling thread context */ pTask 79246 ext/sqlite3/libsqlite/sqlite3.c res = pTask->xCompare( pTask 79247 ext/sqlite3/libsqlite/sqlite3.c pTask, &bCached, SRVAL(p1), p1->nVal, SRVAL(p2), p2->nVal pTask 79283 ext/sqlite3/libsqlite/sqlite3.c static int vdbeSorterSort(SortSubtask *pTask, SorterList *pList){ pTask 79289 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSortAllocUnpacked(pTask); pTask 79293 ext/sqlite3/libsqlite/sqlite3.c pTask->xCompare = vdbeSorterGetCompare(pTask->pSorter); pTask 79315 ext/sqlite3/libsqlite/sqlite3.c vdbeSorterMerge(pTask, p, aSlot[i], &p); pTask 79324 ext/sqlite3/libsqlite/sqlite3.c vdbeSorterMerge(pTask, p, aSlot[i], &p); pTask 79329 ext/sqlite3/libsqlite/sqlite3.c assert( pTask->pUnpacked->errCode==SQLITE_OK pTask 79330 ext/sqlite3/libsqlite/sqlite3.c || pTask->pUnpacked->errCode==SQLITE_NOMEM pTask 79332 ext/sqlite3/libsqlite/sqlite3.c return pTask->pUnpacked->errCode; pTask 79433 ext/sqlite3/libsqlite/sqlite3.c static int vdbeSorterListToPMA(SortSubtask *pTask, SorterList *pList){ pTask 79434 ext/sqlite3/libsqlite/sqlite3.c sqlite3 *db = pTask->pSorter->db; pTask 79441 ext/sqlite3/libsqlite/sqlite3.c i64 iSz = pList->szPMA + sqlite3VarintLen(pList->szPMA) + pTask->file.iEof; pTask 79444 ext/sqlite3/libsqlite/sqlite3.c vdbeSorterWorkDebug(pTask, "enter"); pTask 79449 ext/sqlite3/libsqlite/sqlite3.c if( pTask->file.pFd==0 ){ pTask 79450 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterOpenTempFile(db, 0, &pTask->file.pFd); pTask 79451 ext/sqlite3/libsqlite/sqlite3.c assert( rc!=SQLITE_OK || pTask->file.pFd ); pTask 79452 ext/sqlite3/libsqlite/sqlite3.c assert( pTask->file.iEof==0 ); pTask 79453 ext/sqlite3/libsqlite/sqlite3.c assert( pTask->nPMA==0 ); pTask 79458 ext/sqlite3/libsqlite/sqlite3.c vdbeSorterExtendFile(db, pTask->file.pFd, pTask->file.iEof+pList->szPMA+9); pTask 79463 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterSort(pTask, pList); pTask 79470 ext/sqlite3/libsqlite/sqlite3.c vdbePmaWriterInit(pTask->file.pFd, &writer, pTask->pSorter->pgsz, pTask 79471 ext/sqlite3/libsqlite/sqlite3.c pTask->file.iEof); pTask 79472 ext/sqlite3/libsqlite/sqlite3.c pTask->nPMA++; pTask 79481 ext/sqlite3/libsqlite/sqlite3.c rc = vdbePmaWriterFinish(&writer, &pTask->file.iEof); pTask 79484 ext/sqlite3/libsqlite/sqlite3.c vdbeSorterWorkDebug(pTask, "exit"); pTask 79486 ext/sqlite3/libsqlite/sqlite3.c assert( rc!=SQLITE_OK || pTask->file.iEof==iSz ); pTask 79503 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask = pMerger->pTask; pTask 79528 ext/sqlite3/libsqlite/sqlite3.c iRes = pTask->xCompare(pTask, &bCached, pTask 79561 ext/sqlite3/libsqlite/sqlite3.c return (rc==SQLITE_OK ? pTask->pUnpacked->errCode : rc); pTask 79569 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask = (SortSubtask*)pCtx; pTask 79571 ext/sqlite3/libsqlite/sqlite3.c assert( pTask->bDone==0 ); pTask 79572 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterListToPMA(pTask, &pTask->list); pTask 79573 ext/sqlite3/libsqlite/sqlite3.c pTask->bDone = 1; pTask 79589 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask = 0; /* Thread context used to create new PMA */ pTask 79606 ext/sqlite3/libsqlite/sqlite3.c pTask = &pSorter->aTask[iTest]; pTask 79607 ext/sqlite3/libsqlite/sqlite3.c if( pTask->bDone ){ pTask 79608 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterJoinThread(pTask); pTask 79610 ext/sqlite3/libsqlite/sqlite3.c if( rc!=SQLITE_OK || pTask->pThread==0 ) break; pTask 79619 ext/sqlite3/libsqlite/sqlite3.c u8 *aMem = pTask->list.aMemory; pTask 79620 ext/sqlite3/libsqlite/sqlite3.c void *pCtx = (void*)pTask; pTask 79622 ext/sqlite3/libsqlite/sqlite3.c assert( pTask->pThread==0 && pTask->bDone==0 ); pTask 79623 ext/sqlite3/libsqlite/sqlite3.c assert( pTask->list.pList==0 ); pTask 79624 ext/sqlite3/libsqlite/sqlite3.c assert( pTask->list.aMemory==0 || pSorter->list.aMemory!=0 ); pTask 79626 ext/sqlite3/libsqlite/sqlite3.c pSorter->iPrev = (u8)(pTask - pSorter->aTask); pTask 79627 ext/sqlite3/libsqlite/sqlite3.c pTask->list = pSorter->list; pTask 79638 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterCreateThread(pTask, vdbeSorterFlushThread, pCtx); pTask 79760 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask = pIncr->pTask; pTask 79765 ext/sqlite3/libsqlite/sqlite3.c vdbeSorterPopulateDebug(pTask, "enter"); pTask 79767 ext/sqlite3/libsqlite/sqlite3.c vdbePmaWriterInit(pOut->pFd, &writer, pTask->pSorter->pgsz, iStart); pTask 79782 ext/sqlite3/libsqlite/sqlite3.c assert( pIncr->pMerger->pTask==pTask ); pTask 79788 ext/sqlite3/libsqlite/sqlite3.c vdbeSorterPopulateDebug(pTask, "exit"); pTask 79800 ext/sqlite3/libsqlite/sqlite3.c pIncr->pTask->bDone = 1; pTask 79810 ext/sqlite3/libsqlite/sqlite3.c return vdbeSorterCreateThread(pIncr->pTask, vdbeIncrPopulateThread, p); pTask 79836 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterJoinThread(pIncr->pTask); pTask 79871 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask, /* The thread that will be using the new IncrMerger */ pTask 79880 ext/sqlite3/libsqlite/sqlite3.c pIncr->pTask = pTask; pTask 79881 ext/sqlite3/libsqlite/sqlite3.c pIncr->mxSz = MAX(pTask->pSorter->mxKeysize+9,pTask->pSorter->mxPmaSize/2); pTask 79882 ext/sqlite3/libsqlite/sqlite3.c pTask->file2.iEof += pIncr->mxSz; pTask 79896 ext/sqlite3/libsqlite/sqlite3.c pIncr->pTask->file2.iEof -= pIncr->mxSz; pTask 79935 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask = pMerger->pTask; pTask 79938 ext/sqlite3/libsqlite/sqlite3.c assert( pTask->pUnpacked!=0 ); /* from vdbeSortSubtaskMain() */ pTask 79939 ext/sqlite3/libsqlite/sqlite3.c res = pTask->xCompare( pTask 79940 ext/sqlite3/libsqlite/sqlite3.c pTask, &bCached, p1->aKey, p1->nKey, p2->aKey, p2->nKey pTask 79990 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask, /* Thread that will run pMerger */ pTask 80002 ext/sqlite3/libsqlite/sqlite3.c assert( pMerger->pTask==0 ); pTask 80003 ext/sqlite3/libsqlite/sqlite3.c pMerger->pTask = pTask; pTask 80024 ext/sqlite3/libsqlite/sqlite3.c return pTask->pUnpacked->errCode; pTask 80063 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask = pIncr->pTask; pTask 80064 ext/sqlite3/libsqlite/sqlite3.c sqlite3 *db = pTask->pSorter->db; pTask 80069 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeMergeEngineInit(pTask, pIncr->pMerger, eMode); pTask 80085 ext/sqlite3/libsqlite/sqlite3.c if( pTask->file2.pFd==0 ){ pTask 80086 ext/sqlite3/libsqlite/sqlite3.c assert( pTask->file2.iEof>0 ); pTask 80087 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterOpenTempFile(db, pTask->file2.iEof, &pTask->file2.pFd); pTask 80088 ext/sqlite3/libsqlite/sqlite3.c pTask->file2.iEof = 0; pTask 80091 ext/sqlite3/libsqlite/sqlite3.c pIncr->aFile[1].pFd = pTask->file2.pFd; pTask 80092 ext/sqlite3/libsqlite/sqlite3.c pIncr->iStartOff = pTask->file2.iEof; pTask 80093 ext/sqlite3/libsqlite/sqlite3.c pTask->file2.iEof += mxSz; pTask 80132 ext/sqlite3/libsqlite/sqlite3.c pReader->pIncr->pTask->bDone = 1; pTask 80156 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterCreateThread(pIncr->pTask, vdbePmaReaderBgIncrInit, pCtx); pTask 80179 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask, /* Sorter task to read from */ pTask 80195 ext/sqlite3/libsqlite/sqlite3.c rc = vdbePmaReaderInit(pTask, &pTask->file, iOff, pReadr, &nDummy); pTask 80236 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask, /* Task context */ pTask 80248 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeIncrMergerNew(pTask, pLeaf, &pIncr); pTask 80263 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeIncrMergerNew(pTask, pNew, &pReadr->pIncr); pTask 80311 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask = &pSorter->aTask[iTask]; pTask 80312 ext/sqlite3/libsqlite/sqlite3.c assert( pTask->nPMA>0 || SQLITE_MAX_WORKER_THREADS>0 ); pTask 80313 ext/sqlite3/libsqlite/sqlite3.c if( SQLITE_MAX_WORKER_THREADS==0 || pTask->nPMA ){ pTask 80315 ext/sqlite3/libsqlite/sqlite3.c int nDepth = vdbeSorterTreeDepth(pTask->nPMA); pTask 80318 ext/sqlite3/libsqlite/sqlite3.c if( pTask->nPMA<=SORTER_MAX_MERGE_COUNT ){ pTask 80319 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeMergeEngineLevel0(pTask, pTask->nPMA, &iReadOff, &pRoot); pTask 80325 ext/sqlite3/libsqlite/sqlite3.c for(i=0; i<pTask->nPMA && rc==SQLITE_OK; i += SORTER_MAX_MERGE_COUNT){ pTask 80329 ext/sqlite3/libsqlite/sqlite3.c nReader = MIN(pTask->nPMA - i, SORTER_MAX_MERGE_COUNT); pTask 80330 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeMergeEngineLevel0(pTask, nReader, &iReadOff, &pMerger); pTask 80332 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterAddToTree(pTask, nDepth, iSeq++, pRoot, pMerger); pTask 80340 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeIncrMergerNew(pTask, pRoot, &pMain->aReadr[iTask].pIncr); pTask 80405 ext/sqlite3/libsqlite/sqlite3.c assert( pIncr->pTask!=pLast ); pTask 80420 ext/sqlite3/libsqlite/sqlite3.c (p->pIncr->pTask==&pSorter->aTask[iTask]) /* a */ pTask 80515 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter->pMerger->pTask==(&pSorter->aTask[0]) );