Tune and test Go bindings for Indexer.

Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/c4f767e3
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/c4f767e3
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/c4f767e3

Branch: refs/heads/LUCY-282-test-index-go-pt1
Commit: c4f767e3f98357b171996fe4560bd4d185c2345b
Parents: 9ab6d6a
Author: Marvin Humphrey <[email protected]>
Authored: Thu Oct 29 11:05:01 2015 -0700
Committer: Marvin Humphrey <[email protected]>
Committed: Fri Oct 30 12:03:02 2015 -0700

----------------------------------------------------------------------
 go/build.go           |  5 +++
 go/lucy/index.go      | 42 ++++++++++++++++++++++
 go/lucy/index_test.go | 89 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 136 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/c4f767e3/go/build.go
----------------------------------------------------------------------
diff --git a/go/build.go b/go/build.go
index 0691f6e..eaf896b 100644
--- a/go/build.go
+++ b/go/build.go
@@ -148,6 +148,11 @@ func specClasses(parcel *cfc.Parcel) {
        indexerBinding := cfc.NewGoClass(parcel, "Lucy::Index::Indexer")
        indexerBinding.SpecMethod("", "Close() error")
        indexerBinding.SpecMethod("Add_Doc", "AddDoc(doc interface{}) error")
+       indexerBinding.SpecMethod("Add_Index", "AddIndex(interface{}) error")
+       indexerBinding.SpecMethod("Delete_By_Term", "DeleteByTerm(string, 
interface{}) error")
+       indexerBinding.SpecMethod("Delete_By_Query", "DeleteByQuery(Query) 
error")
+       indexerBinding.SpecMethod("Delete_By_Doc_ID", "DeleteByDocID(int32) 
error")
+       indexerBinding.SpecMethod("Prepare_Commit", "PrepareCommit() error")
        indexerBinding.SpecMethod("Commit", "Commit() error")
        indexerBinding.SetSuppressStruct(true)
        indexerBinding.Register()

http://git-wip-us.apache.org/repos/asf/lucy/blob/c4f767e3/go/lucy/index.go
----------------------------------------------------------------------
diff --git a/go/lucy/index.go b/go/lucy/index.go
index 0ec4c97..3b9a8f5 100644
--- a/go/lucy/index.go
+++ b/go/lucy/index.go
@@ -174,6 +174,48 @@ func (obj *IndexerIMP) findRealField(name string) (string, 
error) {
        return "", clownfish.NewErr(fmt.Sprintf("Unknown field: '%v'", name))
 }
 
+func (obj *IndexerIMP) AddIndex(index interface{}) error {
+       return clownfish.TrapErr(func() {
+               self := (*C.lucy_Indexer)(clownfish.Unwrap(obj, "obj"))
+               indexC := (*C.cfish_Obj)(clownfish.GoToClownfish(index, 
unsafe.Pointer(C.CFISH_OBJ), false))
+               defer C.cfish_decref(unsafe.Pointer(indexC))
+               C.LUCY_Indexer_Add_Index(self, indexC)
+       })
+}
+
+func (obj *IndexerIMP) DeleteByTerm(field string, term interface{}) error {
+       return clownfish.TrapErr(func() {
+               self := (*C.lucy_Indexer)(clownfish.Unwrap(obj, "obj"))
+               fieldC := (*C.cfish_String)(clownfish.GoToClownfish(field, 
unsafe.Pointer(C.CFISH_STRING), false))
+               defer C.cfish_decref(unsafe.Pointer(fieldC))
+               termC := (*C.cfish_Obj)(clownfish.GoToClownfish(term, 
unsafe.Pointer(C.CFISH_OBJ), false))
+               defer C.cfish_decref(unsafe.Pointer(termC))
+               C.LUCY_Indexer_Delete_By_Term(self, fieldC, termC)
+       })
+}
+
+func (obj *IndexerIMP) DeleteByQuery(query Query) error {
+       return clownfish.TrapErr(func() {
+               self := (*C.lucy_Indexer)(clownfish.Unwrap(obj, "obj"))
+               queryC := (*C.lucy_Query)(clownfish.Unwrap(query, "query"))
+               C.LUCY_Indexer_Delete_By_Query(self, queryC)
+       })
+}
+
+func (obj *IndexerIMP) DeleteByDocID(docID int32) error {
+       return clownfish.TrapErr(func() {
+               self := (*C.lucy_Indexer)(clownfish.Unwrap(obj, "obj"))
+               C.LUCY_Indexer_Delete_By_Doc_ID(self, C.int32_t(docID))
+       })
+}
+
+func (obj *IndexerIMP) PrepareCommit() error {
+       self := ((*C.lucy_Indexer)(unsafe.Pointer(obj.TOPTR())))
+       return clownfish.TrapErr(func() {
+               C.LUCY_Indexer_Prepare_Commit(self)
+       })
+}
+
 func (obj *IndexerIMP) Commit() error {
        self := ((*C.lucy_Indexer)(unsafe.Pointer(obj.TOPTR())))
        return clownfish.TrapErr(func() {

http://git-wip-us.apache.org/repos/asf/lucy/blob/c4f767e3/go/lucy/index_test.go
----------------------------------------------------------------------
diff --git a/go/lucy/index_test.go b/go/lucy/index_test.go
index 5967a31..0afdf92 100644
--- a/go/lucy/index_test.go
+++ b/go/lucy/index_test.go
@@ -17,6 +17,7 @@
 package lucy
 
 import "testing"
+import "os"
 
 func TestIndexerAddDoc(t *testing.T) {
        schema := createTestSchema()
@@ -37,3 +38,91 @@ func TestIndexerAddDoc(t *testing.T) {
                t.Errorf("Didn't index all docs -- DocMax: %d", got)
        }
 }
+
+func TestIndexerAddIndex(t *testing.T) {
+       var err error
+       origIndex := "_test_go_indexer_add_index"
+       defer os.RemoveAll(origIndex)
+       schema := createTestSchema()
+       indexer, err := OpenIndexer(&OpenIndexerArgs{
+               Create: true,
+               Index:  origIndex,
+               Schema: schema,
+       })
+       if err != nil {
+               t.Errorf("OpenIndexer: %v", err)
+               return
+       }
+       err = indexer.AddDoc(&testDoc{Content: "foo"})
+       if err != nil {
+               t.Errorf("AddDoc: %v", err)
+       }
+       err = indexer.Commit()
+       if err != nil {
+               t.Errorf("Commit FS index: %v", err)
+       }
+
+       indexer, _ = OpenIndexer(&OpenIndexerArgs{
+               Create: true,
+               Index:  NewRAMFolder(""),
+               Schema: schema,
+       })
+       err = indexer.AddIndex(origIndex)
+       if err != nil {
+               t.Errorf("AddIndex: %v", err)
+       }
+       err = indexer.Commit()
+       if err != nil {
+               t.Errorf("AddIndex: %v", err)
+       }
+}
+
+func TestIndexerDeletions(t *testing.T) {
+       index := createTestIndex("foo", "bar", "baz", "gazi")
+       indexer, _ := OpenIndexer(&OpenIndexerArgs{Index: index})
+       err := indexer.DeleteByTerm("content", "foo")
+       if err != nil {
+               t.Errorf("DeleteByTerm: %v", err)
+       }
+       indexer.DeleteByQuery(NewTermQuery("content", "bar"))
+       if err != nil {
+               t.Errorf("DeleteByQuery: %v", err)
+       }
+       indexer.DeleteByDocID(3)
+       if err != nil {
+               t.Errorf("DeleteByDocID: %v", err)
+       }
+       err = indexer.Commit()
+       if err != nil {
+               t.Errorf("Commit: %v", err)
+       }
+       searcher, _ := OpenIndexSearcher(index)
+       if count := searcher.GetReader().DocCount(); count != 1 {
+               t.Errorf("Some deletions didn't go through (count=%d)", count)
+       }
+}
+
+func TestIndexerMisc(t *testing.T) {
+       var err error
+       index := createTestIndex("foo", "bar", "baz")
+       indexer, _ := OpenIndexer(&OpenIndexerArgs{Index: index})
+       if _, ok := indexer.GetSchema().(Schema); !ok {
+               t.Errorf("GetSchema")
+       }
+       if _, ok := indexer.GetStockDoc().(Doc); !ok {
+               t.Errorf("GetStockDoc")
+       }
+       if _, ok := indexer.GetSegWriter().(SegWriter); !ok {
+               t.Errorf("GetSegWriter")
+       }
+       indexer.AddDoc(&testDoc{Content: "gazi"})
+       indexer.Optimize()
+       err = indexer.PrepareCommit()
+       if err != nil {
+               t.Errorf("PrepareCommit: %v", err)
+       }
+       err = indexer.Commit()
+       if err != nil {
+               t.Errorf("Commit: %v", err)
+       }
+}

Reply via email to