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 <[email protected]>
Authored: Mon Dec 21 09:04:49 2015 -0800
Committer: Marvin Humphrey <[email protected]>
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)
+       }
+}

Reply via email to