mirror of
https://github.com/postgres/postgres.git
synced 2025-04-29 13:56:47 +03:00
patch from Kris Jurka to fix large object 7.1 compatible protocol issues
modified test case from Alexey Yudichev to be part of the testsuite
This commit is contained in:
parent
95eea2d89c
commit
e4955c2ec3
@ -6,7 +6,7 @@
|
||||
* Copyright (c) 2003, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/interfaces/jdbc/org/postgresql/fastpath/Fastpath.java,v 1.17 2003/11/29 19:52:09 pgsql Exp $
|
||||
* $PostgreSQL: pgsql/src/interfaces/jdbc/org/postgresql/fastpath/Fastpath.java,v 1.18 2003/12/17 15:38:42 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);
|
||||
@ -78,19 +78,22 @@ public class Fastpath
|
||||
// send the function call
|
||||
try
|
||||
{
|
||||
int l_msgLen = 0;
|
||||
l_msgLen += 16;
|
||||
for (int i=0;i < args.length;i++)
|
||||
int l_msgLen = 14;
|
||||
for (int i=0; i < args.length; i++) {
|
||||
l_msgLen += 2;
|
||||
l_msgLen += args[i].sendSize();
|
||||
}
|
||||
|
||||
stream.SendChar('F');
|
||||
stream.SendInteger(l_msgLen,4);
|
||||
stream.SendInteger(fnid, 4);
|
||||
stream.SendInteger(1,2);
|
||||
stream.SendInteger(1,2);
|
||||
stream.SendInteger(args.length,2);
|
||||
|
||||
for (int i = 0;i < args.length;i++)
|
||||
stream.SendInteger(args.length,2);
|
||||
for (int i=0; i < args.length; i++)
|
||||
stream.SendInteger(1,2);
|
||||
|
||||
stream.SendInteger(args.length,2);
|
||||
for (int i = 0; i < args.length; i++)
|
||||
args[i].send(stream);
|
||||
|
||||
stream.SendInteger(1,2);
|
||||
|
@ -11,7 +11,7 @@
|
||||
* Copyright (c) 2003, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/interfaces/jdbc/org/postgresql/largeobject/LargeObjectManager.java,v 1.11 2003/11/29 19:52:11 pgsql Exp $
|
||||
* $PostgreSQL: pgsql/src/interfaces/jdbc/org/postgresql/largeobject/LargeObjectManager.java,v 1.12 2003/12/17 15:38:42 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.1 2003/12/17 15:38:42 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 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