#21
authorVyacheslav Tyutyunkov <tyutyunkov@gmail.com>
Wed, 13 Mar 2013 10:32:45 +0000 (17:32 +0700)
committerVyacheslav Tyutyunkov <tyutyunkov@gmail.com>
Wed, 13 Mar 2013 10:32:45 +0000 (17:32 +0700)
12 files changed:
jejdb/libjejdb.so [deleted file]
jejdb/src/cpp/jejdb.c [changed mode: 0644->0755]
jejdb/src/cpp/jejdb.h [changed mode: 0644->0755]
jejdb/src/cpp/org_ejdb_driver_EJDB.h
jejdb/src/cpp/org_ejdb_driver_EJDBCollection.h
jejdb/src/cpp/org_ejdb_driver_EJDBQuery.h [new file with mode: 0644]
jejdb/src/cpp/org_ejdb_driver_EJDBResultSet.h [new file with mode: 0644]
jejdb/src/java/org/ejdb/driver/EJDB.java
jejdb/src/java/org/ejdb/driver/EJDBCollection.java
jejdb/src/java/org/ejdb/driver/EJDBException.java [new file with mode: 0644]
jejdb/src/java/org/ejdb/driver/EJDBQuery.java [new file with mode: 0644]
jejdb/src/java/org/ejdb/driver/EJDBResultSet.java [new file with mode: 0644]

diff --git a/jejdb/libjejdb.so b/jejdb/libjejdb.so
deleted file mode 100755 (executable)
index f9ed1a6..0000000
Binary files a/jejdb/libjejdb.so and /dev/null differ
old mode 100644 (file)
new mode 100755 (executable)
index 8fc9dcb..2bd57e6
 #include <stdio.h>
 #include "jejdb.h"
 
+static void set_error(JNIEnv * env, int code, const char *message) {
+       jclass eclazz = (*env)->FindClass(env, "org/ejdb/driver/EJDBException");
+       jmethodID ecid = (*env)->GetMethodID(env, eclazz, "<init>", "(ILjava/lang/String;)V");
+       jstring jmessage = (*env)->NewStringUTF(env, message);
+       jobject exception = (*env)->NewObject(env, eclazz, ecid, (jint)code, jmessage);
+
+       (*env)->Throw(env, exception);
+};
+
+static void set_ejdb_error(JNIEnv * env, EJDB *db) {
+       int code = ejdbecode(db);
+       set_error(env, code, ejdberrmsg(code));
+};
+
 /*
- * Class:     org_ejdb_driver_EJDB
- * Method:    openDB
- * Signature: (Ljava/lang/String;I)V
- */
+* Class:     org_ejdb_driver_EJDB
+* Method:    openDB
+* Signature: (Ljava/lang/String;I)V
+*/
 JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDB_openDB
-  (JNIEnv *env, jobject obj, jstring path, jint mode) {
-    EJDB* db = ejdbnew();
+       (JNIEnv *env, jobject obj, jstring path, jint mode) {
+               EJDB* db = ejdbnew();
+
+               if (!db) {
+                       set_error(env, 0, "Could not create EJDB");
+                       return;
+               }
+
+               const char *dbpath;
+               dbpath = (*env)->GetStringUTFChars(env, path, NULL);
+               bool status = ejdbopen(db, dbpath, mode);
+               (*env)->ReleaseStringUTFChars(env, path, dbpath);
 
-    const char *dbpath;
-    dbpath = (*env)->GetStringUTFChars(env, path, NULL);
-    ejdbopen(db, dbpath, mode);
-    (*env)->ReleaseStringUTFChars(env, path, dbpath);
+               if (!status) {
+                       set_ejdb_error(env, db);
+                       return;
+               }
 
-    jclass clazz = (*env)->GetObjectClass(env, obj);
-    jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
-    (*env)->SetLongField(env, obj, dbpID, (jlong)db);
+               jclass clazz = (*env)->GetObjectClass(env, obj);
+               jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
+               (*env)->SetLongField(env, obj, dbpID, (jlong)db);
 
-    return;
+               return;
 };
 
 /*
- * Class:     org_ejdb_driver_EJDB
- * Method:    isOpenDB
- * Signature: ()Z
- */
+* Class:     org_ejdb_driver_EJDB
+* Method:    isOpenDB
+* Signature: ()Z
+*/
 JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDB_isOpenDB
-  (JNIEnv *env, jobject obj) {
-    jclass clazz = (*env)->GetObjectClass(env, obj);
-    jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
-    jlong dbp = (*env)->GetLongField(env, obj, dbpID);
+       (JNIEnv *env, jobject obj) {
+               jclass clazz = (*env)->GetObjectClass(env, obj);
+               jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, obj, dbpID);
 
-    // todo: check null?
-    EJDB* db = (EJDB*)dbp;
-
-    return ejdbisopen(db);
+               return ejdbisopen((EJDB*)dbp);
 };
 
 /*
- * Class:     org_ejdb_driver_EJDB
- * Method:    closeDB
- * Signature: ()V
- */
+* Class:     org_ejdb_driver_EJDB
+* Method:    closeDB
+* Signature: ()V
+*/
 JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDB_closeDB
-  (JNIEnv *env, jobject obj) {
-    jclass clazz = (*env)->GetObjectClass(env, obj);
-    jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
-    jlong dbp = (*env)->GetLongField(env, obj, dbpID);
+       (JNIEnv *env, jobject obj) {
+               jclass clazz = (*env)->GetObjectClass(env, obj);
+               jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, obj, dbpID);
 
-    // todo: check null?
-    EJDB* db = (EJDB*)dbp;
+               EJDB* db = (EJDB*)dbp;
 
-    ejdbclose(db);
-    ejdbdel(db);
+               if (!ejdbclose(db)) {
+                       set_ejdb_error(env, db);
+               }
+               ejdbdel(db);
 };
 
 /*
- * Class:     org_ejdb_driver_EJDB
- * Method:    syncDB
- * Signature: ()Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDB_syncDB
-  (JNIEnv *env, jobject obj) {
-    jclass clazz = (*env)->GetObjectClass(env, obj);
-    jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
-    jlong dbp = (*env)->GetLongField(env, obj, dbpID);
-
-    // todo: check null?
-    EJDB* db = (EJDB*)dbp;
-
-    return ejdbsyncdb(db);
+* Class:     org_ejdb_driver_EJDB
+* Method:    syncDB
+* Signature: ()V
+*/
+JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDB_syncDB
+       (JNIEnv *env, jobject obj) {
+               jclass clazz = (*env)->GetObjectClass(env, obj);
+               jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, obj, dbpID);
+
+               EJDB* db = (EJDB*)dbp;
+
+               if (!ejdbsyncdb(db)) {
+                       set_ejdb_error(env, db);
+               }
 };
 
 /*
- * Class:     org_ejdb_driver_EJDBCollection
- * Method:    ensureDB
- * Signature: (Ljava/lang/Object;)Z
- */
+* Class:     org_ejdb_driver_EJDBCollection
+* Method:    ensureDB
+* Signature: (Ljava/lang/Object;)Z
+*/
 JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_ensureDB
-  (JNIEnv *env, jobject obj, jobject opts) {
-    jclass clazz = (*env)->GetObjectClass(env, obj);
-    jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
-    jlong dbp = (*env)->GetLongField(env, obj, dbpID);
-
-    // todo: check null?
-    EJDB* db = (EJDB*)dbp;
+       (JNIEnv *env, jobject obj, jobject opts) {
+               jclass clazz = (*env)->GetObjectClass(env, obj);
+               jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, obj, dbpID);
 
-    jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
-    jstring colname = (*env)->GetObjectField(env, obj, colnameID);
+               // todo: check null?
+               EJDB* db = (EJDB*)dbp;
 
-    EJCOLLOPTS jcopts;
-    memset(&jcopts, 0, sizeof (jcopts));
+               jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
+               jstring colname = (*env)->GetObjectField(env, obj, colnameID);
 
-    const char *cname;
-    cname = (*env)->GetStringUTFChars(env, colname, NULL);
+               EJCOLLOPTS jcopts;
+               memset(&jcopts, 0, sizeof (jcopts));
 
-    EJCOLL *coll = ejdbcreatecoll(db, cname, &jcopts);
+               const char *cname = (*env)->GetStringUTFChars(env, colname, NULL);
+               EJCOLL *coll = ejdbcreatecoll(db, cname, &jcopts);
+               (*env)->ReleaseStringUTFChars(env, colname, cname);
 
-    (*env)->ReleaseStringUTFChars(env, colname, cname);
-
-    return !coll ? JNI_FALSE : JNI_TRUE;
+               return !coll ? JNI_FALSE : JNI_TRUE;
 };
 
 
 /*
- * Class:     org_ejdb_driver_EJDBCollection
- * Method:    dropDB
- * Signature: (Z)Z
- */
+* Class:     org_ejdb_driver_EJDBCollection
+* Method:    dropDB
+* Signature: (Z)Z
+*/
 JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_dropDB
-  (JNIEnv *env, jobject obj, jboolean prune) {
-    jclass clazz = (*env)->GetObjectClass(env, obj);
-    jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
-    jlong dbp = (*env)->GetLongField(env, obj, dbpID);
+       (JNIEnv *env, jobject obj, jboolean prune) {
+               jclass clazz = (*env)->GetObjectClass(env, obj);
+               jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, obj, dbpID);
 
-    // todo: check null?
-    EJDB* db = (EJDB*)dbp;
+               // todo: check null?
+               EJDB* db = (EJDB*)dbp;
 
-    jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
-    jstring colname = (*env)->GetObjectField(env, obj, colnameID);
+               jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
+               jstring colname = (*env)->GetObjectField(env, obj, colnameID);
 
-    const char *cname;
-    cname = (*env)->GetStringUTFChars(env, colname, NULL);
+               const char *cname;
+               cname = (*env)->GetStringUTFChars(env, colname, NULL);
 
-    bool status = ejdbrmcoll(db, cname, (prune == JNI_TRUE));
+               bool status = ejdbrmcoll(db, cname, (prune == JNI_TRUE));
 
-    (*env)->ReleaseStringUTFChars(env, colname, cname);
+               (*env)->ReleaseStringUTFChars(env, colname, cname);
 
-    return status ? JNI_TRUE : JNI_FALSE;
+               return status ? JNI_TRUE : JNI_FALSE;
 };
 
 /*
- * Class:     org_ejdb_driver_EJDBCollection
- * Method:    syncDB
- * Signature: ()Z
- */
-JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_syncDB
-  (JNIEnv *env, jobject obj) {
-    jclass clazz = (*env)->GetObjectClass(env, obj);
-    jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
-    jlong dbp = (*env)->GetLongField(env, obj, dbpID);
-
-    // todo: check null?
-    EJDB* db = (EJDB*)dbp;
-
-    jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
-    jstring colname = (*env)->GetObjectField(env, obj, colnameID);
-
-    const char *cname;
-    cname = (*env)->GetStringUTFChars(env, colname, NULL);
-
-    EJCOLL * coll = ejdbgetcoll(db, cname);
-    bool status = ejdbsyncoll(coll);
-
-    (*env)->ReleaseStringUTFChars(env, colname, cname);
-
-    return status ? JNI_TRUE : JNI_FALSE;
+* Class:     org_ejdb_driver_EJDBCollection
+* Method:    syncDB
+* Signature: ()V
+*/
+JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDBCollection_syncDB
+       (JNIEnv *env, jobject obj) {
+               jclass clazz = (*env)->GetObjectClass(env, obj);
+               jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, obj, dbpID);
+
+               EJDB* db = (EJDB*)dbp;
+
+               jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
+               jstring colname = (*env)->GetObjectField(env, obj, colnameID);
+
+               const char *cname = (*env)->GetStringUTFChars(env, colname, NULL);
+               EJCOLL *coll = ejdbgetcoll(db, cname);
+               (*env)->ReleaseStringUTFChars(env, colname, cname);
+               
+               if (!coll) {
+                       set_error(env, 0, "Collection not found");
+                       return;
+               }
+
+               if (!ejdbsyncoll(coll)) {
+                       set_ejdb_error(env, db);
+               }
 };
 
 /*
- * Class:     org_ejdb_driver_EJDBCollection
- * Method:    loadDB
- * Signature: ([B)Ljava/lang/Object;
- */
+* Class:     org_ejdb_driver_EJDBCollection
+* Method:    loadDB
+* Signature: ([B)Ljava/lang/Object;
+*/
 JNIEXPORT jobject JNICALL Java_org_ejdb_driver_EJDBCollection_loadDB
-  (JNIEnv *env, jobject obj, jbyteArray oidArray) {
-    jclass clazz = (*env)->GetObjectClass(env, obj);
-    jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
-    jlong dbp = (*env)->GetLongField(env, obj, dbpID);
-
-    // todo: check null?
-    EJDB* db = (EJDB*)dbp;
-
-    jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
-    jstring colname = (*env)->GetObjectField(env, obj, colnameID);
-
-    const char *cname = (*env)->GetStringUTFChars(env, colname, NULL);
-    bson_oid_t *oid = (void*)(*env)->GetByteArrayElements(env, oidArray, NULL);
-
-    // todo: check
-    EJCOLL * coll = ejdbgetcoll(db, cname);
-
-    bson* bson = ejdbloadbson(coll, oid);
-
-    (*env)->ReleaseStringUTFChars(env, colname, cname);
-    (*env)->ReleaseByteArrayElements(env, oidArray, (jbyte*)oid, 0);
-
-    if (!bson) {
-        return NULL;
-    }
-        jmethodID method = (*env)->GetStaticMethodID(env, clazz, "handleBSONData", "(Ljava/nio/ByteBuffer;)Ljava/lang/Object;");
-        // todo: checks
-
-        jobject buff = (*env)->NewDirectByteBuffer(env, (void*)bson_data(bson), bson_size(bson));
-        jobject result = (*env)->CallStaticObjectMethod(env, clazz, method, buff);
-
-        (*env)->DeleteLocalRef(env, buff);
-        bson_del(bson);
-
-    return result;
+       (JNIEnv *env, jobject obj, jbyteArray oidArray) {
+               jclass clazz = (*env)->GetObjectClass(env, obj);
+               jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, obj, dbpID);
+
+               EJDB* db = (EJDB*)dbp;
+
+               jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
+               jstring colname = (*env)->GetObjectField(env, obj, colnameID);
+               const char *cname = (*env)->GetStringUTFChars(env, colname, NULL);
+               EJCOLL * coll = ejdbgetcoll(db, cname);
+               (*env)->ReleaseStringUTFChars(env, colname, cname);
+
+               if (!coll) {
+                       return NULL;
+               }
+
+               bson_oid_t *oid = (void*)(*env)->GetByteArrayElements(env, oidArray, NULL);
+               bson* bson = ejdbloadbson(coll, oid);
+               (*env)->ReleaseByteArrayElements(env, oidArray, (jbyte*)oid, 0);
+
+               if (!bson) {
+                       return NULL;
+               }
+
+               jmethodID method = (*env)->GetStaticMethodID(env, clazz, "handleBSONData", "(Ljava/nio/ByteBuffer;)Ljava/lang/Object;");
+               jobject buff = (*env)->NewDirectByteBuffer(env, (void*)bson_data(bson), bson_size(bson));
+               jobject result = (*env)->CallStaticObjectMethod(env, clazz, method, buff);
+               (*env)->DeleteLocalRef(env, buff);
+               bson_del(bson);
+
+               return result;
 }
 
 /*
- * Class:     org_ejdb_driver_EJDBCollection
- * Method:    saveDB
- * Signature: ([B)Ljava/lang/Object;
- */
+* Class:     org_ejdb_driver_EJDBCollection
+* Method:    saveDB
+* Signature: ([B)Ljava/lang/Object;
+*/
 JNIEXPORT jobject JNICALL Java_org_ejdb_driver_EJDBCollection_saveDB
-  (JNIEnv *env, jobject obj, jbyteArray objdata) {
-    jclass clazz = (*env)->GetObjectClass(env, obj);
-    jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
-    jlong dbp = (*env)->GetLongField(env, obj, dbpID);
+       (JNIEnv *env, jobject obj, jbyteArray objdata) {
+               jclass clazz = (*env)->GetObjectClass(env, obj);
+               jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, obj, dbpID);
 
-    // todo: check null?
-    EJDB* db = (EJDB*)dbp;
+               // todo: check null?
+               EJDB* db = (EJDB*)dbp;
 
-    jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
-    jstring colname = (*env)->GetObjectField(env, obj, colnameID);
+               jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
+               jstring colname = (*env)->GetObjectField(env, obj, colnameID);
 
-    const char *cname = (*env)->GetStringUTFChars(env, colname, NULL);
-    jbyte *bdata = (*env)->GetByteArrayElements(env, objdata, NULL);
-    jsize blength = (*env)->GetArrayLength(env, objdata);
+               const char *cname = (*env)->GetStringUTFChars(env, colname, NULL);
+               jbyte *bdata = (*env)->GetByteArrayElements(env, objdata, NULL);
+               jsize blength = (*env)->GetArrayLength(env, objdata);
 
-    bson_oid_t oid;
+               bson_oid_t oid;
 
-    // todo: check
-    EJCOLL * coll = ejdbgetcoll(db, cname);
+               // todo: check
+               EJCOLL * coll = ejdbgetcoll(db, cname);
 
-    bson *bson = bson_create_from_buffer(bdata, blength);
-    bool status = ejdbsavebson(coll, bson, &oid);
-    bson_del(bson);
+               bson *bson = bson_create_from_buffer(bdata, blength);
+               bool status = ejdbsavebson(coll, bson, &oid);
+               bson_del(bson);
 
-    (*env)->ReleaseStringUTFChars(env, colname, cname);
-    (*env)->ReleaseByteArrayElements(env, objdata, bdata, 0);
+               (*env)->ReleaseStringUTFChars(env, colname, cname);
+               (*env)->ReleaseByteArrayElements(env, objdata, bdata, 0);
 
 
-    if (!status) {
-        // todo: error?
-        return NULL;
-    }
+               if (!status) {
+                       // todo: error?
+                       return NULL;
+               }
 
-    jmethodID method = (*env)->GetStaticMethodID(env, clazz, "handleObjectIdData", "(Ljava/nio/ByteBuffer;)Ljava/lang/Object;");
+               jmethodID method = (*env)->GetStaticMethodID(env, clazz, "handleObjectIdData", "(Ljava/nio/ByteBuffer;)Ljava/lang/Object;");
 
-        jobject buff = (*env)->NewDirectByteBuffer(env, (void*)&oid, sizeof(oid));
-        jobject result = (*env)->CallStaticObjectMethod(env, clazz, method, buff);
+               jobject buff = (*env)->NewDirectByteBuffer(env, (void*)&oid, sizeof(oid));
+               jobject result = (*env)->CallStaticObjectMethod(env, clazz, method, buff);
 
-        (*env)->DeleteLocalRef(env, buff);
+               (*env)->DeleteLocalRef(env, buff);
 
-    return result;
+               return result;
 }
 
 /*
- * Class:     org_ejdb_driver_EJDBCollection
- * Method:    removeDB
- * Signature: ([B)Z
- */
+* Class:     org_ejdb_driver_EJDBCollection
+* Method:    removeDB
+* Signature: ([B)Z
+*/
 JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_removeDB
-  (JNIEnv *env, jobject obj, jbyteArray oidArray) {
-    jclass clazz = (*env)->GetObjectClass(env, obj);
-    jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
-    jlong dbp = (*env)->GetLongField(env, obj, dbpID);
+       (JNIEnv *env, jobject obj, jbyteArray oidArray) {
+               jclass clazz = (*env)->GetObjectClass(env, obj);
+               jfieldID dbpID = (*env)->GetFieldID(env, clazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, obj, dbpID);
 
-    // todo: check null?
-    EJDB* db = (EJDB*)dbp;
+               // todo: check null?
+               EJDB* db = (EJDB*)dbp;
 
-    jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
-    jstring colname = (*env)->GetObjectField(env, obj, colnameID);
+               jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
+               jstring colname = (*env)->GetObjectField(env, obj, colnameID);
 
-    const char *cname = (*env)->GetStringUTFChars(env, colname, NULL);
-    bson_oid_t *oid = (void*)(*env)->GetByteArrayElements(env, oidArray, NULL);
+               const char *cname = (*env)->GetStringUTFChars(env, colname, NULL);
+               bson_oid_t *oid = (void*)(*env)->GetByteArrayElements(env, oidArray, NULL);
 
-    // todo: check
-    EJCOLL * coll = ejdbgetcoll(db, cname);
+               // todo: check
+               EJCOLL * coll = ejdbgetcoll(db, cname);
 
-    bool status = ejdbrmbson(coll, oid);
+               bool status = ejdbrmbson(coll, oid);
 
-    (*env)->ReleaseStringUTFChars(env, colname, cname);
-    (*env)->ReleaseByteArrayElements(env, oidArray, (jbyte*)oid, 0);
+               (*env)->ReleaseStringUTFChars(env, colname, cname);
+               (*env)->ReleaseByteArrayElements(env, oidArray, (jbyte*)oid, 0);
 
-    return status ? JNI_TRUE : JNI_FALSE;
+               return status ? JNI_TRUE : JNI_FALSE;
 }
+
+/*
+* Class:     org_ejdb_driver_EJDBQuery
+* Method:    createDB
+* Signature: (Lorg/bson/BSONObject;)V
+*/
+JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDBQuery_createDB
+       (JNIEnv *env, jobject obj, jobject qobj) {
+               // todo:
+               return;
+};
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index a833b91..a2692d3
@@ -2,9 +2,14 @@
 #define JEJDB_H
 
 #include <ejdb_private.h>
+#ifdef _WIN32
+#undef __cplusplus
+#endif
 
 #include "org_ejdb_driver_EJDBDriver.h"
 #include "org_ejdb_driver_EJDB.h"
 #include "org_ejdb_driver_EJDBCollection.h"
+#include "org_ejdb_driver_EJDBQuery.h"
+#include "org_ejdb_driver_EJDBResultSet.h"
 
 #endif
\ No newline at end of file
index c9e5599..3061fee 100644 (file)
@@ -50,9 +50,9 @@ JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDB_closeDB
 /*
  * Class:     org_ejdb_driver_EJDB
  * Method:    syncDB
- * Signature: ()Z
+ * Signature: ()V
  */
-JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDB_syncDB
+JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDB_syncDB
   (JNIEnv *, jobject);
 
 #ifdef __cplusplus
index ca06a68..66effe9 100644 (file)
@@ -26,9 +26,9 @@ JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_dropDB
 /*
  * Class:     org_ejdb_driver_EJDBCollection
  * Method:    syncDB
- * Signature: ()Z
+ * Signature: ()V
  */
-JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_syncDB
+JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDBCollection_syncDB
   (JNIEnv *, jobject);
 
 /*
diff --git a/jejdb/src/cpp/org_ejdb_driver_EJDBQuery.h b/jejdb/src/cpp/org_ejdb_driver_EJDBQuery.h
new file mode 100644 (file)
index 0000000..d10b7d9
--- /dev/null
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ejdb_driver_EJDBQuery */
+
+#ifndef _Included_org_ejdb_driver_EJDBQuery
+#define _Included_org_ejdb_driver_EJDBQuery
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     org_ejdb_driver_EJDBQuery
+ * Method:    createDB
+ * Signature: (Lorg/bson/BSONObject;)V
+ */
+JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDBQuery_createDB
+  (JNIEnv *, jobject, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/jejdb/src/cpp/org_ejdb_driver_EJDBResultSet.h b/jejdb/src/cpp/org_ejdb_driver_EJDBResultSet.h
new file mode 100644 (file)
index 0000000..8017d0a
--- /dev/null
@@ -0,0 +1,13 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_ejdb_driver_EJDBResultSet */
+
+#ifndef _Included_org_ejdb_driver_EJDBResultSet
+#define _Included_org_ejdb_driver_EJDBResultSet
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
index 2d4d1c7..31cfe8f 100644 (file)
@@ -20,11 +20,10 @@ public class EJDB {
         System.loadLibrary("jejdb");
     }
 
-    // todo: rewrite impls - use `this.db` from c code
     protected native void openDB(String path, int mode);
     protected native boolean isOpenDB();
     protected native void closeDB();
-    protected native boolean syncDB();
+    protected native void syncDB();
 
     private long dbPointer;
 
@@ -46,8 +45,8 @@ public class EJDB {
         this.closeDB();
     }
 
-    public boolean sync() {
-        return this.syncDB();
+    public void sync() {
+        this.syncDB();
     }
 
 
index d7dc078..313381d 100644 (file)
@@ -25,7 +25,7 @@ public class EJDBCollection {
     // todo: bson object for options
     protected native boolean ensureDB(Object opts);
     protected native boolean dropDB(boolean prune);
-    protected native boolean syncDB();
+    protected native void syncDB();
 
     protected native Object loadDB(byte[] oid);
     protected native Object saveDB(byte[] objdata);
@@ -47,8 +47,8 @@ public class EJDBCollection {
         return this.dropDB(prune);
     }
 
-    public boolean sync() {
-        return this.syncDB();
+    public void sync() {
+        this.syncDB();
     }
 
     public BSONObject load(ObjectId oid) {
@@ -73,6 +73,12 @@ public class EJDBCollection {
         return this.removeDB(oid.toByteArray());
     }
 
+
+    public EJDBQuery createQuery(BSONObject query) {
+        return new EJDBQuery(dbPointer, cname, query);
+    }
+
+    ////////////////////////////////////////////////////
     private static Object handleBSONData(ByteBuffer data) {
         byte[] tmp = new byte[data.limit()];
         data.get(tmp);
diff --git a/jejdb/src/java/org/ejdb/driver/EJDBException.java b/jejdb/src/java/org/ejdb/driver/EJDBException.java
new file mode 100644 (file)
index 0000000..47a1b5a
--- /dev/null
@@ -0,0 +1,18 @@
+package org.ejdb.driver;
+
+/**
+ * @author Tyutyunkov Vyacheslav (tve@softmotions.com)
+ * @version $Id$
+ */
+public class EJDBException extends Exception {
+    private int code;
+
+    public EJDBException(int code, String message) {
+        super(message);
+        this.code = code;
+    }
+
+    public int getCode() {
+        return code;
+    }
+}
\ No newline at end of file
diff --git a/jejdb/src/java/org/ejdb/driver/EJDBQuery.java b/jejdb/src/java/org/ejdb/driver/EJDBQuery.java
new file mode 100644 (file)
index 0000000..a39cee9
--- /dev/null
@@ -0,0 +1,24 @@
+package org.ejdb.driver;
+
+import org.bson.BSONObject;
+
+/**
+ * @author Tyutyunkov Vyacheslav (tve@softmotions.com)
+ * @version $Id$
+ */
+public class EJDBQuery {
+    private long dbPointer;
+    private String cname;
+
+    private BSONObject query;
+
+    EJDBQuery(long dbPointer, String cname, BSONObject query) {
+        this.dbPointer = dbPointer;
+        this.cname = cname;
+        this.query = query;
+
+        this.createDB(null);
+    }
+
+    protected native void createDB(BSONObject query);
+}
diff --git a/jejdb/src/java/org/ejdb/driver/EJDBResultSet.java b/jejdb/src/java/org/ejdb/driver/EJDBResultSet.java
new file mode 100644 (file)
index 0000000..985d839
--- /dev/null
@@ -0,0 +1,10 @@
+package org.ejdb.driver;
+
+/**
+ * @author Tyutyunkov Vyacheslav (tve@softmotions.com)
+ * @version $Id$
+ */
+public class EJDBResultSet {
+    // todo:
+
+}