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:10:52 UTC

[05/16] lucy git commit: Tune and test Go bindings for DataReader.

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 <ma...@rectangular.com>
Authored: Tue Dec 8 18:32:52 2015 -0800
Committer: Marvin Humphrey <ma...@rectangular.com>
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)
+}