You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2015/12/28 21:11:01 UTC
[14/16] lucy git commit: Tune and test Go bindings for
DeletionsWriter.
Tune and test Go bindings for DeletionsWriter.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/29320549
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/29320549
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/29320549
Branch: refs/heads/master
Commit: 2932054958f0fc785d13d1bbfe59dee9ce42ef00
Parents: 362aedd
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Mon Dec 21 09:04:49 2015 -0800
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Mon Dec 21 09:04:49 2015 -0800
----------------------------------------------------------------------
go/build.go | 8 ++++++++
go/lucy/index.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++
go/lucy/index_test.go | 30 ++++++++++++++++++++++++++++
3 files changed, 88 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy/blob/29320549/go/build.go
----------------------------------------------------------------------
diff --git a/go/build.go b/go/build.go
index f78aa5f..82bcd9c 100644
--- a/go/build.go
+++ b/go/build.go
@@ -236,6 +236,14 @@ func specClasses(parcel *cfc.Parcel) {
dwBinding.SpecMethod("Finish", "Finish() error")
dwBinding.Register()
+ delWriterBinding := cfc.NewGoClass(parcel, "Lucy::Index::DeletionsWriter")
+ delWriterBinding.SpecMethod("Delete_By_Term", "DeleteByTerm(string, interface{}) error")
+ delWriterBinding.SpecMethod("Delete_By_Query", "DeleteByQuery(Query) error")
+ delWriterBinding.SpecMethod("Delete_By_Doc_ID", "deleteByDocID(int32) error")
+ delWriterBinding.SpecMethod("Generate_Doc_Map", "generateDocMap(Matcher, int32, int32) ([]int32, error)")
+ delWriterBinding.SpecMethod("Seg_Deletions", "segDeletions(SegReader) (Matcher, error)")
+ delWriterBinding.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/29320549/go/lucy/index.go
----------------------------------------------------------------------
diff --git a/go/lucy/index.go b/go/lucy/index.go
index 0444a30..67ec832 100644
--- a/go/lucy/index.go
+++ b/go/lucy/index.go
@@ -21,6 +21,7 @@ package lucy
#include "Lucy/Index/IndexReader.h"
#include "Lucy/Index/DataReader.h"
#include "Lucy/Index/DataWriter.h"
+#include "Lucy/Index/DeletionsWriter.h"
#include "Lucy/Index/DocReader.h"
#include "Lucy/Index/LexiconReader.h"
#include "Lucy/Index/PostingListReader.h"
@@ -279,6 +280,55 @@ func (d *DataWriterIMP) Finish() error {
})
}
+func (d *DeletionsWriterIMP) DeleteByTerm(field string, term interface{}) error {
+ return clownfish.TrapErr(func() {
+ self := (*C.lucy_DeletionsWriter)(clownfish.Unwrap(d, "d"))
+ fieldCF := (*C.cfish_String)(clownfish.GoToClownfish(field, unsafe.Pointer(C.CFISH_STRING), false))
+ defer C.cfish_decref(unsafe.Pointer(fieldCF))
+ termCF := (*C.cfish_Obj)(clownfish.GoToClownfish(term, unsafe.Pointer(C.CFISH_OBJ), false))
+ defer C.cfish_decref(unsafe.Pointer(termCF))
+ C.LUCY_DelWriter_Delete_By_Term(self, fieldCF, termCF)
+ })
+}
+
+func (d *DeletionsWriterIMP) DeleteByQuery(query Query) error {
+ return clownfish.TrapErr(func() {
+ self := (*C.lucy_DeletionsWriter)(clownfish.Unwrap(d, "d"))
+ queryCF := (*C.lucy_Query)(clownfish.Unwrap(query, "query"))
+ C.LUCY_DelWriter_Delete_By_Query(self, queryCF)
+ })
+}
+
+func (d *DeletionsWriterIMP) deleteByDocID(docId int32) error {
+ return clownfish.TrapErr(func() {
+ self := (*C.lucy_DeletionsWriter)(clownfish.Unwrap(d, "d"))
+ C.LUCY_DelWriter_Delete_By_Doc_ID(self, C.int32_t(docId))
+ })
+}
+
+func (d *DeletionsWriterIMP) generateDocMap(deletions Matcher, docMax int32, offset int32) (retval []int32, err error) {
+ err = clownfish.TrapErr(func() {
+ self := (*C.lucy_DeletionsWriter)(clownfish.Unwrap(d, "d"))
+ deletionsCF := (*C.lucy_Matcher)(clownfish.Unwrap(deletions, "deletions"))
+ retvalCF := C.LUCY_DelWriter_Generate_Doc_Map(self, deletionsCF, C.int32_t(docMax), C.int32_t(offset))
+ defer C.cfish_decref(unsafe.Pointer(retvalCF))
+ retval = i32ArrayToSlice(retvalCF)
+ })
+ return retval, err
+}
+
+func (d *DeletionsWriterIMP) segDeletions(segReader SegReader) (retval Matcher, err error) {
+ err = clownfish.TrapErr(func() {
+ self := (*C.lucy_DeletionsWriter)(clownfish.Unwrap(d, "d"))
+ segReaderCF := (*C.lucy_SegReader)(clownfish.Unwrap(segReader, "segReader"))
+ retvalCF := C.LUCY_DelWriter_Seg_Deletions(self, segReaderCF)
+ if retvalCF != nil {
+ retval = clownfish.WRAPAny(unsafe.Pointer(retvalCF)).(Matcher)
+ }
+ })
+ return retval, err
+}
+
func OpenBackgroundMerger(index interface{}, manager IndexManager) (bgm BackgroundMerger, 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/29320549/go/lucy/index_test.go
----------------------------------------------------------------------
diff --git a/go/lucy/index_test.go b/go/lucy/index_test.go
index f71cb2f..9f2aca9 100644
--- a/go/lucy/index_test.go
+++ b/go/lucy/index_test.go
@@ -964,3 +964,33 @@ func runDataWriterCommon(t *testing.T, api string) {
func TestSortWriterMisc(t *testing.T) {
runDataWriterCommon(t, "Lucy::Index::SortWriter")
}
+
+func TestDeletionsWriterMisc(t *testing.T) {
+ index := createTestIndex("a", "b", "c")
+ indexer, _ := OpenIndexer(&OpenIndexerArgs{Index: index})
+ delWriter := indexer.getSegWriter().Fetch("Lucy::Index::DeletionsWriter").(DeletionsWriter)
+ if delWriter.Updated() {
+ t.Errorf("Not yet updated")
+ }
+
+ if err := delWriter.DeleteByTerm("content", "a"); err != nil {
+ t.Errorf("DeleteByTerm: %v", err)
+ }
+ if err := delWriter.DeleteByQuery(NewTermQuery("content", "b")); err != nil {
+ t.Errorf("DeleteByQuery: %v", err)
+ }
+ if err := delWriter.deleteByDocID(3); err != nil {
+ t.Errorf("deleteByDocID: %v", err)
+ }
+ if !delWriter.Updated() {
+ t.Errorf("Now we're updated")
+ }
+
+ if got := delWriter.SegDelCount("seg_1"); got != 3 {
+ t.Errorf("SegDelCount: %d", got)
+ }
+ segReaders := delWriter.GetPolyReader().SegReaders()
+ if dels, err := delWriter.segDeletions(segReaders[0]); dels == nil || err != nil {
+ t.Errorf("segDeletions: %v", err)
+ }
+}