Example #1
0
cxBool cxDBOpen(cxAny db,cxString file,cxString table,cxBool rdonly)
{
    CX_ASSERT(file != NULL && table != NULL, "args error");
    cxDBEnv env = cxDBGetEnv(db);
    cxDB this = db;
    if(rdonly){
        this->flags = DB_RDONLY;
    }else{
        this->flags = DB_CREATE;
    }
    this->ret = db_create(&this->dbptr, env->env, 0);
    CX_RETURN(this->ret != 0,false);
    this->ret = CX_METHOD_FIRE(this->ret, this->OpenBefore,db);
    CX_RETURN(this->ret != 0,false);
    cxDBTxn txn = cxStackTop(env->txn);
    this->ret = this->dbptr->open(this->dbptr,cxDBTxnPtr(txn),cxStringBody(file),cxStringBody(table),this->type,this->flags,0);
    if(this->ret != 0){
        CX_ERROR("open db error %s:%s",cxStringBody(file),cxStringBody(table));
        return false;
    }
    CX_RETURN(this->ret != 0,false);
    CX_RETAIN_SWAP(this->file, file);
    CX_RETAIN_SWAP(this->table, table);
    return CX_METHOD_FIRE(true, this->OpenAfter,db);
}
Example #2
0
CX_INLINE cxMemPool cxMemPoolInstance()
{
    cxStack stack = cxMemPoolStack();
    if(cxStackLength(stack) == 0){
        cxMemPool pool = CX_ALLOC(cxMemPool);
        cxStackPush(stack, pool);
        CX_RELEASE(pool);
    }
    return cxStackTop(stack);
}
Example #3
0
cxBool cxDBHas(cxAny db,cxString key)
{
    cxDB this = db;
    cxDBEnv env = cxDBGetEnv(db);
    cxDBTxn txn = cxStackTop(env->txn);
    DBT k={0};
    k.data = (void *)cxStringBody(key);
    k.size = cxStringLength(key);
    k.flags = DB_DBT_USERMEM;
    return (this->dbptr->exists(this->dbptr,cxDBTxnPtr(txn),&k,0) == 0);
}
Example #4
0
cxBool cxDBDel(cxAny db,cxString key)
{
    cxDB this = db;
    cxDBEnv env = cxDBGetEnv(db);
    CX_ASSERT(this->flags & DB_RDONLY, "only env ,can't del data");
    cxDBTxn txn = cxStackTop(env->txn);
    DBT k={0};
    k.data = (void *)cxStringBody(key);
    k.size = cxStringLength(key);
    k.flags = DB_DBT_USERMEM;
    return (this->dbptr->del(this->dbptr,cxDBTxnPtr(txn),&k,0) == 0);
}
Example #5
0
static cxAutoPool cxAutoPoolInstance()
{
    cxAutoPool pool = NULL;
    cxStack stack = cxAutoPoolStack();
    if(cxStackLength(stack) == 0){
        pool = CX_ALLOC(cxAutoPool);
        cxStackPush(stack, pool);
        CX_RELEASE(pool);
    }else{
        pool = cxStackTop(stack);
    }
    return pool;
}
Example #6
0
cxBool cxDBSet(cxAny db,cxString key,cxString value)
{
    cxDB this = db;
    cxDBEnv env = cxDBGetEnv(db);
    CX_ASSERT(this->flags & DB_RDONLY, "only env ,can't set data");
    cxDBTxn txn = cxStackTop(env->txn);
    DBT k={0};
    k.data = (void *)cxStringBody(key);
    k.size = cxStringLength(key);
    k.flags = DB_DBT_USERMEM;
    DBT v={0};
    v.data = (void *)cxStringBody(value);
    v.size = cxStringLength(value);
    v.flags = DB_DBT_USERMEM;
    return this->dbptr->put(this->dbptr,cxDBTxnPtr(txn),&k,&v,0) == 0;
}
Example #7
0
cxInt cxDBCount(cxAny db)
{
    cxDB this = db;
    cxDBEnv env = cxDBGetEnv(db);
    cxDBTxn txn = cxStackTop(env->txn);
    if(this->type == DB_BTREE){
        DB_BTREE_STAT *stat = NULL;
        this->dbptr->stat(this->dbptr,cxDBTxnPtr(txn),&stat,DB_READ_COMMITTED);
        return stat != NULL ? stat->bt_nkeys : 0;
    }
    if(this->type == DB_HASH){
        DB_HASH_STAT *stat = NULL;
        this->dbptr->stat(this->dbptr,cxDBTxnPtr(txn),&stat,DB_READ_COMMITTED);
        return stat != NULL ? stat->hash_nkeys : 0;
    }
    return 0;
}
Example #8
0
cxString cxDBGet(cxAny db,cxString key)
{
    cxDB this = db;
    cxDBEnv env = cxDBGetEnv(db);
    cxDBTxn txn = cxStackTop(env->txn);
    DBT k={0};
    k.data = (void *)cxStringBody(key);
    k.size = cxStringLength(key);
    k.flags = DB_DBT_USERMEM;
    DBT v={0};
    v.flags = DB_DBT_MALLOC;
    if(this->dbptr->get(this->dbptr, cxDBTxnPtr(txn), &k, &v,0) != 0){
        return NULL;
    }
    if(v.size == 0 || v.data == NULL){
        return NULL;
    }
    return cxStringAttach(v.data, v.size);
}