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); }
/* * 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; };