Lines Matching refs:pWriter
59859 Btree *pWriter; /* Btree with currently open write transaction */
60707 assert( eLock==READ_LOCK || (p==pBt->pWriter && p->inTrans==TRANS_WRITE) );
60718 if( pBt->pWriter!=p && (pBt->btsFlags & BTS_EXCLUSIVE)!=0 ){
60719 sqlite3ConnectionBlocked(p->db, pBt->pWriter->db);
60738 assert( p==pBt->pWriter );
60840 assert( (pBt->btsFlags & BTS_EXCLUSIVE)==0 || pBt->pWriter==pLock->pBtree );
60853 assert( (pBt->btsFlags & BTS_PENDING)==0 || pBt->pWriter );
60854 if( pBt->pWriter==p ){
60855 pBt->pWriter = 0;
60876 if( pBt->pWriter==p ){
60878 pBt->pWriter = 0;
63742 pBlock = pBt->pWriter->db;
63814 assert( !pBt->pWriter );
63815 pBt->pWriter = p;
161134 SegmentWriter *pWriter = *ppWriter;
161136 if( !pWriter ){
161141 pWriter = (SegmentWriter *)sqlite3_malloc(sizeof(SegmentWriter));
161142 if( !pWriter ) return SQLITE_NOMEM;
161143 memset(pWriter, 0, sizeof(SegmentWriter));
161144 *ppWriter = pWriter;
161147 pWriter->aData = (char *)sqlite3_malloc(p->nNodeSize);
161148 if( !pWriter->aData ) return SQLITE_NOMEM;
161149 pWriter->nSize = p->nNodeSize;
161155 pWriter->iFree = sqlite3_column_int64(pStmt, 0);
161156 pWriter->iFirst = pWriter->iFree;
161161 nData = pWriter->nData;
161163 nPrefix = fts3PrefixCompress(pWriter->zTerm, pWriter->nTerm, zTerm, nTerm);
161177 rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, nData);
161194 rc = fts3NodeAddTerm(p, &pWriter->pTree, isCopyTerm, zTerm, nPrefix+1);
161198 pWriter->nTerm = 0;
161210 pWriter->nLeafData += nReq;
161215 if( nReq>pWriter->nSize ){
161216 char *aNew = sqlite3_realloc(pWriter->aData, nReq);
161218 pWriter->aData = aNew;
161219 pWriter->nSize = nReq;
161221 assert( nData+nReq<=pWriter->nSize );
161224 nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nPrefix);
161225 nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nSuffix);
161226 memcpy(&pWriter->aData[nData], &zTerm[nPrefix], nSuffix);
161228 nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nDoclist);
161229 memcpy(&pWriter->aData[nData], aDoclist, nDoclist);
161230 pWriter->nData = nData + nDoclist;
161238 if( nTerm>pWriter->nMalloc ){
161239 char *zNew = sqlite3_realloc(pWriter->zMalloc, nTerm*2);
161243 pWriter->nMalloc = nTerm*2;
161244 pWriter->zMalloc = zNew;
161245 pWriter->zTerm = zNew;
161247 assert( pWriter->zTerm==pWriter->zMalloc );
161248 memcpy(pWriter->zTerm, zTerm, nTerm);
161250 pWriter->zTerm = (char *)zTerm;
161252 pWriter->nTerm = nTerm;
161265 SegmentWriter *pWriter, /* SegmentWriter to flush to the db */
161270 if( pWriter->pTree ){
161276 iLastLeaf = pWriter->iFree;
161277 rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, pWriter->nData);
161279 rc = fts3NodeWrite(p, pWriter->pTree, 1,
161280 pWriter->iFirst, pWriter->iFree, &iLast, &zRoot, &nRoot);
161284 pWriter->iFirst, iLastLeaf, iLast, pWriter->nLeafData, zRoot, nRoot);
161289 0, 0, 0, pWriter->nLeafData, pWriter->aData, pWriter->nData);
161299 static void fts3SegWriterFree(SegmentWriter *pWriter){
161300 if( pWriter ){
161301 sqlite3_free(pWriter->aData);
161302 sqlite3_free(pWriter->zMalloc);
161303 fts3NodeFree(pWriter->pTree);
161304 sqlite3_free(pWriter);
162093 SegmentWriter *pWriter = 0; /* Used to write the new, merged, segment */
162150 rc = fts3SegWriterAdd(p, &pWriter, 1,
162154 assert( pWriter || bIgnoreEmpty );
162162 if( pWriter ){
162163 rc = fts3SegWriterFlush(p, pWriter, iNewLevel, iIdx);
162166 rc = fts3PromoteSegments(p, iNewLevel, pWriter->nLeafData);
162172 fts3SegWriterFree(pWriter);
162715 IncrmergeWriter *pWriter, /* Writer object */
162719 sqlite3_int64 iPtr = pWriter->aNodeWriter[0].iBlock;
162725 NodeWriter *pNode = &pWriter->aNodeWriter[iLayer];
162866 IncrmergeWriter *pWriter, /* Writer object */
162879 pLeaf = &pWriter->aNodeWriter[0];
162892 pWriter->nWork++;
162907 rc = fts3IncrmergePush(p, pWriter, zTerm, nPrefix+1);
162921 pWriter->nLeafData += nSpace;
162951 IncrmergeWriter *pWriter, /* Merge-writer object */
162964 NodeWriter *pNode = &pWriter->aNodeWriter[iRoot];
162991 Blob *pBlock = &pWriter->aNodeWriter[1].block;
162996 &pBlock->a[1], pWriter->aNodeWriter[0].iBlock
163001 pRoot = &pWriter->aNodeWriter[iRoot];
163005 NodeWriter *pNode = &pWriter->aNodeWriter[i];
163016 pWriter->iAbsLevel+1, /* level */
163017 pWriter->iIdx, /* idx */
163018 pWriter->iStart, /* start_block */
163019 pWriter->aNodeWriter[0].iBlock, /* leaves_end_block */
163020 pWriter->iEnd, /* end_block */
163021 (pWriter->bNoLeafData==0 ? pWriter->nLeafData : 0), /* end_block */
163102 IncrmergeWriter *pWriter /* Populate this object */
163123 fts3ReadEndBlockField(pSelect, 3, &iEnd, &pWriter->nLeafData);
163124 if( pWriter->nLeafData<0 ){
163125 pWriter->nLeafData = pWriter->nLeafData * -1;
163127 pWriter->bNoLeafData = (pWriter->nLeafData==0);
163166 pWriter->nLeafEst = (int)((iEnd - iStart) + 1)/FTS_MAX_APPENDABLE_HEIGHT;
163167 pWriter->iStart = iStart;
163168 pWriter->iEnd = iEnd;
163169 pWriter->iAbsLevel = iAbsLevel;
163170 pWriter->iIdx = iIdx;
163173 pWriter->aNodeWriter[i].iBlock = pWriter->iStart + i*pWriter->nLeafEst;
163176 pNode = &pWriter->aNodeWriter[nHeight];
163177 pNode->iBlock = pWriter->iStart + pWriter->nLeafEst*nHeight;
163186 pNode = &pWriter->aNodeWriter[i];
163197 pNode = &pWriter->aNodeWriter[i-1];
163278 IncrmergeWriter *pWriter /* Populate this object */
163302 pWriter->iStart = sqlite3_column_int64(pFirstBlock, 0);
163303 pWriter->iEnd = pWriter->iStart - 1;
163304 pWriter->iEnd += nLeafEst * FTS_MAX_APPENDABLE_HEIGHT;
163313 rc = fts3WriteSegment(p, pWriter->iEnd, 0, 0);
163316 pWriter->iAbsLevel = iAbsLevel;
163317 pWriter->nLeafEst = nLeafEst;
163318 pWriter->iIdx = iIdx;
163322 pWriter->aNodeWriter[i].iBlock = pWriter->iStart + i*pWriter->nLeafEst;
163739 IncrmergeWriter *pWriter; /* Writer object */
163746 const int nAlloc = sizeof(*pCsr) + sizeof(*pFilter) + sizeof(*pWriter);
163747 pWriter = (IncrmergeWriter *)sqlite3_malloc(nAlloc);
163748 if( !pWriter ) return SQLITE_NOMEM;
163749 pFilter = (Fts3SegFilter *)&pWriter[1];
163810 memset(pWriter, 0, nAlloc);
163835 rc = fts3IncrmergeLoad(p, iAbsLevel, iIdx-1, zKey, nKey, pWriter);
163837 rc = fts3IncrmergeWriter(p, iAbsLevel, iIdx, pCsr, pWriter);
163840 if( rc==SQLITE_OK && pWriter->nLeafEst ){
163843 rc = fts3IncrmergeAppend(p, pWriter, pCsr);
163845 if( pWriter->nWork>=nRem && rc==SQLITE_ROW ) rc = SQLITE_OK;
163850 nRem -= (1 + pWriter->nWork);
163860 pWriter->nLeafData = pWriter->nLeafData * -1;
163862 fts3IncrmergeRelease(p, pWriter, &rc);
163863 if( nSeg==0 && pWriter->bNoLeafData==0 ){
163864 fts3PromoteSegments(p, iAbsLevel+1, pWriter->nLeafData);
163876 sqlite3_free(pWriter);
175671 sqlite3_stmt *pWriter;
175689 pWriter = pIter->pDelete;
175691 pWriter = pIter->pInsert;
175712 p->rc = sqlite3_bind_value(pWriter, i+1, pVal);
175731 p->rc = sqlite3_bind_value(pWriter, pIter->nCol+1, pVal);
175735 sqlite3_step(pWriter);
175736 p->rc = resetAndCollectError(pWriter, &p->zErrmsg);
189787 Fts5PoslistWriter *pWriter,
189792 sqlite3Fts5PoslistSafeAppend(pBuf, &pWriter->iPrev, iPos);
191531 Fts5PoslistWriter *pWriter = &a[i].writer;
191532 if( a[i].pOut->n==0 || iPos!=pWriter->iPrev ){
191533 sqlite3Fts5PoslistWriterAppend(a[i].pOut, pWriter, iPos);
194588 sqlite3_stmt *pWriter; /* "INSERT ... %_data VALUES(?,?)" */
195035 if( p->pWriter==0 ){
195037 fts5IndexPrepareStmt(p, &p->pWriter, sqlite3_mprintf(
195044 sqlite3_bind_int64(p->pWriter, 1, iRowid);
195045 sqlite3_bind_blob(p->pWriter, 2, pData, nData, SQLITE_STATIC);
195046 sqlite3_step(p->pWriter);
195047 p->rc = sqlite3_reset(p->pWriter);
197925 Fts5SegWriter *pWriter,
197929 assert( bFlush==0 || (pWriter->nDlidx>0 && pWriter->aDlidx[0].buf.n>0) );
197930 for(i=0; i<pWriter->nDlidx; i++){
197931 Fts5DlidxWriter *pDlidx = &pWriter->aDlidx[i];
197936 FTS5_DLIDX_ROWID(pWriter->iSegid, i, pDlidx->pgno),
197951 Fts5SegWriter *pWriter,
197954 if( p->rc==SQLITE_OK && nLvl>=pWriter->nDlidx ){
197956 pWriter->aDlidx, sizeof(Fts5DlidxWriter) * nLvl
197961 int nByte = sizeof(Fts5DlidxWriter) * (nLvl - pWriter->nDlidx);
197962 memset(&aDlidx[pWriter->nDlidx], 0, nByte);
197963 pWriter->aDlidx = aDlidx;
197964 pWriter->nDlidx = nLvl;
197975 static int fts5WriteFlushDlidx(Fts5Index *p, Fts5SegWriter *pWriter){
197980 if( pWriter->aDlidx[0].buf.n>0 && pWriter->nEmpty>=FTS5_MIN_DLIDX_SIZE ){
197983 fts5WriteDlidxClear(p, pWriter, bFlag);
197984 pWriter->nEmpty = 0;
197999 static void fts5WriteFlushBtree(Fts5Index *p, Fts5SegWriter *pWriter){
198002 assert( pWriter->iBtPage || pWriter->nEmpty==0 );
198003 if( pWriter->iBtPage==0 ) return;
198004 bFlag = fts5WriteFlushDlidx(p, pWriter);
198007 const char *z = (pWriter->btterm.n>0?(const char*)pWriter->btterm.p:"");
198010 sqlite3_bind_blob(p->pIdxWriter, 2, z, pWriter->btterm.n, SQLITE_STATIC);
198011 sqlite3_bind_int64(p->pIdxWriter, 3, bFlag + ((i64)pWriter->iBtPage<<1));
198015 pWriter->iBtPage = 0;
198029 Fts5SegWriter *pWriter, /* Writer object */
198032 fts5WriteFlushBtree(p, pWriter);
198033 fts5BufferSet(&p->rc, &pWriter->btterm, nTerm, pTerm);
198034 pWriter->iBtPage = pWriter->writer.pgno;
198043 Fts5SegWriter *pWriter /* Writer object */
198047 if( pWriter->bFirstRowidInPage && pWriter->aDlidx[0].buf.n>0 ){
198048 Fts5DlidxWriter *pDlidx = &pWriter->aDlidx[0];
198054 pWriter->nEmpty++;
198073 Fts5SegWriter *pWriter,
198081 Fts5DlidxWriter *pDlidx = &pWriter->aDlidx[i];
198091 FTS5_DLIDX_ROWID(pWriter->iSegid, i, pDlidx->pgno),
198094 fts5WriteDlidxGrow(p, pWriter, i+2);
198095 pDlidx = &pWriter->aDlidx[i];
198118 i64 iPgno = (i==0 ? pWriter->writer.pgno : pDlidx[-1].pgno);
198131 static void fts5WriteFlushLeaf(Fts5Index *p, Fts5SegWriter *pWriter){
198133 Fts5PageWriter *pPage = &pWriter->writer;
198136 assert( (pPage->pgidx.n==0)==(pWriter->bFirstTermInPage) );
198142 if( pWriter->bFirstTermInPage ){
198145 fts5WriteBtreeNoTerm(p, pWriter);
198152 iRowid = FTS5_SEGMENT_ROWID(pWriter->iSegid, pPage->pgno);
198163 pWriter->nLeafWritten++;
198166 pWriter->bFirstTermInPage = 1;
198167 pWriter->bFirstRowidInPage = 1;
198179 Fts5SegWriter *pWriter,
198183 Fts5PageWriter *pPage = &pWriter->writer;
198184 Fts5Buffer *pPgidx = &pWriter->writer.pgidx;
198188 assert( pPage->buf.n>4 || pWriter->bFirstTermInPage );
198193 fts5WriteFlushLeaf(p, pWriter);
198208 if( pWriter->bFirstTermInPage ){
198228 fts5WriteBtreeTerm(p, pWriter, n, pTerm);
198229 pPage = &pWriter->writer;
198243 pWriter->bFirstTermInPage = 0;
198245 pWriter->bFirstRowidInPage = 0;
198246 pWriter->bFirstRowidInDoclist = 1;
198248 assert( p->rc || (pWriter->nDlidx>0 && pWriter->aDlidx[0].buf.n==0) );
198249 pWriter->aDlidx[0].pgno = pPage->pgno;
198257 Fts5SegWriter *pWriter,
198261 Fts5PageWriter *pPage = &pWriter->writer;
198264 fts5WriteFlushLeaf(p, pWriter);
198270 if( pWriter->bFirstRowidInPage ){
198272 fts5WriteDlidxAppend(p, pWriter, iRowid);
198276 if( pWriter->bFirstRowidInDoclist || pWriter->bFirstRowidInPage ){
198279 assert( p->rc || iRowid>pWriter->iPrevRowid );
198280 fts5BufferAppendVarint(&p->rc, &pPage->buf, iRowid - pWriter->iPrevRowid);
198282 pWriter->iPrevRowid = iRowid;
198283 pWriter->bFirstRowidInDoclist = 0;
198284 pWriter->bFirstRowidInPage = 0;
198290 Fts5SegWriter *pWriter,
198294 Fts5PageWriter *pPage = &pWriter->writer;
198311 fts5WriteFlushLeaf(p, pWriter);
198324 Fts5SegWriter *pWriter, /* Writer object */
198328 Fts5PageWriter *pLeaf = &pWriter->writer;
198332 fts5WriteFlushLeaf(p, pWriter);
198336 fts5WriteFlushBtree(p, pWriter);
198342 fts5BufferFree(&pWriter->btterm);
198344 for(i=0; i<pWriter->nDlidx; i++){
198345 sqlite3Fts5BufferFree(&pWriter->aDlidx[i].buf);
198347 sqlite3_free(pWriter->aDlidx);
198352 Fts5SegWriter *pWriter,
198357 memset(pWriter, 0, sizeof(Fts5SegWriter));
198358 pWriter->iSegid = iSegid;
198360 fts5WriteDlidxGrow(p, pWriter, 1);
198361 pWriter->writer.pgno = 1;
198362 pWriter->bFirstTermInPage = 1;
198363 pWriter->iBtPage = 1;
198365 assert( pWriter->writer.buf.n==0 );
198366 assert( pWriter->writer.pgidx.n==0 );
198369 sqlite3Fts5BufferSize(&p->rc, &pWriter->writer.pgidx, nBuffer);
198370 sqlite3Fts5BufferSize(&p->rc, &pWriter->writer.buf, nBuffer);
198382 memset(pWriter->writer.buf.p, 0, 4);
198383 pWriter->writer.buf.n = 4;
198388 sqlite3_bind_int(p->pIdxWriter, 1, pWriter->iSegid);
198459 Fts5SegWriter *pWriter = (Fts5SegWriter*)pCtx;
198460 fts5WriteAppendPoslistData(p, pWriter, pChunk, nChunk);
199519 sqlite3_finalize(p->pWriter);