📄 berkeleydb.xs
字号:
CODE: ZMALLOC(RETVAL, BerkeleyDB_TxnMgr_type) ; RETVAL->env = env ; /* hash_store_iv("BerkeleyDB::Term::TxnMgr", (char *)txn, 1) ; */ OUTPUT: RETVALintset_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 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 ; 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") ; 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) ; 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_3_3 db->Status = ((db->dbp)->stat)(db->dbp, &stat, flags) ;#else db->Status = ((db->dbp)->stat)(db->dbp, &stat, safemalloc, flags) ;#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, "hash_overflows", stat->hash_overflows); hv_store_iv(RETVAL, "hash_ovfl_free", stat->hash_ovfl_free); hv_store_iv(RETVAL, "hash_dup", stat->hash_dup); hv_store_iv(RETVAL, "hash_dup_free", stat->hash_dup_free);#if DB_VERSION_MAJOR >= 3 hv_store_iv(RETVAL, "hash_metaflags", stat->hash_metaflags);#endif safefree(stat) ; }#endif } OUTPUT: RETVALMODULE = BerkeleyDB::Unknown PACKAGE = BerkeleyDB::Unknown PREFIX = hash_void_db_open_unknown(ref) SV * ref PPCODE: { 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 RETVAL ; BerkeleyDB__Txn txn = NULL ; static char * Names[] = {"", "Btree", "Hash", "Recno"} ; 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") ; 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) ; RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname, DB_UNKNOWN, flags, mode, &info) ; XPUSHs(sv_2mortal(newSViv(PTR2IV(RETVAL)))); if (RETVAL) XPUSHs(sv_2mortal(newSVpv(Names[RETVAL->type], 0))) ; else XPUSHs(sv_2mortal(newSViv((IV)NULL))); }MODULE = BerkeleyDB::Btree PACKAGE = BerkeleyDB::Btree PREFIX = btree_BerkeleyDB::Btree::Raw_db_open_btree(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 ; Trace(("In _db_open_btree\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") ; 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.bt_minkey, "Minkey") ; SetValue_iv(info.flags, "Property") ; ZMALLOC(db, BerkeleyDB_type) ; if ((sv = readHash(hash, "Compare")) && sv != &PL_sv_undef) { Trace((" Parsed Compare callback\n")); info.bt_compare = btree_compare ; db->compare = newSVsv(sv) ; } /* DB_DUPSORT was introduced in DB 2.5.9 */ if ((sv = readHash(hash, "DupCompare")) && sv != &PL_sv_undef) {#ifdef DB_DUPSORT Trace((" Parsed DupCompare callback\n")); info.dup_compare = dup_compare ; db->dup_compare = newSVsv(sv) ; info.flags |= DB_DUP|DB_DUPSORT ;#else softCrash("DupCompare needs Berkeley DB 2.5.9 or later") ;#endif } if ((sv = readHash(hash, "Prefix")) && sv != &PL_sv_undef) { Trace((" Parsed Prefix callback\n")); info.bt_prefix = btree_prefix ; db->prefix = newSVsv(sv) ; } RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname, DB_BTREE, flags, mode, &info) ; } OUTPUT: RETVALHV *db_stat(db, flags=0) int flags BerkeleyDB::Common db HV * RETVAL = NULL ; INIT: ckActive_Database(db->active) ; CODE: { DB_BTREE_STAT * stat ;#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 if (db->Status == 0) { RETVAL = (HV*)sv_2mortal((SV*)newHV()) ; hv_store_iv(RETVAL, "bt_magic", stat->bt_magic); hv_store_iv(RETVAL, "bt_version", stat->bt_version);#if DB_VERSION_MAJOR > 2 hv_store_iv(RETVAL, "bt_metaflags", stat->bt_metaflags) ; hv_store_iv(RETVAL, "bt_flags", stat->bt_metaflags) ;#else hv_store_iv(RETVAL, "bt_flags", stat->bt_flags) ;#endif hv_store_iv(RETVAL, "bt_maxkey", stat->bt_maxkey) ; hv_store_iv(RETVAL, "bt_minkey", stat->bt_minkey); hv_store_iv(RETVAL, "bt_re_len", stat->bt_re_len); hv_store_iv(RETVAL, "bt_re_pad", stat->bt_re_pad); hv_store_iv(RETVAL, "bt_pagesize", stat->bt_pagesize); hv_store_iv(RETVAL, "bt_levels", stat->bt_levels);#ifdef AT_LEAST_DB_3_1 hv_store_iv(RETVAL, "bt_nkeys", stat->bt_nkeys); hv_store_iv(RETVAL, "bt_ndata", stat->bt_ndata);#else hv_store_iv(RETVAL, "bt_nrecs", stat->bt_nrecs);#endif hv_store_iv(RETVAL, "bt_int_pg", stat->bt_int_pg); hv_store_iv(RETVAL, "bt_leaf_pg", stat->bt_leaf_pg); hv_store_iv(RETVAL, "bt_dup_pg", stat->bt_dup_pg); hv_store_iv(RETVAL, "bt_over_pg", stat->bt_over_pg); hv_store_iv(RETVAL, "bt_free", stat->bt_free);#if DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 5 hv_store_iv(RETVAL, "bt_freed", stat->bt_freed); hv_store_iv(RETVAL, "bt_pfxsaved", stat->bt_pfxsaved); hv_store_iv(RETVAL, "bt_split", stat->bt_split); hv_store_iv(RETVAL, "bt_rootsplit", stat->bt_rootsplit); hv_store_iv(RETVAL, "bt_fastsplit", stat->bt_fastsplit); hv_store_iv(RETVAL, "bt_added", stat->bt_added); hv_store_iv(RETVAL, "bt_deleted", stat->bt_deleted); hv_store_iv(RETVAL, "bt_get", stat->bt_get); hv_store_iv(RETVAL, "bt_cache_hit", stat->bt_cache_hit); hv_store_iv(RETVAL, "bt_cache_miss", stat->bt_cache_miss);#endif hv_store_iv(RETVAL, "bt_int_pgfree", stat->bt_int_pgfree); hv_store_iv(RETVAL, "bt_leaf_pgfree", stat->bt_leaf_pgfree); hv_store_iv(RETVAL, "bt_dup_pgfree", stat->bt_dup_pgfree); hv_store_iv(RETVAL, "bt_over_pgfree", stat->bt_over_pgfree); safefree(stat) ; } } OUTPUT: RETVALMODULE = BerkeleyDB::Recno PACKAGE = BerkeleyDB::Recno PREFIX = recno_BerkeleyDB::Recno::Raw_db_open_recno(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 ; hash = (HV*) SvRV(ref) ; SetValue_pv(file, "Fname", char*) ; SetValue_ov(dbenv, "Env", BerkeleyDB__Env) ; ref_dbenv = sv ; SetValue_ov(txn, "Txn", BerkeleyDB__Txn) ; SetValue_iv(flags, "Flags") ; SetValue_iv(mode, "Mode") ; 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.bt_minkey, "Minkey") ; SetValue_iv(info.flags, "Property") ; SetValue_pv(info.re_source, "Source", char*) ; if ((sv = readHash(hash, "Len")) && sv != &PL_sv_undef) { info.re_len = SvIV(sv) ; ; flagSet_DB2(info.flags, DB_FIXEDLEN) ; } if ((sv = readHash(hash, "Delim")) && sv != &PL_sv_undef) { info.re_delim = SvPOK(sv) ? *SvPV(sv,PL_na) : SvIV(sv) ; ; flagSet_DB2(info.flags, DB_DELIMITER) ; } if ((sv = readHash(hash, "Pad")) && sv != &PL_sv_undef) { info.re_pad = (u_int32_t)SvPOK(sv) ? *SvPV(sv,PL_na) : SvIV(sv) ; ; flagSet_DB2(info.flags, DB_PAD) ; } ZMALLOC(db, BerkeleyDB_type) ;#ifdef ALLOW_RECNO_OFFSET Se
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -