#21
authorVyacheslav Tyutyunkov <tyutyunkov@gmail.com>
Thu, 14 Mar 2013 10:41:01 +0000 (17:41 +0700)
committerVyacheslav Tyutyunkov <tyutyunkov@gmail.com>
Thu, 14 Mar 2013 10:41:01 +0000 (17:41 +0700)
jejdb/src/cpp/jejdb.c
jejdb/src/cpp/org_ejdb_driver_EJDBCollection.h
jejdb/src/cpp/org_ejdb_driver_EJDBQuery.h [changed mode: 0644->0755]
jejdb/src/java/org/ejdb/driver/EJDB.java
jejdb/src/java/org/ejdb/driver/EJDBCollection.java
jejdb/src/java/org/ejdb/driver/EJDBQuery.java

index 2bd57e6..3a923a9 100755 (executable)
@@ -73,10 +73,16 @@ JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDB_closeDB
 
                EJDB* db = (EJDB*)dbp;
 
-               if (!ejdbclose(db)) {
-                       set_ejdb_error(env, db);
+               if (ejdbisopen(db)) {
+                       if (!ejdbclose(db)) {
+                               set_ejdb_error(env, db);
+                       }
+                       if (NULL != db) {
+                               ejdbdel(db);
+                       }
                }
-               ejdbdel(db);
+
+               (*env)->SetLongField(env, obj, dbpID, (jlong)NULL);
 };
 
 /*
@@ -91,6 +97,10 @@ JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDB_syncDB
                jlong dbp = (*env)->GetLongField(env, obj, dbpID);
 
                EJDB* db = (EJDB*)dbp;
+               if (!ejdbisopen(db)) {
+                       set_error(env, 0, "EJDB not opened");
+                       return;
+               }
 
                if (!ejdbsyncdb(db)) {
                        set_ejdb_error(env, db);
@@ -100,56 +110,73 @@ JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDB_syncDB
 /*
 * Class:     org_ejdb_driver_EJDBCollection
 * Method:    ensureDB
-* Signature: (Ljava/lang/Object;)Z
+* Signature: (Ljava/lang/Object;)V
 */
-JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_ensureDB
+JNIEXPORT void 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);
+               jfieldID dboID = (*env)->GetFieldID(env, clazz, "db", "Lorg/ejdb/driver/EJDB;");
+               jobject dbo = (*env)->GetObjectField(env, obj, dboID);
+               jclass dclazz = (*env)->GetObjectClass(env, dbo);
+               jfieldID dbpID = (*env)->GetFieldID(env, dclazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, dbo, dbpID);
 
-               // todo: check null?
                EJDB* db = (EJDB*)dbp;
+               if (!ejdbisopen(db)) {
+                       set_error(env, 0, "EJDB not opened");
+                       return;
+               }
 
                jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
                jstring colname = (*env)->GetObjectField(env, obj, colnameID);
 
                EJCOLLOPTS jcopts;
                memset(&jcopts, 0, sizeof (jcopts));
+               // todo: open options
 
                const char *cname = (*env)->GetStringUTFChars(env, colname, NULL);
                EJCOLL *coll = ejdbcreatecoll(db, cname, &jcopts);
                (*env)->ReleaseStringUTFChars(env, colname, cname);
 
-               return !coll ? JNI_FALSE : JNI_TRUE;
+               if (!coll) {
+                       set_ejdb_error(env, db);
+                       return;
+               }
 };
 
 
 /*
 * Class:     org_ejdb_driver_EJDBCollection
 * Method:    dropDB
-* Signature: (Z)Z
+* Signature: (Z)V
 */
-JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_dropDB
+JNIEXPORT void 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);
+               jfieldID dboID = (*env)->GetFieldID(env, clazz, "db", "Lorg/ejdb/driver/EJDB;");
+               jobject dbo = (*env)->GetObjectField(env, obj, dboID);
+               jclass dclazz = (*env)->GetObjectClass(env, dbo);
+               jfieldID dbpID = (*env)->GetFieldID(env, dclazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, dbo, dbpID);
 
-               // todo: check null?
                EJDB* db = (EJDB*)dbp;
+               if (!ejdbisopen(db)) {
+                       set_error(env, 0, "EJDB not opened");
+                       return;
+               }
 
                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);
-
                bool status = ejdbrmcoll(db, cname, (prune == JNI_TRUE));
-
                (*env)->ReleaseStringUTFChars(env, colname, cname);
 
-               return status ? JNI_TRUE : JNI_FALSE;
+               if (!status) {
+                       set_ejdb_error(env, db);
+                       return;
+               }
 };
 
 /*
@@ -160,10 +187,17 @@ JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_dropDB
 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);
+               jfieldID dboID = (*env)->GetFieldID(env, clazz, "db", "Lorg/ejdb/driver/EJDB;");
+               jobject dbo = (*env)->GetObjectField(env, obj, dboID);
+               jclass dclazz = (*env)->GetObjectClass(env, dbo);
+               jfieldID dbpID = (*env)->GetFieldID(env, dclazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, dbo, dbpID);
 
                EJDB* db = (EJDB*)dbp;
+               if (!ejdbisopen(db)) {
+                       set_error(env, 0, "EJDB not opened");
+                       return;
+               }
 
                jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
                jstring colname = (*env)->GetObjectField(env, obj, colnameID);
@@ -171,7 +205,7 @@ JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDBCollection_syncDB
                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;
@@ -190,10 +224,17 @@ JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDBCollection_syncDB
 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);
+               jfieldID dboID = (*env)->GetFieldID(env, clazz, "db", "Lorg/ejdb/driver/EJDB;");
+               jobject dbo = (*env)->GetObjectField(env, obj, dboID);
+               jclass dclazz = (*env)->GetObjectClass(env, dbo);
+               jfieldID dbpID = (*env)->GetFieldID(env, dclazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, dbo, dbpID);
 
                EJDB* db = (EJDB*)dbp;
+               if (!ejdbisopen(db)) {
+                       set_error(env, 0, "EJDB not opened");
+                       return NULL;
+               }
 
                jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
                jstring colname = (*env)->GetObjectField(env, obj, colnameID);
@@ -230,42 +271,47 @@ JNIEXPORT jobject JNICALL Java_org_ejdb_driver_EJDBCollection_loadDB
 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);
+               jfieldID dboID = (*env)->GetFieldID(env, clazz, "db", "Lorg/ejdb/driver/EJDB;");
+               jobject dbo = (*env)->GetObjectField(env, obj, dboID);
+               jclass dclazz = (*env)->GetObjectClass(env, dbo);
+               jfieldID dbpID = (*env)->GetFieldID(env, dclazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, dbo, dbpID);
 
-               // todo: check null?
                EJDB* db = (EJDB*)dbp;
+               if (!ejdbisopen(db)) {
+                       set_error(env, 0, "EJDB not opened");
+                       return NULL;
+               }
 
                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);
+               // todo: check
+               EJCOLL * coll = ejdbcreatecoll(db, cname, NULL);
+               (*env)->ReleaseStringUTFChars(env, colname, cname);
 
-               bson_oid_t oid;
+               if (!coll) {
+                       set_ejdb_error(env, db);
+                       return NULL;
+               }
 
-               // todo: check
-               EJCOLL * coll = ejdbgetcoll(db, cname);
+               bson_oid_t oid;
 
+               jbyte *bdata = (*env)->GetByteArrayElements(env, objdata, NULL);
+               jsize blength = (*env)->GetArrayLength(env, objdata);
                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);
 
-
                if (!status) {
-                       // todo: error?
+                       set_ejdb_error(env, db);
                        return NULL;
                }
 
                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);
-
                (*env)->DeleteLocalRef(env, buff);
 
                return result;
@@ -274,41 +320,162 @@ JNIEXPORT jobject JNICALL Java_org_ejdb_driver_EJDBCollection_saveDB
 /*
 * Class:     org_ejdb_driver_EJDBCollection
 * Method:    removeDB
-* Signature: ([B)Z
+* Signature: ([B)V
 */
-JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_removeDB
+JNIEXPORT void 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);
+               jfieldID dboID = (*env)->GetFieldID(env, clazz, "db", "Lorg/ejdb/driver/EJDB;");
+               jobject dbo = (*env)->GetObjectField(env, obj, dboID);
+               jclass dclazz = (*env)->GetObjectClass(env, dbo);
+               jfieldID dbpID = (*env)->GetFieldID(env, dclazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, dbo, dbpID);
 
-               // todo: check null?
                EJDB* db = (EJDB*)dbp;
+               if (!ejdbisopen(db)) {
+                       set_error(env, 0, "EJDB not opened");
+                       return;
+               }
 
                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);
+               (*env)->ReleaseStringUTFChars(env, colname, cname);
+               
+               if (!coll) {
+                       return;
+               }
 
+               bson_oid_t *oid = (void*)(*env)->GetByteArrayElements(env, oidArray, NULL);
                bool status = ejdbrmbson(coll, oid);
-
-               (*env)->ReleaseStringUTFChars(env, colname, cname);
                (*env)->ReleaseByteArrayElements(env, oidArray, (jbyte*)oid, 0);
 
-               return status ? JNI_TRUE : JNI_FALSE;
+               if (!status) {
+                       set_ejdb_error(env, db);
+                       return;
+               }
 }
 
 /*
-* Class:     org_ejdb_driver_EJDBQuery
-* Method:    createDB
-* Signature: (Lorg/bson/BSONObject;)V
+* Class:     org_ejdb_driver_EJDBCollection
+* Method:    setIndexDB
+* Signature: (Ljava/lang/String;I)V
 */
+JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDBCollection_setIndexDB
+       (JNIEnv *env, jobject obj, jstring pathstr, jint flags) {
+               jclass clazz = (*env)->GetObjectClass(env, obj);
+               jfieldID colnameID = (*env)->GetFieldID(env, clazz, "cname", "Ljava/lang/String;");
+               jstring colname = (*env)->GetObjectField(env, obj, colnameID);
+               jfieldID dboID = (*env)->GetFieldID(env, clazz, "db", "Lorg/ejdb/driver/EJDB;");
+               jobject dbo = (*env)->GetObjectField(env, obj, dboID);
+               jclass dclazz = (*env)->GetObjectClass(env, dbo);
+               jfieldID dbpID = (*env)->GetFieldID(env, dclazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, dbo, dbpID);
+
+               EJDB* db = (EJDB*)dbp;
+               if (!ejdbisopen(db)) {
+                       set_error(env, 0, "EJDB not opened");
+                       return;
+               }
+
+               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;
+               }
+
+               const char * path = (*env)->GetStringUTFChars(env, pathstr, NULL);
+               bool status = ejdbsetindex(coll, path, flags);
+               (*env)->ReleaseStringUTFChars(env, pathstr, path);
+
+               if (!status) {
+                       set_ejdb_error(env, db);
+                       return;
+               }
+};
+
+/*
+ * Class:     org_ejdb_driver_EJDBQuery
+ * Method:    createDB
+ * Signature: (Lorg/bson/BSONObject;[Lorg/bson/BSONObject;Lorg/bson/BSONObject;)V
+ */
 JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDBQuery_createDB
-       (JNIEnv *env, jobject obj, jobject qobj) {
-               // todo:
+       (JNIEnv *env, jobject obj, jobject qobj, jobjectArray qorarrobj, jobject hobj) {
+               jclass clazz = (*env)->GetObjectClass(env, obj);
+               jfieldID coID = (*env)->GetFieldID(env, clazz, "coll", "Lorg/ejdb/driver/EJDBCollection;");
+               jobject collobj = (*env)->GetObjectField(env, obj, coID);
+               jclass cclazz = (*env)->GetObjectClass(env, collobj);
+               jfieldID colnameID = (*env)->GetFieldID(env, cclazz, "cname", "Ljava/lang/String;");
+               jstring colname = (*env)->GetObjectField(env, collobj, colnameID);
+               jfieldID dboID = (*env)->GetFieldID(env, cclazz, "db", "Lorg/ejdb/driver/EJDB;");
+               jobject dbo = (*env)->GetObjectField(env, collobj, dboID);
+               jclass dclazz = (*env)->GetObjectClass(env, dbo);
+               jfieldID dbpID = (*env)->GetFieldID(env, dclazz, "dbPointer", "J");
+               jlong dbp = (*env)->GetLongField(env, dbo, dbpID);
+
+               jclass jBSONClazz = (*env)->FindClass(env, "org/bson/BSON");
+               jmethodID encodeMethodID = (*env)->GetStaticMethodID(env, jBSONClazz, "encode", "(Lorg/bson/BSONObject;)[B");
+
+               jbyteArray qobjBA = (*env)->CallStaticObjectMethod(env, jBSONClazz, encodeMethodID, qobj);
+               jbyte *bdata = (*env)->GetByteArrayElements(env, qobjBA, NULL);
+               jsize blength = (*env)->GetArrayLength(env, qobjBA);
+               bson *bson = bson_create_from_buffer(bdata, blength);
+               bson_print(stdout, bson);
+               printf("!!!!!\n\n\n");
+               bson_del(bson);
+               (*env)->ReleaseByteArrayElements(env, qobjBA, bdata, 0);
+
+
+
+
+               return ;
+
+               // TODO: parse parameters
+
+
+
+               EJDB* db = (EJDB*)dbp;
+               if (!ejdbisopen(db)) {
+                       set_error(env, 0, "EJDB not opened");
+                       return;
+               }
+
+               const char *cname = (*env)->GetStringUTFChars(env, colname, NULL);
+               EJCOLL * coll = ejdbgetcoll(db, cname);
+               (*env)->ReleaseStringUTFChars(env, colname, cname);
+
+               if (!coll) {
+                       // TODO: check upsert
+               }
+
+
+
+               // TODO:
                return;
-};
\ No newline at end of file
+};
+
+/*
+ * Class:     org_ejdb_driver_EJDBQuery
+ * Method:    executeDB
+ * Signature: ()Ljava/lang/Object;
+ */
+JNIEXPORT jobject JNICALL Java_org_ejdb_driver_EJDBQuery_executeDB
+  (JNIEnv *env, jobject obj) {
+         // TODO:
+         return NULL;
+};
+
+/*
+ * Class:     org_ejdb_driver_EJDBQuery
+ * Method:    closeDB
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDBQuery_closeDB
+  (JNIEnv *env, jobject obj) {
+         // TODO:
+         return;
+};
index 66effe9..940593b 100644 (file)
@@ -7,20 +7,36 @@
 #ifdef __cplusplus
 extern "C" {
 #endif
+#undef org_ejdb_driver_EJDBCollection_JBIDXDROP
+#define org_ejdb_driver_EJDBCollection_JBIDXDROP 1L
+#undef org_ejdb_driver_EJDBCollection_JBIDXDROPALL
+#define org_ejdb_driver_EJDBCollection_JBIDXDROPALL 2L
+#undef org_ejdb_driver_EJDBCollection_JBIDXOP
+#define org_ejdb_driver_EJDBCollection_JBIDXOP 4L
+#undef org_ejdb_driver_EJDBCollection_JBIDXREBLD
+#define org_ejdb_driver_EJDBCollection_JBIDXREBLD 8L
+#undef org_ejdb_driver_EJDBCollection_JBIDXNUM
+#define org_ejdb_driver_EJDBCollection_JBIDXNUM 16L
+#undef org_ejdb_driver_EJDBCollection_JBIDXSTR
+#define org_ejdb_driver_EJDBCollection_JBIDXSTR 32L
+#undef org_ejdb_driver_EJDBCollection_JBIDXARR
+#define org_ejdb_driver_EJDBCollection_JBIDXARR 64L
+#undef org_ejdb_driver_EJDBCollection_JBIDXISTR
+#define org_ejdb_driver_EJDBCollection_JBIDXISTR 128L
 /*
  * Class:     org_ejdb_driver_EJDBCollection
  * Method:    ensureDB
- * Signature: (Ljava/lang/Object;)Z
+ * Signature: (Ljava/lang/Object;)V
  */
-JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_ensureDB
+JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDBCollection_ensureDB
   (JNIEnv *, jobject, jobject);
 
 /*
  * Class:     org_ejdb_driver_EJDBCollection
  * Method:    dropDB
- * Signature: (Z)Z
+ * Signature: (Z)V
  */
-JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_dropDB
+JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDBCollection_dropDB
   (JNIEnv *, jobject, jboolean);
 
 /*
@@ -50,11 +66,19 @@ JNIEXPORT jobject JNICALL Java_org_ejdb_driver_EJDBCollection_saveDB
 /*
  * Class:     org_ejdb_driver_EJDBCollection
  * Method:    removeDB
- * Signature: ([B)Z
+ * Signature: ([B)V
  */
-JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_removeDB
+JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDBCollection_removeDB
   (JNIEnv *, jobject, jbyteArray);
 
+/*
+ * Class:     org_ejdb_driver_EJDBCollection
+ * Method:    setIndexDB
+ * Signature: (Ljava/lang/String;I)V
+ */
+JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDBCollection_setIndexDB
+  (JNIEnv *, jobject, jstring, jint);
+
 #ifdef __cplusplus
 }
 #endif
old mode 100644 (file)
new mode 100755 (executable)
index d10b7d9..cec7811
@@ -10,10 +10,26 @@ extern "C" {
 /*
  * Class:     org_ejdb_driver_EJDBQuery
  * Method:    createDB
- * Signature: (Lorg/bson/BSONObject;)V
+ * Signature: (Lorg/bson/BSONObject;[Lorg/bson/BSONObject;Lorg/bson/BSONObject;)V
  */
 JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDBQuery_createDB
-  (JNIEnv *, jobject, jobject);
+  (JNIEnv *, jobject, jobject, jobjectArray, jobject);
+
+/*
+ * Class:     org_ejdb_driver_EJDBQuery
+ * Method:    executeDB
+ * Signature: ()Ljava/lang/Object;
+ */
+JNIEXPORT jobject JNICALL Java_org_ejdb_driver_EJDBQuery_executeDB
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     org_ejdb_driver_EJDBQuery
+ * Method:    closeDB
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_ejdb_driver_EJDBQuery_closeDB
+  (JNIEnv *, jobject);
 
 #ifdef __cplusplus
 }
index 31cfe8f..78b5bce 100644 (file)
@@ -50,8 +50,8 @@ public class EJDB {
     }
 
 
-    public void ensureCollection(String cname) {
-        this.ensureCollection(cname, null);
+    public EJDBCollection ensureCollection(String cname) {
+        return this.ensureCollection(cname, null);
     }
 
     public EJDBCollection ensureCollection(String cname, Object opts) {
@@ -66,11 +66,11 @@ public class EJDB {
         return collection;
     }
 
-    public boolean dropCollection(String cname) {
-        return this.dropCollection(cname, false);
+    public void dropCollection(String cname) {
+        this.dropCollection(cname, false);
     }
 
-    public boolean dropCollection(String cname, boolean prune) {
+    public void dropCollection(String cname, boolean prune) {
         if (!this.isOpen()) {
             // todo
             throw new RuntimeException("Connection does not exists");
@@ -78,7 +78,7 @@ public class EJDB {
 
         EJDBCollection collection = getCollection(cname);
 
-        return collection.drop(prune);
+        collection.drop(prune);
     }
 
     public EJDBCollection getCollection(String cname) {
@@ -90,7 +90,7 @@ public class EJDB {
     }
 
     public EJDBCollection getCollection(String cname, boolean ecreate, Object opts) {
-        EJDBCollection collection = new EJDBCollection(dbPointer, cname);
+        EJDBCollection collection = new EJDBCollection(this/*dbPointer*/, cname);
 
         if (ecreate) {
             collection.ensureExists(opts);
index 313381d..d54ea7f 100644 (file)
@@ -14,37 +14,50 @@ import java.util.List;
  */
 public class EJDBCollection {
 
-    private long dbPointer;
+    // Index modes, index types.
+    public final static int JBIDXDROP = 1 << 0; /**< Drop index. */
+    public final static int JBIDXDROPALL = 1 << 1; /**< Drop index for all types. */
+    public final static int JBIDXOP = 1 << 2; /**< Optimize index. */
+    public final static int JBIDXREBLD = 1 << 3; /**< Rebuild index. */
+    public final static int JBIDXNUM = 1 << 4; /**< Number index. */
+    public final static int JBIDXSTR = 1 << 5; /**< String index.*/
+    public final static int JBIDXARR = 1 << 6; /**< Array token index. */
+    public final static int JBIDXISTR = 1 << 7; /**< Case insensitive string index */
+
+    // todo: get dbPointer from db object
+    private EJDB db;
     private String cname;
 
-    EJDBCollection(long dbPointer, String cname) {
-        this.dbPointer = dbPointer;
+    EJDBCollection(EJDB db, String cname) {
+        this.db = db;
         this.cname = cname;
     }
 
     // todo: bson object for options
-    protected native boolean ensureDB(Object opts);
-    protected native boolean dropDB(boolean prune);
+    protected native void ensureDB(Object opts);
+    protected native void dropDB(boolean prune);
     protected native void syncDB();
 
     protected native Object loadDB(byte[] oid);
     protected native Object saveDB(byte[] objdata);
-    protected native boolean removeDB(byte[] objdata);
+    protected native void removeDB(byte[] objdata);
 
-    public boolean ensureExists() {
-        return this.ensureExists(null);
+    protected native void setIndexDB(String path, int flags);
+
+    public void ensureExists() {
+        this.ensureExists(null);
     }
 
-    public boolean ensureExists(Object opts) {
-        return this.ensureDB(opts);
+    public void ensureExists(Object opts) {
+        this.ensureDB(opts);
     }
 
-    public boolean drop() {
-        return this.drop(false);
+    public void drop() {
+        this.drop(false);
     }
 
-    public boolean drop(boolean prune) {
-        return this.dropDB(prune);
+    public void drop(boolean prune) {
+        this.dropDB(prune);
     }
 
     public void sync() {
@@ -69,13 +82,17 @@ public class EJDBCollection {
         return result;
     }
 
-    public boolean remove(ObjectId oid) {
-        return this.removeDB(oid.toByteArray());
+    public void remove(ObjectId oid) {
+        this.removeDB(oid.toByteArray());
+    }
+
+    public void setIndex(String path, int flags) {
+        this.setIndexDB(path, flags);
     }
 
 
     public EJDBQuery createQuery(BSONObject query) {
-        return new EJDBQuery(dbPointer, cname, query);
+        return new EJDBQuery(this, query);
     }
 
     ////////////////////////////////////////////////////
index a39cee9..1bf6794 100644 (file)
@@ -7,18 +7,20 @@ import org.bson.BSONObject;
  * @version $Id$
  */
 public class EJDBQuery {
-    private long dbPointer;
-    private String cname;
-
+    private EJDBCollection coll;
     private BSONObject query;
 
-    EJDBQuery(long dbPointer, String cname, BSONObject query) {
-        this.dbPointer = dbPointer;
-        this.cname = cname;
+    private long qPointer;
+
+    EJDBQuery(EJDBCollection coll, BSONObject query) {
+        this.coll = coll;
         this.query = query;
 
-        this.createDB(null);
+        this.createDB(this.query, null, null);
     }
 
-    protected native void createDB(BSONObject query);
+    protected native void createDB(BSONObject query, BSONObject[] qors, BSONObject hints);
+    protected native Object executeDB();
+    protected native void closeDB();
+
 }