mirror of
https://github.com/postgres/postgres.git
synced 2025-05-18 17:41:14 +03:00
back patching fix for compat 7.1 binary stream issues with the new protocol
added test for same
This commit is contained in:
parent
96cee3f12a
commit
0323e570af
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -57,6 +57,7 @@ public class Jdbc2TestSuite extends TestSuite
|
||||
|
||||
// Fastpath/LargeObject
|
||||
suite.addTestSuite(BlobTest.class);
|
||||
suite.addTestSuite(OID74Test.class);
|
||||
|
||||
suite.addTestSuite(UpdateableResultTest.class );
|
||||
|
||||
|
99
src/interfaces/jdbc/org/postgresql/test/jdbc2/OID74Test.java
Normal file
99
src/interfaces/jdbc/org/postgresql/test/jdbc2/OID74Test.java
Normal file
@ -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){}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user