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 <[email protected]> Authored: Mon Dec 21 09:04:49 2015 -0800 Committer: Marvin Humphrey <[email protected]> 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) + } +}
