Properly dealocate records, implement Cloneable.
authorJakub Skoczen <jakub@indexdata.dk>
Tue, 23 Feb 2010 14:49:11 +0000 (15:49 +0100)
committerJakub Skoczen <jakub@indexdata.dk>
Tue, 23 Feb 2010 14:49:11 +0000 (15:49 +0100)
src/main/java/org/yaz4j/Record.java
src/main/java/org/yaz4j/ResultSet.java

index 977ee05..3770132 100644 (file)
@@ -4,11 +4,17 @@ import org.yaz4j.jni.SWIGTYPE_p_ZOOM_record_p;
 import org.yaz4j.jni.SWIGTYPE_p_int;
 import org.yaz4j.jni.yaz4jlib;
 
-public class Record {
-    private SWIGTYPE_p_ZOOM_record_p record = null;
+public class Record implements Cloneable {
+    private SWIGTYPE_p_ZOOM_record_p record;
+    private ResultSet rset;
     private boolean disposed = false;
 
-    Record(SWIGTYPE_p_ZOOM_record_p record) {
+    Record(SWIGTYPE_p_ZOOM_record_p record, ResultSet rset) {
+        this.record = record;
+        this.rset = rset;
+    }
+
+    protected Record(SWIGTYPE_p_ZOOM_record_p record) {
         this.record = record;
     }
 
@@ -37,9 +43,17 @@ public class Record {
         return new String(get("database"));
     }
 
+    public Object clone() {
+        SWIGTYPE_p_ZOOM_record_p clone = yaz4jlib.ZOOM_record_clone(record);
+        return new Record(clone);
+    }
+
     void _dispose() {
         if (!disposed) {
-            yaz4jlib.ZOOM_record_destroy(record);
+            //was cloned, need to dealloc?
+            if (rset == null)
+                yaz4jlib.ZOOM_record_destroy(record);
+            rset = null;
             record = null;
             disposed = true;
         }
index 01e2478..3d89bd7 100644 (file)
@@ -43,8 +43,9 @@ public class ResultSet {
     }
 
     public Record getRecord(int index) {
-      SWIGTYPE_p_ZOOM_record_p recordTemp = yaz4jlib.ZOOM_resultset_record(resultSet, index);
-      return new Record(recordTemp);
+      SWIGTYPE_p_ZOOM_record_p record = 
+        yaz4jlib.ZOOM_resultset_record(resultSet, index);
+      return new Record(record, this);
     }
 
     public long getSize() {
@@ -59,4 +60,4 @@ public class ResultSet {
             disposed = true;
         }
     }
-}
\ No newline at end of file
+}