searcher/searchserver/src/ccpixsearch.cpp
changeset 8 6547bf8ca13a
parent 1 6f2c1c46032b
child 14 8bd192d47aaa
--- a/searcher/searchserver/src/ccpixsearch.cpp	Fri Jun 11 14:43:47 2010 +0300
+++ b/searcher/searchserver/src/ccpixsearch.cpp	Mon Jun 28 10:34:53 2010 +0530
@@ -27,18 +27,7 @@
 #endif
 
 
-namespace {
 
-/**
- * cpix_DocFieldEnum destroyer for TCleanupItem
- * @param aCpixDocFieldEnum CPix document
- */
-void CpixDocFieldEnumDestroyer(TAny* aCpixDocFieldEnum)
-	{
-	cpix_DocFieldEnum_destroy( static_cast<cpix_DocFieldEnum*>( aCpixDocFieldEnum ) );
-	}
-
-} // namespace
 
 CCPixSearch* CCPixSearch::NewL()
 	{
@@ -56,7 +45,9 @@
 	}
 
 CCPixSearch::CCPixSearch()
-	: iPendingTask(EPendingTaskNone)
+	: iQueryParserType(EIncrementalQueryParser),
+	  iPendingTask(EPendingTaskNone)
+	  
 	{
 	}
 
@@ -238,7 +229,9 @@
 	
 	cpix_Hits_asyncDocResults(iHits, iPendingJobId);
 	SearchServerHelper::CheckCpixErrorL(iHits, KErrDocumentAccessFailed);
-
+	
+	return ConvertDocumentL( &iCurrentCpixDocument );
+#if 0 // TODO XXX TIM
 	const wchar_t* documentId = cpix_Document_getFieldValue(&iCurrentCpixDocument, LCPIX_DOCUID_FIELD);
 	SearchServerHelper::CheckCpixErrorL(&iCurrentCpixDocument, KErrDatabaseQueryFailed);
 	
@@ -300,6 +293,7 @@
 	
 	OstTraceFunctionExit0( CCPIXSEARCH_GETDOCUMENTCOMPLETEL_EXIT );
 	return document;
+#endif // 0
 	}
 
 void CCPixSearch::SetAnalyzerL(const TDesC& aAnalyzer)
@@ -321,15 +315,43 @@
 	iAnalyzer = cpix_Analyzer_create(&result, cAnalyzer);
 	SearchServerHelper::CheckCpixErrorL(&result, KErrCannotCreateAnalyzer);
 
-	CleanupStack::PopAndDestroy( analyzer ); 
+	CleanupStack::PopAndDestroy( analyzer );
+	
+	RefreshQueryParserL(); 
+	}
+
+void CCPixSearch::SetQueryParserL(TInt aQueryParser)
+	{
+	iQueryParserType = TQueryParser(aQueryParser); 
+	RefreshQueryParserL(); 
+	}
 
-	iQueryParser = 
-		cpix_QueryParser_create(&result,
-			reinterpret_cast<const wchar_t*>(iDefaultSearchFieldZ->Des().PtrZ()), 
-			iAnalyzer);
+void CCPixSearch::RefreshQueryParserL() 
+	{
+	cpix_QueryParser_destroy( iQueryParser );
+	iQueryParser = NULL; 
+	cpix_Result result; 
+	
+	if ( iQueryParserType == EDatabaseQueryParser ) 
+		{
+		iQueryParser = 
+			cpix_QueryParser_create( &result, 
+									  reinterpret_cast<const wchar_t*>(
+									      iDefaultSearchFieldZ->Des().PtrZ()), 
+									  iAnalyzer );
+		} 
+	else if ( iQueryParserType == EIncrementalQueryParser ) 
+		{
+		iQueryParser = 
+			cpix_CreatePrefixQueryParser( &result, 
+										  reinterpret_cast<const wchar_t*>(
+										      iDefaultSearchFieldZ->Des().PtrZ()) );
+		
+		}
 	SearchServerHelper::CheckCpixErrorL(&result, KErrCannotCreateQueryParser);
 	}
 
+
 void CCPixSearch::OpenDatabaseL(const TDesC& aBaseAppClass, const TDesC& aDefaultSearchField)
 	{
 	// Release data associated with old database