You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2015/12/28 21:11:01 UTC

[14/16] lucy git commit: Tune and test Go bindings for DeletionsWriter.

Tune and test Go bindings for DeletionsWriter.


Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/29320549
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/29320549
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/29320549

Branch: refs/heads/master
Commit: 2932054958f0fc785d13d1bbfe59dee9ce42ef00
Parents: 362aedd
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Mon Dec 21 09:04:49 2015 -0800
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Mon Dec 21 09:04:49 2015 -0800

----------------------------------------------------------------------
 go/build.go           |  8 ++++++++
 go/lucy/index.go      | 50 ++++++++++++++++++++++++++++++++++++++++++++++
 go/lucy/index_test.go | 30 ++++++++++++++++++++++++++++
 3 files changed, 88 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/29320549/go/build.go
----------------------------------------------------------------------
diff --git a/go/build.go b/go/build.go
index f78aa5f..82bcd9c 100644
--- a/go/build.go
+++ b/go/build.go
@@ -236,6 +236,14 @@ func specClasses(parcel *cfc.Parcel) {
 	dwBinding.SpecMethod("Finish", "Finish() error")
 	dwBinding.Register()
 
+	delWriterBinding := cfc.NewGoClass(parcel, "Lucy::Index::DeletionsWriter")
+	delWriterBinding.SpecMethod("Delete_By_Term", "DeleteByTerm(string, interface{}) error")
+	delWriterBinding.SpecMethod("Delete_By_Query", "DeleteByQuery(Query) error")
+	delWriterBinding.SpecMethod("Delete_By_Doc_ID", "deleteByDocID(int32) error")
+	delWriterBinding.SpecMethod("Generate_Doc_Map", "generateDocMap(Matcher, int32, int32) ([]int32, error)")
+	delWriterBinding.SpecMethod("Seg_Deletions", "segDeletions(SegReader) (Matcher, error)")
+	delWriterBinding.Register()
+
 	bgMergerBinding := cfc.NewGoClass(parcel, "Lucy::Index::BackgroundMerger")
 	bgMergerBinding.SpecMethod("Prepare_Commit", "PrepareCommit() error")
 	bgMergerBinding.SpecMethod("Commit", "Commit() error")

http://git-wip-us.apache.org/repos/asf/lucy/blob/29320549/go/lucy/index.go
----------------------------------------------------------------------
diff --git a/go/lucy/index.go b/go/lucy/index.go
index 0444a30..67ec832 100644
--- a/go/lucy/index.go
+++ b/go/lucy/index.go
@@ -21,6 +21,7 @@ package lucy
 #include "Lucy/Index/IndexReader.h"
 #include "Lucy/Index/DataReader.h"
 #include "Lucy/Index/DataWriter.h"
+#include "Lucy/Index/DeletionsWriter.h"
 #include "Lucy/Index/DocReader.h"
 #include "Lucy/Index/LexiconReader.h"
 #include "Lucy/Index/PostingListReader.h"
@@ -279,6 +280,55 @@ func (d *DataWriterIMP) Finish() error {
 	})
 }
 
+func (d *DeletionsWriterIMP) DeleteByTerm(field string, term interface{}) error {
+	return clownfish.TrapErr(func() {
+		self := (*C.lucy_DeletionsWriter)(clownfish.Unwrap(d, "d"))
+		fieldCF := (*C.cfish_String)(clownfish.GoToClownfish(field, unsafe.Pointer(C.CFISH_STRING), false))
+		defer C.cfish_decref(unsafe.Pointer(fieldCF))
+		termCF := (*C.cfish_Obj)(clownfish.GoToClownfish(term, unsafe.Pointer(C.CFISH_OBJ), false))
+		defer C.cfish_decref(unsafe.Pointer(termCF))
+		C.LUCY_DelWriter_Delete_By_Term(self, fieldCF, termCF)
+	})
+}
+
+func (d *DeletionsWriterIMP) DeleteByQuery(query Query) error {
+	return clownfish.TrapErr(func() {
+		self := (*C.lucy_DeletionsWriter)(clownfish.Unwrap(d, "d"))
+		queryCF := (*C.lucy_Query)(clownfish.Unwrap(query, "query"))
+		C.LUCY_DelWriter_Delete_By_Query(self, queryCF)
+	})
+}
+
+func (d *DeletionsWriterIMP) deleteByDocID(docId int32) error {
+	return clownfish.TrapErr(func() {
+		self := (*C.lucy_DeletionsWriter)(clownfish.Unwrap(d, "d"))
+		C.LUCY_DelWriter_Delete_By_Doc_ID(self, C.int32_t(docId))
+	})
+}
+
+func (d *DeletionsWriterIMP) generateDocMap(deletions Matcher, docMax int32, offset int32) (retval []int32, err error) {
+	err = clownfish.TrapErr(func() {
+		self := (*C.lucy_DeletionsWriter)(clownfish.Unwrap(d, "d"))
+		deletionsCF := (*C.lucy_Matcher)(clownfish.Unwrap(deletions, "deletions"))
+		retvalCF := C.LUCY_DelWriter_Generate_Doc_Map(self, deletionsCF, C.int32_t(docMax), C.int32_t(offset))
+		defer C.cfish_decref(unsafe.Pointer(retvalCF))
+		retval = i32ArrayToSlice(retvalCF)
+	})
+	return retval, err
+}
+
+func (d *DeletionsWriterIMP) segDeletions(segReader SegReader) (retval Matcher, err error) {
+	err = clownfish.TrapErr(func() {
+		self := (*C.lucy_DeletionsWriter)(clownfish.Unwrap(d, "d"))
+		segReaderCF := (*C.lucy_SegReader)(clownfish.Unwrap(segReader, "segReader"))
+		retvalCF := C.LUCY_DelWriter_Seg_Deletions(self, segReaderCF)
+		if retvalCF != nil {
+			retval = clownfish.WRAPAny(unsafe.Pointer(retvalCF)).(Matcher)
+		}
+	})
+	return retval, err
+}
+
 func OpenBackgroundMerger(index interface{}, manager IndexManager) (bgm BackgroundMerger, err error) {
 	err = clownfish.TrapErr(func() {
 		indexC := (*C.cfish_Obj)(clownfish.GoToClownfish(index, unsafe.Pointer(C.CFISH_OBJ), false))

http://git-wip-us.apache.org/repos/asf/lucy/blob/29320549/go/lucy/index_test.go
----------------------------------------------------------------------
diff --git a/go/lucy/index_test.go b/go/lucy/index_test.go
index f71cb2f..9f2aca9 100644
--- a/go/lucy/index_test.go
+++ b/go/lucy/index_test.go
@@ -964,3 +964,33 @@ func runDataWriterCommon(t *testing.T, api string) {
 func TestSortWriterMisc(t *testing.T) {
 	runDataWriterCommon(t, "Lucy::Index::SortWriter")
 }
+
+func TestDeletionsWriterMisc(t *testing.T) {
+	index := createTestIndex("a", "b", "c")
+	indexer, _ := OpenIndexer(&OpenIndexerArgs{Index: index})
+	delWriter := indexer.getSegWriter().Fetch("Lucy::Index::DeletionsWriter").(DeletionsWriter)
+	if delWriter.Updated() {
+		t.Errorf("Not yet updated")
+	}
+
+	if err := delWriter.DeleteByTerm("content", "a"); err != nil {
+		t.Errorf("DeleteByTerm: %v", err)
+	}
+	if err := delWriter.DeleteByQuery(NewTermQuery("content", "b")); err != nil {
+		t.Errorf("DeleteByQuery: %v", err)
+	}
+	if err := delWriter.deleteByDocID(3); err != nil {
+		t.Errorf("deleteByDocID: %v", err)
+	}
+	if !delWriter.Updated() {
+		t.Errorf("Now we're updated")
+	}
+
+	if got := delWriter.SegDelCount("seg_1"); got != 3 {
+		t.Errorf("SegDelCount: %d", got)
+	}
+	segReaders := delWriter.GetPolyReader().SegReaders()
+	if dels, err := delWriter.segDeletions(segReaders[0]); dels == nil || err != nil {
+		t.Errorf("segDeletions: %v", err)
+	}
+}