⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java_db.c

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 C
📖 第 1 页 / 共 2 页
字号:
		goto out4;	dbenv = db->dbenv;	/* Depending on flags, the key may be input/output. */	keyop = inOp;	rkeyop = outOp;	dataop = outOp;	op_flags = flags & DB_OPFLAGS_MASK;	if (op_flags == DB_SET_RECNO) {		keyop = inOutOp;	}	else if (op_flags == DB_GET_BOTH) {		keyop = inOutOp;		rkeyop = inOutOp;		dataop = inOutOp;	}	dbtxnid = get_DB_TXN(jnienv, txnid);	if (locked_dbt_get(&lkey, jnienv, dbenv, key, keyop) != 0)		goto out3;	if (locked_dbt_get(&lrkey, jnienv, dbenv, rkey, rkeyop) != 0)		goto out2;	if (locked_dbt_get(&ldata, jnienv, dbenv, data, dataop) != 0)		goto out1;	for (retry = 0; retry < 3; retry++) {		err = db->pget(db, dbtxnid, &lkey.javainfo->dbt,		    &lrkey.javainfo->dbt, &ldata.javainfo->dbt, flags);		/*		 * If we failed due to lack of memory in our DBT arrays,		 * retry.		 */		if (err != ENOMEM)			break;		if (!locked_dbt_realloc(&lkey, jnienv, dbenv) &&		    !locked_dbt_realloc(&lrkey, jnienv, dbenv) &&		    !locked_dbt_realloc(&ldata, jnienv, dbenv))			break;	} out1:	locked_dbt_put(&ldata, jnienv, dbenv); out2:	locked_dbt_put(&lrkey, jnienv, dbenv); out3:	locked_dbt_put(&lkey, jnienv, dbenv); out4:	if (!DB_RETOK_DBGET(err)) {		if (verify_dbt(jnienv, err, &lkey) &&		    verify_dbt(jnienv, err, &lrkey) &&		    verify_dbt(jnienv, err, &ldata))			verify_return(jnienv, err, 0);	}	return (err);}JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_put  (JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbTxn*/ jobject txnid,   /*Dbt*/ jobject key, /*Dbt*/ jobject data, jint flags){	int err;	DB *db;	DB_ENV *dbenv;	DB_TXN *dbtxnid;	LOCKED_DBT lkey, ldata;	OpKind keyop;	err = 0;	db = get_DB(jnienv, jthis);	dbtxnid = get_DB_TXN(jnienv, txnid);	if (!verify_non_null(jnienv, db))		return (0);   /* error will be thrown, retval doesn't matter */	dbenv = db->dbenv;	/*	 * For DB_APPEND, the key may be output-only;  for all other flags,	 * it's input-only.	 */	if ((flags & DB_OPFLAGS_MASK) == DB_APPEND)		keyop = outOp;	else		keyop = inOp;	if (locked_dbt_get(&lkey, jnienv, dbenv, key, keyop) != 0)		goto out2;	if (locked_dbt_get(&ldata, jnienv, dbenv, data, inOp) != 0)		goto out1;	if (!verify_non_null(jnienv, db))		goto out1;	err = db->put(db,	    dbtxnid, &lkey.javainfo->dbt, &ldata.javainfo->dbt, flags);	if (!DB_RETOK_DBPUT(err))		verify_return(jnienv, err, 0); out1:	locked_dbt_put(&ldata, jnienv, dbenv); out2:	locked_dbt_put(&lkey, jnienv, dbenv);	return (err);}JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1remove  (JNIEnv *jnienv, /*Db*/ jobject jthis,   jstring file, jstring database, jint flags){	int err;	DB *db;	DB_JAVAINFO *dbinfo;	LOCKED_STRING ls_file;	LOCKED_STRING ls_database;	db = get_DB(jnienv, jthis);	dbinfo = get_DB_JAVAINFO(jnienv, jthis);	if (!verify_non_null(jnienv, db))		return;	if (locked_string_get(&ls_file, jnienv, file) != 0)		goto out2;	if (locked_string_get(&ls_database, jnienv, database) != 0)		goto out1;	err = db->remove(db, ls_file.string, ls_database.string, flags);	set_private_dbobj(jnienv, name_DB, jthis, 0);	verify_return(jnienv, err, EXCEPTION_FILE_NOT_FOUND); out1:	locked_string_put(&ls_database, jnienv); out2:	locked_string_put(&ls_file, jnienv);	dbji_dealloc(dbinfo, jnienv);}JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1rename  (JNIEnv *jnienv, /*Db*/ jobject jthis,   jstring file, jstring database, jstring newname, jint flags){	int err;	DB *db;	DB_JAVAINFO *dbinfo;	LOCKED_STRING ls_file;	LOCKED_STRING ls_database;	LOCKED_STRING ls_newname;	db = get_DB(jnienv, jthis);	dbinfo = get_DB_JAVAINFO(jnienv, jthis);	if (!verify_non_null(jnienv, db))		return;	if (locked_string_get(&ls_file, jnienv, file) != 0)		goto out3;	if (locked_string_get(&ls_database, jnienv, database) != 0)		goto out2;	if (locked_string_get(&ls_newname, jnienv, newname) != 0)		goto out1;	err = db->rename(db, ls_file.string, ls_database.string,			 ls_newname.string, flags);	verify_return(jnienv, err, EXCEPTION_FILE_NOT_FOUND);	set_private_dbobj(jnienv, name_DB, jthis, 0); out1:	locked_string_put(&ls_newname, jnienv); out2:	locked_string_put(&ls_database, jnienv); out3:	locked_string_put(&ls_file, jnienv);	dbji_dealloc(dbinfo, jnienv);}JAVADB_METHOD(Db_set_1pagesize, (JAVADB_ARGS, jlong pagesize), DB,    set_pagesize, (c_this, (u_int32_t)pagesize))JAVADB_METHOD(Db_set_1cachesize,    (JAVADB_ARGS, jint gbytes, jint bytes, jint ncaches), DB,    set_cachesize, (c_this, gbytes, bytes, ncaches))JAVADB_METHOD(Db_set_1cache_1priority, (JAVADB_ARGS, jint priority), DB,    set_cache_priority, (c_this, (DB_CACHE_PRIORITY)priority))JNIEXPORT void JNICALL  Java_com_sleepycat_db_Db_set_1re_1source  (JNIEnv *jnienv, /*Db*/ jobject jthis, jstring re_source){	int err;	DB *db;	db = get_DB(jnienv, jthis);	if (verify_non_null(jnienv, db)) {		/* XXX does the string from get_c_string ever get freed? */		if (re_source != NULL)			err = db->set_re_source(db,			    get_c_string(jnienv, re_source));		else			err = db->set_re_source(db, 0);		verify_return(jnienv, err, 0);	}}JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_stat  (JNIEnv *jnienv, jobject jthis, jint flags){	DB *db;	DB_BTREE_STAT *bstp;	DB_HASH_STAT *hstp;	DB_QUEUE_STAT *qstp;	DBTYPE dbtype;	jobject retval;	jclass dbclass;	size_t bytesize;	void *statp;	bytesize = 0;	retval = NULL;	statp = NULL;	db = get_DB(jnienv, jthis);	if (!verify_non_null(jnienv, db))		return (NULL);	if (verify_return(jnienv, db->stat(db, &statp, flags), 0) &&	    verify_return(jnienv, db->get_type(db, &dbtype), 0)) {		switch (dbtype) {			/* Btree and recno share the same stat structure */		case DB_BTREE:		case DB_RECNO:			bstp = (DB_BTREE_STAT *)statp;			bytesize = sizeof(DB_BTREE_STAT);			retval = create_default_object(jnienv,						       name_DB_BTREE_STAT);			if ((dbclass =			    get_class(jnienv, name_DB_BTREE_STAT)) == NULL)				break;	/* An exception has been posted. */			__jv_fill_bt_stat(jnienv, dbclass, retval, bstp);			break;			/* Hash stat structure */		case DB_HASH:			hstp = (DB_HASH_STAT *)statp;			bytesize = sizeof(DB_HASH_STAT);			retval = create_default_object(jnienv,						       name_DB_HASH_STAT);			if ((dbclass =			    get_class(jnienv, name_DB_HASH_STAT)) == NULL)				break;	/* An exception has been posted. */			__jv_fill_h_stat(jnienv, dbclass, retval, hstp);			break;		case DB_QUEUE:			qstp = (DB_QUEUE_STAT *)statp;			bytesize = sizeof(DB_QUEUE_STAT);			retval = create_default_object(jnienv,						       name_DB_QUEUE_STAT);			if ((dbclass =			    get_class(jnienv, name_DB_QUEUE_STAT)) == NULL)				break;	/* An exception has been posted. */			__jv_fill_qam_stat(jnienv, dbclass, retval, qstp);			break;			/* That's all the database types we're aware of! */		default:			report_exception(jnienv,					 "Db.stat not implemented for types"					 " other than BTREE, HASH, QUEUE,"					 " and RECNO",					 EINVAL, 0);			break;		}		if (bytesize != 0)			__os_ufree(db->dbenv, statp);	}	return (retval);}JAVADB_METHOD(Db_sync, (JAVADB_ARGS, jint flags), DB,    sync, (c_this, flags))JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_Db_get_1byteswapped  (JNIEnv *jnienv, /*Db*/ jobject jthis){	DB *db;	int err, isbyteswapped;	/* This value should never be seen, because of the exception. */	isbyteswapped = 0;	db = get_DB(jnienv, jthis);	if (!verify_non_null(jnienv, db))		return (0);	err = db->get_byteswapped(db, &isbyteswapped);	(void)verify_return(jnienv, err, 0);	return ((jboolean)isbyteswapped);}JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_get_1type  (JNIEnv *jnienv, /*Db*/ jobject jthis){	DB *db;	int err;	DBTYPE dbtype;	/* This value should never be seen, because of the exception. */	dbtype = DB_UNKNOWN;	db = get_DB(jnienv, jthis);	if (!verify_non_null(jnienv, db))		return (0);	err = db->get_type(db, &dbtype);	(void)verify_return(jnienv, err, 0);	return ((jint)dbtype);}JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1open  (JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbTxn*/ jobject txnid,   jstring file, jstring database, jint type, jint flags, jint mode){	int err;	DB *db;	DB_TXN *dbtxnid;	LOCKED_STRING ls_file;	LOCKED_STRING ls_database;	/* Java is assumed to be threaded */	flags |= DB_THREAD;	db = get_DB(jnienv, jthis);	dbtxnid = get_DB_TXN(jnienv, txnid);	if (locked_string_get(&ls_file, jnienv, file) != 0)		goto out2;	if (locked_string_get(&ls_database, jnienv, database) != 0)		goto out1;	if (verify_non_null(jnienv, db)) {		err = db->open(db, dbtxnid, ls_file.string, ls_database.string,			       (DBTYPE)type, flags, mode);		verify_return(jnienv, err, EXCEPTION_FILE_NOT_FOUND);	} out1:	locked_string_put(&ls_database, jnienv); out2:	locked_string_put(&ls_file, jnienv);}JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_truncate  (JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbTxn*/ jobject jtxnid, jint flags){	int err;	DB *db;	u_int32_t count;	DB_TXN *dbtxnid;	db = get_DB(jnienv, jthis);	dbtxnid = get_DB_TXN(jnienv, jtxnid);	count = 0;	if (verify_non_null(jnienv, db)) {		err = db->truncate(db, dbtxnid, &count, flags);		verify_return(jnienv, err, 0);	}	return (jint)count;}JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_upgrade  (JNIEnv *jnienv, /*Db*/ jobject jthis, jstring name,   jint flags){	int err;	DB *db = get_DB(jnienv, jthis);	LOCKED_STRING ls_name;	if (verify_non_null(jnienv, db)) {		if (locked_string_get(&ls_name, jnienv, name) != 0)			goto out;		err = db->upgrade(db, ls_name.string, flags);		verify_return(jnienv, err, 0);	} out:	locked_string_put(&ls_name, jnienv);}static int java_verify_callback(void *handle, const void *str_arg){	char *str;	struct verify_callback_struct *vc;	int len;	JNIEnv *jnienv;	str = (char *)str_arg;	vc = (struct verify_callback_struct *)handle;	jnienv = vc->env;	len = strlen(str)+1;	if (len > vc->nbytes) {		vc->nbytes = len;		vc->bytes = (*jnienv)->NewByteArray(jnienv, len);	}	if (vc->bytes != NULL) {		(*jnienv)->SetByteArrayRegion(jnienv, vc->bytes, 0, len,		    (jbyte*)str);		(*jnienv)->CallVoidMethod(jnienv, vc->streamobj,		    vc->writemid, vc->bytes, 0, len-1);	}	if ((*jnienv)->ExceptionOccurred(jnienv) != NULL)		return (EIO);	return (0);}JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_verify  (JNIEnv *jnienv, /*Db*/ jobject jthis, jstring name,   jstring subdb, jobject stream, jint flags){	int err;	DB *db;	LOCKED_STRING ls_name;	LOCKED_STRING ls_subdb;	struct verify_callback_struct vcs;	jclass streamclass;	db = get_DB(jnienv, jthis);	if (!verify_non_null(jnienv, db))		return;	if (locked_string_get(&ls_name, jnienv, name) != 0)		goto out2;	if (locked_string_get(&ls_subdb, jnienv, subdb) != 0)		goto out1;	/* set up everything we need for the callbacks */	vcs.env = jnienv;	vcs.streamobj = stream;	vcs.nbytes = 100;	if ((vcs.bytes = (*jnienv)->NewByteArray(jnienv, vcs.nbytes)) == NULL)		goto out1;	/* get the method ID for OutputStream.write(byte[], int, int); */	streamclass = (*jnienv)->FindClass(jnienv, "java/io/OutputStream");	vcs.writemid = (*jnienv)->GetMethodID(jnienv, streamclass,					      "write", "([BII)V");	/* invoke verify - this will invoke the callback repeatedly. */	err = __db_verify_internal(db, ls_name.string, ls_subdb.string,				   &vcs, java_verify_callback, flags);	verify_return(jnienv, err, 0);out1:	locked_string_put(&ls_subdb, jnienv);out2:	locked_string_put(&ls_name, jnienv);}JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1finalize    (JNIEnv *jnienv, jobject jthis,     jobject /*DbErrcall*/ errcall, jstring errpfx){	DB_JAVAINFO *dbinfo;	DB *db;	dbinfo = get_DB_JAVAINFO(jnienv, jthis);	db = get_DB(jnienv, jthis);	DB_ASSERT(dbinfo != NULL);	/*	 * Note: We can never be sure if the underlying DB is attached to	 * a DB_ENV that was already closed.  Sure, that's a user error,	 * but it shouldn't crash the VM.  Therefore, we cannot just	 * automatically close if the handle indicates we are not yet	 * closed.  The best we can do is detect this and report it.	 */	if (db != NULL) {		/* If this error occurs, this object was never closed. */		report_errcall(jnienv, errcall, errpfx,			       "Db.finalize: open Db object destroyed");	}	/* Shouldn't see this object again, but just in case */	set_private_dbobj(jnienv, name_DB, jthis, 0);	set_private_info(jnienv, name_DB, jthis, 0);	dbji_destroy(dbinfo, jnienv);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -