Generalize `query` param in `Hits`. Allow both Query objects and query strings.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/63fd5b8b Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/63fd5b8b Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/63fd5b8b Branch: refs/heads/master Commit: 63fd5b8b89ba40cb51934fe087cd3d2c8e8ca3d8 Parents: 40a1eec Author: Marvin Humphrey <[email protected]> Authored: Tue Sep 15 13:33:37 2015 -0700 Committer: Marvin Humphrey <[email protected]> Committed: Tue Sep 15 15:54:51 2015 -0700 ---------------------------------------------------------------------- go/lucy/search.go | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/63fd5b8b/go/lucy/search.go ---------------------------------------------------------------------- diff --git a/go/lucy/search.go b/go/lucy/search.go index b47b340..e18eee7 100644 --- a/go/lucy/search.go +++ b/go/lucy/search.go @@ -83,25 +83,17 @@ func doClose(obj Searcher) error { }) } -func doHits(obj Searcher, query interface{}, offset uint32, numWanted uint32, +func doHits(s Searcher, query interface{}, offset uint32, numWanted uint32, sortSpec SortSpec) (hits Hits, err error) { - self := ((*C.lucy_Searcher)(unsafe.Pointer(obj.TOPTR()))) - var sortSpecC *C.lucy_SortSpec - if sortSpec != nil { - sortSpecC = (*C.lucy_SortSpec)(unsafe.Pointer(sortSpec.TOPTR())) - } - switch query.(type) { - case string: - queryStringC := clownfish.NewString(query.(string)) - err = clownfish.TrapErr(func() { - hitsC := C.LUCY_Searcher_Hits(self, - (*C.cfish_Obj)(unsafe.Pointer(queryStringC.TOPTR())), - C.uint32_t(offset), C.uint32_t(numWanted), sortSpecC) - hits = WRAPHits(unsafe.Pointer(hitsC)) - }) - default: - panic("TODO: support Query objects") - } + self := (*C.lucy_Searcher)(clownfish.Unwrap(s, "s")) + sortSpecC := (*C.lucy_SortSpec)(clownfish.UnwrapNullable(sortSpec)) + queryC := (*C.cfish_Obj)(clownfish.GoToClownfish(query, unsafe.Pointer(C.CFISH_OBJ), false)) + defer C.cfish_decref(unsafe.Pointer(queryC)) + err = clownfish.TrapErr(func() { + hitsC := C.LUCY_Searcher_Hits(self, queryC, + C.uint32_t(offset), C.uint32_t(numWanted), sortSpecC) + hits = WRAPHits(unsafe.Pointer(hitsC)) + }) return hits, err }
