Tune and test Go bindings for PostingListReader.

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

Branch: refs/heads/master
Commit: e5e4232b6c0c8d22f46c6db5430fb92ee949c855
Parents: 3358bc2
Author: Marvin Humphrey <[email protected]>
Authored: Thu Dec 10 19:03:15 2015 -0800
Committer: Marvin Humphrey <[email protected]>
Committed: Thu Dec 10 19:04:59 2015 -0800

----------------------------------------------------------------------
 go/build.go           |  4 ++++
 go/lucy/index.go      | 16 ++++++++++++++++
 go/lucy/index_test.go | 19 ++++++++++++++++++-
 3 files changed, 38 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/e5e4232b/go/build.go
----------------------------------------------------------------------
diff --git a/go/build.go b/go/build.go
index 36b487d..604a9a9 100644
--- a/go/build.go
+++ b/go/build.go
@@ -224,6 +224,10 @@ func specClasses(parcel *cfc.Parcel) {
        lexReaderBinding.SpecMethod("Fetch_Term_Info", "fetchTermInfo(string, 
interface{}) (TermInfo, error)")
        lexReaderBinding.Register()
 
+       pListReaderBinding := cfc.NewGoClass(parcel, 
"Lucy::Index::PostingListReader")
+       pListReaderBinding.SpecMethod("Posting_List", "PostingList(string, 
interface{}) (PostingList, error)")
+       pListReaderBinding.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/e5e4232b/go/lucy/index.go
----------------------------------------------------------------------
diff --git a/go/lucy/index.go b/go/lucy/index.go
index a0e3396..1f5a752 100644
--- a/go/lucy/index.go
+++ b/go/lucy/index.go
@@ -22,6 +22,7 @@ package lucy
 #include "Lucy/Index/DataReader.h"
 #include "Lucy/Index/DocReader.h"
 #include "Lucy/Index/LexiconReader.h"
+#include "Lucy/Index/PostingListReader.h"
 #include "Lucy/Index/HighlightReader.h"
 #include "Lucy/Index/SortReader.h"
 #include "Lucy/Index/IndexManager.h"
@@ -529,6 +530,21 @@ func (lr *LexiconReaderIMP) fetchTermInfo(field string, 
term interface{}) (retva
        return retval, err
 }
 
+func (p *PostingListReaderIMP) PostingList(field string, term interface{}) 
(retval PostingList, err error) {
+       err = clownfish.TrapErr(func() {
+               self := (*C.lucy_PostingListReader)(clownfish.Unwrap(p, "p"))
+               fieldC := (*C.cfish_String)(clownfish.GoToClownfish(field, 
unsafe.Pointer(C.CFISH_STRING), false))
+               defer C.cfish_decref(unsafe.Pointer(fieldC))
+               termC := (*C.cfish_Obj)(clownfish.GoToClownfish(term, 
unsafe.Pointer(C.CFISH_OBJ), true))
+               defer C.cfish_decref(unsafe.Pointer(termC))
+               retvalCF := C.LUCY_PListReader_Posting_List(self, fieldC, termC)
+               if retvalCF != nil {
+                       retval = 
clownfish.ToGo(unsafe.Pointer(retvalCF)).(PostingList)
+               }
+       })
+       return retval, err
+}
+
 func (h *HighlightReaderIMP) FetchDocVec(docID int32) (retval DocVector, err 
error) {
        err = clownfish.TrapErr(func() {
                self := (*C.lucy_HighlightReader)(clownfish.Unwrap(h, "h"))

http://git-wip-us.apache.org/repos/asf/lucy/blob/e5e4232b/go/lucy/index_test.go
----------------------------------------------------------------------
diff --git a/go/lucy/index_test.go b/go/lucy/index_test.go
index 18d1e22..0143fcf 100644
--- a/go/lucy/index_test.go
+++ b/go/lucy/index_test.go
@@ -681,7 +681,7 @@ func TestPostingListBasics(t *testing.T) {
        ixReader, _ := OpenIndexReader(folder, nil, nil)
        segReaders := ixReader.SegReaders()
        pListReader := 
segReaders[0].Fetch("Lucy::Index::PostingListReader").(PostingListReader)
-       pList := pListReader.PostingList("content", nil)
+       pList, _ := pListReader.PostingList("content", nil)
        pList.Seek("b")
        if docFreq := pList.GetDocFreq(); docFreq != 2 {
                t.Errorf("GetDocFreq: %d", docFreq)
@@ -849,6 +849,23 @@ func TestLexReaderMisc(t *testing.T) {
        runDataReaderCommon(t, lexReader, false)
 }
 
+func TestPostingListReaderMisc(t *testing.T) {
+       folder := createTestIndex("a", "b", "c")
+       ixReader, _ := OpenIndexReader(folder, nil, nil)
+       segReaders := ixReader.SegReaders()
+       pListReader := 
segReaders[0].Fetch("Lucy::Index::PostingListReader").(PostingListReader)
+       if got, err := pListReader.PostingList("content", nil); got == nil || 
err != nil {
+               t.Errorf("PostingList should succeed: %v", err)
+       }
+       if got, err := pListReader.PostingList("content", "foo"); got == nil || 
err != nil {
+               t.Errorf("PostingList with term should succeed: %v", err)
+       }
+       if got, err := pListReader.PostingList("nope", nil); got != nil || err 
!= nil {
+               t.Errorf("PostingList for non-field should return nil: %v", err)
+       }
+       runDataReaderCommon(t, pListReader, false)
+}
+
 func TestHighlightReaderMisc(t *testing.T) {
        folder := createTestIndex("a", "b", "c")
        ixReader, _ := OpenIndexReader(folder, nil, nil)

Reply via email to