Tune and test Go bindings for DataReader.

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

Branch: refs/heads/master
Commit: 38bea5a604fd4d190bb49719f50d05e1a1c58de5
Parents: d262be9
Author: Marvin Humphrey <[email protected]>
Authored: Tue Dec 8 18:32:52 2015 -0800
Committer: Marvin Humphrey <[email protected]>
Committed: Thu Dec 10 18:22:53 2015 -0800

----------------------------------------------------------------------
 go/build.go           |  6 ++++++
 go/lucy/index.go      | 44 ++++++++++++++++++++++++++++++++++++++++++++
 go/lucy/index_test.go | 38 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 88 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/38bea5a6/go/build.go
----------------------------------------------------------------------
diff --git a/go/build.go b/go/build.go
index 692702d..2bdab37 100644
--- a/go/build.go
+++ b/go/build.go
@@ -185,6 +185,12 @@ func specClasses(parcel *cfc.Parcel) {
        indexerBinding.SetSuppressStruct(true)
        indexerBinding.Register()
 
+       dataReaderBinding := cfc.NewGoClass(parcel, "Lucy::Index::DataReader")
+       dataReaderBinding.SpecMethod("Aggregator", "Aggregator([]DataReader, 
[]int32) (DataReader, error)")
+       dataReaderBinding.SpecMethod("Get_Segments", "GetSegments() []Segment")
+       dataReaderBinding.SpecMethod("Close", "Close() error")
+       dataReaderBinding.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/38bea5a6/go/lucy/index.go
----------------------------------------------------------------------
diff --git a/go/lucy/index.go b/go/lucy/index.go
index 230e050..defa9f2 100644
--- a/go/lucy/index.go
+++ b/go/lucy/index.go
@@ -18,6 +18,7 @@ package lucy
 
 /*
 #include "Lucy/Index/Indexer.h"
+#include "Lucy/Index/DataReader.h"
 #include "Lucy/Index/IndexManager.h"
 #include "Lucy/Index/BackgroundMerger.h"
 #include "Lucy/Index/TermVector.h"
@@ -415,3 +416,46 @@ func (s *SortCacheIMP) Find(term interface{}) (retval 
int32, err error) {
        })
        return retval, err
 }
+
+func (d *DataReaderIMP) Aggregator(readers []DataReader, offsets []int32) 
(retval DataReader, err error) {
+       err = clownfish.TrapErr(func() {
+               self := (*C.lucy_DataReader)(clownfish.Unwrap(d, "d"))
+               size := len(readers)
+               readersC := C.cfish_Vec_new(C.size_t(size))
+               defer C.cfish_decref(unsafe.Pointer(readersC))
+               for i := 0; i < size; i++ {
+                       elemC := clownfish.Unwrap(readers[i], "readers[i]")
+                       C.CFISH_Vec_Push(readersC, C.cfish_incref(elemC))
+               }
+               offs := NewI32Array(offsets)
+               offsetsC := (*C.lucy_I32Array)(clownfish.Unwrap(offs, "offs"))
+               retvalCF := C.LUCY_DataReader_Aggregator(self, readersC, 
offsetsC)
+               defer C.cfish_decref(unsafe.Pointer(retvalCF))
+               if retvalCF != nil {
+                       retval = 
clownfish.ToGo(unsafe.Pointer(retvalCF)).(DataReader)
+               }
+       })
+       return retval, err
+}
+
+func (d *DataReaderIMP) GetSegments() []Segment {
+       self := (*C.lucy_DataReader)(clownfish.Unwrap(d, "d"))
+       retvalCF := C.LUCY_DataReader_Get_Segments(self);
+       if retvalCF == nil {
+               return nil
+       }
+       size := C.CFISH_Vec_Get_Size(retvalCF)
+       retval := make([]Segment, int(size))
+       for i := 0; i < int(size); i++ {
+               elem := unsafe.Pointer(C.CFISH_Vec_Fetch(retvalCF, C.size_t(i)))
+               retval[i] = 
clownfish.ToGo(unsafe.Pointer(C.cfish_incref(elem))).(Segment)
+       }
+       return retval
+}
+
+func (d *DataReaderIMP) Close() error {
+       return clownfish.TrapErr(func() {
+               self := (*C.lucy_DataReader)(clownfish.Unwrap(d, "d"))
+               C.LUCY_DataReader_Close(self)
+       })
+}

http://git-wip-us.apache.org/repos/asf/lucy/blob/38bea5a6/go/lucy/index_test.go
----------------------------------------------------------------------
diff --git a/go/lucy/index_test.go b/go/lucy/index_test.go
index 88e8924..40609e6 100644
--- a/go/lucy/index_test.go
+++ b/go/lucy/index_test.go
@@ -712,3 +712,41 @@ func TestPostingBasics(t *testing.T) {
                t.Errorf("getFreq: %d", got)
        }
 }
+
+// This function runs Close(), so the reader becomes unusable afterwards.
+func runDataReaderCommon(t *testing.T, reader DataReader, runAggregator bool) {
+       if runAggregator {
+               got, err := reader.Aggregator([]DataReader{}, []int32{})
+               if got == nil || err != nil {
+                       t.Errorf("Aggregator: %#v, %v", got, err)
+               }
+       }
+       if got := reader.GetSchema(); false {
+               t.Errorf("GetSchema: %v", got)
+       }
+       if got := reader.GetFolder(); false {
+               t.Errorf("GetFolder: %v", got)
+       }
+       if got := reader.GetSnapshot(); false {
+               t.Errorf("GetSnapshot: %v", got)
+       }
+       if got := reader.GetSegments(); false {
+               t.Errorf("GetSegments: %#v", got)
+       }
+       if got := reader.GetSegment(); false {
+               t.Errorf("GetSegment: %#v", got)
+       }
+       if got := reader.GetSegTick(); false {
+               t.Errorf("GetSegTick: %d", got)
+       }
+       if err := reader.Close(); err != nil {
+               t.Errorf("Close: %v", err)
+       }
+}
+
+func TestIndexReaderMisc(t *testing.T) {
+       folder := createTestIndex("a", "b", "c")
+       searcher, _ := OpenIndexSearcher(folder)
+       reader := searcher.GetReader()
+       runDataReaderCommon(t, reader, false)
+}

Reply via email to