📄 java_dbenv.c
字号:
strarray = NULL; if (!verify_non_null(jnienv, dbenv)) return (0); err = dbenv->log_archive(dbenv, &ret, flags); if (!verify_return(jnienv, err, 0)) return (0); if (ret != NULL) { len = 0; while (ret[len] != NULL) len++; stringClass = (*jnienv)->FindClass(jnienv, "java/lang/String"); if ((strarray = (*jnienv)->NewObjectArray(jnienv, len, stringClass, 0)) == NULL) goto out; for (i=0; i<len; i++) { jstring str = (*jnienv)->NewStringUTF(jnienv, ret[i]); (*jnienv)->SetObjectArrayElement(jnienv, strarray, i, str); } }out: return (strarray);}JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_log_1compare (JNIEnv *jnienv, jclass jthis_class, /*DbLsn*/ jobject lsn0, /*DbLsn*/ jobject lsn1){ DB_LSN *dblsn0; DB_LSN *dblsn1; COMPQUIET(jthis_class, NULL); dblsn0 = get_DB_LSN(jnienv, lsn0); dblsn1 = get_DB_LSN(jnienv, lsn1); return (log_compare(dblsn0, dblsn1));}JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_log_1cursor (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint flags){ int err; DB_LOGC *dblogc; DB_ENV *dbenv = get_DB_ENV(jnienv, jthis); if (!verify_non_null(jnienv, dbenv)) return (NULL); err = dbenv->log_cursor(dbenv, &dblogc, flags); verify_return(jnienv, err, 0); return (get_DbLogc(jnienv, dblogc));}JNIEXPORT jstring JNICALL Java_com_sleepycat_db_DbEnv_log_1file (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*DbLsn*/ jobject lsn){ int err; DB_ENV *dbenv = get_DB_ENV(jnienv, jthis); DB_LSN *dblsn = get_DB_LSN(jnienv, lsn); char filename[FILENAME_MAX+1] = ""; if (!verify_non_null(jnienv, dbenv)) return (NULL); err = dbenv->log_file(dbenv, dblsn, filename, FILENAME_MAX); verify_return(jnienv, err, 0); filename[FILENAME_MAX] = '\0'; /* just to be sure */ return (get_java_string(jnienv, filename));}JAVADB_METHOD(DbEnv_log_1flush, (JAVADB_ARGS, /*DbLsn*/ jobject lsn), DB_ENV, log_flush, (c_this, get_DB_LSN(jnienv, lsn)))JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1put (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*DbLsn*/ jobject lsn, /*DbDbt*/ jobject data, jint flags){ int err; DB_ENV *dbenv; DB_LSN *dblsn; LOCKED_DBT ldata; dbenv = get_DB_ENV(jnienv, jthis); dblsn = get_DB_LSN(jnienv, lsn); if (!verify_non_null(jnienv, dbenv)) return; /* log_put's DB_LSN argument may not be NULL. */ if (!verify_non_null(jnienv, dblsn)) return; if (locked_dbt_get(&ldata, jnienv, dbenv, data, inOp) != 0) goto out; err = dbenv->log_put(dbenv, dblsn, &ldata.javainfo->dbt, flags); verify_return(jnienv, err, 0); out: locked_dbt_put(&ldata, jnienv, dbenv);}JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_log_1stat (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint flags){ int err; DB_ENV *dbenv; DB_LOG_STAT *statp; jobject retval; jclass dbclass; retval = NULL; statp = NULL; dbenv = get_DB_ENV(jnienv, jthis); if (!verify_non_null(jnienv, dbenv)) return (NULL); err = dbenv->log_stat(dbenv, &statp, (u_int32_t)flags); if (verify_return(jnienv, err, 0)) { if ((dbclass = get_class(jnienv, name_DB_LOG_STAT)) == NULL || (retval = create_default_object(jnienv, name_DB_LOG_STAT)) == NULL) goto err; /* An exception has been posted. */ __jv_fill_log_stat(jnienv, dbclass, retval, statp);err: __os_ufree(dbenv, statp); } return (retval);}JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_memp_1stat (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint flags){ int err; jclass dbclass; DB_ENV *dbenv; DB_MPOOL_STAT *statp; jobject retval; retval = NULL; statp = NULL; dbenv = get_DB_ENV(jnienv, jthis); if (!verify_non_null(jnienv, dbenv)) return (NULL); err = dbenv->memp_stat(dbenv, &statp, 0, (u_int32_t)flags); if (verify_return(jnienv, err, 0)) { if ((dbclass = get_class(jnienv, name_DB_MPOOL_STAT)) == NULL || (retval = create_default_object(jnienv, name_DB_MPOOL_STAT)) == NULL) goto err; /* An exception has been posted. */ __jv_fill_mpool_stat(jnienv, dbclass, retval, statp);err: __os_ufree(dbenv, statp); } return (retval);}JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_DbEnv_memp_1fstat (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint flags){ int err, i, len; jclass fstat_class; DB_ENV *dbenv; DB_MPOOL_FSTAT **fstatp; jobjectArray retval; jfieldID filename_id; jstring jfilename; fstatp = NULL; retval = NULL; dbenv = get_DB_ENV(jnienv, jthis); if (!verify_non_null(jnienv, dbenv)) return (NULL); err = dbenv->memp_stat(dbenv, 0, &fstatp, (u_int32_t)flags); if (verify_return(jnienv, err, 0)) { len = 0; while (fstatp[len] != NULL) len++; if ((fstat_class = get_class(jnienv, name_DB_MPOOL_FSTAT)) == NULL || (retval = (*jnienv)->NewObjectArray(jnienv, len, fstat_class, 0)) == NULL) goto err; for (i=0; i<len; i++) { jobject obj; if ((obj = create_default_object(jnienv, name_DB_MPOOL_FSTAT)) == NULL) goto err; (*jnienv)->SetObjectArrayElement(jnienv, retval, i, obj); /* Set the string field. */ filename_id = (*jnienv)->GetFieldID(jnienv, fstat_class, "file_name", string_signature); jfilename = get_java_string(jnienv, fstatp[i]->file_name); (*jnienv)->SetObjectField(jnienv, obj, filename_id, jfilename); set_int_field(jnienv, fstat_class, obj, "st_pagesize", fstatp[i]->st_pagesize); set_int_field(jnienv, fstat_class, obj, "st_cache_hit", fstatp[i]->st_cache_hit); set_int_field(jnienv, fstat_class, obj, "st_cache_miss", fstatp[i]->st_cache_miss); set_int_field(jnienv, fstat_class, obj, "st_map", fstatp[i]->st_map); set_int_field(jnienv, fstat_class, obj, "st_page_create", fstatp[i]->st_page_create); set_int_field(jnienv, fstat_class, obj, "st_page_in", fstatp[i]->st_page_in); set_int_field(jnienv, fstat_class, obj, "st_page_out", fstatp[i]->st_page_out); __os_ufree(dbenv, fstatp[i]); }err: __os_ufree(dbenv, fstatp); } return (retval);}JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_memp_1trickle (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint pct){ int err; DB_ENV *dbenv = get_DB_ENV(jnienv, jthis); int result = 0; if (verify_non_null(jnienv, dbenv)) { err = dbenv->memp_trickle(dbenv, pct, &result); verify_return(jnienv, err, 0); } return (result);}JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_txn_1begin (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*DbTxn*/ jobject pid, jint flags){ int err; DB_TXN *dbpid, *result; DB_ENV *dbenv; dbenv = get_DB_ENV(jnienv, jthis); if (!verify_non_null(jnienv, dbenv)) return (0); dbpid = get_DB_TXN(jnienv, pid); result = 0; err = dbenv->txn_begin(dbenv, dbpid, &result, flags); if (!verify_return(jnienv, err, 0)) return (0); return (get_DbTxn(jnienv, result));}JAVADB_METHOD(DbEnv_txn_1checkpoint, (JAVADB_ARGS, jint kbyte, jint min, jint flags), DB_ENV, txn_checkpoint, (c_this, kbyte, min, flags))JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_app_1dispatch_1changed (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*DbFeedback*/ jobject jappdispatch){ DB_ENV *dbenv; DB_ENV_JAVAINFO *dbenvinfo; dbenv = get_DB_ENV(jnienv, jthis); dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis); if (!verify_non_null(jnienv, dbenv) || !verify_non_null(jnienv, dbenvinfo)) return; dbjie_set_app_dispatch_object(dbenvinfo, jnienv, dbenv, jappdispatch);}JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_DbEnv_txn_1recover (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint count, jint flags){ int err; DB_ENV *dbenv; DB_PREPLIST *preps; long retcount; int i; char signature[128]; size_t bytesize; jobject retval; jobject obj; jobject txnobj; jbyteArray bytearr; jclass preplist_class; jfieldID txn_fieldid; jfieldID gid_fieldid; retval = NULL; dbenv = get_DB_ENV(jnienv, jthis); if (!verify_non_null(jnienv, dbenv)) return (NULL); /* * We need to allocate some local storage for the * returned preplist, and that requires us to do * our own argument validation. */ if (count <= 0) { verify_return(jnienv, EINVAL, 0); goto out; } bytesize = sizeof(DB_PREPLIST) * count; if ((err = __os_malloc(dbenv, bytesize, &preps)) != 0) { verify_return(jnienv, err, 0); goto out; } err = dbenv->txn_recover(dbenv, preps, count, &retcount, flags); if (verify_return(jnienv, err, 0)) { if ((preplist_class = get_class(jnienv, name_DB_PREPLIST)) == NULL || (retval = (*jnienv)->NewObjectArray(jnienv, retcount, preplist_class, 0)) == NULL) goto err; (void)snprintf(signature, sizeof(signature), "L%s%s;", DB_PACKAGE_NAME, name_DB_TXN); txn_fieldid = (*jnienv)->GetFieldID(jnienv, preplist_class, "txn", signature); gid_fieldid = (*jnienv)->GetFieldID(jnienv, preplist_class, "gid", "[B"); for (i=0; i<retcount; i++) { /* * First, make a blank DbPreplist object * and set the array entry. */ if ((obj = create_default_object(jnienv, name_DB_PREPLIST)) == NULL) goto err; (*jnienv)->SetObjectArrayElement(jnienv, retval, i, obj); /* Set the txn field. */ txnobj = get_DbTxn(jnienv, preps[i].txn); (*jnienv)->SetObjectField(jnienv, obj, txn_fieldid, txnobj); /* Build the gid array and set the field. */ if ((bytearr = (*jnienv)->NewByteArray(jnienv, sizeof(preps[i].gid))) == NULL) goto err; (*jnienv)->SetByteArrayRegion(jnienv, bytearr, 0, sizeof(preps[i].gid), (jbyte *)&preps[i].gid[0]); (*jnienv)->SetObjectField(jnienv, obj, gid_fieldid, bytearr); } }err: __os_free(dbenv, preps);out: return (retval);}JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_txn_1stat (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint flags){ int err; DB_ENV *dbenv; DB_TXN_STAT *statp; jobject retval, obj; jclass dbclass, active_class; char active_signature[512]; jfieldID arrid; jobjectArray actives; unsigned int i; retval = NULL; statp = NULL; dbenv = get_DB_ENV(jnienv, jthis); if (!verify_non_null(jnienv, dbenv)) return (NULL); err = dbenv->txn_stat(dbenv, &statp, (u_int32_t)flags); if (verify_return(jnienv, err, 0)) { if ((dbclass = get_class(jnienv, name_DB_TXN_STAT)) == NULL || (retval = create_default_object(jnienv, name_DB_TXN_STAT)) == NULL) goto err; /* Set the individual fields */ __jv_fill_txn_stat(jnienv, dbclass, retval, statp); if ((active_class = get_class(jnienv, name_DB_TXN_STAT_ACTIVE)) == NULL || (actives = (*jnienv)->NewObjectArray(jnienv, statp->st_nactive, active_class, 0)) == NULL) goto err; /* * Set the st_txnarray field. This is a little more involved * than other fields, since the type is an array, so none * of our utility functions help. */ (void)snprintf(active_signature, sizeof(active_signature), "[L%s%s;", DB_PACKAGE_NAME, name_DB_TXN_STAT_ACTIVE); arrid = (*jnienv)->GetFieldID(jnienv, dbclass, "st_txnarray", active_signature); (*jnienv)->SetObjectField(jnienv, retval, arrid, actives); /* Now fill the in the elements of st_txnarray. */ for (i=0; i<statp->st_nactive; i++) { obj = create_default_object(jnienv, name_DB_TXN_STAT_ACTIVE); (*jnienv)->SetObjectArrayElement(jnienv, actives, i, obj); set_int_field(jnienv, active_class, obj, "txnid", statp->st_txnarray[i].txnid); set_int_field(jnienv, active_class, obj, "parentid", statp->st_txnarray[i].parentid); set_lsn_field(jnienv, active_class, obj, "lsn", statp->st_txnarray[i].lsn); }err: __os_ufree(dbenv, statp); } return (retval);}/* See discussion on errpfx, errcall in DB_ENV_JAVAINFO */JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1set_1errcall (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jobject errcall){ DB_ENV *dbenv; DB_ENV_JAVAINFO *dbenvinfo; dbenv = get_DB_ENV(jnienv, jthis); dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis); if (verify_non_null(jnienv, dbenv) && verify_non_null(jnienv, dbenvinfo)) { dbjie_set_errcall(dbenvinfo, jnienv, errcall); }}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1set_1errpfx (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jstring str){ DB_ENV *dbenv; DB_ENV_JAVAINFO *dbenvinfo; dbenv = get_DB_ENV(jnienv, jthis); dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis); if (verify_non_null(jnienv, dbenv) && verify_non_null(jnienv, dbenvinfo)) { dbjie_set_errpfx(dbenvinfo, jnienv, str); }}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1finalize (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jobject /*DbErrcall*/ errcall, jstring errpfx){ DB_ENV *dbenv; DB_ENV_JAVAINFO *envinfo; dbenv = get_DB_ENV(jnienv, jthis); envinfo = get_DB_ENV_JAVAINFO(jnienv, jthis); DB_ASSERT(envinfo != NULL); /* Note: We detect and report unclosed DbEnvs. */ if (dbenv != NULL && envinfo != NULL && !dbjie_is_dbopen(envinfo)) { /* If this error occurs, this object was never closed. */ report_errcall(jnienv, errcall, errpfx, "DbEnv.finalize: open DbEnv object destroyed"); } /* Shouldn't see this object again, but just in case */ set_private_dbobj(jnienv, name_DB_ENV, jthis, 0); set_private_info(jnienv, name_DB_ENV, jthis, 0); dbjie_destroy(envinfo, jnienv);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -