Lines Matching refs:pNode

180082     NodeWriter *pNode = &pWriter->aNodeWriter[iLayer];
180092 nPrefix = fts3PrefixCompress(pNode->key.a, pNode->key.n, zTerm, nTerm);
180098 if( pNode->key.n==0 || (pNode->block.n + nSpace)<=p->nNodeSize ){
180103 Blob *pBlk = &pNode->block;
180112 blobGrowBuffer(&pNode->key, nTerm, &rc);
180115 if( pNode->key.n ){
180122 memcpy(pNode->key.a, zTerm, nTerm);
180123 pNode->key.n = nTerm;
180129 rc = fts3WriteSegment(p, pNode->iBlock, pNode->block.a, pNode->block.n);
180131 assert( pNode->block.nAlloc>=p->nNodeSize );
180132 pNode->block.a[0] = (char)iLayer;
180133 pNode->block.n = 1 + sqlite3Fts3PutVarint(&pNode->block.a[1], iPtr+1);
180135 iNextPtr = pNode->iBlock;
180136 pNode->iBlock++;
180137 pNode->key.n = 0;
180173 Blob *pNode, /* Current node image to append to */
180187 assert( pNode->n>0 );
180188 assert_fts3_nc( (pNode->a[0]=='\0')==(aDoclist!=0) );
180200 pNode->n += sqlite3Fts3PutVarint(&pNode->a[pNode->n], nPrefix);
180202 pNode->n += sqlite3Fts3PutVarint(&pNode->a[pNode->n], nSuffix);
180203 memcpy(&pNode->a[pNode->n], &zTerm[nPrefix], nSuffix);
180204 pNode->n += nSuffix;
180207 pNode->n += sqlite3Fts3PutVarint(&pNode->a[pNode->n], nDoclist);
180208 memcpy(&pNode->a[pNode->n], aDoclist, nDoclist);
180209 pNode->n += nDoclist;
180212 assert( pNode->n<=pNode->nAlloc );
180323 NodeWriter *pNode = &pWriter->aNodeWriter[iRoot];
180324 if( pNode->block.n>0 ) break;
180325 assert( *pRc || pNode->block.nAlloc==0 );
180326 assert( *pRc || pNode->key.nAlloc==0 );
180327 sqlite3_free(pNode->block.a);
180328 sqlite3_free(pNode->key.a);
180364 NodeWriter *pNode = &pWriter->aNodeWriter[i];
180365 if( pNode->block.n>0 && rc==SQLITE_OK ){
180366 rc = fts3WriteSegment(p, pNode->iBlock, pNode->block.a, pNode->block.n);
180368 sqlite3_free(pNode->block.a);
180369 sqlite3_free(pNode->key.a);
180527 NodeWriter *pNode;
180543 pNode = &pWriter->aNodeWriter[nHeight];
180544 pNode->iBlock = pWriter->iStart + pWriter->nLeafEst*nHeight;
180545 blobGrowBuffer(&pNode->block,
180549 memcpy(pNode->block.a, aRoot, nRoot);
180550 pNode->block.n = nRoot;
180551 memset(&pNode->block.a[nRoot], 0, FTS3_NODE_PADDING);
180556 pNode = &pWriter->aNodeWriter[i];
180558 if( pNode->block.a){
180559 rc = nodeReaderInit(&reader, pNode->block.a, pNode->block.n);
180561 blobGrowBuffer(&pNode->key, reader.term.n, &rc);
180563 memcpy(pNode->key.a, reader.term.a, reader.term.n);
180564 pNode->key.n = reader.term.n;
180568 pNode = &pWriter->aNodeWriter[i-1];
180569 pNode->iBlock = reader.iChild;
180571 blobGrowBuffer(&pNode->block,
180575 memcpy(pNode->block.a, aBlock, nBlock);
180576 pNode->block.n = nBlock;
180577 memset(&pNode->block.a[nBlock], 0, FTS3_NODE_PADDING);
180793 static void fts3StartNode(Blob *pNode, int iHeight, sqlite3_int64 iChild){
180794 pNode->a[0] = (char)iHeight;
180796 assert( pNode->nAlloc>=1+sqlite3Fts3VarintLen(iChild) );
180797 pNode->n = 1 + sqlite3Fts3PutVarint(&pNode->a[1], iChild);
180799 assert( pNode->nAlloc>=1 );
180800 pNode->n = 1;
184960 static u32 jsonNodeSize(JsonNode *pNode){
184961 return pNode->eType>=JSON_ARRAY ? pNode->n+1 : 1;
184991 JsonNode *pNode, /* The node to render */
184995 if( pNode->jnFlags & (JNODE_REPLACE|JNODE_PATCH) ){
184996 if( pNode->jnFlags & JNODE_REPLACE ){
184997 jsonAppendValue(pOut, aReplace[pNode->u.iReplace]);
185000 pNode = pNode->u.pPatch;
185002 switch( pNode->eType ){
185004 assert( pNode->eType==JSON_NULL );
185017 if( pNode->jnFlags & JNODE_RAW ){
185018 jsonAppendString(pOut, pNode->u.zJContent, pNode->n);
185025 jsonAppendRaw(pOut, pNode->u.zJContent, pNode->n);
185032 while( j<=pNode->n ){
185033 if( (pNode[j].jnFlags & JNODE_REMOVE)==0 ){
185035 jsonRenderNode(&pNode[j], pOut, aReplace);
185037 j += jsonNodeSize(&pNode[j]);
185039 if( (pNode->jnFlags & JNODE_APPEND)==0 ) break;
185040 pNode = &pNode[pNode->u.iAppend];
185050 while( j<=pNode->n ){
185051 if( (pNode[j+1].jnFlags & JNODE_REMOVE)==0 ){
185053 jsonRenderNode(&pNode[j], pOut, aReplace);
185055 jsonRenderNode(&pNode[j+1], pOut, aReplace);
185057 j += 1 + jsonNodeSize(&pNode[j+1]);
185059 if( (pNode->jnFlags & JNODE_APPEND)==0 ) break;
185060 pNode = &pNode[pNode->u.iAppend];
185073 JsonNode *pNode, /* Node to return */
185079 jsonRenderNode(pNode, &s, aReplace);
185119 JsonNode *pNode, /* Node to return */
185123 switch( pNode->eType ){
185125 assert( pNode->eType==JSON_NULL );
185139 const char *z = pNode->u.zJContent;
185148 if( pNode->u.zJContent[0]=='-' ){
185158 if( pNode->u.zJContent[0]=='-' ){ i = -i; }
185167 const char *z = pNode->u.zJContent;
185170 r = strtod(pNode->u.zJContent, 0);
185179 if( pNode->jnFlags & JNODE_RAW ){
185180 sqlite3_result_text(pCtx, pNode->u.zJContent, pNode->n,
185184 assert( (pNode->jnFlags & JNODE_RAW)==0 );
185185 if( (pNode->jnFlags & JNODE_ESCAPE)==0 ){
185187 sqlite3_result_text(pCtx, pNode->u.zJContent+1, pNode->n-2,
185192 u32 n = pNode->n;
185193 const char *z = pNode->u.zJContent;
185260 jsonReturnJson(pNode, pCtx, aReplace);
185349 JsonNode *pNode;
185366 pNode = &pParse->aNode[pParse->nNode-1];
185367 if( pNode->eType!=JSON_STRING ) return -1;
185368 pNode->jnFlags |= JNODE_LABEL;
185538 JsonNode *pNode = &pParse->aNode[i];
185541 switch( pNode->eType ){
185543 for(j=1; j<=pNode->n; j += jsonNodeSize(pNode+j)){
185549 for(j=1; j<=pNode->n; j += jsonNodeSize(pNode+j+1)+1){
185652 static int jsonLabelCompare(JsonNode *pNode, const char *zKey, u32 nKey){
185653 if( pNode->jnFlags & JNODE_RAW ){
185654 if( pNode->n!=nKey ) return 0;
185655 return strncmp(pNode->u.zJContent, zKey, nKey)==0;
185657 if( pNode->n!=nKey+2 ) return 0;
185658 return strncmp(pNode->u.zJContent+1, zKey, nKey)==0;
185724 JsonNode *pNode;
185728 pNode = jsonLookupAppend(pParse, zPath, pApnd, pzErr);
185730 if( pNode ){
185736 return pNode;
185798 JsonNode *pNode;
185800 pNode = jsonLookupAppend(pParse, zPath, pApnd, pzErr);
185802 if( pNode ){
185807 return pNode;
185866 JsonNode *pNode = 0;
185875 pNode = jsonLookupStep(pParse, 0, zPath, pApnd, &zErr);
185876 if( zErr==0 ) return pNode;
185909 static void jsonRemoveAllNulls(JsonNode *pNode){
185911 assert( pNode->eType==JSON_OBJECT );
185912 n = pNode->n;
185913 for(i=2; i<=n; i += jsonNodeSize(&pNode[i])+1){
185914 switch( pNode[i].eType ){
185916 pNode[i].jnFlags |= JNODE_REMOVE;
185919 jsonRemoveAllNulls(&pNode[i]);
186048 JsonNode *pNode;
186055 pNode = jsonLookup(p, zPath, 0, ctx);
186057 pNode = p->aNode;
186059 if( pNode==0 ){
186062 if( pNode->eType==JSON_ARRAY ){
186063 assert( (pNode->jnFlags & JNODE_APPEND)==0 );
186064 for(i=1; i<=pNode->n; n++){
186065 i += jsonNodeSize(&pNode[i]);
186085 JsonNode *pNode;
186097 pNode = jsonLookup(p, zPath, 0, ctx);
186101 if( pNode ){
186102 jsonRenderNode(pNode, &jx, 0);
186106 }else if( pNode ){
186107 jsonReturn(pNode, ctx, 0);
186270 JsonNode *pNode;
186280 pNode = jsonLookup(&x, zPath, 0, ctx);
186282 if( pNode ) pNode->jnFlags |= JNODE_REMOVE;
186303 JsonNode *pNode;
186316 pNode = jsonLookup(&x, zPath, 0, ctx);
186318 if( pNode ){
186319 pNode->jnFlags |= (u8)JNODE_REPLACE;
186320 pNode->u.iReplace = i + 1;
186350 JsonNode *pNode;
186366 pNode = jsonLookup(&x, zPath, &bApnd, ctx);
186372 }else if( pNode && (bApnd || bIsSet) ){
186373 pNode->jnFlags |= (u8)JNODE_REPLACE;
186374 pNode->u.iReplace = i + 1;
186400 JsonNode *pNode;
186406 pNode = jsonLookup(p, zPath, 0, ctx);
186408 pNode = p->aNode;
186410 if( pNode ){
186411 sqlite3_result_text(ctx, jsonType[pNode->eType], -1, SQLITE_STATIC);
186762 JsonNode *pNode, *pUp;
186770 pNode = &p->sParse.aNode[i];
186776 if( (pNode->jnFlags & JNODE_LABEL)==0 ) pNode--;
186777 assert( pNode->eType==JSON_STRING );
186778 assert( pNode->jnFlags & JNODE_LABEL );
186779 jsonPrintf(pNode->n+1, pStr, ".%.*s", pNode->n-2, pNode->u.zJContent+1);
186984 JsonNode *pNode = 0;
186996 pNode = jsonLookupStep(&p->sParse, 0, p->zRoot+1, 0, &zErr);
187003 }else if( pNode==0 ){
187007 pNode = p->sParse.aNode;
187009 p->iBegin = p->i = (int)(pNode - p->sParse.aNode);
187010 p->eType = pNode->eType;
187012 pNode->u.iKey = 0;
187013 p->iEnd = p->i + pNode->n + 1;
187536 #define NCELL(pNode) readInt16(&(pNode)->zData[2])
187785 static void nodeHashInsert(Rtree *pRtree, RtreeNode *pNode){
187787 assert( pNode->pNext==0 );
187788 iHash = nodeHash(pNode->iNode);
187789 pNode->pNext = pRtree->aHash[iHash];
187790 pRtree->aHash[iHash] = pNode;
187796 static void nodeHashDelete(Rtree *pRtree, RtreeNode *pNode){
187798 if( pNode->iNode!=0 ){
187799 pp = &pRtree->aHash[nodeHash(pNode->iNode)];
187800 for( ; (*pp)!=pNode; pp = &(*pp)->pNext){ assert(*pp); }
187801 *pp = pNode->pNext;
187802 pNode->pNext = 0;
187813 RtreeNode *pNode;
187814 pNode = (RtreeNode *)sqlite3_malloc64(sizeof(RtreeNode) + pRtree->iNodeSize);
187815 if( pNode ){
187816 memset(pNode, 0, sizeof(RtreeNode) + pRtree->iNodeSize);
187817 pNode->zData = (u8 *)&pNode[1];
187818 pNode->nRef = 1;
187820 pNode->pParent = pParent;
187821 pNode->isDirty = 1;
187824 return pNode;
187842 static int nodeInParentChain(const RtreeNode *pNode, const RtreeNode *pParent){
187844 if( pNode==pParent ) return 1;
187860 RtreeNode *pNode = 0;
187865 if( (pNode = nodeHashLookup(pRtree, iNode))!=0 ){
187866 if( pParent && !pNode->pParent ){
187867 if( nodeInParentChain(pNode, pParent) ){
187872 pNode->pParent = pParent;
187873 }else if( pParent && pNode->pParent && pParent!=pNode->pParent ){
187877 pNode->nRef++;
187878 *ppNode = pNode;
187909 pNode = (RtreeNode *)sqlite3_malloc64(sizeof(RtreeNode)+pRtree->iNodeSize);
187910 if( !pNode ){
187913 pNode->pParent = pParent;
187914 pNode->zData = (u8 *)&pNode[1];
187915 pNode->nRef = 1;
187917 pNode->iNode = iNode;
187918 pNode->isDirty = 0;
187919 pNode->pNext = 0;
187920 rc = sqlite3_blob_read(pRtree->pNodeBlob, pNode->zData,
187931 if( pNode && iNode==1 ){
187932 pRtree->iDepth = readInt16(pNode->zData);
187943 if( pNode && rc==SQLITE_OK ){
187944 if( NCELL(pNode)>((pRtree->iNodeSize-4)/pRtree->nBytesPerCell) ){
187951 if( pNode!=0 ){
187953 nodeHashInsert(pRtree, pNode);
187958 *ppNode = pNode;
187960 if( pNode ){
187962 sqlite3_free(pNode);
187975 RtreeNode *pNode, /* The node into which the cell is to be written */
187980 u8 *p = &pNode->zData[4 + pRtree->nBytesPerCell*iCell];
187985 pNode->isDirty = 1;
187991 static void nodeDeleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell){
187992 u8 *pDst = &pNode->zData[4 + pRtree->nBytesPerCell*iCell];
187994 int nByte = (NCELL(pNode) - iCell - 1) * pRtree->nBytesPerCell;
187996 writeInt16(&pNode->zData[2], NCELL(pNode)-1);
187997 pNode->isDirty = 1;
188008 RtreeNode *pNode, /* Write new cell into this node */
188015 nCell = NCELL(pNode);
188019 nodeOverwriteCell(pRtree, pNode, pCell, nCell);
188020 writeInt16(&pNode->zData[2], nCell+1);
188021 pNode->isDirty = 1;
188030 static int nodeWrite(Rtree *pRtree, RtreeNode *pNode){
188032 if( pNode->isDirty ){
188034 if( pNode->iNode ){
188035 sqlite3_bind_int64(p, 1, pNode->iNode);
188039 sqlite3_bind_blob(p, 2, pNode->zData, pRtree->iNodeSize, SQLITE_STATIC);
188041 pNode->isDirty = 0;
188044 if( pNode->iNode==0 && rc==SQLITE_OK ){
188045 pNode->iNode = sqlite3_last_insert_rowid(pRtree->db);
188046 nodeHashInsert(pRtree, pNode);
188056 static int nodeRelease(Rtree *pRtree, RtreeNode *pNode){
188058 if( pNode ){
188059 assert( pNode->nRef>0 );
188061 pNode->nRef--;
188062 if( pNode->nRef==0 ){
188064 if( pNode->iNode==1 ){
188067 if( pNode->pParent ){
188068 rc = nodeRelease(pRtree, pNode->pParent);
188071 rc = nodeWrite(pRtree, pNode);
188073 nodeHashDelete(pRtree, pNode);
188074 sqlite3_free(pNode);
188087 RtreeNode *pNode, /* The node from which to extract the ID */
188090 assert( iCell<NCELL(pNode) );
188091 return readInt64(&pNode->zData[4 + pRtree->nBytesPerCell*iCell]);
188099 RtreeNode *pNode, /* The node from which to extract a coordinate */
188104 readCoord(&pNode->zData[12 + pRtree->nBytesPerCell*iCell + 4*iCoord], pCoord);
188113 RtreeNode *pNode, /* The node containing the cell to be read */
188120 pCell->iRowid = nodeGetRowid(pRtree, pNode, iCell);
188121 pData = pNode->zData + (12 + pRtree->nBytesPerCell*iCell);
188514 RtreeNode *pNode,
188519 int nCell = NCELL(pNode);
188522 if( nodeGetRowid(pRtree, pNode, ii)==iRowid ){
188535 static int nodeParentIndex(Rtree *pRtree, RtreeNode *pNode, int *piIndex){
188536 RtreeNode *pParent = pNode->pParent;
188538 return nodeRowidIndex(pRtree, pParent, pNode->iNode, piIndex);
188765 RtreeNode *pNode;
188777 pNode = rtreeNodeOfFirstSearchPoint(pCur, &rc);
188779 nCell = NCELL(pNode);
188781 pCellData = pNode->zData + (4+pRtree->nBytesPerCell*p->iCell);
188865 RtreeNode *pNode = rtreeNodeOfFirstSearchPoint(pCsr, &rc);
188867 *pRowid = nodeGetRowid(RTREE_OF_CURSOR(pCsr), pNode, p->iCell);
188881 RtreeNode *pNode = rtreeNodeOfFirstSearchPoint(pCsr, &rc);
188886 sqlite3_result_int64(ctx, nodeGetRowid(pRtree, pNode, p->iCell));
188888 nodeGetCoord(pRtree, pNode, p->iCell, i-1, &c);
188906 nodeGetRowid(pRtree, pNode, p->iCell));
189355 RtreeNode *pNode = 0;
189356 rc = nodeAcquire(pRtree, 1, 0, &pNode);
189365 int nCell = NCELL(pNode);
189379 nodeGetCell(pRtree, pNode, iCell, &cell);
189393 rc = nodeAcquire(pRtree, iBest, pNode, &pChild);
189394 nodeRelease(pRtree, pNode);
189395 pNode = pChild;
189398 *ppLeaf = pNode;
189409 RtreeNode *pNode, /* Adjust ancestry of this node. */
189412 RtreeNode *p = pNode;
189701 RtreeNode *pNode,
189710 nodeReference(pNode);
189711 pChild->pParent = pNode;
189714 return xSetMapping(pRtree, iRowid, pNode->iNode);
189719 RtreeNode *pNode,
189727 int nCell = NCELL(pNode);
189748 nodeGetCell(pRtree, pNode, i, &aCell[i]);
189750 nodeZero(pRtree, pNode);
189754 if( pNode->iNode==1 ){
189755 pRight = nodeNew(pRtree, pNode);
189756 pLeft = nodeNew(pRtree, pNode);
189758 pNode->isDirty = 1;
189759 writeInt16(pNode->zData, pRtree->iDepth);
189761 pLeft = pNode;
189794 if( pNode->iNode==1 ){
189825 if( pNode->iNode==1 ){
189899 static int removeNode(Rtree *pRtree, RtreeNode *pNode, int iHeight){
189905 assert( pNode->nRef==1 );
189908 rc = nodeParentIndex(pRtree, pNode, &iCell);
189910 pParent = pNode->pParent;
189911 pNode->pParent = 0;
189923 sqlite3_bind_int64(pRtree->pDeleteNode, 1, pNode->iNode);
189930 sqlite3_bind_int64(pRtree->pDeleteParent, 1, pNode->iNode);
189939 nodeHashDelete(pRtree, pNode);
189940 pNode->iNode = iHeight;
189941 pNode->pNext = pRtree->pDeleted;
189942 pNode->nRef++;
189943 pRtree->pDeleted = pNode;
189948 static int fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){
189949 RtreeNode *pParent = pNode->pParent;
189953 int nCell = NCELL(pNode);
189955 nodeGetCell(pRtree, pNode, 0, &box);
189958 nodeGetCell(pRtree, pNode, ii, &cell);
189961 box.iRowid = pNode->iNode;
189962 rc = nodeParentIndex(pRtree, pNode, &ii);
189975 static int deleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell, int iHeight){
189979 if( SQLITE_OK!=(rc = fixLeafParent(pRtree, pNode)) ){
189986 nodeDeleteCell(pRtree, pNode, iCell);
189993 pParent = pNode->pParent;
189994 assert( pParent || pNode->iNode==1 );
189996 if( NCELL(pNode)<RTREE_MINCELLS(pRtree) ){
189997 rc = removeNode(pRtree, pNode, iHeight);
189999 rc = fixBoundingBox(pRtree, pNode);
190008 RtreeNode *pNode,
190025 nCell = NCELL(pNode)+1;
190048 nodeGetCell(pRtree, pNode, ii, &aCell[ii]);
190070 nodeZero(pRtree, pNode);
190074 nodeInsertCell(pRtree, pNode, p);
190077 rc = rowidWrite(pRtree, p->iRowid, pNode->iNode);
190079 rc = parentWrite(pRtree, p->iRowid, pNode->iNode);
190084 rc = fixBoundingBox(pRtree, pNode);
190113 RtreeNode *pNode,
190122 nodeReference(pNode);
190123 pChild->pParent = pNode;
190126 if( nodeInsertCell(pRtree, pNode, pCell) ){
190127 if( iHeight<=pRtree->iReinsertHeight || pNode->iNode==1){
190128 rc = SplitNode(pRtree, pNode, pCell, iHeight);
190131 rc = Reinsert(pRtree, pNode, pCell, iHeight);
190134 rc = AdjustTree(pRtree, pNode, pCell);
190137 rc = rowidWrite(pRtree, pCell->iRowid, pNode->iNode);
190139 rc = parentWrite(pRtree, pCell->iRowid, pNode->iNode);
190146 static int reinsertNodeContent(Rtree *pRtree, RtreeNode *pNode){
190149 int nCell = NCELL(pNode);
190154 nodeGetCell(pRtree, pNode, ii, &cell);
190159 rc = ChooseLeaf(pRtree, &cell, (int)pNode->iNode, &pInsert);
190162 rc = rtreeInsertCell(pRtree, pInsert, &cell, (int)pNode->iNode);
191186 const u8 *pNode = (const u8*)sqlite3_column_blob(pCheck->pGetNode, 0);
191191 memcpy(pRet, pNode, nNode);
193064 RtreeNode *pNode = rtreeNodeOfFirstSearchPoint(pCsr, &rc);
193077 nodeGetRowid(pRtree, pNode, p->iCell));
212102 Fts5ExprNode *pNode; /* FTS5_STRING node this phrase is part of */
212459 Fts5ExprNode *pNode, /* Node pPhrase belongs to */
212489 rc = fts5ExprSynonymList(pTerm, pNode->iRowid, &buf, &a, &n);
212754 Fts5ExprNode *pNode /* The "NEAR" node (FTS5_STRING) */
212756 Fts5ExprNearset *pNear = pNode->pNear;
212766 if( pIter->iRowid==pNode->iRowid && pIter->nData>0 ){
212784 rc = fts5ExprPhraseIsMatch(pNode, pPhrase, &bMatch);
212812 Fts5ExprNode *pNode
212814 Fts5ExprNearset *pNear = pNode->pNear;
212817 assert( pNode->bNomatch==0 );
212821 pNode->bEof = 1;
212851 pNode->bEof = 1;
212858 pNode->bEof = 0;
212887 static void fts5ExprSetEof(Fts5ExprNode *pNode){
212889 pNode->bEof = 1;
212890 pNode->bNomatch = 0;
212891 for(i=0; i<pNode->nChild; i++){
212892 fts5ExprSetEof(pNode->apChild[i]);
212896 static void fts5ExprNodeZeroPoslist(Fts5ExprNode *pNode){
212897 if( pNode->eType==FTS5_STRING || pNode->eType==FTS5_TERM ){
212898 Fts5ExprNearset *pNear = pNode->pNear;
212906 for(i=0; i<pNode->nChild; i++){
212907 fts5ExprNodeZeroPoslist(pNode->apChild[i]);
212949 Fts5ExprNode *pNode
212951 Fts5ExprNearset *pNear = pNode->pNear;
212987 pNode->bNomatch = 0;
212988 pNode->bEof = 1;
212995 if( fts5ExprAdvanceto(pIter, bDesc, &iLast, &rc, &pNode->bEof) ){
213003 pNode->iRowid = iLast;
213004 pNode->bNomatch = ((0==fts5ExprNearTest(&rc, pExpr, pNode)) && rc==SQLITE_OK);
213005 assert( pNode->bEof==0 || pNode->bNomatch==0 );
213019 Fts5ExprNode *pNode, /* FTS5_STRING or FTS5_TERM node */
213023 Fts5ExprTerm *pTerm = &pNode->pNear->apPhrase[0]->aTerm[0];
213026 pNode->bNomatch = 0;
213059 pNode->bEof = (rc || bEof);
213063 assert( Fts5NodeIsString(pNode) );
213070 pNode->bEof = (rc || sqlite3Fts5IterEof(pIter));
213073 if( pNode->bEof==0 ){
213075 rc = fts5ExprNodeTest_STRING(pExpr, pNode);
213084 Fts5ExprNode *pNode /* The "NEAR" node (FTS5_TERM) */
213091 Fts5ExprPhrase *pPhrase = pNode->pNear->apPhrase[0];
213094 assert( pNode->eType==FTS5_TERM );
213095 assert( pNode->pNear->nPhrase==1 && pPhrase->nTerm==1 );
213102 pNode->iRowid = pIter->iRowid;
213103 pNode->bNomatch = (pPhrase->poslist.n==0);
213112 Fts5ExprNode *pNode,
213117 Fts5IndexIter *pIter = pNode->pNear->apPhrase[0]->aTerm[0].pIter;
213119 assert( pNode->bEof==0 );
213126 rc = fts5ExprNodeTest_TERM(pExpr, pNode);
213128 pNode->bEof = 1;
213129 pNode->bNomatch = 0;
213136 Fts5ExprNode *pNode /* Expression node to test */
213138 Fts5ExprNode *pNext = pNode->apChild[0];
213141 for(i=1; i<pNode->nChild; i++){
213142 Fts5ExprNode *pChild = pNode->apChild[i];
213148 pNode->iRowid = pNext->iRowid;
213149 pNode->bEof = pNext->bEof;
213150 pNode->bNomatch = pNext->bNomatch;
213155 Fts5ExprNode *pNode,
213160 i64 iLast = pNode->iRowid;
213162 for(i=0; i<pNode->nChild; i++){
213163 Fts5ExprNode *p1 = pNode->apChild[i];
213171 pNode->bNomatch = 0;
213178 fts5ExprNodeTest_OR(pExpr, pNode);
213239 Fts5ExprNode *pNode,
213243 int rc = fts5ExprNodeNext(pExpr, pNode->apChild[0], bFromValid, iFrom);
213245 rc = fts5ExprNodeTest_AND(pExpr, pNode);
213247 pNode->bNomatch = 0;
213254 Fts5ExprNode *pNode /* FTS5_NOT node to advance */
213257 Fts5ExprNode *p1 = pNode->apChild[0];
213258 Fts5ExprNode *p2 = pNode->apChild[1];
213259 assert( pNode->nChild==2 );
213271 pNode->bEof = p1->bEof;
213272 pNode->bNomatch = p1->bNomatch;
213273 pNode->iRowid = p1->iRowid;
213282 Fts5ExprNode *pNode,
213286 int rc = fts5ExprNodeNext(pExpr, pNode->apChild[0], bFromValid, iFrom);
213288 rc = fts5ExprNodeTest_NOT(pExpr, pNode);
213291 pNode->bNomatch = 0;
213303 Fts5ExprNode *pNode /* Expression node to test */
213306 if( pNode->bEof==0 ){
213307 switch( pNode->eType ){
213310 rc = fts5ExprNodeTest_STRING(pExpr, pNode);
213315 rc = fts5ExprNodeTest_TERM(pExpr, pNode);
213320 rc = fts5ExprNodeTest_AND(pExpr, pNode);
213325 fts5ExprNodeTest_OR(pExpr, pNode);
213329 default: assert( pNode->eType==FTS5_NOT ); {
213330 rc = fts5ExprNodeTest_NOT(pExpr, pNode);
213346 static int fts5ExprNodeFirst(Fts5Expr *pExpr, Fts5ExprNode *pNode){
213348 pNode->bEof = 0;
213349 pNode->bNomatch = 0;
213351 if( Fts5NodeIsString(pNode) ){
213353 rc = fts5ExprNearInitAll(pExpr, pNode);
213354 }else if( pNode->xNext==0 ){
213355 pNode->bEof = 1;
213359 for(i=0; i<pNode->nChild && rc==SQLITE_OK; i++){
213360 Fts5ExprNode *pChild = pNode->apChild[i];
213361 rc = fts5ExprNodeFirst(pExpr, pNode->apChild[i]);
213365 pNode->iRowid = pNode->apChild[0]->iRowid;
213367 switch( pNode->eType ){
213369 if( nEof>0 ) fts5ExprSetEof(pNode);
213373 if( pNode->nChild==nEof ) fts5ExprSetEof(pNode);
213377 assert( pNode->eType==FTS5_NOT );
213378 pNode->bEof = pNode->apChild[0]->bEof;
213384 rc = fts5ExprNodeTest(pExpr, pNode);
213754 Fts5Colset *pColsetOrig = pOrig->pNode->pNear->pColset;
213797 sCtx.pPhrase->pNode = pNew->pRoot;
214017 Fts5ExprNode *pNode,
214022 assert( pNode->eType==FTS5_TERM || pNode->eType==FTS5_STRING
214023 || pNode->eType==FTS5_AND || pNode->eType==FTS5_OR
214024 || pNode->eType==FTS5_NOT || pNode->eType==FTS5_EOF
214026 if( pNode->eType==FTS5_STRING || pNode->eType==FTS5_TERM ){
214027 Fts5ExprNearset *pNear = pNode->pNear;
214031 pNode->eType = FTS5_EOF;
214032 pNode->xNext = 0;
214042 assert( pNode->eType!=FTS5_EOF || pNode->nChild==0 );
214043 for(i=0; i<pNode->nChild; i++){
214044 fts5ParseSetColset(pParse, pNode->apChild[i], pColset, ppFree);
214070 static void fts5ExprAssignXNext(Fts5ExprNode *pNode){
214071 switch( pNode->eType ){
214073 Fts5ExprNearset *pNear = pNode->pNear;
214078 pNode->eType = FTS5_TERM;
214079 pNode->xNext = fts5ExprNodeNext_TERM;
214081 pNode->xNext = fts5ExprNodeNext_STRING;
214087 pNode->xNext = fts5ExprNodeNext_OR;
214092 pNode->xNext = fts5ExprNodeNext_AND;
214096 default: assert( pNode->eType==FTS5_NOT ); {
214097 pNode->xNext = fts5ExprNodeNext_NOT;
214156 pNear->apPhrase[iPhrase]->pNode = pRet;
214673 Fts5ExprNode *pNode = pPhrase->pNode;
214674 if( pNode->bEof==0 && pNode->iRowid==pExpr->pRoot->iRowid ){
214698 Fts5ExprNode *pNode = pExpr->apExprPhrase[i]->pNode;
214701 (pBuf->n==0 || pNode->iRowid!=pExpr->pRoot->iRowid || pNode->bEof)
214779 Fts5ExprNode *pNode = pExpr->apExprPhrase[i]->pNode;
214780 Fts5Colset *pColset = pNode->pNear->pColset;
214795 static void fts5ExprClearPoslists(Fts5ExprNode *pNode){
214796 if( pNode->eType==FTS5_TERM || pNode->eType==FTS5_STRING ){
214797 pNode->pNear->apPhrase[0]->poslist.n = 0;
214800 for(i=0; i<pNode->nChild; i++){
214801 fts5ExprClearPoslists(pNode->apChild[i]);
214806 static int fts5ExprCheckPoslists(Fts5ExprNode *pNode, i64 iRowid){
214807 pNode->iRowid = iRowid;
214808 pNode->bEof = 0;
214809 switch( pNode->eType ){
214812 return (pNode->pNear->apPhrase[0]->poslist.n>0);
214816 for(i=0; i<pNode->nChild; i++){
214817 if( fts5ExprCheckPoslists(pNode->apChild[i], iRowid)==0 ){
214818 fts5ExprClearPoslists(pNode);
214828 for(i=0; i<pNode->nChild; i++){
214829 if( fts5ExprCheckPoslists(pNode->apChild[i], iRowid) ){
214837 assert( pNode->eType==FTS5_NOT );
214838 if( 0==fts5ExprCheckPoslists(pNode->apChild[0], iRowid)
214839 || 0!=fts5ExprCheckPoslists(pNode->apChild[1], iRowid)
214841 fts5ExprClearPoslists(pNode);
214864 Fts5ExprNode *pNode = pPhrase->pNode;
214870 if( pNode->bEof==0
214871 && pNode->iRowid==pExpr->pRoot->iRowid
214878 pTerm, pNode->iRowid, pBuf, (u8**)ppCollist, pnCollist