[libpostgresql-jdbc-java] 14/19: back patching fix for compat 7.1 binary stream issues with the new protocol added test for same

Emmanuel Bourg ebourg-guest at moszumanska.debian.org
Mon Jan 9 10:19:08 UTC 2017


This is an automated email from the git hooks/post-receive script.

ebourg-guest pushed a commit to tag REL7_4_1
in repository libpostgresql-jdbc-java.

commit 02929d62fda0cd2352c8b65a7e739bd8b6cc717c
Author: Dave Cramer <davec at fastcrypt.com>
Date:   Wed Dec 17 15:48:40 2003 +0000

    back patching fix for compat 7.1 binary stream issues with the new protocol
    added test for same
---
 org/postgresql/fastpath/Fastpath.java              |  2 +-
 org/postgresql/largeobject/LargeObjectManager.java |  6 +-
 org/postgresql/test/jdbc2/Jdbc2TestSuite.java      |  1 +
 org/postgresql/test/jdbc2/OID74Test.java           | 99 ++++++++++++++++++++++
 4 files changed, 106 insertions(+), 2 deletions(-)

diff --git a/org/postgresql/fastpath/Fastpath.java b/org/postgresql/fastpath/Fastpath.java
index b88fbba..1427a45 100644
--- a/org/postgresql/fastpath/Fastpath.java
+++ b/org/postgresql/fastpath/Fastpath.java
@@ -63,7 +63,7 @@ public class Fastpath
 	 */
 	public Object fastpath(int fnid, boolean resulttype, FastpathArg[] args) throws SQLException
 	{
-		if (conn.haveMinimumServerVersion("7.4")) {
+		if (conn.haveMinimumCompatibleVersion("7.4")) {
 			return fastpathV3(fnid, resulttype, args);
 		} else {
 			return fastpathV2(fnid, resulttype, args);
diff --git a/org/postgresql/largeobject/LargeObjectManager.java b/org/postgresql/largeobject/LargeObjectManager.java
index 7abfd7f..5f22367 100644
--- a/org/postgresql/largeobject/LargeObjectManager.java
+++ b/org/postgresql/largeobject/LargeObjectManager.java
@@ -116,7 +116,7 @@ public class LargeObjectManager
 		if (conn.getMetaData().supportsSchemasInTableDefinitions()) {
 			sql = "SELECT p.proname,p.oid "+
 				" FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n "+
-				" WHERE p.pronamespace=n.oid AND n.nspname='pg_catalog' AND ";
+				" WHERE p.pronamespace=n.oid AND n.nspname='pg_catalog' AND (";
 		} else {
 			sql = "SELECT proname,oid FROM pg_proc WHERE ";
 		}
@@ -129,6 +129,10 @@ public class LargeObjectManager
 			" or proname = 'loread'" +
 			" or proname = 'lowrite'";
 
+		if (conn.getMetaData().supportsSchemasInTableDefinitions()) {
+			sql += ")";
+		}
+
 		ResultSet res = conn.createStatement().executeQuery(sql);
 
 		if (res == null)
diff --git a/org/postgresql/test/jdbc2/Jdbc2TestSuite.java b/org/postgresql/test/jdbc2/Jdbc2TestSuite.java
index 31af0c5..7a5acab 100644
--- a/org/postgresql/test/jdbc2/Jdbc2TestSuite.java
+++ b/org/postgresql/test/jdbc2/Jdbc2TestSuite.java
@@ -57,6 +57,7 @@ public class Jdbc2TestSuite extends TestSuite
 
 		// Fastpath/LargeObject
 		suite.addTestSuite(BlobTest.class);
+		suite.addTestSuite(OID74Test.class);
 
 		suite.addTestSuite(UpdateableResultTest.class );
 
diff --git a/org/postgresql/test/jdbc2/OID74Test.java b/org/postgresql/test/jdbc2/OID74Test.java
new file mode 100644
index 0000000..3aacedc
--- /dev/null
+++ b/org/postgresql/test/jdbc2/OID74Test.java
@@ -0,0 +1,99 @@
+package org.postgresql.test.jdbc2;
+                                                                                                                                                                                     
+import org.postgresql.test.TestUtil;
+import junit.framework.TestCase;
+import java.io.*;
+import java.sql.*;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.sql.*;
+
+/**
+ * User: alexei
+ * Date: 17-Dec-2003
+ * Time: 11:01:44
+ * @version $Id$
+ */
+public class OID74Test  extends TestCase
+{
+	private Connection con;
+    
+
+	public OID74Test( String name )
+	{
+		super(name);
+	}
+	public void setUp() throws Exception
+	{
+	}
+	public void tearDown() throws Exception
+	{
+	}
+	public void testBinaryStream()
+	{
+		//set up conection here
+		Connection c = null;
+    		
+      		Statement st = null; 
+      		try 
+		{
+			c =  DriverManager.getConnection("jdbc:postgresql://localhost/test?compatible=7.1&user=test");
+    			c.setAutoCommit(false);
+			st = c.createStatement();
+        		st.execute("CREATE temp TABLE temp (col oid)");
+      		}
+		 catch (SQLException e) 
+		{
+        		//another issue: when connecting to 7.3 database and this exception occurs because the table already exists,
+		        //st.setBinaryStream throws internal error in LargeObjectManager initialisation code
+		        fail("table creating error, probably already exists, code=" + e.getErrorCode());
+      		}
+		finally
+		{
+			try{ if (st != null) st.close(); }catch(SQLException ex){};
+		}
+      		
+		PreparedStatement pstmt = null;
+    		try 
+		{
+	      	
+			pstmt = c.prepareStatement("INSERT INTO temp VALUES (?)");
+			//in case of 7.4 server, should block here
+		      	pstmt.setBinaryStream(1, new ByteArrayInputStream(new byte[]{1, 2, 3, 4, 5}), 5);
+			assertTrue( (pstmt.executeUpdate() == 1) );
+		      	pstmt.close();
+    		
+		      	pstmt = c.prepareStatement("SELECT col FROM temp LIMIT 1");
+		      	ResultSet rs = pstmt.executeQuery();
+
+		      	assertTrue("No results from query", rs.next() );
+
+			//in case of 7.4 server, should block here
+			InputStream in = rs.getBinaryStream(1);
+		      	int data;
+		      	while ((data = in.read()) != -1)
+		        	System.out.println(data);
+		      	rs.close();
+		      	st.close();
+			c.createStatement().executeUpdate("DELETE FROM temp");
+			c.commit();
+		}
+		catch ( IOException ioex )
+		{
+			fail( ioex.getMessage() );
+		}
+		catch (SQLException ex)
+		{
+			fail( ex.getMessage() );
+		} 
+		finally 
+		{
+			try
+			{
+				if ( c!=null) c.close();
+			}
+			catch( SQLException e1){}
+		}
+  	}	
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/libpostgresql-jdbc-java.git



More information about the pkg-java-commits mailing list