Cleanup rercounts
[yaz4j-moved-to-github.git] / src / main / java / org / yaz4j / ResultSet.java
index 300cbad..01e2478 100644 (file)
@@ -1,58 +1,62 @@
 package org.yaz4j;
 
-import org.yaz4j.jni.SWIGTYPE_p_ZOOM_connection_p;
 import org.yaz4j.jni.SWIGTYPE_p_ZOOM_record_p;
 import org.yaz4j.jni.SWIGTYPE_p_ZOOM_resultset_p;
 import org.yaz4j.jni.yaz4jlib;
 
 public class ResultSet {
-
+    //for GC refcount
+    private Connection conn;
     private SWIGTYPE_p_ZOOM_resultset_p resultSet;
-    private SWIGTYPE_p_ZOOM_connection_p connection;
     private long size = 0;
-    private Record[] records = null;
     private boolean disposed = false;
 
-    ResultSet(SWIGTYPE_p_ZOOM_resultset_p resultSet, SWIGTYPE_p_ZOOM_connection_p connection) {
+    ResultSet(SWIGTYPE_p_ZOOM_resultset_p resultSet, Connection conn) {
         this.resultSet = resultSet;
-        this.connection = connection;
         size = yaz4jlib.ZOOM_resultset_size(this.resultSet);
-        records = new Record[(int) size];
+        this.conn = conn;
     }
 
+    @Override
     public void finalize() {
-        this.Dispose();
+        this._dispose();
     }
 
-    ResultSetOptionsCollection getResultSetOptions() {
-        return new ResultSetOptionsCollection(resultSet);
+    /**
+     * Read option by name.
+     * @param name option name
+     * @return option value
+     */
+    public String option(String name) {
+      return yaz4jlib.ZOOM_resultset_option_get(resultSet, name);
     }
 
-    public Record getRecord(int index) {
-        if (records[index] == null) {
-            SWIGTYPE_p_ZOOM_record_p recordTemp = yaz4jlib.ZOOM_resultset_record(resultSet, index);
-            records[index] = new Record(recordTemp, this);
-        }
+    /**
+     * Write option with a given name.
+     * @param name option name
+     * @param value option value
+     * @return result set (self) for chainability
+     */
+    public ResultSet option(String name, String value) {
+      yaz4jlib.ZOOM_resultset_option_set(resultSet, name, value);
+      return this;
+    }
 
-        return this.records[index];
+    public Record getRecord(int index) {
+      SWIGTYPE_p_ZOOM_record_p recordTemp = yaz4jlib.ZOOM_resultset_record(resultSet, index);
+      return new Record(recordTemp);
     }
 
-    public int getSize() {
-        return (int) size;
+    public long getSize() {
+        return size;
     }
 
-    public void Dispose() {
+    void _dispose() {
         if (!disposed) {
-            for (int i = 0; i < records.length; i++) {
-                if (records[i] != null) {
-                    records[i].Dispose();
-                }
-            }
-
             yaz4jlib.ZOOM_resultset_destroy(resultSet);
-            connection = null;
             resultSet = null;
+            conn = null;
             disposed = true;
         }
     }
-}
+}
\ No newline at end of file