--- BDB/BDB.xs 2007/07/08 11:12:12 1.13 +++ BDB/BDB.xs 2007/07/08 13:41:03 1.14 @@ -47,6 +47,18 @@ static SV *prepare_cb; +static void +debug_errcall (const DB_ENV *dbenv, const char *errpfx, const char *msg) +{ + printf ("err[%s]\n", msg); +} + +static void +debug_msgcall (const DB_ENV *dbenv, const char *msg) +{ + printf ("msg[%s]\n", msg); +} + static char * strdup_ornull (const char *s) { @@ -1020,6 +1032,45 @@ const_iv (SEQ_DEC) const_iv (SEQ_INC) const_iv (SEQ_WRAP) + + const_iv (BUFFER_SMALL) + const_iv (DONOTINDEX) + const_iv (KEYEMPTY ) + const_iv (KEYEXIST ) + const_iv (LOCK_DEADLOCK) + const_iv (LOCK_NOTGRANTED) + const_iv (LOG_BUFFER_FULL) + const_iv (NOSERVER) + const_iv (NOSERVER_HOME) + const_iv (NOSERVER_ID) + const_iv (NOTFOUND) + const_iv (OLD_VERSION) + const_iv (PAGE_NOTFOUND) + const_iv (REP_DUPMASTER) + const_iv (REP_HANDLE_DEAD) + const_iv (REP_HOLDELECTION) + const_iv (REP_IGNORE) + const_iv (REP_ISPERM) + const_iv (REP_JOIN_FAILURE) + const_iv (REP_LOCKOUT) + const_iv (REP_NEWMASTER) + const_iv (REP_NEWSITE) + const_iv (REP_NOTPERM) + const_iv (REP_UNAVAIL) + const_iv (RUNRECOVERY) + const_iv (SECONDARY_BAD) + const_iv (VERIFY_BAD) + const_iv (VERSION_MISMATCH) + + const_iv (VERB_DEADLOCK) + const_iv (VERB_RECOVERY) + const_iv (VERB_REGISTER) + const_iv (VERB_REPLICATION) + const_iv (VERB_WAITSFOR) + + const_iv (VERSION_MAJOR) + const_iv (VERSION_MINOR) + const_iv (VERSION_PATCH) #if DB_VERSION_MINOR >= 5 const_iv (MULTIVERSION) const_iv (TXN_SNAPSHOT) @@ -1029,6 +1080,9 @@ for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; ) newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); + newCONSTSUB (stash, "DB_VERSION", newSVnv (DB_VERSION_MAJOR + DB_VERSION_MINOR * .1)); + newCONSTSUB (stash, "DB_VERSION_STRING", newSVpv (DB_VERSION_STRING, 0)); + create_pipe (respipe); X_THREAD_ATFORK (atfork_prepare, atfork_parent, atfork_child); @@ -1180,6 +1234,13 @@ SvREFCNT_dec (prepare_cb); prepare_cb = newSVsv (cb); +char * +strerror (int errorno = errno) + PROTOTYPE: ;$ + CODE: + RETVAL = db_strerror (errorno); + OUTPUT: + RETVAL DB_ENV * db_env_create (U32 env_flags = 0) @@ -1188,6 +1249,12 @@ errno = db_env_create (&RETVAL, env_flags); if (errno) croak ("db_env_create: %s", db_strerror (errno)); + + if (0) + { + RETVAL->set_errcall (RETVAL, debug_errcall); + RETVAL->set_msgcall (RETVAL, debug_msgcall); + } } OUTPUT: RETVAL @@ -1198,7 +1265,7 @@ { dREQ (REQ_ENV_OPEN); - env->set_thread_count (env, get_nthreads ()); + env->set_thread_count (env, wanted + 2); req->env = env; req->uint1 = open_flags | DB_THREAD; @@ -1601,6 +1668,20 @@ OUTPUT: RETVAL +void set_errfile (DB_ENV *env, FILE *errfile) + CODE: + env->set_errfile (env, errfile); + +void set_msgfile (DB_ENV *env, FILE *msgfile) + CODE: + env->set_msgfile (env, msgfile); + +int set_verbose (DB_ENV *env, U32 which, int onoff = 1) + CODE: + RETVAL = env->set_verbose (env, which, onoff); + OUTPUT: + RETVAL + int set_encrypt (DB_ENV *env, const char *password, U32 flags = 0) CODE: RETVAL = env->set_encrypt (env, password, flags);