* 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 $
*
*-------------------------------------------------------------------------
*/
*/
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);
// 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);
* 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 $
*
*-------------------------------------------------------------------------
*/
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 ";
}
" or proname = 'loread'" +
" or proname = 'lowrite'";
+ if (conn.getMetaData().supportsSchemasInTableDefinitions()) {
+ sql += ")";
+ }
+
ResultSet res = conn.createStatement().executeQuery(sql);
if (res == null)
--- /dev/null
+package org.postgresql.test.jdbc2;\r
+ \r
+import org.postgresql.test.TestUtil;\r
+import junit.framework.TestCase;\r
+import java.io.*;\r
+import java.sql.*;\r
+\r
+import java.io.ByteArrayInputStream;\r
+import java.io.InputStream;\r
+import java.sql.*;\r
+\r
+/**\r
+ * User: alexei\r
+ * Date: 17-Dec-2003\r
+ * Time: 11:01:44\r
+ * @version $Id: OID74Test.java,v 1.1 2003/12/17 15:38:42 davec Exp $\r
+ */\r
+public class OID74Test extends TestCase\r
+{\r
+ private Connection con;\r
+ \r
+\r
+ public OID74Test( String name )\r
+ {\r
+ super(name);\r
+ }\r
+ public void setUp() throws Exception\r
+ {\r
+ }\r
+ public void tearDown() throws Exception\r
+ {\r
+ }\r
+ public void testBinaryStream()\r
+ {\r
+ //set up conection here\r
+ Connection c = null;\r
+ \r
+ Statement st = null; \r
+ try \r
+ {\r
+ c = DriverManager.getConnection("jdbc:postgresql://localhost/test?compatible=7.1&user=test");\r
+ c.setAutoCommit(false);\r
+ st = c.createStatement();\r
+ st.execute("CREATE TABLE temp (col oid)");\r
+ }\r
+ catch (SQLException e) \r
+ {\r
+ //another issue: when connecting to 7.3 database and this exception occurs because the table already exists,\r
+ //st.setBinaryStream throws internal error in LargeObjectManager initialisation code\r
+ fail("table creating error, probably already exists, code=" + e.getErrorCode());\r
+ }\r
+ finally\r
+ {\r
+ try{ if (st != null) st.close(); }catch(SQLException ex){};\r
+ }\r
+ \r
+ PreparedStatement pstmt = null;\r
+ try \r
+ {\r
+ \r
+ pstmt = c.prepareStatement("INSERT INTO temp VALUES (?)");\r
+ //in case of 7.4 server, should block here\r
+ pstmt.setBinaryStream(1, new ByteArrayInputStream(new byte[]{1, 2, 3, 4, 5}), 5);\r
+ assertTrue( (pstmt.executeUpdate() == 1) );\r
+ pstmt.close();\r
+ \r
+ pstmt = c.prepareStatement("SELECT col FROM temp LIMIT 1");\r
+ ResultSet rs = pstmt.executeQuery();\r
+\r
+ assertTrue("No results from query", rs.next() );\r
+\r
+ //in case of 7.4 server, should block here\r
+ InputStream in = rs.getBinaryStream(1);\r
+ int data;\r
+ while ((data = in.read()) != -1)\r
+ System.out.println(data);\r
+ rs.close();\r
+ st.close();\r
+ c.createStatement().executeUpdate("DELETE FROM temp");\r
+ c.commit();\r
+ }\r
+ catch ( IOException ioex )\r
+ {\r
+ fail( ioex.getMessage() );\r
+ }\r
+ catch (SQLException ex)\r
+ {\r
+ fail( ex.getMessage() );\r
+ } \r
+ finally \r
+ {\r
+ try\r
+ {\r
+ if ( c!=null) c.close();\r
+ }\r
+ catch( SQLException e1){}\r
+ }\r
+ } \r
+}\r