// Check if query is valid without opening a database. func Check(query string) error { query = strings.TrimSpace(query) if query == "" { return errempty } if query[0] == '(' { return errbrackets } cs := C.CString(query) defer C.free(unsafe.Pointer(cs)) r := C.c_dbxml_check(cs) defer C.c_dbxml_result_free(r) if C.c_dbxml_result_error(r) != 0 { return errors.New(C.GoString(C.c_dbxml_result_string(r))) } return nil }
// Remove an xml document from the database. func (db *Db) Remove(name string) error { db.lock.Lock() defer db.lock.Unlock() if !db.opened { return errclosed } cs := C.CString(name) defer C.free(unsafe.Pointer(cs)) r := C.c_dbxml_remove(db.db, cs) defer C.c_dbxml_result_free(r) if C.c_dbxml_result_error(r) != 0 { return errors.New(C.GoString(C.c_dbxml_result_string(r))) } return nil }
// Get an xml document by name from the database. func (db *Db) Get(name string) (string, error) { db.lock.Lock() defer db.lock.Unlock() if !db.opened { return "", errclosed } cs := C.CString(name) defer C.free(unsafe.Pointer(cs)) r := C.c_dbxml_get(db.db, cs) defer C.c_dbxml_result_free(r) s := C.GoString(C.c_dbxml_result_string(r)) if C.c_dbxml_result_error(r) != 0 { return "", errors.New(s) } return s, nil }
// Merge a database from disc into this database. func (db *Db) Merge(filename string, replace bool) error { db.lock.Lock() defer db.lock.Unlock() if !db.opened { return errclosed } cs := C.CString(filename) defer C.free(unsafe.Pointer(cs)) repl := C.int(0) if replace { repl = 1 } r := C.c_dbxml_merge(db.db, cs, repl) defer C.c_dbxml_result_free(r) if C.c_dbxml_result_error(r) != 0 { return errors.New(C.GoString(C.c_dbxml_result_string(r))) } return nil }
// Put an xml document from memory into the database. func (db *Db) PutXml(name string, data string, replace bool) error { db.lock.Lock() defer db.lock.Unlock() if !db.opened { return errclosed } csname := C.CString(name) defer C.free(unsafe.Pointer(csname)) csdata := C.CString(data) defer C.free(unsafe.Pointer(csdata)) repl := C.int(0) if replace { repl = 1 } r := C.c_dbxml_put_xml(db.db, csname, csdata, repl) defer C.c_dbxml_result_free(r) if C.c_dbxml_result_error(r) != 0 { return errors.New(C.GoString(C.c_dbxml_result_string(r))) } return nil }