コード例 #1
0
ファイル: ejdbtest3.c プロジェクト: Dean-Jansen/ejdb
void testTransactions1() {
    EJCOLL *coll = ejdbcreatecoll(jb, "trans1", NULL);
    bson bs;
    bson_init(&bs);
    bson_append_string(&bs, "foo", "bar");
    bson_finish(&bs);

    bson_oid_t oid;
    CU_ASSERT_TRUE(ejdbtranbegin(coll));
    ejdbsavebson(coll, &bs, &oid);
    CU_ASSERT_TRUE(ejdbtrancommit(coll));

    bson *bres = ejdbloadbson(coll, &oid);
    CU_ASSERT_PTR_NOT_NULL(bres);
    if (bres) {
        bson_del(bres);
    }

    CU_ASSERT_TRUE(ejdbtranbegin(coll));
    ejdbsavebson(coll, &bs, &oid);
    CU_ASSERT_TRUE(ejdbtranabort(coll));

    bres = ejdbloadbson(coll, &oid);
    CU_ASSERT_PTR_NULL(bres);
    if (bres) {
        bson_del(bres);
    }

    bson_destroy(&bs);
}
コード例 #2
0
ファイル: jejdb.c プロジェクト: CowanSM/ejdb
/*
 * Class:     org_ejdb_driver_EJDBCollection
 * Method:    txControl
 * Signature: (I)Z
 */
JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_txControl (JNIEnv *env, jobject obj, jint mode) {
	EJDB* db = get_ejdb_from_object(env, obj);
	if (!ejdbisopen(db)) {
		set_error(env, 0, "EJDB not opened");
		return JNI_FALSE;
	}

	jstring colname = get_coll_name(env, obj);
	const char *cname = (*env)->GetStringUTFChars(env, colname, NULL);
	EJCOLL * coll = ejdbcreatecoll(db, cname, NULL);
	(*env)->ReleaseStringUTFChars(env, colname, cname);

	if (!coll) {
		set_ejdb_error(env, db);
		return JNI_FALSE;
	}

	bool status = false, txActive = true;

	switch (mode) {
	case org_ejdb_driver_EJDBCollection_JBTXBEGIN : 
		status = ejdbtranbegin(coll);
		break;

	case org_ejdb_driver_EJDBCollection_JBTXCOMMIT : 
		status = ejdbtrancommit(coll);
		break;

	case org_ejdb_driver_EJDBCollection_JBTXROLLBACK : 
		status = ejdbtranabort(coll);
		break;

	case org_ejdb_driver_EJDBCollection_JBTXSTATUS :
		txActive = false;
		status = ejdbtranstatus(coll, &txActive);
		break;

	default:
		set_error(env, 0, "Unexpected txControl option");
		return JNI_FALSE;
	}

	if (!status) {
		set_ejdb_error(env, db);
		return JNI_FALSE;
	}

	return txActive ? JNI_TRUE : JNI_FALSE;
};