// Walk the DB from a specific location. func (db *Couchstore) Walk(startkey string, callback WalkFun) error { startc := C.CString(startkey) defer C.freecstring(startc) e := C.start_all_docs(db.db, startc, unsafe.Pointer(&callback)) if e != C.COUCHSTORE_ERROR_CANCEL && e != C.COUCHSTORE_SUCCESS { return couchError(e) } return nil }
func (db *Couchstore) getDocInfo(id string) (*DocInfo, error) { var inf *C.DocInfo idstr := C.CString(id) defer C.freecstring(idstr) err := maybeError(C.couchstore_docinfo_by_id(db.db, unsafe.Pointer(idstr), _Ctype_size_t(len(id)), &inf)) if err == nil { rv := &DocInfo{*inf, inf} runtime.SetFinalizer(rv, freeDocInfo) return rv, nil } return &DocInfo{}, err }
// Open a database. func Open(pathname string, create bool) (*Couchstore, error) { rv := &Couchstore{} flags := _Ctype_couchstore_open_flags(0) if create { flags = C.COUCHSTORE_OPEN_FLAG_CREATE } cstr := C.CString(pathname) defer C.freecstring(cstr) err := maybeError(C.couchstore_open_db(cstr, flags, &rv.db)) if err == nil { rv.isOpen = true } else { rv = nil } return rv, err }
// Compact this DB to a new file. func (db *Couchstore) CompactTo(newfile string) error { cstr := C.CString(newfile) defer C.freecstring(cstr) return maybeError(C.couchstore_compact_db(db.db, cstr)) }
// Free doc made from go. func freeMyDoc(doc *Document) { C.freecstring(doc.doc.id.buf) }
// Free docinfo made from go. func freeMyDocInfo(info *DocInfo) { C.freecstring(info.info.id.buf) }