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")
+}

Reply via email to