Rework OpenIn for multi-value return. The Go binding for Folder's OpenIn method should return a tuple of the InStream 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/b2a6e666 Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/b2a6e666 Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/b2a6e666 Branch: refs/heads/LUCY-282-test-index-go-pt1 Commit: b2a6e66680a09b6df82e2870c08510468e25f124 Parents: c8950d0 Author: Marvin Humphrey <[email protected]> Authored: Wed Oct 21 14:38:37 2015 -0700 Committer: Marvin Humphrey <[email protected]> Committed: Fri Oct 23 16:41:42 2015 -0700 ---------------------------------------------------------------------- go/build.go | 1 + go/lucy/search_test.go | 8 ++++---- go/lucy/store.go | 15 +++++++++++++++ go/lucy/store_test.go | 10 ++++++---- 4 files changed, 26 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/b2a6e666/go/build.go ---------------------------------------------------------------------- diff --git a/go/build.go b/go/build.go index 96f01ed..b1c155d 100644 --- a/go/build.go +++ b/go/build.go @@ -255,6 +255,7 @@ func specClasses(parcel *cfc.Parcel) { folderBinding := cfc.NewGoClass(parcel, "Lucy::Store::Folder") folderBinding.SpecMethod("Open_Out", "OpenOut(string) (OutStream, error)") + folderBinding.SpecMethod("Open_In", "OpenIn(string) (InStream, error)") folderBinding.Register() } http://git-wip-us.apache.org/repos/asf/lucy/blob/b2a6e666/go/lucy/search_test.go ---------------------------------------------------------------------- diff --git a/go/lucy/search_test.go b/go/lucy/search_test.go index c4cd282..319f0f7 100644 --- a/go/lucy/search_test.go +++ b/go/lucy/search_test.go @@ -26,7 +26,7 @@ func checkQuerySerialize(t *testing.T, query Query) { outStream, _ := folder.OpenOut("foo") query.Serialize(outStream) outStream.Close() - inStream := folder.OpenIn("foo") + inStream, _ := folder.OpenIn("foo") dupe := clownfish.GetClass(query).MakeObj().(Query).Deserialize(inStream) if !query.Equals(dupe) { t.Errorf("Unsuccessful serialization round trip -- expected '%v', got '%v'", @@ -404,7 +404,7 @@ func TestTopDocsBasics(t *testing.T) { outstream, _ := folder.OpenOut("foo") td.Serialize(outstream) outstream.Close() - inStream := folder.OpenIn("foo") + inStream, _ := folder.OpenIn("foo") dupe := clownfish.GetClass(td).MakeObj().(TopDocs).Deserialize(inStream) if dupe.GetTotalHits() != td.GetTotalHits() { t.Errorf("Failed round-trip serializetion of TopDocs") @@ -493,7 +493,7 @@ func TestSortSpecBasics(t *testing.T) { outstream, _ := folder.OpenOut("foo") sortSpec.Serialize(outstream) outstream.Close() - inStream := folder.OpenIn("foo") + inStream, _ := folder.OpenIn("foo") dupe := clownfish.GetClass(sortSpec).MakeObj().(SortSpec).Deserialize(inStream) if len(dupe.GetRules()) != len(rules) { t.Errorf("Failed round-trip serializetion of SortSpec") @@ -701,7 +701,7 @@ func TestMatchDocSerialization(t *testing.T) { outstream, _ := folder.OpenOut("foo") matchDoc.Serialize(outstream) outstream.Close() - inStream := folder.OpenIn("foo") + inStream, _ := folder.OpenIn("foo") dupe := clownfish.GetClass(matchDoc).MakeObj().(MatchDoc).Deserialize(inStream) if got := dupe.GetValues(); !reflect.DeepEqual(got, values) { t.Errorf("Failed round-trip serializetion of MatchDoc") http://git-wip-us.apache.org/repos/asf/lucy/blob/b2a6e666/go/lucy/store.go ---------------------------------------------------------------------- diff --git a/go/lucy/store.go b/go/lucy/store.go index f23241e..111347c 100644 --- a/go/lucy/store.go +++ b/go/lucy/store.go @@ -345,3 +345,18 @@ func (f *FolderIMP) OpenOut(path string) (retval OutStream, err error) { }) return retval, err } + +func (f *FolderIMP) OpenIn(path string) (retval InStream, 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_In(self, pathC) + if retvalC == nil { + cfErr := C.cfish_Err_get_error(); + panic(clownfish.WRAPAny(unsafe.Pointer(C.cfish_incref(unsafe.Pointer(cfErr)))).(error)) + } + retval = WRAPInStream(unsafe.Pointer(retvalC)) + }) + return retval, err +} http://git-wip-us.apache.org/repos/asf/lucy/blob/b2a6e666/go/lucy/store_test.go ---------------------------------------------------------------------- diff --git a/go/lucy/store_test.go b/go/lucy/store_test.go index d75dbf0..f972c96 100644 --- a/go/lucy/store_test.go +++ b/go/lucy/store_test.go @@ -288,13 +288,15 @@ func TestIOStreamMisc(t *testing.T) { outStream.Flush() outStream.Close() - inStream := folder.OpenIn("file.dat") + inStream, _ := folder.OpenIn("file.dat") if got := inStream.GetFilename(); got != "mydir/file.dat" { t.Errorf("GetFilename: %s", got) } } func runFolderTests(t *testing.T, folder Folder) { + var err error + folder.Initialize() if !folder.Check() { t.Errorf("Check") @@ -307,9 +309,9 @@ func runFolderTests(t *testing.T, folder Folder) { } outStream.WriteBytes([]byte("hi"), 2) outStream.Close() - inStream := folder.OpenIn("stuff/hello") - if inStream == nil { - t.Errorf("OpenIn") + inStream, err := folder.OpenIn("stuff/hello") + if inStream == nil || err != nil { + t.Errorf("OpenIn: %s", err) } inStream.Close() fh := folder.OpenFileHandle("stuff/hello", 0x1) // 0x1 == FH_READ_ONLY
