Esempio n. 1
0
        DB open(const DBEnv &env, const DBTxn &txn, const char *fname, const char *dbname, DBTYPE dbtype, uint32_t flags, int mode) const {
            ::DB *db;
            int r = db_create(&db, env.env(), 0);
            handle_ft_retval(r);

            if (_readpagesize) {
                r = db->set_readpagesize(db, _readpagesize);
                handle_ft_retval(r);
            }

            if (_compression_method >= 0) {
                r = db->set_compression_method(db, TOKU_COMPRESSION_METHOD(_compression_method));
                handle_ft_retval(r);
            }

            if (_fanout) {
                r = db->set_fanout(db, _fanout);
                handle_ft_retval(r);
            }

            if (_memcmp_magic) {
                r = db->set_memcmp_magic(db, _memcmp_magic);
                handle_ft_retval(r);
            }

            if (_pagesize) {
                r = db->set_pagesize(db, _pagesize);
                handle_ft_retval(r);
            }

            const DBTxn *txnp = &txn;
            DBTxn writeTxn;
            if (txn.is_read_only()) {
                writeTxn = DBTxn(env, DB_SERIALIZABLE);
                txnp = &writeTxn;
            }

            r = db->open(db, txnp->txn(), fname, dbname, dbtype, flags, mode);
            handle_ft_retval(r);

            if (!_descriptor.empty()) {
                DBT desc = _descriptor.dbt();
                r = db->change_descriptor(db, txnp->txn(), &desc, DB_UPDATE_CMP_DESCRIPTOR);
                handle_ft_retval(r);
            }

            if (txn.is_read_only()) {
                writeTxn.commit();
            }

            return DB(db, true);
        }
Esempio n. 2
0
    DBC::DBC(const DBEnv &env, const DBTxn &txn)
        : _txn(),
          _dbc(nullptr)
    {
        if (env.env() != nullptr) {
            DB_TXN *txnp = txn.txn();
            if (txnp == nullptr) {
                _txn = DBTxn(env, DB_TXN_READ_ONLY | DB_READ_UNCOMMITTED);
                txnp = _txn.txn();
            }

            ::DBC *c;
            int r = env.env()->get_cursor_for_directory(env.env(), txnp, &c);
            handle_ft_retval(r);
            _dbc = c;
        }
    }
Esempio n. 3
0
    DBC::DBC(const DB &db, const DBTxn &txn, int flags)
        : _txn(),
          _dbc(nullptr)
    {
        if (db.db() != nullptr) {
            DB_TXN *txnp = txn.txn();
            if (txnp == nullptr) {
                _txn = DBTxn(DBEnv(db.db()->dbenv), DB_TXN_READ_ONLY | DB_READ_UNCOMMITTED);
                txnp = _txn.txn();
            }

            ::DBC *c;
            int r = db.db()->cursor(db.db(), txnp, &c, flags);
            handle_ft_retval(r);
            _dbc = c;
        }
    }