Tune and test Go bindings for SortReader.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/db08b691 Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/db08b691 Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/db08b691 Branch: refs/heads/master Commit: db08b691bf6a8b5ce450f296f496c76604eef3e6 Parents: bfe8a34 Author: Marvin Humphrey <[email protected]> Authored: Thu Dec 10 18:22:14 2015 -0800 Committer: Marvin Humphrey <[email protected]> Committed: Thu Dec 10 18:53:38 2015 -0800 ---------------------------------------------------------------------- go/build.go | 4 ++++ go/lucy/index.go | 14 ++++++++++++++ go/lucy/index_test.go | 16 +++++++++++++++- go/lucy/search_test.go | 2 +- 4 files changed, 34 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/db08b691/go/build.go ---------------------------------------------------------------------- diff --git a/go/build.go b/go/build.go index a730160..09a31e5 100644 --- a/go/build.go +++ b/go/build.go @@ -214,6 +214,10 @@ func specClasses(parcel *cfc.Parcel) { hlReaderBinding.SpecMethod("Fetch_Doc_Vec", "FetchDocVec(int32) (DocVector, error)") hlReaderBinding.Register() + sortReaderBinding := cfc.NewGoClass(parcel, "Lucy::Index::SortReader") + sortReaderBinding.SpecMethod("Fetch_Sort_Cache", "fetchSortCache(string) (SortCache, error)") + sortReaderBinding.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/db08b691/go/lucy/index.go ---------------------------------------------------------------------- diff --git a/go/lucy/index.go b/go/lucy/index.go index 09ad6ec..397e860 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/HighlightReader.h" +#include "Lucy/Index/SortReader.h" #include "Lucy/Index/IndexManager.h" #include "Lucy/Index/BackgroundMerger.h" #include "Lucy/Index/TermVector.h" @@ -494,6 +495,19 @@ func (h *HighlightReaderIMP) FetchDocVec(docID int32) (retval DocVector, err err return retval, err } +func (s *SortReaderIMP) fetchSortCache(field string) (retval SortCache, err error) { + err = clownfish.TrapErr(func() { + self := (*C.lucy_SortReader)(clownfish.Unwrap(s, "s")) + fieldC := (*C.cfish_String)(clownfish.GoToClownfish(field, unsafe.Pointer(C.CFISH_STRING), false)) + defer C.cfish_decref(unsafe.Pointer(fieldC)) + retvalCF := C.LUCY_SortReader_Fetch_Sort_Cache(self, fieldC) + if retvalCF != nil { + retval = clownfish.ToGo(unsafe.Pointer(C.cfish_incref(unsafe.Pointer(retvalCF)))).(SortCache) + } + }) + return retval, err +} + func OpenIndexReader(index interface{}, snapshot Snapshot, manager IndexManager) (retval IndexReader, 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/db08b691/go/lucy/index_test.go ---------------------------------------------------------------------- diff --git a/go/lucy/index_test.go b/go/lucy/index_test.go index ebf5d25..efbe0f0 100644 --- a/go/lucy/index_test.go +++ b/go/lucy/index_test.go @@ -403,7 +403,7 @@ func TestSortCacheMisc(t *testing.T) { ixReader, _ := OpenIndexReader(folder, nil, nil) segReaders := ixReader.SegReaders() sortReader := segReaders[0].Fetch("Lucy::Index::SortReader").(SortReader) - sortCache := sortReader.fetchSortCache("content") + sortCache, _ := sortReader.fetchSortCache("content") if card := sortCache.GetCardinality(); card != 4 { t.Errorf("GetCardinality: %d", card) @@ -847,3 +847,17 @@ func TestDeletionsReaderMisc(t *testing.T) { } runDataReaderCommon(t, delReader, true) } + +func TestSortReaderMisc(t *testing.T) { + folder := createTestIndex("a", "b", "c") + ixReader, _ := OpenIndexReader(folder, nil, nil) + segReaders := ixReader.SegReaders() + sortReader := segReaders[0].Fetch("Lucy::Index::SortReader").(SortReader) + if got, err := sortReader.fetchSortCache("content"); got == nil || err != nil { + t.Errorf("fetchSortCache should succeed: %v", err) + } + if got, err := sortReader.fetchSortCache("nope"); got != nil || err != nil { + t.Errorf("fetchSortCache for non-field should return nil: %v", err) + } + runDataReaderCommon(t, sortReader, false) +} http://git-wip-us.apache.org/repos/asf/lucy/blob/db08b691/go/lucy/search_test.go ---------------------------------------------------------------------- diff --git a/go/lucy/search_test.go b/go/lucy/search_test.go index 5061a24..47b809b 100644 --- a/go/lucy/search_test.go +++ b/go/lucy/search_test.go @@ -372,7 +372,7 @@ func TestRangeMatcherBasics(t *testing.T) { ixReader, _ := OpenIndexReader(index, nil, nil) segReaders := ixReader.SegReaders() sortReader := segReaders[0].Fetch("Lucy::Index::SortReader").(SortReader) - sortCache := sortReader.fetchSortCache("content") + sortCache, _ := sortReader.fetchSortCache("content") matcher := NewRangeMatcher(0, 0, sortCache, segReaders[0].DocMax()) if docID := matcher.Next(); docID != 4 { t.Errorf("Next: %d", docID)
