Lines Matching defs:pWriter
67983 ** 1) The current writer (BtShared.pWriter) concludes its transaction, OR
68022 Btree *pWriter; /* Btree with currently open write transaction */
68038 #define BTS_EXCLUSIVE 0x0040 /* pWriter has an exclusive lock */
68919 assert( eLock==READ_LOCK || (p==pBt->pWriter && p->inTrans==TRANS_WRITE) );
68930 if( pBt->pWriter!=p && (pBt->btsFlags & BTS_EXCLUSIVE)!=0 ){
68931 sqlite3ConnectionBlocked(p->db, pBt->pWriter->db);
68950 assert( p==pBt->pWriter );
69052 assert( (pBt->btsFlags & BTS_EXCLUSIVE)==0 || pBt->pWriter==pLock->pBtree );
69065 assert( (pBt->btsFlags & BTS_PENDING)==0 || pBt->pWriter );
69066 if( pBt->pWriter==p ){
69067 pBt->pWriter = 0;
69088 if( pBt->pWriter==p ){
69090 pBt->pWriter = 0;
72166 pBlock = pBt->pWriter->db;
72260 assert( !pBt->pWriter );
72261 pBt->pWriter = p;
191934 ** pWriter->zTerm/pWriter->nTerm. i.e. must be equal to or less than when
192134 SegmentWriter *pWriter = *ppWriter;
192136 if( !pWriter ){
192141 pWriter = (SegmentWriter *)sqlite3_malloc64(sizeof(SegmentWriter));
192142 if( !pWriter ) return SQLITE_NOMEM;
192143 memset(pWriter, 0, sizeof(SegmentWriter));
192144 *ppWriter = pWriter;
192147 pWriter->aData = (char *)sqlite3_malloc64(p->nNodeSize);
192148 if( !pWriter->aData ) return SQLITE_NOMEM;
192149 pWriter->nSize = p->nNodeSize;
192155 pWriter->iFree = sqlite3_column_int64(pStmt, 0);
192156 pWriter->iFirst = pWriter->iFree;
192161 nData = pWriter->nData;
192163 nPrefix = fts3PrefixCompress(pWriter->zTerm, pWriter->nTerm, zTerm, nTerm);
192167 ** pWriter->zTerm/pWriter->nTerm. i.e. must be equal to or less than when
192182 if( pWriter->iFree==LARGEST_INT64 ) return FTS_CORRUPT_VTAB;
192183 rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, nData);
192191 ** to the database (still available in pWriter->zTerm), and
192197 ** the common prefix (if any) of zTerm and pWriter->zTerm.
192200 rc = fts3NodeAddTerm(p, &pWriter->pTree, isCopyTerm, zTerm, nPrefix+1);
192204 pWriter->nTerm = 0;
192216 pWriter->nLeafData += nReq;
192221 if( nReq>pWriter->nSize ){
192222 char *aNew = sqlite3_realloc64(pWriter->aData, nReq);
192224 pWriter->aData = aNew;
192225 pWriter->nSize = nReq;
192227 assert( nData+nReq<=pWriter->nSize );
192230 nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nPrefix);
192231 nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nSuffix);
192233 memcpy(&pWriter->aData[nData], &zTerm[nPrefix], nSuffix);
192235 nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nDoclist);
192237 memcpy(&pWriter->aData[nData], aDoclist, nDoclist);
192238 pWriter->nData = nData + nDoclist;
192246 if( nTerm>pWriter->nMalloc ){
192247 char *zNew = sqlite3_realloc64(pWriter->zMalloc, (i64)nTerm*2);
192251 pWriter->nMalloc = nTerm*2;
192252 pWriter->zMalloc = zNew;
192253 pWriter->zTerm = zNew;
192255 assert( pWriter->zTerm==pWriter->zMalloc );
192257 memcpy(pWriter->zTerm, zTerm, nTerm);
192259 pWriter->zTerm = (char *)zTerm;
192261 pWriter->nTerm = nTerm;
192267 ** Flush all data associated with the SegmentWriter object pWriter to the
192274 SegmentWriter *pWriter, /* SegmentWriter to flush to the db */
192279 if( pWriter->pTree ){
192285 iLastLeaf = pWriter->iFree;
192286 rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, pWriter->nData);
192288 rc = fts3NodeWrite(p, pWriter->pTree, 1,
192289 pWriter->iFirst, pWriter->iFree, &iLast, &zRoot, &nRoot);
192293 pWriter->iFirst, iLastLeaf, iLast, pWriter->nLeafData, zRoot, nRoot);
192298 0, 0, 0, pWriter->nLeafData, pWriter->aData, pWriter->nData);
192308 static void fts3SegWriterFree(SegmentWriter *pWriter){
192309 if( pWriter ){
192310 sqlite3_free(pWriter->aData);
192311 sqlite3_free(pWriter->zMalloc);
192312 fts3NodeFree(pWriter->pTree);
192313 sqlite3_free(pWriter);
193115 SegmentWriter *pWriter = 0; /* Used to write the new, merged, segment */
193174 rc = fts3SegWriterAdd(p, &pWriter, 1,
193178 assert_fts3_nc( pWriter || bIgnoreEmpty );
193186 if( pWriter ){
193187 rc = fts3SegWriterFlush(p, pWriter, iNewLevel, iIdx);
193190 rc = fts3PromoteSegments(p, iNewLevel, pWriter->nLeafData);
193196 fts3SegWriterFree(pWriter);
193740 ** (pWriter->aNodeWriter[0].iBlock) when this function is called.
193744 IncrmergeWriter *pWriter, /* Writer object */
193748 sqlite3_int64 iPtr = pWriter->aNodeWriter[0].iBlock;
193754 NodeWriter *pNode = &pWriter->aNodeWriter[iLayer];
193893 ** appendable b-tree segment opened for writing by pWriter.
193899 IncrmergeWriter *pWriter, /* Writer object */
193912 pLeaf = &pWriter->aNodeWriter[0];
193926 pWriter->nWork++;
193938 ** the common prefix (if any) of zTerm and pWriter->zTerm.
193941 rc = fts3IncrmergePush(p, pWriter, zTerm, nPrefix+1);
193955 pWriter->nLeafData += nSpace;
193972 ** merge-writer object pWriter, and if no error has occurred, to flush
193973 ** all outstanding node buffers held by pWriter to disk.
193985 IncrmergeWriter *pWriter, /* Merge-writer object */
193989 int iRoot; /* Index of root in pWriter->aNodeWriter */
193993 /* Set iRoot to the index in pWriter->aNodeWriter[] of the output segment
193998 NodeWriter *pNode = &pWriter->aNodeWriter[iRoot];
194025 Blob *pBlock = &pWriter->aNodeWriter[1].block;
194030 &pBlock->a[1], pWriter->aNodeWriter[0].iBlock
194035 pRoot = &pWriter->aNodeWriter[iRoot];
194039 NodeWriter *pNode = &pWriter->aNodeWriter[i];
194050 pWriter->iAbsLevel+1, /* level */
194051 pWriter->iIdx, /* idx */
194052 pWriter->iStart, /* start_block */
194053 pWriter->aNodeWriter[0].iBlock, /* leaves_end_block */
194054 pWriter->iEnd, /* end_block */
194055 (pWriter->bNoLeafData==0 ? pWriter->nLeafData : 0), /* end_block */
194123 ** merge-writer object *pWriter is initialized to write to it.
194140 IncrmergeWriter *pWriter /* Populate this object */
194161 fts3ReadEndBlockField(pSelect, 3, &iEnd, &pWriter->nLeafData);
194162 if( pWriter->nLeafData<0 ){
194163 pWriter->nLeafData = pWriter->nLeafData * -1;
194165 pWriter->bNoLeafData = (pWriter->nLeafData==0);
194212 pWriter->nLeafEst = (int)((iEnd - iStart) + 1)/FTS_MAX_APPENDABLE_HEIGHT;
194213 pWriter->iStart = iStart;
194214 pWriter->iEnd = iEnd;
194215 pWriter->iAbsLevel = iAbsLevel;
194216 pWriter->iIdx = iIdx;
194219 pWriter->aNodeWriter[i].iBlock = pWriter->iStart + i*pWriter->nLeafEst;
194222 pNode = &pWriter->aNodeWriter[nHeight];
194223 pNode->iBlock = pWriter->iStart + pWriter->nLeafEst*nHeight;
194235 pNode = &pWriter->aNodeWriter[i];
194250 pNode = &pWriter->aNodeWriter[i-1];
194335 IncrmergeWriter *pWriter /* Populate this object */
194359 pWriter->iStart = sqlite3_column_int64(pFirstBlock, 0);
194360 pWriter->iEnd = pWriter->iStart - 1;
194361 pWriter->iEnd += nLeafEst * FTS_MAX_APPENDABLE_HEIGHT;
194370 rc = fts3WriteSegment(p, pWriter->iEnd, 0, 0);
194373 pWriter->iAbsLevel = iAbsLevel;
194374 pWriter->nLeafEst = nLeafEst;
194375 pWriter->iIdx = iIdx;
194379 pWriter->aNodeWriter[i].iBlock = pWriter->iStart + i*pWriter->nLeafEst;
194805 IncrmergeWriter *pWriter; /* Writer object */
194812 const int nAlloc = sizeof(*pCsr) + sizeof(*pFilter) + sizeof(*pWriter);
194813 pWriter = (IncrmergeWriter *)sqlite3_malloc64(nAlloc);
194814 if( !pWriter ) return SQLITE_NOMEM;
194815 pFilter = (Fts3SegFilter *)&pWriter[1];
194888 memset(pWriter, 0, nAlloc);
194920 rc = fts3IncrmergeLoad(p, iAbsLevel, iIdx-1, zKey, nKey, pWriter);
194922 rc = fts3IncrmergeWriter(p, iAbsLevel, iIdx, pCsr, pWriter);
194925 if( rc==SQLITE_OK && pWriter->nLeafEst ){
194929 rc = fts3IncrmergeAppend(p, pWriter, pCsr);
194931 if( pWriter->nWork>=nRem && rc==SQLITE_ROW ) rc = SQLITE_OK;
194937 nRem -= (1 + pWriter->nWork);
194947 pWriter->nLeafData = pWriter->nLeafData * -1;
194949 fts3IncrmergeRelease(p, pWriter, &rc);
194950 if( nSeg==0 && pWriter->bNoLeafData==0 ){
194951 fts3PromoteSegments(p, iAbsLevel+1, pWriter->nLeafData);
194963 sqlite3_free(pWriter);
212152 sqlite3_stmt *pWriter;
212170 pWriter = pIter->pDelete;
212172 pWriter = pIter->pInsert;
212193 p->rc = sqlite3_bind_value(pWriter, i+1, pVal);
212212 p->rc = sqlite3_bind_value(pWriter, pIter->nCol+1, pVal);
212216 sqlite3_step(pWriter);
212217 p->rc = resetAndCollectError(pWriter, &p->zErrmsg);
225249 Fts5PoslistWriter *pWriter,
225254 sqlite3Fts5PoslistSafeAppend(pBuf, &pWriter->iPrev, iPos);
227115 Fts5PoslistWriter *pWriter = &a[i].writer;
227116 if( a[i].pOut->n==0 || iPos!=pWriter->iPrev ){
227117 sqlite3Fts5PoslistWriterAppend(a[i].pOut, pWriter, iPos);
230301 sqlite3_stmt *pWriter; /* "INSERT ... %_data VALUES(?,?)" */
230754 if( p->pWriter==0 ){
230756 fts5IndexPrepareStmt(p, &p->pWriter, sqlite3_mprintf(
230763 sqlite3_bind_int64(p->pWriter, 1, iRowid);
230764 sqlite3_bind_blob(p->pWriter, 2, pData, nData, SQLITE_STATIC);
230765 sqlite3_step(p->pWriter);
230766 p->rc = sqlite3_reset(p->pWriter);
230767 sqlite3_bind_null(p->pWriter, 2);
233734 Fts5SegWriter *pWriter,
233738 assert( bFlush==0 || (pWriter->nDlidx>0 && pWriter->aDlidx[0].buf.n>0) );
233739 for(i=0; i<pWriter->nDlidx; i++){
233740 Fts5DlidxWriter *pDlidx = &pWriter->aDlidx[i];
233745 FTS5_DLIDX_ROWID(pWriter->iSegid, i, pDlidx->pgno),
233755 ** Grow the pWriter->aDlidx[] array to at least nLvl elements in size.
233760 Fts5SegWriter *pWriter,
233763 if( p->rc==SQLITE_OK && nLvl>=pWriter->nDlidx ){
233765 pWriter->aDlidx, sizeof(Fts5DlidxWriter) * nLvl
233770 size_t nByte = sizeof(Fts5DlidxWriter) * (nLvl - pWriter->nDlidx);
233771 memset(&aDlidx[pWriter->nDlidx], 0, nByte);
233772 pWriter->aDlidx = aDlidx;
233773 pWriter->nDlidx = nLvl;
233780 ** If the current doclist-index accumulating in pWriter->aDlidx[] is large
233784 static int fts5WriteFlushDlidx(Fts5Index *p, Fts5SegWriter *pWriter){
233789 if( pWriter->aDlidx[0].buf.n>0 && pWriter->nEmpty>=FTS5_MIN_DLIDX_SIZE ){
233792 fts5WriteDlidxClear(p, pWriter, bFlag);
233793 pWriter->nEmpty = 0;
233799 ** last term on leaf page (pWriter->iBtPage) is completed.
233808 static void fts5WriteFlushBtree(Fts5Index *p, Fts5SegWriter *pWriter){
233811 assert( pWriter->iBtPage || pWriter->nEmpty==0 );
233812 if( pWriter->iBtPage==0 ) return;
233813 bFlag = fts5WriteFlushDlidx(p, pWriter);
233816 const char *z = (pWriter->btterm.n>0?(const char*)pWriter->btterm.p:"");
233818 /* sqlite3_bind_int(p->pIdxWriter, 1, pWriter->iSegid); */
233819 sqlite3_bind_blob(p->pIdxWriter, 2, z, pWriter->btterm.n, SQLITE_STATIC);
233820 sqlite3_bind_int64(p->pIdxWriter, 3, bFlag + ((i64)pWriter->iBtPage<<1));
233825 pWriter->iBtPage = 0;
233839 Fts5SegWriter *pWriter, /* Writer object */
233842 fts5WriteFlushBtree(p, pWriter);
233844 fts5BufferSet(&p->rc, &pWriter->btterm, nTerm, pTerm);
233845 pWriter->iBtPage = pWriter->writer.pgno;
233855 Fts5SegWriter *pWriter /* Writer object */
233859 if( pWriter->bFirstRowidInPage && pWriter->aDlidx[0].buf.n>0 ){
233860 Fts5DlidxWriter *pDlidx = &pWriter->aDlidx[0];
233866 pWriter->nEmpty++;
233885 Fts5SegWriter *pWriter,
233893 Fts5DlidxWriter *pDlidx = &pWriter->aDlidx[i];
233903 FTS5_DLIDX_ROWID(pWriter->iSegid, i, pDlidx->pgno),
233906 fts5WriteDlidxGrow(p, pWriter, i+2);
233907 pDlidx = &pWriter->aDlidx[i];
233930 i64 iPgno = (i==0 ? pWriter->writer.pgno : pDlidx[-1].pgno);
233943 static void fts5WriteFlushLeaf(Fts5Index *p, Fts5SegWriter *pWriter){
233945 Fts5PageWriter *pPage = &pWriter->writer;
233948 assert( (pPage->pgidx.n==0)==(pWriter->bFirstTermInPage) );
233954 if( pWriter->bFirstTermInPage ){
233957 fts5WriteBtreeNoTerm(p, pWriter);
233964 iRowid = FTS5_SEGMENT_ROWID(pWriter->iSegid, pPage->pgno);
233975 pWriter->nLeafWritten++;
233978 pWriter->bFirstTermInPage = 1;
233979 pWriter->bFirstRowidInPage = 1;
233991 Fts5SegWriter *pWriter,
233995 Fts5PageWriter *pPage = &pWriter->writer;
233996 Fts5Buffer *pPgidx = &pWriter->writer.pgidx;
234001 assert( pPage->buf.n>4 || pWriter->bFirstTermInPage );
234006 fts5WriteFlushLeaf(p, pWriter);
234022 if( pWriter->bFirstTermInPage ){
234042 fts5WriteBtreeTerm(p, pWriter, n, pTerm);
234044 pPage = &pWriter->writer;
234058 pWriter->bFirstTermInPage = 0;
234060 pWriter->bFirstRowidInPage = 0;
234061 pWriter->bFirstRowidInDoclist = 1;
234063 assert( p->rc || (pWriter->nDlidx>0 && pWriter->aDlidx[0].buf.n==0) );
234064 pWriter->aDlidx[0].pgno = pPage->pgno;
234072 Fts5SegWriter *pWriter,
234076 Fts5PageWriter *pPage = &pWriter->writer;
234079 fts5WriteFlushLeaf(p, pWriter);
234085 if( pWriter->bFirstRowidInPage ){
234087 fts5WriteDlidxAppend(p, pWriter, iRowid);
234091 if( pWriter->bFirstRowidInDoclist || pWriter->bFirstRowidInPage ){
234094 assert_nc( p->rc || iRowid>pWriter->iPrevRowid );
234096 (u64)iRowid - (u64)pWriter->iPrevRowid
234099 pWriter->iPrevRowid = iRowid;
234100 pWriter->bFirstRowidInDoclist = 0;
234101 pWriter->bFirstRowidInPage = 0;
234107 Fts5SegWriter *pWriter,
234111 Fts5PageWriter *pPage = &pWriter->writer;
234128 fts5WriteFlushLeaf(p, pWriter);
234141 Fts5SegWriter *pWriter, /* Writer object */
234145 Fts5PageWriter *pLeaf = &pWriter->writer;
234149 fts5WriteFlushLeaf(p, pWriter);
234153 fts5WriteFlushBtree(p, pWriter);
234159 fts5BufferFree(&pWriter->btterm);
234161 for(i=0; i<pWriter->nDlidx; i++){
234162 sqlite3Fts5BufferFree(&pWriter->aDlidx[i].buf);
234164 sqlite3_free(pWriter->aDlidx);
234169 Fts5SegWriter *pWriter,
234174 memset(pWriter, 0, sizeof(Fts5SegWriter));
234175 pWriter->iSegid = iSegid;
234177 fts5WriteDlidxGrow(p, pWriter, 1);
234178 pWriter->writer.pgno = 1;
234179 pWriter->bFirstTermInPage = 1;
234180 pWriter->iBtPage = 1;
234182 assert( pWriter->writer.buf.n==0 );
234183 assert( pWriter->writer.pgidx.n==0 );
234186 sqlite3Fts5BufferSize(&p->rc, &pWriter->writer.pgidx, nBuffer);
234187 sqlite3Fts5BufferSize(&p->rc, &pWriter->writer.buf, nBuffer);
234199 memset(pWriter->writer.buf.p, 0, 4);
234200 pWriter->writer.buf.n = 4;
234205 sqlite3_bind_int(p->pIdxWriter, 1, pWriter->iSegid);
234285 Fts5SegWriter *pWriter = (Fts5SegWriter*)pCtx;
234286 fts5WriteAppendPoslistData(p, pWriter, pChunk, nChunk);
235455 sqlite3_finalize(p->pWriter);