#21
authorVyacheslav Tyutyunkov <tyutyunkov@gmail.com>
Wed, 13 Mar 2013 07:26:24 +0000 (14:26 +0700)
committerVyacheslav Tyutyunkov <tyutyunkov@gmail.com>
Wed, 13 Mar 2013 07:26:24 +0000 (14:26 +0700)
jejdb/libjejdb.so
jejdb/src/cpp/jejdb.c
jejdb/src/cpp/org_ejdb_driver_EJDBCollection.h
jejdb/src/java/org/ejdb/driver/EJDBCollection.java

index a6c1383..3a75132 100755 (executable)
Binary files a/jejdb/libjejdb.so and b/jejdb/libjejdb.so differ
index 9d226ff..d002f97 100644 (file)
@@ -133,7 +133,7 @@ JNIEXPORT jobject JNICALL Java_org_ejdb_driver_EJDBCollection_loadDB
     jstring colname = (*env)->GetObjectField(env, obj, colnameID);
 
     const char *cname = (*env)->GetStringUTFChars(env, colname, NULL);
-    bson_oid_t *oid = (jbyte*)(*env)->GetByteArrayElements(env, oidArray, NULL);
+    bson_oid_t *oid = (void*)(*env)->GetByteArrayElements(env, oidArray, NULL);
 
     // todo: check
     EJCOLL * coll = ejdbgetcoll(db, cname);
@@ -205,5 +205,35 @@ JNIEXPORT jobject JNICALL Java_org_ejdb_driver_EJDBCollection_saveDB
         (*env)->DeleteLocalRef(env, buff);
 
     return result;
+}
+
+/*
+ * 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);
+
+    // 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);
+
+    bool rs = ejdbrmbson(coll, oid);
+
+    (*env)->ReleaseStringUTFChars(env, colname, cname);
+    (*env)->ReleaseByteArrayElements(env, oidArray, (jbyte*)oid, 0);
 
+    return rs ? JNI_TRUE : JNI_FALSE;
 }
index fea9c41..398d27b 100644 (file)
@@ -39,6 +39,14 @@ JNIEXPORT jobject JNICALL Java_org_ejdb_driver_EJDBCollection_loadDB
 JNIEXPORT jobject JNICALL Java_org_ejdb_driver_EJDBCollection_saveDB
   (JNIEnv *, jobject, jbyteArray);
 
+/*
+ * Class:     org_ejdb_driver_EJDBCollection
+ * Method:    removeDB
+ * Signature: ([B)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_ejdb_driver_EJDBCollection_removeDB
+  (JNIEnv *, jobject, jbyteArray);
+
 #ifdef __cplusplus
 }
 #endif
index 16a57c7..a5f747a 100644 (file)
@@ -28,6 +28,7 @@ public class EJDBCollection {
 
     protected native Object loadDB(byte[] oid);
     protected native Object saveDB(byte[] objdata);
+    protected native boolean removeDB(byte[] objdata);
 
     public boolean ensureExists() {
         return this.ensureExists(null);
@@ -64,6 +65,10 @@ public class EJDBCollection {
         return result;
     }
 
+    public boolean remove(ObjectId oid) {
+        return this.removeDB(oid.toByteArray());
+    }
+
     private static Object handleBSONData(ByteBuffer data) {
         byte[] tmp = new byte[data.limit()];
         data.get(tmp);