pSorter 14586 ext/sqlite3/libsqlite/sqlite3.c VdbeSorter *pSorter; /* Sorter object for OP_SorterOpen cursors */ pSorter 70911 ext/sqlite3/libsqlite/sqlite3.c #define isSorter(x) ((x)->pSorter!=0) pSorter 74311 ext/sqlite3/libsqlite/sqlite3.c assert( pC->pSorter ); pSorter 75889 ext/sqlite3/libsqlite/sqlite3.c if( pC->pSorter ){ pSorter 75890 ext/sqlite3/libsqlite/sqlite3.c sqlite3VdbeSorterReset(db, pC->pSorter); pSorter 78196 ext/sqlite3/libsqlite/sqlite3.c VdbeSorter *pSorter; /* Sorter that owns this sub-task */ pSorter 78513 ext/sqlite3/libsqlite/sqlite3.c if( pFile->iEof<=(i64)(pTask->pSorter->db->nMaxSorterMmap) ){ pSorter 78549 ext/sqlite3/libsqlite/sqlite3.c int pgsz = pTask->pSorter->pgsz; pSorter 78663 ext/sqlite3/libsqlite/sqlite3.c sqlite3VdbeRecordUnpack(pTask->pSorter->pKeyInfo, nKey2, pKey2, r2); pSorter 78690 ext/sqlite3/libsqlite/sqlite3.c sqlite3VdbeRecordUnpack(pTask->pSorter->pKeyInfo, nKey2, pKey2, r2); pSorter 78724 ext/sqlite3/libsqlite/sqlite3.c if( pTask->pSorter->pKeyInfo->nField>1 ){ pSorter 78730 ext/sqlite3/libsqlite/sqlite3.c if( pTask->pSorter->pKeyInfo->aSortOrder[0] ){ pSorter 78794 ext/sqlite3/libsqlite/sqlite3.c if( pTask->pSorter->pKeyInfo->nField>1 ){ pSorter 78799 ext/sqlite3/libsqlite/sqlite3.c }else if( pTask->pSorter->pKeyInfo->aSortOrder[0] ){ pSorter 78833 ext/sqlite3/libsqlite/sqlite3.c VdbeSorter *pSorter; /* The new sorter */ pSorter 78865 ext/sqlite3/libsqlite/sqlite3.c pSorter = (VdbeSorter*)sqlite3DbMallocZero(db, sz + szKeyInfo); pSorter 78866 ext/sqlite3/libsqlite/sqlite3.c pCsr->pSorter = pSorter; pSorter 78867 ext/sqlite3/libsqlite/sqlite3.c if( pSorter==0 ){ pSorter 78870 ext/sqlite3/libsqlite/sqlite3.c pSorter->pKeyInfo = pKeyInfo = (KeyInfo*)((u8*)pSorter + sz); pSorter 78877 ext/sqlite3/libsqlite/sqlite3.c pSorter->pgsz = pgsz = sqlite3BtreeGetPageSize(db->aDb[0].pBt); pSorter 78878 ext/sqlite3/libsqlite/sqlite3.c pSorter->nTask = nWorker + 1; pSorter 78879 ext/sqlite3/libsqlite/sqlite3.c pSorter->iPrev = nWorker-1; pSorter 78880 ext/sqlite3/libsqlite/sqlite3.c pSorter->bUseThreads = (pSorter->nTask>1); pSorter 78881 ext/sqlite3/libsqlite/sqlite3.c pSorter->db = db; pSorter 78882 ext/sqlite3/libsqlite/sqlite3.c for(i=0; i<pSorter->nTask; i++){ pSorter 78883 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask = &pSorter->aTask[i]; pSorter 78884 ext/sqlite3/libsqlite/sqlite3.c pTask->pSorter = pSorter; pSorter 78889 ext/sqlite3/libsqlite/sqlite3.c pSorter->mnPmaSize = szPma * pgsz; pSorter 78892 ext/sqlite3/libsqlite/sqlite3.c pSorter->mxPmaSize = MIN((i64)mxCache*pgsz, SQLITE_MAX_PMASZ); pSorter 78899 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter->iMemory==0 ); pSorter 78900 ext/sqlite3/libsqlite/sqlite3.c pSorter->nMemory = pgsz; pSorter 78901 ext/sqlite3/libsqlite/sqlite3.c pSorter->list.aMemory = (u8*)sqlite3Malloc(pgsz); pSorter 78902 ext/sqlite3/libsqlite/sqlite3.c if( !pSorter->list.aMemory ) rc = SQLITE_NOMEM; pSorter 78909 ext/sqlite3/libsqlite/sqlite3.c pSorter->typeMask = SORTER_TYPE_INTEGER | SORTER_TYPE_TEXT; pSorter 78958 ext/sqlite3/libsqlite/sqlite3.c int iTask = (pTask - pTask->pSorter->aTask); pSorter 78959 ext/sqlite3/libsqlite/sqlite3.c sqlite3OsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t); pSorter 78972 ext/sqlite3/libsqlite/sqlite3.c int iTask = (pTask - pTask->pSorter->aTask); pSorter 78973 ext/sqlite3/libsqlite/sqlite3.c sqlite3OsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t); pSorter 78983 ext/sqlite3/libsqlite/sqlite3.c sqlite3OsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t); pSorter 79032 ext/sqlite3/libsqlite/sqlite3.c static int vdbeSorterJoinAll(VdbeSorter *pSorter, int rcin){ pSorter 79043 ext/sqlite3/libsqlite/sqlite3.c for(i=pSorter->nTask-1; i>=0; i--){ pSorter 79044 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask = &pSorter->aTask[i]; pSorter 79116 ext/sqlite3/libsqlite/sqlite3.c SQLITE_PRIVATE void sqlite3VdbeSorterReset(sqlite3 *db, VdbeSorter *pSorter){ pSorter 79118 ext/sqlite3/libsqlite/sqlite3.c (void)vdbeSorterJoinAll(pSorter, SQLITE_OK); pSorter 79119 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter->bUseThreads || pSorter->pReader==0 ); pSorter 79121 ext/sqlite3/libsqlite/sqlite3.c if( pSorter->pReader ){ pSorter 79122 ext/sqlite3/libsqlite/sqlite3.c vdbePmaReaderClear(pSorter->pReader); pSorter 79123 ext/sqlite3/libsqlite/sqlite3.c sqlite3DbFree(db, pSorter->pReader); pSorter 79124 ext/sqlite3/libsqlite/sqlite3.c pSorter->pReader = 0; pSorter 79127 ext/sqlite3/libsqlite/sqlite3.c vdbeMergeEngineFree(pSorter->pMerger); pSorter 79128 ext/sqlite3/libsqlite/sqlite3.c pSorter->pMerger = 0; pSorter 79129 ext/sqlite3/libsqlite/sqlite3.c for(i=0; i<pSorter->nTask; i++){ pSorter 79130 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask = &pSorter->aTask[i]; pSorter 79132 ext/sqlite3/libsqlite/sqlite3.c pTask->pSorter = pSorter; pSorter 79134 ext/sqlite3/libsqlite/sqlite3.c if( pSorter->list.aMemory==0 ){ pSorter 79135 ext/sqlite3/libsqlite/sqlite3.c vdbeSorterRecordFree(0, pSorter->list.pList); pSorter 79137 ext/sqlite3/libsqlite/sqlite3.c pSorter->list.pList = 0; pSorter 79138 ext/sqlite3/libsqlite/sqlite3.c pSorter->list.szPMA = 0; pSorter 79139 ext/sqlite3/libsqlite/sqlite3.c pSorter->bUsePMA = 0; pSorter 79140 ext/sqlite3/libsqlite/sqlite3.c pSorter->iMemory = 0; pSorter 79141 ext/sqlite3/libsqlite/sqlite3.c pSorter->mxKeysize = 0; pSorter 79142 ext/sqlite3/libsqlite/sqlite3.c sqlite3DbFree(db, pSorter->pUnpacked); pSorter 79143 ext/sqlite3/libsqlite/sqlite3.c pSorter->pUnpacked = 0; pSorter 79150 ext/sqlite3/libsqlite/sqlite3.c VdbeSorter *pSorter = pCsr->pSorter; pSorter 79151 ext/sqlite3/libsqlite/sqlite3.c if( pSorter ){ pSorter 79152 ext/sqlite3/libsqlite/sqlite3.c sqlite3VdbeSorterReset(db, pSorter); pSorter 79153 ext/sqlite3/libsqlite/sqlite3.c sqlite3_free(pSorter->list.aMemory); pSorter 79154 ext/sqlite3/libsqlite/sqlite3.c sqlite3DbFree(db, pSorter); pSorter 79155 ext/sqlite3/libsqlite/sqlite3.c pCsr->pSorter = 0; pSorter 79219 ext/sqlite3/libsqlite/sqlite3.c pTask->pSorter->pKeyInfo, 0, 0, &pFree pSorter 79223 ext/sqlite3/libsqlite/sqlite3.c pTask->pUnpacked->nField = pTask->pSorter->pKeyInfo->nField; pSorter 79293 ext/sqlite3/libsqlite/sqlite3.c pTask->xCompare = vdbeSorterGetCompare(pTask->pSorter); pSorter 79434 ext/sqlite3/libsqlite/sqlite3.c sqlite3 *db = pTask->pSorter->db; pSorter 79470 ext/sqlite3/libsqlite/sqlite3.c vdbePmaWriterInit(pTask->file.pFd, &writer, pTask->pSorter->pgsz, pSorter 79582 ext/sqlite3/libsqlite/sqlite3.c static int vdbeSorterFlushPMA(VdbeSorter *pSorter){ pSorter 79584 ext/sqlite3/libsqlite/sqlite3.c pSorter->bUsePMA = 1; pSorter 79585 ext/sqlite3/libsqlite/sqlite3.c return vdbeSorterListToPMA(&pSorter->aTask[0], &pSorter->list); pSorter 79590 ext/sqlite3/libsqlite/sqlite3.c int nWorker = (pSorter->nTask-1); pSorter 79594 ext/sqlite3/libsqlite/sqlite3.c pSorter->bUsePMA = 1; pSorter 79605 ext/sqlite3/libsqlite/sqlite3.c int iTest = (pSorter->iPrev + i + 1) % nWorker; pSorter 79606 ext/sqlite3/libsqlite/sqlite3.c pTask = &pSorter->aTask[iTest]; pSorter 79616 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterListToPMA(&pSorter->aTask[nWorker], &pSorter->list); pSorter 79624 ext/sqlite3/libsqlite/sqlite3.c assert( pTask->list.aMemory==0 || pSorter->list.aMemory!=0 ); pSorter 79626 ext/sqlite3/libsqlite/sqlite3.c pSorter->iPrev = (u8)(pTask - pSorter->aTask); pSorter 79627 ext/sqlite3/libsqlite/sqlite3.c pTask->list = pSorter->list; pSorter 79628 ext/sqlite3/libsqlite/sqlite3.c pSorter->list.pList = 0; pSorter 79629 ext/sqlite3/libsqlite/sqlite3.c pSorter->list.szPMA = 0; pSorter 79631 ext/sqlite3/libsqlite/sqlite3.c pSorter->list.aMemory = aMem; pSorter 79632 ext/sqlite3/libsqlite/sqlite3.c pSorter->nMemory = sqlite3MallocSize(aMem); pSorter 79633 ext/sqlite3/libsqlite/sqlite3.c }else if( pSorter->list.aMemory ){ pSorter 79634 ext/sqlite3/libsqlite/sqlite3.c pSorter->list.aMemory = sqlite3Malloc(pSorter->nMemory); pSorter 79635 ext/sqlite3/libsqlite/sqlite3.c if( !pSorter->list.aMemory ) return SQLITE_NOMEM; pSorter 79653 ext/sqlite3/libsqlite/sqlite3.c VdbeSorter *pSorter = pCsr->pSorter; pSorter 79664 ext/sqlite3/libsqlite/sqlite3.c pSorter->typeMask &= SORTER_TYPE_INTEGER; pSorter 79666 ext/sqlite3/libsqlite/sqlite3.c pSorter->typeMask &= SORTER_TYPE_TEXT; pSorter 79668 ext/sqlite3/libsqlite/sqlite3.c pSorter->typeMask = 0; pSorter 79671 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter ); pSorter 79691 ext/sqlite3/libsqlite/sqlite3.c if( pSorter->mxPmaSize ){ pSorter 79692 ext/sqlite3/libsqlite/sqlite3.c if( pSorter->list.aMemory ){ pSorter 79693 ext/sqlite3/libsqlite/sqlite3.c bFlush = pSorter->iMemory && (pSorter->iMemory+nReq) > pSorter->mxPmaSize; pSorter 79696 ext/sqlite3/libsqlite/sqlite3.c (pSorter->list.szPMA > pSorter->mxPmaSize) pSorter 79697 ext/sqlite3/libsqlite/sqlite3.c || (pSorter->list.szPMA > pSorter->mnPmaSize && sqlite3HeapNearlyFull()) pSorter 79701 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterFlushPMA(pSorter); pSorter 79702 ext/sqlite3/libsqlite/sqlite3.c pSorter->list.szPMA = 0; pSorter 79703 ext/sqlite3/libsqlite/sqlite3.c pSorter->iMemory = 0; pSorter 79704 ext/sqlite3/libsqlite/sqlite3.c assert( rc!=SQLITE_OK || pSorter->list.pList==0 ); pSorter 79708 ext/sqlite3/libsqlite/sqlite3.c pSorter->list.szPMA += nPMA; pSorter 79709 ext/sqlite3/libsqlite/sqlite3.c if( nPMA>pSorter->mxKeysize ){ pSorter 79710 ext/sqlite3/libsqlite/sqlite3.c pSorter->mxKeysize = nPMA; pSorter 79713 ext/sqlite3/libsqlite/sqlite3.c if( pSorter->list.aMemory ){ pSorter 79714 ext/sqlite3/libsqlite/sqlite3.c int nMin = pSorter->iMemory + nReq; pSorter 79716 ext/sqlite3/libsqlite/sqlite3.c if( nMin>pSorter->nMemory ){ pSorter 79718 ext/sqlite3/libsqlite/sqlite3.c int nNew = pSorter->nMemory * 2; pSorter 79720 ext/sqlite3/libsqlite/sqlite3.c if( nNew > pSorter->mxPmaSize ) nNew = pSorter->mxPmaSize; pSorter 79723 ext/sqlite3/libsqlite/sqlite3.c aNew = sqlite3Realloc(pSorter->list.aMemory, nNew); pSorter 79725 ext/sqlite3/libsqlite/sqlite3.c pSorter->list.pList = (SorterRecord*)( pSorter 79726 ext/sqlite3/libsqlite/sqlite3.c aNew + ((u8*)pSorter->list.pList - pSorter->list.aMemory) pSorter 79728 ext/sqlite3/libsqlite/sqlite3.c pSorter->list.aMemory = aNew; pSorter 79729 ext/sqlite3/libsqlite/sqlite3.c pSorter->nMemory = nNew; pSorter 79732 ext/sqlite3/libsqlite/sqlite3.c pNew = (SorterRecord*)&pSorter->list.aMemory[pSorter->iMemory]; pSorter 79733 ext/sqlite3/libsqlite/sqlite3.c pSorter->iMemory += ROUND8(nReq); pSorter 79734 ext/sqlite3/libsqlite/sqlite3.c pNew->u.iNext = (int)((u8*)(pSorter->list.pList) - pSorter->list.aMemory); pSorter 79740 ext/sqlite3/libsqlite/sqlite3.c pNew->u.pNext = pSorter->list.pList; pSorter 79745 ext/sqlite3/libsqlite/sqlite3.c pSorter->list.pList = pNew; pSorter 79767 ext/sqlite3/libsqlite/sqlite3.c vdbePmaWriterInit(pOut->pFd, &writer, pTask->pSorter->pgsz, iStart); pSorter 79881 ext/sqlite3/libsqlite/sqlite3.c pIncr->mxSz = MAX(pTask->pSorter->mxKeysize+9,pTask->pSorter->mxPmaSize/2); pSorter 80064 ext/sqlite3/libsqlite/sqlite3.c sqlite3 *db = pTask->pSorter->db; pSorter 80292 ext/sqlite3/libsqlite/sqlite3.c VdbeSorter *pSorter, /* The VDBE cursor that implements the sort */ pSorter 80303 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter->bUseThreads || pSorter->nTask==1 ); pSorter 80304 ext/sqlite3/libsqlite/sqlite3.c if( pSorter->nTask>1 ){ pSorter 80305 ext/sqlite3/libsqlite/sqlite3.c pMain = vdbeMergeEngineNew(pSorter->nTask); pSorter 80310 ext/sqlite3/libsqlite/sqlite3.c for(iTask=0; rc==SQLITE_OK && iTask<pSorter->nTask; iTask++){ pSorter 80311 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask = &pSorter->aTask[iTask]; pSorter 80370 ext/sqlite3/libsqlite/sqlite3.c static int vdbeSorterSetupMerge(VdbeSorter *pSorter){ pSorter 80372 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pTask0 = &pSorter->aTask[0]; pSorter 80375 ext/sqlite3/libsqlite/sqlite3.c sqlite3 *db = pTask0->pSorter->db; pSorter 80377 ext/sqlite3/libsqlite/sqlite3.c SorterCompare xCompare = vdbeSorterGetCompare(pSorter); pSorter 80378 ext/sqlite3/libsqlite/sqlite3.c for(i=0; i<pSorter->nTask; i++){ pSorter 80379 ext/sqlite3/libsqlite/sqlite3.c pSorter->aTask[i].xCompare = xCompare; pSorter 80383 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterMergeTreeBuild(pSorter, &pMain); pSorter 80386 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter->bUseThreads==0 || pSorter->nTask>1 ); pSorter 80387 ext/sqlite3/libsqlite/sqlite3.c if( pSorter->bUseThreads ){ pSorter 80390 ext/sqlite3/libsqlite/sqlite3.c SortSubtask *pLast = &pSorter->aTask[pSorter->nTask-1]; pSorter 80394 ext/sqlite3/libsqlite/sqlite3.c pSorter->pReader = pReadr; pSorter 80401 ext/sqlite3/libsqlite/sqlite3.c for(iTask=0; iTask<(pSorter->nTask-1); iTask++){ pSorter 80408 ext/sqlite3/libsqlite/sqlite3.c for(iTask=0; rc==SQLITE_OK && iTask<pSorter->nTask; iTask++){ pSorter 80420 ext/sqlite3/libsqlite/sqlite3.c (p->pIncr->pTask==&pSorter->aTask[iTask]) /* a */ pSorter 80421 ext/sqlite3/libsqlite/sqlite3.c && (iTask!=pSorter->nTask-1 || p->pIncr->bUseThread==0) /* b */ pSorter 80435 ext/sqlite3/libsqlite/sqlite3.c pSorter->pMerger = pMain; pSorter 80453 ext/sqlite3/libsqlite/sqlite3.c VdbeSorter *pSorter = pCsr->pSorter; pSorter 80456 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter ); pSorter 80461 ext/sqlite3/libsqlite/sqlite3.c if( pSorter->bUsePMA==0 ){ pSorter 80462 ext/sqlite3/libsqlite/sqlite3.c if( pSorter->list.pList ){ pSorter 80464 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterSort(&pSorter->aTask[0], &pSorter->list); pSorter 80475 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter->list.pList ); pSorter 80476 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterFlushPMA(pSorter); pSorter 80479 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterJoinAll(pSorter, rc); pSorter 80485 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter->pReader==0 ); pSorter 80487 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeSorterSetupMerge(pSorter); pSorter 80499 ext/sqlite3/libsqlite/sqlite3.c VdbeSorter *pSorter = pCsr->pSorter; pSorter 80502 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter->bUsePMA || (pSorter->pReader==0 && pSorter->pMerger==0) ); pSorter 80503 ext/sqlite3/libsqlite/sqlite3.c if( pSorter->bUsePMA ){ pSorter 80504 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter->pReader==0 || pSorter->pMerger==0 ); pSorter 80505 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter->bUseThreads==0 || pSorter->pReader ); pSorter 80506 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter->bUseThreads==1 || pSorter->pMerger ); pSorter 80508 ext/sqlite3/libsqlite/sqlite3.c if( pSorter->bUseThreads ){ pSorter 80509 ext/sqlite3/libsqlite/sqlite3.c rc = vdbePmaReaderNext(pSorter->pReader); pSorter 80510 ext/sqlite3/libsqlite/sqlite3.c *pbEof = (pSorter->pReader->pFd==0); pSorter 80514 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter->pMerger!=0 ); pSorter 80515 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter->pMerger->pTask==(&pSorter->aTask[0]) ); pSorter 80516 ext/sqlite3/libsqlite/sqlite3.c rc = vdbeMergeEngineStep(pSorter->pMerger, pbEof); pSorter 80519 ext/sqlite3/libsqlite/sqlite3.c SorterRecord *pFree = pSorter->list.pList; pSorter 80520 ext/sqlite3/libsqlite/sqlite3.c pSorter->list.pList = pFree->u.pNext; pSorter 80522 ext/sqlite3/libsqlite/sqlite3.c if( pSorter->list.aMemory==0 ) vdbeSorterRecordFree(db, pFree); pSorter 80523 ext/sqlite3/libsqlite/sqlite3.c *pbEof = !pSorter->list.pList; pSorter 80534 ext/sqlite3/libsqlite/sqlite3.c const VdbeSorter *pSorter, /* Sorter object */ pSorter 80538 ext/sqlite3/libsqlite/sqlite3.c if( pSorter->bUsePMA ){ pSorter 80541 ext/sqlite3/libsqlite/sqlite3.c if( pSorter->bUseThreads ){ pSorter 80542 ext/sqlite3/libsqlite/sqlite3.c pReader = pSorter->pReader; pSorter 80546 ext/sqlite3/libsqlite/sqlite3.c pReader = &pSorter->pMerger->aReadr[pSorter->pMerger->aTree[1]]; pSorter 80551 ext/sqlite3/libsqlite/sqlite3.c *pnKey = pSorter->list.pList->nVal; pSorter 80552 ext/sqlite3/libsqlite/sqlite3.c pKey = SRVAL(pSorter->list.pList); pSorter 80561 ext/sqlite3/libsqlite/sqlite3.c VdbeSorter *pSorter = pCsr->pSorter; pSorter 80564 ext/sqlite3/libsqlite/sqlite3.c pKey = vdbeSorterRowkey(pSorter, &nKey); pSorter 80597 ext/sqlite3/libsqlite/sqlite3.c VdbeSorter *pSorter = pCsr->pSorter; pSorter 80598 ext/sqlite3/libsqlite/sqlite3.c UnpackedRecord *r2 = pSorter->pUnpacked; pSorter 80605 ext/sqlite3/libsqlite/sqlite3.c r2 = pSorter->pUnpacked = sqlite3VdbeAllocUnpackedRecord(pKeyInfo,0,0,&p); pSorter 80606 ext/sqlite3/libsqlite/sqlite3.c assert( pSorter->pUnpacked==(UnpackedRecord*)p ); pSorter 80612 ext/sqlite3/libsqlite/sqlite3.c pKey = vdbeSorterRowkey(pSorter, &nKey);