📄 berkeleydb.xs
字号:
#endif#ifdef AT_LEAST_DB_4_2# define DB_CLIENT DB_RPCCLIENT#endif status = db_env_create(&RETVAL->Env, server ? DB_CLIENT : 0) ; Trace(("db_env_create flags = %d returned %s\n", flags, my_db_strerror(status))) ; env = RETVAL->Env ;#ifdef AT_LEAST_DB_3_3 env->set_alloc(env, safemalloc, MyRealloc, safefree) ;#endif#ifdef AT_LEAST_DB_3_1 if (status == 0 && shm_key) { status = env->set_shm_key(env, shm_key) ; Trace(("set_shm_key [%d] returned %s\n", shm_key, my_db_strerror(status))); }#endif if (status == 0 && cachesize) { status = env->set_cachesize(env, 0, cachesize, 0) ; Trace(("set_cachesize [%d] returned %s\n", cachesize, my_db_strerror(status))); } if (status == 0 && lk_detect) { status = env->set_lk_detect(env, lk_detect) ; Trace(("set_lk_detect [%d] returned %s\n", lk_detect, my_db_strerror(status))); }#ifdef AT_LEAST_DB_4_1 /* set encryption */ if (enc_passwd && status == 0) { status = env->set_encrypt(env, enc_passwd, enc_flags); Trace(("ENV->set_encrypt passwd = %s, flags %d returned %s\n", enc_passwd, enc_flags, my_db_strerror(status))) ; }#endif #ifdef AT_LEAST_DB_4 /* set the server */ if (server && status == 0) { status = env->set_rpc_server(env, NULL, server, 0, 0, 0); Trace(("ENV->set_rpc_server server = %s returned %s\n", server, my_db_strerror(status))) ; }#else# if defined(AT_LEAST_DB_3_1) && ! defined(AT_LEAST_DB_4) /* set the server */ if (server && status == 0) { status = env->set_server(env, server, 0, 0, 0); Trace(("ENV->set_server server = %s returned %s\n", server, my_db_strerror(status))) ; }# endif#endif#ifdef AT_LEAST_DB_3_2 if (setflags && status == 0) { status = env->set_flags(env, setflags, 1); Trace(("ENV->set_flags value = %d returned %s\n", setflags, my_db_strerror(status))) ; }#endif if (status == 0) { int mode = 0 ; /* Take a copy of the error prefix */ if (errprefix) { Trace(("copying errprefix\n" )) ; RETVAL->ErrPrefix = newSVsv(errprefix) ; SvPOK_only(RETVAL->ErrPrefix) ; } if (RETVAL->ErrPrefix) env->set_errpfx(env, SvPVX(RETVAL->ErrPrefix)) ; if (SvGMAGICAL(errfile)) mg_get(errfile); if (SvOK(errfile)) { FILE * ef = GetFILEptr(errfile); if (! ef) croak("Cannot open file ErrFile", Strerror(errno)); RETVAL->ErrHandle = newSVsv(errfile) ; env->set_errfile(env, ef) ; } SetValue_iv(mode, "Mode") ; env->set_errcall(env, db_errcall_cb) ; RETVAL->active = TRUE ; RETVAL->cds_enabled = ((flags & DB_INIT_CDB) != 0 ? TRUE : FALSE) ; #ifdef IS_DB_3_0_x status = (env->open)(env, home, config, flags, mode) ;#else /* > 3.0 */ status = (env->open)(env, home, flags, mode) ;#endif Trace(("ENV->open(env=%s,home=%s,flags=%d,mode=%d)\n",env,home,flags,mode)) ; Trace(("ENV->open returned %s\n", my_db_strerror(status))) ; } if (status == 0) hash_store_iv("BerkeleyDB::Term::Env", (char *)RETVAL, 1) ; else { (env->close)(env, 0) ; if (RETVAL->ErrHandle) SvREFCNT_dec(RETVAL->ErrHandle) ; if (RETVAL->ErrPrefix) SvREFCNT_dec(RETVAL->ErrPrefix) ; Safefree(RETVAL) ; RETVAL = NULL ; }#endif /* DB_VERSION_MAJOR > 2 */ { SV * sv_err = perl_get_sv(ERR_BUFF, FALSE); sv_setpv(sv_err, db_strerror(status)); } } OUTPUT: RETVALDB_ENV*DB_ENV(env) BerkeleyDB::Env env PREINIT: dMY_CXT; CODE: if (env->active) RETVAL = env->Env ; else RETVAL = NULL; OUTPUT: RETVAL voidlog_archive(env, flags=0) u_int32_t flags BerkeleyDB::Env env PREINIT: dMY_CXT; PPCODE: { char ** list; char ** file; AV * av;#ifndef AT_LEAST_DB_3 softCrash("log_archive needs at least Berkeley DB 3.x.x");#else# ifdef AT_LEAST_DB_4 env->Status = env->Env->log_archive(env->Env, &list, flags) ;# else# ifdef AT_LEAST_DB_3_3 env->Status = log_archive(env->Env, &list, flags) ;# else env->Status = log_archive(env->Env, &list, flags, safemalloc) ;# endif# endif#ifdef DB_ARCH_REMOVE if (env->Status == 0 && list != NULL && flags != DB_ARCH_REMOVE)#else if (env->Status == 0 && list != NULL )#endif { for (file = list; *file != NULL; ++file) { XPUSHs(sv_2mortal(newSVpv(*file, 0))) ; } safefree(list); }#endif }BerkeleyDB::Txn::Raw_txn_begin(env, pid=NULL, flags=0) u_int32_t flags BerkeleyDB::Env env BerkeleyDB::Txn pid PREINIT: dMY_CXT; 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 flags PREINIT: dMY_CXT;HV *txn_stat(env) BerkeleyDB::Env env HV * RETVAL = NULL ; PREINIT: dMY_CXT; 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 PREINIT: dMY_CXT; 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 PREINIT: dMY_CXT; 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 PREINIT: dMY_CXT; CODE: RETVAL = env->Status ; OUTPUT: RETVALDualTypedb_appexit(env) BerkeleyDB::Env env PREINIT: dMY_CXT; 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 ; PREINIT: dMY_CXT; 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 PREINIT: dMY_CXT; 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 PREINIT: dMY_CXT; 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 PREINIT: dMY_CXT; 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 PREINIT: dMY_CXT; 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 PREINIT: dMY_CXT; 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 PREINIT: dMY_CXT; 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, d
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -