diff options
author | Dave Cramer <davec@fastcrypt.com> | 2003-12-17 15:48:40 +0000 |
---|---|---|
committer | Dave Cramer <davec@fastcrypt.com> | 2003-12-17 15:48:40 +0000 |
commit | 0323e570af23a8b827bae9547697c8174dd4a88b (patch) | |
tree | 21bd67b3a9ed92870f5be2d3796bb39b7bdae8a9 /src | |
parent | 96cee3f12a5b9ce789cec19d0fa0fce1bd77dde1 (diff) | |
download | postgresql-0323e570af23a8b827bae9547697c8174dd4a88b.tar.gz postgresql-0323e570af23a8b827bae9547697c8174dd4a88b.zip |
back patching fix for compat 7.1 binary stream issues with the new protocol
added test for same
Diffstat (limited to 'src')
4 files changed, 108 insertions, 4 deletions
diff --git a/src/interfaces/jdbc/org/postgresql/fastpath/Fastpath.java b/src/interfaces/jdbc/org/postgresql/fastpath/Fastpath.java index 6235651fed3..193de9e6105 100644 --- a/src/interfaces/jdbc/org/postgresql/fastpath/Fastpath.java +++ b/src/interfaces/jdbc/org/postgresql/fastpath/Fastpath.java @@ -6,7 +6,7 @@ * Copyright (c) 2003, PostgreSQL Global Development Group * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/fastpath/Attic/Fastpath.java,v 1.16 2003/09/13 04:02:13 barry Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/fastpath/Attic/Fastpath.java,v 1.16.2.1 2003/12/17 15:48:39 davec Exp $ * *------------------------------------------------------------------------- */ @@ -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/src/interfaces/jdbc/org/postgresql/largeobject/LargeObjectManager.java b/src/interfaces/jdbc/org/postgresql/largeobject/LargeObjectManager.java index 48743467db7..f49103f56eb 100644 --- a/src/interfaces/jdbc/org/postgresql/largeobject/LargeObjectManager.java +++ b/src/interfaces/jdbc/org/postgresql/largeobject/LargeObjectManager.java @@ -11,7 +11,7 @@ * Copyright (c) 2003, PostgreSQL Global Development Group * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/largeobject/Attic/LargeObjectManager.java,v 1.10 2003/03/07 18:39:45 barry Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/largeobject/Attic/LargeObjectManager.java,v 1.10.4.1 2003/12/17 15:48:39 davec Exp $ * *------------------------------------------------------------------------- */ @@ -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/src/interfaces/jdbc/org/postgresql/test/jdbc2/Jdbc2TestSuite.java b/src/interfaces/jdbc/org/postgresql/test/jdbc2/Jdbc2TestSuite.java index 31af0c520b7..7a5acab8e26 100644 --- a/src/interfaces/jdbc/org/postgresql/test/jdbc2/Jdbc2TestSuite.java +++ b/src/interfaces/jdbc/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/src/interfaces/jdbc/org/postgresql/test/jdbc2/OID74Test.java b/src/interfaces/jdbc/org/postgresql/test/jdbc2/OID74Test.java new file mode 100644 index 00000000000..ada46e6939e --- /dev/null +++ b/src/interfaces/jdbc/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: OID74Test.java,v 1.2.2.1 2003/12/17 15:48:40 davec Exp $
+ */
+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){}
+ }
+ }
+}
|