Lines Matching refs:pCur

558   fuzzer_cursor *pCur;  in fuzzerOpen()  local
559 pCur = sqlite3_malloc( sizeof(*pCur) ); in fuzzerOpen()
560 if( pCur==0 ) return SQLITE_NOMEM; in fuzzerOpen()
561 memset(pCur, 0, sizeof(*pCur)); in fuzzerOpen()
562 pCur->pVtab = p; in fuzzerOpen()
563 *ppCursor = &pCur->base; in fuzzerOpen()
583 static void fuzzerClearCursor(fuzzer_cursor *pCur, int clearHash){ in fuzzerClearCursor() argument
585 fuzzerClearStemList(pCur->pStem); in fuzzerClearCursor()
586 fuzzerClearStemList(pCur->pDone); in fuzzerClearCursor()
587 for(i=0; i<FUZZER_NQUEUE; i++) fuzzerClearStemList(pCur->aQueue[i]); in fuzzerClearCursor()
588 pCur->rLimit = (fuzzer_cost)0; in fuzzerClearCursor()
589 if( clearHash && pCur->nStem ){ in fuzzerClearCursor()
590 pCur->mxQueue = 0; in fuzzerClearCursor()
591 pCur->pStem = 0; in fuzzerClearCursor()
592 pCur->pDone = 0; in fuzzerClearCursor()
593 memset(pCur->aQueue, 0, sizeof(pCur->aQueue)); in fuzzerClearCursor()
594 memset(pCur->apHash, 0, sizeof(pCur->apHash)); in fuzzerClearCursor()
596 pCur->nStem = 0; in fuzzerClearCursor()
603 fuzzer_cursor *pCur = (fuzzer_cursor *)cur; in fuzzerClose() local
604 fuzzerClearCursor(pCur, 0); in fuzzerClose()
605 sqlite3_free(pCur->zBuf); in fuzzerClose()
606 pCur->pVtab->nCursor--; in fuzzerClose()
607 sqlite3_free(pCur); in fuzzerClose()
694 static int fuzzerSeen(fuzzer_cursor *pCur, fuzzer_stem *pStem){ in fuzzerSeen() argument
698 if( fuzzerRender(pStem, &pCur->zBuf, &pCur->nBuf)==SQLITE_NOMEM ){ in fuzzerSeen()
701 h = fuzzerHash(pCur->zBuf); in fuzzerSeen()
702 pLookup = pCur->apHash[h]; in fuzzerSeen()
703 while( pLookup && strcmp(pLookup->zBasis, pCur->zBuf)!=0 ){ in fuzzerSeen()
733 static int fuzzerAdvance(fuzzer_cursor *pCur, fuzzer_stem *pStem){ in fuzzerAdvance() argument
736 assert( pRule==&pCur->nullRule || pRule->iRuleset==pCur->iRuleset ); in fuzzerAdvance()
743 int rc = fuzzerSeen(pCur, pStem); in fuzzerAdvance()
754 }while( fuzzerSkipRule(pRule, pStem, pCur->iRuleset) ); in fuzzerAdvance()
756 if( pRule && fuzzerCost(pStem)>pCur->rLimit ) pStem->pRule = 0; in fuzzerAdvance()
794 static fuzzer_stem *fuzzerLowestCostStem(fuzzer_cursor *pCur){ in fuzzerLowestCostStem() argument
799 if( pCur->pStem==0 ){ in fuzzerLowestCostStem()
802 for(i=0; i<=pCur->mxQueue; i++){ in fuzzerLowestCostStem()
803 pX = pCur->aQueue[i]; in fuzzerLowestCostStem()
811 pCur->aQueue[iBest] = pBest->pNext; in fuzzerLowestCostStem()
813 pCur->pStem = pBest; in fuzzerLowestCostStem()
816 return pCur->pStem; in fuzzerLowestCostStem()
825 static fuzzer_stem *fuzzerInsert(fuzzer_cursor *pCur, fuzzer_stem *pNew){ in fuzzerInsert() argument
832 if( (pX = pCur->pStem)!=0 && pX->rCostX>pNew->rCostX ){ in fuzzerInsert()
834 pCur->pStem = pNew; in fuzzerInsert()
841 for(i=0; i<=pCur->mxQueue; i++){ in fuzzerInsert()
842 if( pCur->aQueue[i] ){ in fuzzerInsert()
843 pX = fuzzerMergeStems(pX, pCur->aQueue[i]); in fuzzerInsert()
844 pCur->aQueue[i] = 0; in fuzzerInsert()
846 pCur->aQueue[i] = pX; in fuzzerInsert()
850 if( i>pCur->mxQueue ){ in fuzzerInsert()
852 pCur->mxQueue = i; in fuzzerInsert()
853 pCur->aQueue[i] = pX; in fuzzerInsert()
855 assert( pCur->mxQueue==FUZZER_NQUEUE-1 ); in fuzzerInsert()
856 pX = fuzzerMergeStems(pX, pCur->aQueue[FUZZER_NQUEUE-1]); in fuzzerInsert()
857 pCur->aQueue[FUZZER_NQUEUE-1] = pX; in fuzzerInsert()
861 return fuzzerLowestCostStem(pCur); in fuzzerInsert()
869 fuzzer_cursor *pCur, in fuzzerNewStem() argument
883 pRule = pCur->pVtab->pRule; in fuzzerNewStem()
884 while( fuzzerSkipRule(pRule, pNew, pCur->iRuleset) ){ in fuzzerNewStem()
891 pNew->pHash = pCur->apHash[h]; in fuzzerNewStem()
892 pCur->apHash[h] = pNew; in fuzzerNewStem()
893 pCur->nStem++; in fuzzerNewStem()
902 fuzzer_cursor *pCur = (fuzzer_cursor*)cur; in fuzzerNext() local
906 pCur->iRowid++; in fuzzerNext()
911 pStem = pCur->pStem; in fuzzerNext()
913 rc = fuzzerRender(pStem, &pCur->zBuf, &pCur->nBuf); in fuzzerNext()
915 pNew = fuzzerNewStem(pCur, pCur->zBuf, pStem->rCostX); in fuzzerNext()
917 if( fuzzerAdvance(pCur, pNew)==0 ){ in fuzzerNext()
918 pNew->pNext = pCur->pDone; in fuzzerNext()
919 pCur->pDone = pNew; in fuzzerNext()
921 if( fuzzerInsert(pCur, pNew)==pNew ){ in fuzzerNext()
933 while( (pStem = pCur->pStem)!=0 ){ in fuzzerNext()
934 int res = fuzzerAdvance(pCur, pStem); in fuzzerNext()
938 pCur->pStem = 0; in fuzzerNext()
939 pStem = fuzzerInsert(pCur, pStem); in fuzzerNext()
940 if( (rc = fuzzerSeen(pCur, pStem))!=0 ){ in fuzzerNext()
946 pCur->pStem = 0; in fuzzerNext()
947 pStem->pNext = pCur->pDone; in fuzzerNext()
948 pCur->pDone = pStem; in fuzzerNext()
949 if( fuzzerLowestCostStem(pCur) ){ in fuzzerNext()
950 rc = fuzzerSeen(pCur, pCur->pStem); in fuzzerNext()
960 pCur->rLimit = (fuzzer_cost)0; in fuzzerNext()
974 fuzzer_cursor *pCur = (fuzzer_cursor *)pVtabCursor; in fuzzerFilter() local
979 fuzzerClearCursor(pCur, 1); in fuzzerFilter()
980 pCur->rLimit = 2147483647; in fuzzerFilter()
987 pCur->rLimit = (fuzzer_cost)sqlite3_value_int(argv[idx]); in fuzzerFilter()
991 pCur->iRuleset = (fuzzer_cost)sqlite3_value_int(argv[idx]); in fuzzerFilter()
994 pCur->nullRule.pNext = pCur->pVtab->pRule; in fuzzerFilter()
995 pCur->nullRule.rCost = 0; in fuzzerFilter()
996 pCur->nullRule.nFrom = 0; in fuzzerFilter()
997 pCur->nullRule.nTo = 0; in fuzzerFilter()
998 pCur->nullRule.zFrom = ""; in fuzzerFilter()
999 pCur->iRowid = 1; in fuzzerFilter()
1000 assert( pCur->pStem==0 ); in fuzzerFilter()
1005 pCur->pStem = pStem = fuzzerNewStem(pCur, zWord, (fuzzer_cost)0); in fuzzerFilter()
1007 pStem->pRule = &pCur->nullRule; in fuzzerFilter()
1010 pCur->rLimit = 0; in fuzzerFilter()
1021 fuzzer_cursor *pCur = (fuzzer_cursor*)cur; in fuzzerColumn() local
1024 if( fuzzerRender(pCur->pStem, &pCur->zBuf, &pCur->nBuf)==SQLITE_NOMEM ){ in fuzzerColumn()
1027 sqlite3_result_text(ctx, pCur->zBuf, -1, SQLITE_TRANSIENT); in fuzzerColumn()
1030 sqlite3_result_int(ctx, pCur->pStem->rCostX); in fuzzerColumn()
1042 fuzzer_cursor *pCur = (fuzzer_cursor*)cur; in fuzzerRowid() local
1043 *pRowid = pCur->iRowid; in fuzzerRowid()
1052 fuzzer_cursor *pCur = (fuzzer_cursor*)cur; in fuzzerEof() local
1053 return pCur->rLimit<=(fuzzer_cost)0; in fuzzerEof()