#include "Xpclucene.h" #include "nsCOMPtr.h" #include "nsILuceneQuery.h" #include "nsLuceneQuery.h" #include "nsILuceneIndexReader.h" #include "nsLuceneIndexReader.h" #include "nsLuceneFactory.h" #include "CLucene/CLConfig.h" #include "CLucene.h" NS_IMPL_ISUPPORTS1(nsLuceneQuery, nsILuceneQuery) nsLuceneQuery::nsLuceneQuery(lucene::search::Query *pQuery) { mQuery = pQuery; } lucene::search::Query * nsLuceneQuery::getQuery() { return mQuery; } nsLuceneQuery::~nsLuceneQuery() { delete mQuery; } NS_IMETHODIMP nsLuceneQuery::Rewrite(nsILuceneIndexReader *reader, nsILuceneQuery **_retval) { LUCENETRYCATCH_START lucene::search::Query* q = mQuery->rewrite(((nsLuceneIndexReader*) reader)->getIndexReader()); /* * Sometimes rewrite() returns a new query, sometimes it returns the one * we passed it. Only create a new nsLuceneQuery if we get a new one, * otherwise return a referece to this */ if(mQuery == q) { *_retval = this; NS_ADDREF(*_retval); } else { nsCOMPtr wrappedQuery = new nsLuceneQuery(q); NS_ENSURE_TRUE(wrappedQuery, NS_ERROR_OUT_OF_MEMORY); *_retval = wrappedQuery; NS_ADDREF(*_retval); } return NS_OK; LUCENETRYCATCH_END }