📄 berkeleydb.xs
字号:
ofh = fopen(outfile, "w"); if (! ofh) RETVAL = errno; } if (! RETVAL) { if (env) dbenv = env->Env ; RETVAL = db_create(&dbp, dbenv, 0) ; if (RETVAL == 0) { RETVAL = dbp->verify(dbp, db, subdb, ofh, flags) ; } if (outfile) fclose(ofh); }#endif } OUTPUT: RETVALDualType_db_rename(ref) SV * ref CODE: {#ifndef AT_LEAST_DB_3_1 softCrash("BerkeleyDB::db_rename needs Berkeley DB 3.1.x or better") ;#else HV * hash ; DB * dbp ; SV * sv ; const char * db = NULL ; const char * subdb = NULL ; const char * newname = NULL ; BerkeleyDB__Env env = NULL ; DB_ENV * dbenv = NULL ; u_int32_t flags = 0 ; hash = (HV*) SvRV(ref) ; SetValue_pv(db, "Filename", char *) ; SetValue_pv(subdb, "Subname", char *) ; SetValue_pv(newname, "Newname", char *) ; SetValue_iv(flags, "Flags") ; SetValue_ov(env, "Env", BerkeleyDB__Env) ; if (env) dbenv = env->Env ; RETVAL = db_create(&dbp, dbenv, 0) ; if (RETVAL == 0) { RETVAL = dbp->rename(dbp, db, subdb, newname, flags) ; }#endif } OUTPUT: RETVALMODULE = BerkeleyDB::Env PACKAGE = BerkeleyDB::Env PREFIX = env_BerkeleyDB::Env::Raw_db_appinit(self, ref) char * self SV * ref CODE: { HV * hash ; SV * sv ; char * home = NULL ; char * errfile = NULL ; char * server = NULL ; char ** config = NULL ; int flags = 0 ; int setflags = 0 ; int cachesize = 0 ; int lk_detect = 0 ; SV * errprefix = NULL; DB_ENV * env ; int status ; Trace(("in _db_appinit [%s] %d\n", self, ref)) ; hash = (HV*) SvRV(ref) ; SetValue_pv(home, "Home", char *) ; SetValue_pv(config, "Config", char **) ; SetValue_sv(errprefix, "ErrPrefix") ; SetValue_iv(flags, "Flags") ; SetValue_iv(setflags, "SetFlags") ; SetValue_pv(server, "Server", char *) ; SetValue_iv(cachesize, "Cachesize") ; SetValue_iv(lk_detect, "LockDetect") ;#ifndef AT_LEAST_DB_3_2 if (setflags) softCrash("-SetFlags needs Berkeley DB 3.x or better") ;#endif /* ! AT_LEAST_DB_3 */#ifndef AT_LEAST_DB_3_1 if (server) softCrash("-Server needs Berkeley DB 3.1 or better") ;#endif /* ! AT_LEAST_DB_3_1 */ Trace(("_db_appinit(config=[%d], home=[%s],errprefix=[%s],flags=[%d]\n", config, home, errprefix, flags)) ;#ifdef TRACE if (config) { int i ; for (i = 0 ; i < 10 ; ++ i) { if (config[i] == NULL) { printf(" End\n") ; break ; } printf(" config = [%s]\n", config[i]) ; } }#endif /* TRACE */ ZMALLOC(RETVAL, BerkeleyDB_ENV_type) ; if (flags & DB_INIT_TXN) RETVAL->txn_enabled = TRUE ;#if DB_VERSION_MAJOR == 2 ZMALLOC(RETVAL->Env, DB_ENV) ; env = RETVAL->Env ; { /* Take a copy of the error prefix */ if (errprefix) { Trace(("copying errprefix\n" )) ; RETVAL->ErrPrefix = newSVsv(errprefix) ; SvPOK_only(RETVAL->ErrPrefix) ; } if (RETVAL->ErrPrefix) RETVAL->Env->db_errpfx = SvPVX(RETVAL->ErrPrefix) ; SetValue_pv(errfile, "ErrFile", char *) ; if (errfile) { RETVAL->ErrHandle = env->db_errfile = fopen(errfile, "w"); if (RETVAL->ErrHandle == NULL) croak("Cannot open file %s: %s\n", errfile, Strerror(errno)); } SetValue_iv(env->db_verbose, "Verbose") ; env->db_errcall = db_errcall_cb ; RETVAL->active = TRUE ; status = db_appinit(home, config, env, flags) ; Trace((" status = %d env %d Env %d\n", status, RETVAL, env)) ; if (status == 0) hash_store_iv("BerkeleyDB::Term::Env", (char *)RETVAL, 1) ; else { if (RETVAL->ErrHandle) fclose(RETVAL->ErrHandle) ; if (RETVAL->ErrPrefix) SvREFCNT_dec(RETVAL->ErrPrefix) ; Safefree(RETVAL->Env) ; Safefree(RETVAL) ; RETVAL = NULL ; } }#else /* DB_VERSION_MAJOR > 2 */#ifndef AT_LEAST_DB_3_1# define DB_CLIENT 0#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 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 /* 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)) ; SetValue_pv(errfile, "ErrFile", char *) ; if (errfile) { RETVAL->ErrHandle = fopen(errfile, "w"); if (RETVAL->ErrHandle == NULL) croak("Cannot open file %s: %s\n", errfile, Strerror(errno)); env->set_errfile(env, RETVAL->ErrHandle) ; } SetValue_iv(mode, "Mode") ; env->set_errcall(env, db_errcall_cb) ; RETVAL->active = TRUE ;#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 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) fclose(RETVAL->ErrHandle) ; if (RETVAL->ErrPrefix) SvREFCNT_dec(RETVAL->ErrPrefix) ; Safefree(RETVAL) ; RETVAL = NULL ; }#endif /* DB_VERSION_MAJOR > 2 */ } OUTPUT: RETVALvoidlog_archive(env, flags=0) u_int32_t flags BerkeleyDB::Env env 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 if (env->Status == 0 && list != NULL) { 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 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) fclose(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") ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -