aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/jdbc
diff options
context:
space:
mode:
authorDave Cramer <davec@fastcrypt.com>2003-12-17 15:38:42 +0000
committerDave Cramer <davec@fastcrypt.com>2003-12-17 15:38:42 +0000
commite4955c2ec365daaae6e3eab730e0686ebbf009cc (patch)
tree27386436e55302091c71f3a03252142f3c2f50d0 /src/interfaces/jdbc
parent95eea2d89c49fd073ad01407d842c6f8199c74e2 (diff)
downloadpostgresql-e4955c2ec365daaae6e3eab730e0686ebbf009cc.tar.gz
postgresql-e4955c2ec365daaae6e3eab730e0686ebbf009cc.zip
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
Diffstat (limited to 'src/interfaces/jdbc')
-rw-r--r--src/interfaces/jdbc/org/postgresql/fastpath/Fastpath.java19
-rw-r--r--src/interfaces/jdbc/org/postgresql/largeobject/LargeObjectManager.java8
-rw-r--r--src/interfaces/jdbc/org/postgresql/test/jdbc2/Jdbc2TestSuite.java1
-rw-r--r--src/interfaces/jdbc/org/postgresql/test/jdbc2/OID74Test.java99
4 files changed, 117 insertions, 10 deletions
diff --git a/src/interfaces/jdbc/org/postgresql/fastpath/Fastpath.java b/src/interfaces/jdbc/org/postgresql/fastpath/Fastpath.java
index e69529fc05d..44243f7b8ea 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
- * $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(1,2);
- for (int i = 0;i < args.length;i++)
+ stream.SendInteger(args.length,2);
+ for (int i = 0; i < args.length; i++)
args[i].send(stream);
stream.SendInteger(1,2);
diff --git a/src/interfaces/jdbc/org/postgresql/largeobject/LargeObjectManager.java b/src/interfaces/jdbc/org/postgresql/largeobject/LargeObjectManager.java
index 4895f1b6149..2958fb04983 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
- * $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)
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..ae80ce4286e
--- /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.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){}
+ }
+ }
+}