📄 berkeleydb.xs
字号:
safefree(list); }#endif }BerkeleyDB::Txn::Raw_txn_begin(env, pid=NULL, flags=0) u_int32_t flags BerkeleyDB::Env env BerkeleyDB::Txn pid CODE: { DB_TXN *txn ; DB_TXN *p_id = NULL ; Trace(("txn_begin pid %d, flags %d\n", pid, flags)) ;#if DB_VERSION_MAJOR == 2 if (env->Env->tx_info == NULL) softCrash("Transaction Manager not enabled") ;#endif if (!env->txn_enabled) softCrash("Transaction Manager not enabled") ; if (pid) p_id = pid->txn ; env->TxnMgrStatus =#if DB_VERSION_MAJOR == 2 txn_begin(env->Env->tx_info, p_id, &txn) ;#else# ifdef AT_LEAST_DB_4 env->Env->txn_begin(env->Env, p_id, &txn, flags) ;# else txn_begin(env->Env, p_id, &txn, flags) ;# endif#endif if (env->TxnMgrStatus == 0) { ZMALLOC(RETVAL, BerkeleyDB_Txn_type) ; RETVAL->txn = txn ; RETVAL->active = TRUE ; Trace(("_txn_begin created txn [%p] in [%p]\n", txn, RETVAL)); hash_store_iv("BerkeleyDB::Term::Txn", (char *)RETVAL, 1) ; } else RETVAL = NULL ; } OUTPUT: RETVAL#if DB_VERSION_MAJOR == 2# define env_txn_checkpoint(e,k,m,f) txn_checkpoint(e->Env->tx_info, k, m)#else /* DB 3.0 or better */# ifdef AT_LEAST_DB_4 # define env_txn_checkpoint(e,k,m,f) e->Env->txn_checkpoint(e->Env, k, m, f)# else# ifdef AT_LEAST_DB_3_1# define env_txn_checkpoint(e,k,m,f) txn_checkpoint(e->Env, k, m, 0)# else# define env_txn_checkpoint(e,k,m,f) txn_checkpoint(e->Env, k, m)# endif# endif#endifDualTypeenv_txn_checkpoint(env, kbyte, min, flags=0) BerkeleyDB::Env env long kbyte long min u_int32_t flagsHV *txn_stat(env) BerkeleyDB::Env env HV * RETVAL = NULL ; CODE: { DB_TXN_STAT * stat ;#ifdef AT_LEAST_DB_4 if(env->Env->txn_stat(env->Env, &stat, 0) == 0) {#else# ifdef AT_LEAST_DB_3_3 if(txn_stat(env->Env, &stat) == 0) {# else# if DB_VERSION_MAJOR == 2 if(txn_stat(env->Env->tx_info, &stat, safemalloc) == 0) {# else if(txn_stat(env->Env, &stat, safemalloc) == 0) {# endif# endif#endif RETVAL = (HV*)sv_2mortal((SV*)newHV()) ; hv_store_iv(RETVAL, "st_time_ckp", stat->st_time_ckp) ; hv_store_iv(RETVAL, "st_last_txnid", stat->st_last_txnid) ; hv_store_iv(RETVAL, "st_maxtxns", stat->st_maxtxns) ; hv_store_iv(RETVAL, "st_naborts", stat->st_naborts) ; hv_store_iv(RETVAL, "st_nbegins", stat->st_nbegins) ; hv_store_iv(RETVAL, "st_ncommits", stat->st_ncommits) ; hv_store_iv(RETVAL, "st_nactive", stat->st_nactive) ;#if DB_VERSION_MAJOR > 2 hv_store_iv(RETVAL, "st_maxnactive", stat->st_maxnactive) ; hv_store_iv(RETVAL, "st_regsize", stat->st_regsize) ; hv_store_iv(RETVAL, "st_region_wait", stat->st_region_wait) ; hv_store_iv(RETVAL, "st_region_nowait", stat->st_region_nowait) ;#endif safefree(stat) ; } } OUTPUT: RETVAL#define EnDis(x) ((x) ? "Enabled" : "Disabled")voidprintEnv(env) BerkeleyDB::Env env INIT: ckActive_Environment(env->active) ; CODE:#if 0 printf("env [0x%X]\n", env) ; printf(" ErrPrefix [%s]\n", env->ErrPrefix ? SvPVX(env->ErrPrefix) : 0) ; printf(" DB_ENV\n") ; printf(" db_lorder [%d]\n", env->Env.db_lorder) ; printf(" db_home [%s]\n", env->Env.db_home) ; printf(" db_data_dir [%s]\n", env->Env.db_data_dir) ; printf(" db_log_dir [%s]\n", env->Env.db_log_dir) ; printf(" db_tmp_dir [%s]\n", env->Env.db_tmp_dir) ; printf(" lk_info [%s]\n", EnDis(env->Env.lk_info)) ; printf(" lk_max [%d]\n", env->Env.lk_max) ; printf(" lg_info [%s]\n", EnDis(env->Env.lg_info)) ; printf(" lg_max [%d]\n", env->Env.lg_max) ; printf(" mp_info [%s]\n", EnDis(env->Env.mp_info)) ; printf(" mp_size [%d]\n", env->Env.mp_size) ; printf(" tx_info [%s]\n", EnDis(env->Env.tx_info)) ; printf(" tx_max [%d]\n", env->Env.tx_max) ; printf(" flags [%d]\n", env->Env.flags) ; printf("\n") ;#endifSV *errPrefix(env, prefix) BerkeleyDB::Env env SV * prefix INIT: ckActive_Environment(env->active) ; CODE: if (env->ErrPrefix) { RETVAL = newSVsv(env->ErrPrefix) ; SvPOK_only(RETVAL) ; sv_setsv(env->ErrPrefix, prefix) ; } else { RETVAL = NULL ; env->ErrPrefix = newSVsv(prefix) ; } SvPOK_only(env->ErrPrefix) ;#if DB_VERSION_MAJOR == 2 env->Env->db_errpfx = SvPVX(env->ErrPrefix) ;#else env->Env->set_errpfx(env->Env, SvPVX(env->ErrPrefix)) ;#endif OUTPUT: RETVALDualTypestatus(env) BerkeleyDB::Env env CODE: RETVAL = env->Status ; OUTPUT: RETVALDualTypedb_appexit(env) BerkeleyDB::Env env ALIAS: close =1 INIT: ckActive_Environment(env->active) ; CODE:#ifdef STRICT_CLOSE if (env->open_dbs) softCrash("attempted to close an environment with %d open database(s)", env->open_dbs) ;#endif /* STRICT_CLOSE */#if DB_VERSION_MAJOR == 2 RETVAL = db_appexit(env->Env) ;#else RETVAL = (env->Env->close)(env->Env, 0) ;#endif env->active = FALSE ; hash_delete("BerkeleyDB::Term::Env", (char *)env) ; OUTPUT: RETVALvoid_DESTROY(env) BerkeleyDB::Env env int RETVAL = 0 ; CODE: Trace(("In BerkeleyDB::Env::DESTROY\n")); Trace((" env %ld Env %ld dirty %d\n", env, &env->Env, PL_dirty)) ; if (env->active)#if DB_VERSION_MAJOR == 2 db_appexit(env->Env) ;#else (env->Env->close)(env->Env, 0) ;#endif if (env->ErrHandle) SvREFCNT_dec(env->ErrHandle) ; if (env->ErrPrefix) SvREFCNT_dec(env->ErrPrefix) ;#if DB_VERSION_MAJOR == 2 Safefree(env->Env) ;#endif Safefree(env) ; hash_delete("BerkeleyDB::Term::Env", (char *)env) ; Trace(("End of BerkeleyDB::Env::DESTROY %d\n", RETVAL)) ;BerkeleyDB::TxnMgr::Raw_TxnMgr(env) BerkeleyDB::Env env INIT: ckActive_Environment(env->active) ; if (!env->txn_enabled) softCrash("Transaction Manager not enabled") ; CODE: ZMALLOC(RETVAL, BerkeleyDB_TxnMgr_type) ; RETVAL->env = env ; /* hash_store_iv("BerkeleyDB::Term::TxnMgr", (char *)txn, 1) ; */ OUTPUT: RETVALintget_shm_key(env, id) BerkeleyDB::Env env long id = NO_INIT INIT: ckActive_Database(env->active) ; CODE:#ifndef AT_LEAST_DB_4_2 softCrash("$env->get_shm_key needs Berkeley DB 4.2 or better") ;#else RETVAL = env->Env->get_shm_key(env->Env, &id);#endif OUTPUT: RETVAL idintset_lg_dir(env, dir) BerkeleyDB::Env env char * dir INIT: ckActive_Database(env->active) ; CODE:#ifndef AT_LEAST_DB_3_1 softCrash("$env->set_lg_dir needs Berkeley DB 3.1 or better") ;#else RETVAL = env->Status = env->Env->set_lg_dir(env->Env, dir);#endif OUTPUT: RETVALintset_lg_bsize(env, bsize) BerkeleyDB::Env env u_int32_t bsize INIT: ckActive_Database(env->active) ; CODE:#ifndef AT_LEAST_DB_3 softCrash("$env->set_lg_bsize needs Berkeley DB 3.0.55 or better") ;#else RETVAL = env->Status = env->Env->set_lg_bsize(env->Env, bsize);#endif OUTPUT: RETVALintset_lg_max(env, lg_max) BerkeleyDB::Env env u_int32_t lg_max INIT: ckActive_Database(env->active) ; CODE:#ifndef AT_LEAST_DB_3 softCrash("$env->set_lg_max needs Berkeley DB 3.0.55 or better") ;#else RETVAL = env->Status = env->Env->set_lg_max(env->Env, lg_max);#endif OUTPUT: RETVALintset_data_dir(env, dir) BerkeleyDB::Env env char * dir INIT: ckActive_Database(env->active) ; CODE:#ifndef AT_LEAST_DB_3_1 softCrash("$env->set_data_dir needs Berkeley DB 3.1 or better") ;#else dieIfEnvOpened(env, "set_data_dir"); RETVAL = env->Status = env->Env->set_data_dir(env->Env, dir);#endif OUTPUT: RETVALintset_tmp_dir(env, dir) BerkeleyDB::Env env char * dir INIT: ckActive_Database(env->active) ; CODE:#ifndef AT_LEAST_DB_3_1 softCrash("$env->set_tmp_dir needs Berkeley DB 3.1 or better") ;#else RETVAL = env->Status = env->Env->set_tmp_dir(env->Env, dir);#endif OUTPUT: RETVALintset_mutexlocks(env, do_lock) BerkeleyDB::Env env int do_lock INIT: ckActive_Database(env->active) ; CODE:#ifndef AT_LEAST_DB_3 softCrash("$env->set_setmutexlocks needs Berkeley DB 3.0 or better") ;#else# ifdef AT_LEAST_DB_4 RETVAL = env->Status = env->Env->set_flags(env->Env, DB_NOLOCKING, !do_lock);# else# if defined(AT_LEAST_DB_3_2_6) || defined(IS_DB_3_0_x) RETVAL = env->Status = env->Env->set_mutexlocks(env->Env, do_lock);# else /* DB 3.1 or 3.2.3 */ RETVAL = env->Status = db_env_set_mutexlocks(do_lock);# endif# endif#endif OUTPUT: RETVALintset_verbose(env, which, onoff) BerkeleyDB::Env env u_int32_t which int onoff INIT: ckActive_Database(env->active) ; CODE:#ifndef AT_LEAST_DB_3 softCrash("$env->set_verbose needs Berkeley DB 3.x or better") ;#else RETVAL = env->Status = env->Env->set_verbose(env->Env, which, onoff);#endif OUTPUT: RETVALintset_flags(env, flags, onoff) BerkeleyDB::Env env u_int32_t flags int onoff INIT: ckActive_Database(env->active) ; CODE:#ifndef AT_LEAST_DB_3_2 softCrash("$env->set_flags needs Berkeley DB 3.2.x or better") ;#else RETVAL = env->Status = env->Env->set_flags(env->Env, flags, onoff);#endif OUTPUT: RETVALMODULE = BerkeleyDB::Term PACKAGE = BerkeleyDB::Termvoidclose_everything()#define safeCroak(string) softCrash(string)voidsafeCroak(string) char * stringMODULE = BerkeleyDB::Hash PACKAGE = BerkeleyDB::Hash PREFIX = hash_BerkeleyDB::Hash::Raw_db_open_hash(self, ref) char * self SV * ref CODE: { HV * hash ; SV * sv ; DB_INFO info ; BerkeleyDB__Env dbenv = NULL; SV * ref_dbenv = NULL; const char * file = NULL ; const char * subname = NULL ; int flags = 0 ; int mode = 0 ; BerkeleyDB db ; BerkeleyDB__Txn txn = NULL ; char * enc_passwd = NULL ; int enc_flags = 0 ; Trace(("_db_open_hash start\n")) ; hash = (HV*) SvRV(ref) ; SetValue_pv(file, "Filename", char *) ; SetValue_pv(subname, "Subname", char *) ; SetValue_ov(txn, "Txn", BerkeleyDB__Txn) ; SetValue_ov(dbenv, "Env", BerkeleyDB__Env) ; ref_dbenv = sv ; SetValue_iv(flags, "Flags") ; SetValue_iv(mode, "Mode") ; SetValue_pv(enc_passwd,"Enc_Passwd", char *) ; SetValue_iv(enc_flags, "Enc_Flags") ; Zero(&info, 1, DB_INFO) ; SetValue_iv(info.db_cachesize, "Cachesize") ; SetValue_iv(info.db_lorder, "Lorder") ; SetValue_iv(info.db_pagesize, "Pagesize") ; SetValue_iv(info.h_ffactor, "Ffactor") ; SetValue_iv(info.h_nelem, "Nelem") ; SetValue_iv(info.flags, "Property") ; ZMALLOC(db, BerkeleyDB_type) ; if ((sv = readHash(hash, "Hash")) && sv != &PL_sv_undef) { info.h_hash = hash_cb ; db->hash = newSVsv(sv) ; } /* DB_DUPSORT was introduced in DB 2.5.9 */ if ((sv = readHash(hash, "DupCompare")) && sv != &PL_sv_undef) {#ifdef DB_DUPSORT info.dup_compare = dup_compare ; db->dup_compare = newSVsv(sv) ; info.flags |= DB_DUP|DB_DUPSORT ;#else croak("DupCompare needs Berkeley DB 2.5.9 or later") ;#endif } RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname, DB_HASH, flags, mode, &info, enc_passwd, enc_flags) ; Trace(("_db_open_hash end\n")) ; } OUTPUT: RETVALHV *db_stat(db, flags=0) int flags BerkeleyDB::Common db HV * RETVAL = NULL ; INIT: ckActive_Database(db->active) ; CODE: {#if DB_VERSION_MAJOR == 2 softCrash("$db->db_stat for a Hash needs Berkeley DB 3.x or better") ;#else DB_HASH_STAT * stat ;#ifdef AT_LEAST_DB_4_3 db->Status = ((db->dbp)->stat)(db->dbp, db->txn, &stat, flags) ;#else #ifdef AT_LEAST_DB_3_3 db->Status = ((db->dbp)->stat)(db->dbp, &stat, flags) ;#else db->Status = ((db->dbp)->stat)(db->dbp, &stat, safemalloc, flags) ;#endif#endif if (db->Status == 0) { RETVAL = (HV*)sv_2mortal((SV*)newHV()) ; hv_store_iv(RETVAL, "hash_magic", stat->hash_magic) ; hv_store_iv(RETVAL, "hash_version", stat->hash_version); hv_store_iv(RETVAL, "hash_pagesize", stat->hash_pagesize);#ifdef AT_LEAST_DB_3_1 hv_store_iv(RETVAL, "hash_nkeys", stat->hash_nkeys); hv_store_iv(RETVAL, "hash_ndata", stat->hash_ndata);#else hv_store_iv(RETVAL, "hash_nrecs", stat->hash_nrecs);#endif#ifndef AT_LEAST_DB_3_1 hv_store_iv(RETVAL, "hash_nelem", stat->hash_nelem);#endif hv_store_iv(RETVAL, "hash_ffactor", stat->hash_ffactor); hv_store_iv(RETVAL, "hash_buckets", stat->hash_buckets); hv_store_iv(RETVAL, "hash_free", stat->hash_free); hv_store_iv(RETVAL, "hash_bfree", stat->hash_bfree); hv_store_iv(RETVAL, "hash_bigpages", stat->hash_bigpages); hv_store_iv(RETVAL, "hash_big_bfree", stat->hash_big_bfree); hv_store_iv(RETVAL, "
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -