Tune and test Go bindings for DataWriter.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/362aeddc Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/362aeddc Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/362aeddc Branch: refs/heads/master Commit: 362aeddca1599907090188035e77aeeba7b57c8b Parents: e5e4232 Author: Marvin Humphrey <[email protected]> Authored: Mon Dec 14 20:28:27 2015 -0800 Committer: Marvin Humphrey <[email protected]> Committed: Fri Dec 18 12:04:01 2015 -0800 ---------------------------------------------------------------------- go/build.go | 8 +++++++ go/lucy/index.go | 44 +++++++++++++++++++++++++++++++++++ go/lucy/index_test.go | 57 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/362aeddc/go/build.go ---------------------------------------------------------------------- diff --git a/go/build.go b/go/build.go index 604a9a9..f78aa5f 100644 --- a/go/build.go +++ b/go/build.go @@ -228,6 +228,14 @@ func specClasses(parcel *cfc.Parcel) { pListReaderBinding.SpecMethod("Posting_List", "PostingList(string, interface{}) (PostingList, error)") pListReaderBinding.Register() + dwBinding := cfc.NewGoClass(parcel, "Lucy::Index::DataWriter") + dwBinding.SpecMethod("Add_Inverted_Doc", "addInvertedDoc(Inverter, int32) error") + dwBinding.SpecMethod("Add_Segment", "AddSegment(SegReader, []int32) error") + dwBinding.SpecMethod("Delete_Segment", "DeleteSegment(SegReader) error") + dwBinding.SpecMethod("Merge_Segment", "MergeSegment(SegReader, []int32) error") + dwBinding.SpecMethod("Finish", "Finish() error") + dwBinding.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/362aeddc/go/lucy/index.go ---------------------------------------------------------------------- diff --git a/go/lucy/index.go b/go/lucy/index.go index 1f5a752..0444a30 100644 --- a/go/lucy/index.go +++ b/go/lucy/index.go @@ -20,6 +20,7 @@ package lucy #include "Lucy/Index/Indexer.h" #include "Lucy/Index/IndexReader.h" #include "Lucy/Index/DataReader.h" +#include "Lucy/Index/DataWriter.h" #include "Lucy/Index/DocReader.h" #include "Lucy/Index/LexiconReader.h" #include "Lucy/Index/PostingListReader.h" @@ -235,6 +236,49 @@ func (obj *IndexerIMP) Commit() error { }) } +func (d *DataWriterIMP) addInvertedDoc(inverter Inverter, docId int32) error { + return clownfish.TrapErr(func() { + self := (*C.lucy_DataWriter)(clownfish.Unwrap(d, "d")) + inverterCF := (*C.lucy_Inverter)(clownfish.Unwrap(inverter, "inverter")) + C.LUCY_DataWriter_Add_Inverted_Doc(self, inverterCF, C.int32_t(docId)) + }) +} + +func (d *DataWriterIMP) AddSegment(reader SegReader, docMap []int32) error { + return clownfish.TrapErr(func() { + self := (*C.lucy_DataWriter)(clownfish.Unwrap(d, "d")) + readerCF := (*C.lucy_SegReader)(clownfish.Unwrap(reader, "reader")) + docMapConv := NewI32Array(docMap) + docMapCF := (*C.lucy_I32Array)(clownfish.UnwrapNullable(docMapConv)) + C.LUCY_DataWriter_Add_Segment(self, readerCF, docMapCF) + }) +} + +func (d *DataWriterIMP) DeleteSegment(reader SegReader) error { + return clownfish.TrapErr(func() { + self := (*C.lucy_DataWriter)(clownfish.Unwrap(d, "d")) + readerCF := (*C.lucy_SegReader)(clownfish.Unwrap(reader, "reader")) + C.LUCY_DataWriter_Delete_Segment(self, readerCF) + }) +} + +func (d *DataWriterIMP) MergeSegment(reader SegReader, docMap []int32) error { + return clownfish.TrapErr(func() { + self := (*C.lucy_DataWriter)(clownfish.Unwrap(d, "d")) + readerCF := (*C.lucy_SegReader)(clownfish.Unwrap(reader, "reader")) + docMapConv := NewI32Array(docMap) + docMapCF := (*C.lucy_I32Array)(clownfish.UnwrapNullable(docMapConv)) + C.LUCY_DataWriter_Merge_Segment(self, readerCF, docMapCF) + }) +} + +func (d *DataWriterIMP) Finish() error { + return clownfish.TrapErr(func() { + self := (*C.lucy_DataWriter)(clownfish.Unwrap(d, "d")) + C.LUCY_DataWriter_Finish(self) + }) +} + 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/362aeddc/go/lucy/index_test.go ---------------------------------------------------------------------- diff --git a/go/lucy/index_test.go b/go/lucy/index_test.go index 0143fcf..f71cb2f 100644 --- a/go/lucy/index_test.go +++ b/go/lucy/index_test.go @@ -907,3 +907,60 @@ func TestSortReaderMisc(t *testing.T) { } runDataReaderCommon(t, sortReader, false) } + +func runDataWriterCommon(t *testing.T, api string) { + abcIndex := createTestIndex("a", "b", "c") + indexer, _ := OpenIndexer(&OpenIndexerArgs{Index: abcIndex}) + dataWriter := indexer.getSegWriter().Fetch(api).(DataWriter) + + if got := dataWriter.GetSnapshot(); false { + t.Errorf("GetSnapshot: %v", got) + } + if got := dataWriter.GetSegment(); false { + t.Errorf("GetSegment: %#v", got) + } + if got := dataWriter.GetPolyReader(); false { + t.Errorf("GetPolyReader: %#v", got) + } + if got := dataWriter.GetSchema(); false { + t.Errorf("GetSchema: %v", got) + } + if got := dataWriter.GetFolder(); false { + t.Errorf("GetFolder: %v", got) + } + + doc := NewDoc(1) + doc.Store("content", "three blind mice") + inverter := NewInverter(dataWriter.GetSchema(), dataWriter.GetSegment()) + inverter.SetDoc(doc) + inverter.InvertDoc(doc) + if err := dataWriter.addInvertedDoc(inverter, 1); err != nil { + t.Errorf("addInvertedDoc: %v", err) + } + + segReaders := indexer.getSegWriter().GetPolyReader().SegReaders() + abcSegReader := segReaders[0] + if err := dataWriter.MergeSegment(abcSegReader, []int32{0, 2, 0, 3}); err != nil { + t.Errorf("MergeSegment: %v", err) + } + + // TODO + //if err := dataWriter.DeleteSegment(fooSegReader); err != nil { + // t.Errorf("DeleteSegment: %v", err) + //} + + xyzIndex := createTestIndex("x", "y", "z") + xyzReader, _ := OpenIndexReader(xyzIndex, nil, nil) + xyzSegReaders := xyzReader.SegReaders() + if err := dataWriter.AddSegment(xyzSegReaders[0], []int32{0, 4, 5, 6}); err != nil { + t.Errorf("AddSegment: %v", err) + } + + if err := dataWriter.Finish(); err != nil { + t.Errorf("Finish: %v", err) + } +} + +func TestSortWriterMisc(t *testing.T) { + runDataWriterCommon(t, "Lucy::Index::SortWriter") +}
