From 785c3f3a66257873826f44e89beae22ac9a7d0be Mon Sep 17 00:00:00 2001
From: Francisco Puga <fpuga@cartolab.es>
Date: Tue, 28 Feb 2012 10:44:10 +0100
Subject: [PATCH] gvsig-desktop #378

+ Close postgis cursors used for build a feature iterator
+ Build the name of the cursor using a random number
---
 .../fmap/drivers/jdbc/postgis/PostGisDriver.java   |   58 ++++++++++----------
 .../jdbc/postgis/PostGisFeatureIterator.java       |    6 ++-
 2 files changed, 33 insertions(+), 31 deletions(-)

diff --git a/extensions/extJDBC/src/com/iver/cit/gvsig/fmap/drivers/jdbc/postgis/PostGisDriver.java b/extensions/extJDBC/src/com/iver/cit/gvsig/fmap/drivers/jdbc/postgis/PostGisDriver.java
index 9f44295..81b63e8 100644
--- a/extensions/extJDBC/src/com/iver/cit/gvsig/fmap/drivers/jdbc/postgis/PostGisDriver.java
+++ b/extensions/extJDBC/src/com/iver/cit/gvsig/fmap/drivers/jdbc/postgis/PostGisDriver.java
@@ -61,6 +61,7 @@ import java.util.GregorianCalendar;
 import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.Map;
+import java.util.Random;
 
 import org.apache.log4j.Logger;
 import org.joda.time.DateTime;
@@ -398,38 +399,37 @@ public class PostGisDriver extends DefaultJDBCDriver implements ICanReproject,
 			throws ReadDriverException {
 		PostGisFeatureIterator geomIterator = null;
 		try {
-			// st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
-			// ResultSet.CONCUR_READ_ONLY);
-
-			// st = conn.createStatement
-			if (provCursorName != null) {
-				/*
-				 * st.execute("BEGIN"); st.execute("CLOSE " + provCursorName);
-				 * bCursorActivo = false; st.execute("COMMIT");
-				 */
-				numProvCursors++;
-			}
-			// st.execute("BEGIN");
-			provCursorName = getTableName() + myCursorId + "wkb_cursor_prov_"
-					+ System.currentTimeMillis() + "" + numProvCursors;
+	    // st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
+	    // ResultSet.CONCUR_READ_ONLY);
+
+	    // st = conn.createStatement
+	    if (provCursorName != null) {
+		/*
+		 * st.execute("BEGIN"); st.execute("CLOSE " + provCursorName);
+		 * bCursorActivo = false; st.execute("COMMIT");
+		 */
+		numProvCursors++;
+	    }
+	    // st.execute("BEGIN");
+			String provCursorName = getTableName() +"_wkb_cursor_prov_" + Long.toString(Math.abs(new Random().nextLong()));
 
-			// st.execute("BEGIN");
+	    // st.execute("BEGIN");
 			bCursorActivo = true;
-			// ResultSet rs = st.executeQuery(sql);
-			geomIterator = new PostGisFeatureIterator(
-					((ConnectionJDBC) conn).getConnection(), provCursorName,
-					sql);
+	    // ResultSet rs = st.executeQuery(sql);
+	    geomIterator = new PostGisFeatureIterator(
+		    ((ConnectionJDBC) conn).getConnection(), provCursorName,
+		    sql);
 		} catch (SQLException e) {
-			// e.printStackTrace();
-			// e.printStackTrace();
-			// SqlDriveExceptionType type = new SqlDriveExceptionType();
-			// type.setDriverName("PostGIS Driver");
-			// type.setSql(sql);
-			// type.setLayerName(getTableName());
-			// type.setSchema(null);
+	    // e.printStackTrace();
+	    // e.printStackTrace();
+	    // SqlDriveExceptionType type = new SqlDriveExceptionType();
+	    // type.setDriverName("PostGIS Driver");
+	    // type.setSql(sql);
+	    // type.setLayerName(getTableName());
+	    // type.setSchema(null);
 			throw new ReadDriverException("PostGIS Driver", e);
-			// throw new DriverException(e);
-			// return null;
+	    // throw new DriverException(e);
+	    // return null;
 		}
 
 		return geomIterator;
diff --git a/extensions/extJDBC/src/com/iver/cit/gvsig/fmap/drivers/jdbc/postgis/PostGisFeatureIterator.java b/extensions/extJDBC/src/com/iver/cit/gvsig/fmap/drivers/jdbc/postgis/PostGisFeatureIterator.java
index 9c47078..4aa8af3 100644
--- a/extensions/extJDBC/src/com/iver/cit/gvsig/fmap/drivers/jdbc/postgis/PostGisFeatureIterator.java
+++ b/extensions/extJDBC/src/com/iver/cit/gvsig/fmap/drivers/jdbc/postgis/PostGisFeatureIterator.java
@@ -221,9 +221,11 @@ public class PostGisFeatureIterator implements IFeatureIterator {
 		try {
 			numReg = 0;
 
-			// st.execute("CLOSE " + cursorName);
-			// st.execute("COMMIT");
+	    // st.execute("CLOSE " + cursorName); fpuga: Not need as we are
+	    // using non-holdable cursor
+	    st.execute("COMMIT");
 			rs.close();
+	    st.close();
 		} catch (SQLException e) {
 //			SqlDriveExceptionType type = new SqlDriveExceptionType();
 //            type.setDriverName("PostGIS Driver");
-- 
1.7.5.4

