changeset 4711:12584631dc42 HEAD

Some fixes.
author Timo Sirainen <tss@iki.fi>
date Wed, 25 Oct 2006 03:30:33 +0300
parents d0e37ed08bdb
children 70ca205ce6f1
files src/plugins/fts-lucene/lucene-wrapper.cc
diffstat 1 files changed, 23 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/fts-lucene/lucene-wrapper.cc	Wed Oct 25 02:49:13 2006 +0300
+++ b/src/plugins/fts-lucene/lucene-wrapper.cc	Wed Oct 25 03:30:33 2006 +0300
@@ -173,6 +173,9 @@
 {
 	int ret = 0;
 
+	index->last_uid = 0;
+	index->last_uid_doc_id = -1;
+
 	if (lucene_index_open_search(index) <= 0)
 		return -1;
 
@@ -185,8 +188,6 @@
 	query.add(&mailbox_query, true, false);
 	query.add(&last_uid_query, true, false);
 
-	index->last_uid = 0;
-	index->last_uid_doc_id = -1;
 	try {
 		Hits *hits = index->searcher->search(&query);
 
@@ -212,14 +213,15 @@
 			} else {
 				del_id = hits->id(i);
 			}
-			if (del_id >= 0)
-				index->reader->deleteDocument(del_id);
+			/*if (del_id >= 0)
+				index->reader->deleteDocument(del_id);*/
 		}
 		_CLDELETE(hits);
 	} catch (CLuceneError &err) {
 		i_error("lucene: last_uid search failed: %s", err.what());
 		ret = -1;
 	}
+
 	return ret;
 }
 
@@ -229,12 +231,14 @@
 
 	i_assert(index->mailbox_name != NULL);
 
+	lucene_index_close(index);
 	if (lucene_index_open(index) < 0)
 		return -1;
 
-	if (index->reader == NULL)
+	if (index->reader == NULL) {
 		index->last_uid = 0;
-	else {
+		index->last_uid_doc_id = -1;
+	} else {
 		if (lucene_index_get_last_uid(index) < 0)
 			return -1;
 	}
@@ -341,9 +345,16 @@
 
 	try {
 		if (index->last_uid_doc_id >= 0) {
-			index->reader->deleteDocument(index->last_uid_doc_id);
+			//index->reader->deleteDocument(index->last_uid_doc_id);
 			index->last_uid_doc_id = -1;
 		}
+	} catch (CLuceneError &err) {
+		i_error("lucene: IndexWriter::deleteDocument(%s) failed: %s",
+			index->path, err.what());
+		return -1;
+	}
+
+	try {
 		index->writer->addDocument(&doc);
 		return 0;
 	} catch (CLuceneError &err) {
@@ -357,6 +368,11 @@
 {
 	int ret = 0;
 
+	if (index->prev_uid == 0) {
+		/* no changes. */
+		return 0;
+	}
+
 	if (index->prev_uid > index->last_uid)
 		index->last_uid = index->prev_uid;
 	index->prev_uid = 0;
@@ -449,7 +465,6 @@
 	}
 
 	_CLDELETE(content_query);
-	lucene_index_close(index);
 	return ret;
 }