Rework OpenOut for multi-value return. The Go binding for Folder's OpenOut method should return a tuple of the OutStream and an error.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/c8950d00 Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/c8950d00 Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/c8950d00 Branch: refs/heads/LUCY-282-test-index-go-pt1 Commit: c8950d0069a2714b3476f58026da9995624cf4b5 Parents: c7e9636 Author: Marvin Humphrey <mar...@rectangular.com> Authored: Tue Oct 20 19:04:43 2015 -0700 Committer: Marvin Humphrey <mar...@rectangular.com> Committed: Fri Oct 23 16:40:05 2015 -0700 ---------------------------------------------------------------------- go/build.go | 4 ++++ go/lucy/search_test.go | 8 ++++---- go/lucy/store.go | 16 ++++++++++++++++ go/lucy/store_test.go | 8 ++++---- 4 files changed, 28 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/c8950d00/go/build.go ---------------------------------------------------------------------- diff --git a/go/build.go b/go/build.go index 0a03d90..96f01ed 100644 --- a/go/build.go +++ b/go/build.go @@ -252,6 +252,10 @@ func specClasses(parcel *cfc.Parcel) { outStreamBinding.SpecMethod("Write_F64", "WriteF64(float64) error") outStreamBinding.SpecMethod("Absorb", "Absorb(InStream) error") outStreamBinding.Register() + + folderBinding := cfc.NewGoClass(parcel, "Lucy::Store::Folder") + folderBinding.SpecMethod("Open_Out", "OpenOut(string) (OutStream, error)") + folderBinding.Register() } func build() { http://git-wip-us.apache.org/repos/asf/lucy/blob/c8950d00/go/lucy/search_test.go ---------------------------------------------------------------------- diff --git a/go/lucy/search_test.go b/go/lucy/search_test.go index ae4c352..c4cd282 100644 --- a/go/lucy/search_test.go +++ b/go/lucy/search_test.go @@ -23,7 +23,7 @@ import "git-wip-us.apache.org/repos/asf/lucy-clownfish.git/runtime/go/clownfish" func checkQuerySerialize(t *testing.T, query Query) { folder := NewRAMFolder("") - outStream := folder.OpenOut("foo") + outStream, _ := folder.OpenOut("foo") query.Serialize(outStream) outStream.Close() inStream := folder.OpenIn("foo") @@ -401,7 +401,7 @@ func TestTopDocsBasics(t *testing.T) { } folder := NewRAMFolder("") - outstream := folder.OpenOut("foo") + outstream, _ := folder.OpenOut("foo") td.Serialize(outstream) outstream.Close() inStream := folder.OpenIn("foo") @@ -490,7 +490,7 @@ func TestSortSpecBasics(t *testing.T) { t.Error("Sort by field value") } - outstream := folder.OpenOut("foo") + outstream, _ := folder.OpenOut("foo") sortSpec.Serialize(outstream) outstream.Close() inStream := folder.OpenIn("foo") @@ -698,7 +698,7 @@ func TestMatchDocSerialization(t *testing.T) { values := []interface{}{"foo", int64(42)} matchDoc := NewMatchDoc(100, 1.5, values) folder := NewRAMFolder("") - outstream := folder.OpenOut("foo") + outstream, _ := folder.OpenOut("foo") matchDoc.Serialize(outstream) outstream.Close() inStream := folder.OpenIn("foo") http://git-wip-us.apache.org/repos/asf/lucy/blob/c8950d00/go/lucy/store.go ---------------------------------------------------------------------- diff --git a/go/lucy/store.go b/go/lucy/store.go index 503327e..f23241e 100644 --- a/go/lucy/store.go +++ b/go/lucy/store.go @@ -20,6 +20,7 @@ package lucy #include <stdlib.h> #include "Lucy/Store/Lock.h" +#include "Lucy/Store/Folder.h" #include "Lucy/Store/InStream.h" #include "Lucy/Store/OutStream.h" @@ -329,3 +330,18 @@ func (out *OutStreamIMP) Absorb(in InStream) error { C.LUCY_OutStream_Absorb(self, inStreamC) }) } + +func (f *FolderIMP) OpenOut(path string) (retval OutStream, err error) { + err = clownfish.TrapErr(func() { + self := (*C.lucy_Folder)(clownfish.Unwrap(f, "f")) + pathC := (*C.cfish_String)(clownfish.GoToClownfish(path, unsafe.Pointer(C.CFISH_STRING), false)) + defer C.cfish_decref(unsafe.Pointer(pathC)) + retvalC := C.LUCY_Folder_Open_Out(self, pathC) + if retvalC == nil { + cfErr := C.cfish_Err_get_error(); + panic(clownfish.WRAPAny(unsafe.Pointer(C.cfish_incref(unsafe.Pointer(cfErr)))).(error)) + } + retval = WRAPOutStream(unsafe.Pointer(retvalC)) + }) + return retval, err +} http://git-wip-us.apache.org/repos/asf/lucy/blob/c8950d00/go/lucy/store_test.go ---------------------------------------------------------------------- diff --git a/go/lucy/store_test.go b/go/lucy/store_test.go index 5c73693..d75dbf0 100644 --- a/go/lucy/store_test.go +++ b/go/lucy/store_test.go @@ -280,7 +280,7 @@ func TestIOStreamReadWrite(t *testing.T) { func TestIOStreamMisc(t *testing.T) { folder := NewRAMFolder("mydir") - outStream := folder.OpenOut("file.dat") + outStream, _ := folder.OpenOut("file.dat") if got := outStream.GetPath(); got != "mydir/file.dat" { t.Errorf("GetPath: %s", got) } @@ -301,9 +301,9 @@ func runFolderTests(t *testing.T, folder Folder) { } folder.MkDir("stuff") - outStream := folder.OpenOut("stuff/hello") - if outStream == nil { - t.Errorf("OpenOut") + outStream, err := folder.OpenOut("stuff/hello") + if outStream == nil || err != nil { + t.Errorf("OpenOut: %v", err) } outStream.WriteBytes([]byte("hi"), 2) outStream.Close()