Re: streaming result sets: progress

From: Nic Ferrier <nferrier(at)tapsellferrier(dot)co(dot)uk>
To: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: streaming result sets: progress
Date: 2002-11-15 00:07:49
Message-ID: 87el9nn19m.fsf@pooh-sticks-bridge.tapsellferrier.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Barry Lind <blind(at)xythos(dot)com> writes:

> >>The the ; is not required for the rest of the jdbc driver. In fact in
> >>other areas of the code (like server prepared statements, batch updates)
> >>the requirement is that the user supplied sql statement does *not* end
> >>in a ;.
> >>
> >>This is also consistent with other jdbc drivers. In fact oracle gives
> >>you an error if a sql statement ends with a ;.
> >
> >
> > Apologies to everyone paying attention to this thread... in my
> > experience postgres has always complained when I haven't supplied the
> > ";".

Here's the patch again. This time it includes fixes for jdbc3 (that I
haven't had a chance to test) and a fix for the ";" issue. The
handling of ";" is an attempt at intelligent semi-colon handling but
it's late and I'm tired /8->

PGResult still isn't included in this. I can't seem to get CVS to
listen to my instruction to put new files into the diff.

Nic

cvs server: Diffing .
cvs server: Diffing org
cvs server: Diffing org/postgresql
Index: org/postgresql/PGConnection.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/PGConnection.java,v
retrieving revision 1.3
diff -r1.3 PGConnection.java
79a80,89
>
>
> // Added by Nic.
>
> /** Create a result set for the specified statement.
> * This is the factory method provided by the various
> * version specific implementations of the JDBC connection
> * classes.
> */
> public java.sql.ResultSet createResultSet (java.sql.Statement statement);
cvs server: Diffing org/postgresql/core
Index: org/postgresql/core/QueryExecutor.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/core/QueryExecutor.java,v
retrieving revision 1.16
diff -r1.16 QueryExecutor.java
20a21,69
> /** nic version - statically sets up the QE correctly.
> */
> public static void execute (String[] p_sqlFrags,
> Object[] p_binds,
> java.sql.Statement statement,
> java.sql.ResultSet rs,
> PG_Stream pg_stream,
> java.sql.Connection con)
> throws SQLException
> {
> QueryExecutor qe = new QueryExecutor();
> // I think this should be a PGConnection and we should move
> // everything we need for that from AbstractJdbc1... into PGConnection.
> qe.connection = (org.postgresql.jdbc1.AbstractJdbc1Connection)con;
> qe.m_sqlFrags = p_sqlFrags;
> qe.m_binds = p_binds;
> qe.statement = statement;
> // Nic says: connection should wrap pg_stream.
> qe.pg_stream = pg_stream;
> if (statement != null)
> qe.maxRows = statement.getMaxRows();
> else
> qe.maxRows = 0;
> // The result set.
> qe.rs = rs;
> qe.execute();
> }
>
> // This is the result set used to wrap the results.
> // The type of this is whatever is passed into the static above.
> private java.sql.ResultSet rs;
>
> // cons for the static above.
> private QueryExecutor ()
> {
> }
>
>
>
>
> /*** pre-nic implementation ***/
>
>
> /// Nic has removed the final from ALL of these (to facilitate static method).
> private String[] m_sqlFrags;
> private Object[] m_binds;
> private java.sql.Statement statement;
> private PG_Stream pg_stream;
> private org.postgresql.jdbc1.AbstractJdbc1Connection connection;
22,26d70
< private final String[] m_sqlFrags;
< private final Object[] m_binds;
< private final java.sql.Statement statement;
< private final PG_Stream pg_stream;
< private final org.postgresql.jdbc1.AbstractJdbc1Connection connection;
36c80
< this.statement = statement;
---
> this.statement = statement;
45a90
>
53a99
>
55a102
> *
128c175,180
< return connection.getResultSet(statement, fields, tuples, status, update_count, insert_oid, binaryCursor);
---
>
> // Nic changes.
> PGResultSet resSet = ((PGResultSet)rs);
> // System.out.println(getClass().getName() + " resSet=" + resSet);
> resSet.init(fields, tuples, status, update_count, insert_oid, binaryCursor);
> return rs;
cvs server: Diffing org/postgresql/fastpath
cvs server: Diffing org/postgresql/geometric
cvs server: Diffing org/postgresql/jdbc1
Index: org/postgresql/jdbc1/AbstractJdbc1Connection.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Connection.java,v
retrieving revision 1.12
diff -r1.12 AbstractJdbc1Connection.java
353,354d352
< java.sql.ResultSet resultSet =
< ExecSQL("set datestyle to 'ISO'; select version(), " + encodingQuery + ";");
355a354,356
> java.sql.ResultSet resultSet
> = doQuery("set datestyle to 'ISO'; select version(), " + encodingQuery + ";");
>
376c377
< ExecSQL("set client_encoding = 'UNICODE'; show autocommit");
---
> doQuery("set client_encoding = 'UNICODE'; show autocommit");
391c392
< ExecSQL("set autocommit = on; commit;");
---
> doQuery("set autocommit = on; commit;");
412,418d412
< // These methods used to be in the main Connection implementation. As they
< // are common to all implementations (JDBC1 or 2), they are placed here.
< // This should make it easy to maintain the two specifications.
<
< public abstract java.sql.ResultSet getResultSet(Statement statement, org.postgresql.Field[] fields, Vector tuples, String status, int updateCount, long insertOID, boolean binaryCursor) throws SQLException;
<
< public abstract java.sql.ResultSet getResultSet(Statement statement, org.postgresql.Field[] fields, Vector tuples, String status, int updateCount) throws SQLException;
448,457c442
< /*
< * Send a query to the backend. Returns one of the ResultSet
< * objects.
< *
< * <B>Note:</B> there does not seem to be any method currently
< * in existance to return the update count.
< *
< * @param sql the SQL statement to be executed
< * @return a ResultSet holding the results
< * @exception SQLException if a database error occurs
---
> /** Simple query execution.
459c444
< public java.sql.ResultSet ExecSQL(String sql) throws SQLException
---
> public java.sql.ResultSet doQuery (String s) throws SQLException
461c446,450
< return ExecSQL(sql, null);
---
> final Object[] nullarr = new Object[0];
> java.sql.Statement stat = createStatement();
> java.sql.ResultSet rs = createResultSet(stat);
> execSQL(new String[] { s }, nullarr, stat, rs);
> return rs;
464,487c453
< /*
< * Send a query to the backend. Returns one of the ResultSet
< * objects.
< *
< * <B>Note:</B> there does not seem to be any method currently
< * in existance to return the update count.
< *
< * @param sql the SQL statement to be executed
< * @param stat The Statement associated with this query (may be null)
< * @return a ResultSet holding the results
< * @exception SQLException if a database error occurs
< */
< public java.sql.ResultSet ExecSQL(String sql, java.sql.Statement stat) throws SQLException
< {
< return new QueryExecutor(new String[] {sql}, EMPTY_OBJECT_ARRAY, stat, pg_stream, (java.sql.Connection)this).execute();
< }
< private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
<
< /*
< * Send a query to the backend. Returns one of the ResultSet
< * objects.
< *
< * <B>Note:</B> there does not seem to be any method currently
< * in existance to return the update count.
---
> /** Advanced query execution.
491,492c457,458
< * @param stat The Statement associated with this query (may be null)
< * @return a ResultSet holding the results
---
> * @param stat the statement associated with this query.
> * @param rs the ResultSet which will be initied for the results.
495,497c461,472
< public java.sql.ResultSet ExecSQL(String[] p_sqlFragments, Object[] p_binds, java.sql.Statement stat) throws SQLException
< {
< return new QueryExecutor(p_sqlFragments, p_binds, stat, pg_stream, (java.sql.Connection)this).execute();
---
> public void execSQL(String[] p_sqlFragments,
> Object[] p_binds,
> java.sql.Statement stat,
> java.sql.ResultSet rs)
> throws SQLException
> {
> QueryExecutor.execute(p_sqlFragments,
> p_binds,
> stat,
> rs,
> pg_stream,
> (java.sql.Connection)this);
499a475
>
934c910
< ExecSQL("select 1; commit; set autocommit = on;");
---
> doQuery("select 1; commit; set autocommit = on;");
938c914
< ExecSQL("end");
---
> doQuery("end");
945c921
< ExecSQL("set autocommit = off; " + getIsolationLevelSQL());
---
> doQuery("set autocommit = off; " + getIsolationLevelSQL());
949c925
< ExecSQL("begin;" + getIsolationLevelSQL());
---
> doQuery("begin;" + getIsolationLevelSQL());
953,954c929,930
< ExecSQL("begin");
< ExecSQL(getIsolationLevelSQL());
---
> doQuery("begin");
> doQuery(getIsolationLevelSQL());
988c964
< ExecSQL("commit; " + getIsolationLevelSQL());
---
> doQuery("commit; " + getIsolationLevelSQL());
992c968
< ExecSQL("commit;begin;" + getIsolationLevelSQL());
---
> doQuery("commit;begin;" + getIsolationLevelSQL());
996,998c972,974
< ExecSQL("commit");
< ExecSQL("begin");
< ExecSQL(getIsolationLevelSQL());
---
> doQuery("commit");
> doQuery("begin");
> doQuery(getIsolationLevelSQL());
1019c995
< ExecSQL("rollback; " + getIsolationLevelSQL());
---
> doQuery("rollback; " + getIsolationLevelSQL());
1023c999
< ExecSQL("rollback; begin;" + getIsolationLevelSQL());
---
> doQuery("rollback; begin;" + getIsolationLevelSQL());
1027,1029c1003,1005
< ExecSQL("rollback");
< ExecSQL("begin");
< ExecSQL(getIsolationLevelSQL());
---
> doQuery("rollback");
> doQuery("begin");
> doQuery(getIsolationLevelSQL());
1044c1020
< ResultSet rs = ExecSQL(sql);
---
> ResultSet rs = doQuery(sql);
1051c1027
< ExecSQL(sql);
---
> doQuery(sql);
1116c1092
< ExecSQL(isolationLevelSQL);
---
> doQuery(isolationLevelSQL);
1259c1235
< ResultSet result = ExecSQL(sql);
---
> ResultSet result = doQuery(sql);
1300c1276
< ResultSet result = ExecSQL(sql);
---
> ResultSet result = doQuery(sql);
Index: org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java,v
retrieving revision 1.10
diff -r1.10 AbstractJdbc1DatabaseMetaData.java
1916c1916,1918
< return connection.getResultSet(null, f, v, "OK", 1);
---
> java.sql.ResultSet retRs = connection.createResultSet(connection.createStatement());
> ((AbstractJdbc1ResultSet)retRs).init(f, v, "OK", 1, 0, false);
> return retRs;
2202c2204,2207
< return connection.getResultSet(null, f, v, "OK", 1);
---
>
> java.sql.ResultSet retRs = connection.createResultSet(connection.createStatement());
> ((AbstractJdbc1ResultSet)retRs).init(f, v, "OK", 1, 0, false);
> return retRs;
2369c2374,2376
< return connection.getResultSet(null, f, v, "OK", 1);
---
> java.sql.ResultSet retRs = connection.createResultSet(connection.createStatement());
> ((AbstractJdbc1ResultSet)retRs).init(f, v, "OK", 1, 0, false);
> return retRs;
2481c2488,2491
< return connection.getResultSet(null, f, v, "OK", 1);
---
>
> java.sql.ResultSet retRs = connection.createResultSet(connection.createStatement());
> ((AbstractJdbc1ResultSet)retRs).init(f, v, "OK", 1, 0, false);
> return retRs;
2583c2593,2595
< return connection.getResultSet(null, f, v, "OK", 1);
---
> java.sql.ResultSet retRs = connection.createResultSet(connection.createStatement());
> ((AbstractJdbc1ResultSet)retRs).init(f, v, "OK", 1, 0, false);
> return retRs;
2776c2788,2791
< return connection.getResultSet(null, f, v, "OK", 1);
---
>
> java.sql.ResultSet retRs = connection.createResultSet(connection.createStatement());
> ((AbstractJdbc1ResultSet)retRs).init(f, v, "OK", 1, 0, false);
> return retRs;
2846c2861,2863
< return connection.getResultSet(null, f, v, "OK", 1);
---
> java.sql.ResultSet retRs = connection.createResultSet(connection.createStatement());
> ((AbstractJdbc1ResultSet)retRs).init(f, v, "OK", 1, 0, false);
> return retRs;
3196c3213,3215
< return connection.getResultSet(null, f, tuples, "OK", 1);
---
> java.sql.ResultSet retRs = connection.createResultSet(connection.createStatement());
> ((AbstractJdbc1ResultSet)retRs).init(f, tuples, "OK", 1, 0, false);
> return retRs;
3481c3500,3503
< return connection.getResultSet(null, f, v, "OK", 1);
---
>
> java.sql.ResultSet retRs = connection.createResultSet(connection.createStatement());
> ((AbstractJdbc1ResultSet)retRs).init(f, v, "OK", 1, 0, false);
> return retRs;
Index: org/postgresql/jdbc1/AbstractJdbc1ResultSet.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1ResultSet.java,v
retrieving revision 1.7
diff -r1.7 AbstractJdbc1ResultSet.java
21c21
< public abstract class AbstractJdbc1ResultSet
---
> public abstract class AbstractJdbc1ResultSet implements org.postgresql.PGResultSet
45c45,51
< public AbstractJdbc1ResultSet(org.postgresql.PGConnection conn, Statement statement, Field[] fields, Vector tuples, String status, int updateCount, long insertOID, boolean binaryCursor)
---
> public AbstractJdbc1ResultSet(org.postgresql.PGConnection conn,
> Statement statement,
> Field[] fields,
> Vector tuples,
> String status,
> int updateCount,
> long insertOID, boolean binaryCursor)
52a59,61
>
> System.out.println(getClass().getName() + " updateCount = " + updateCount);
>
59a69,97
> /*** nic constructor: called by superclass which is called from Jdbc1Connection.createResultSet ***/
> public AbstractJdbc1ResultSet(org.postgresql.PGConnection conn,
> Statement statement)
> {
> this.connection = conn;
> this.statement = statement;
> }
>
> /*** nic initializer. ***/
> public void init (Field[] fields, Vector tuples, String status,
> int updateCount, long insertOID, boolean binaryCursor)
> {
> this.fields = fields;
>
> // on a reinit the size of this indicates how many we pulled
> // back. If it's 0 then the res set has ended.
> this.rows = tuples;
> this.status = status;
> this.updateCount = updateCount;
> this.insertOID = insertOID;
> this.this_row = null;
> this.current_row = -1;
> this.binaryCursor = binaryCursor;
> }
>
>
>
>
> // This slightly altered by nic.
66c104,130
< return false;
---
> {
> // Use the ref to the statement to get
> // the details we need to do another cursor
> // query - it will use reinit() to repopulate this
> // with the right data.
> String[] sql = new String[1];
> String[] binds = new String[0];
> // Is this the correct query???
> int fetchSize = ((AbstractJdbc1Statement)statement).nic_fetchSize;
> String cursorName = ((AbstractJdbc1Statement)statement).nic_statementName;
> sql[0] = "FETCH FORWARD " + fetchSize + " FROM " + cursorName + " ;";
>
> // We can safely throw the return value away, it reinits "this".
>
> ((AbstractJdbc1Connection)connection).execSQL(sql, binds, statement, (java.sql.ResultSet)this);
>
> // Test the new rows array.
> if (rows.size() == 0)
> {
> System.out.println("rows == 0 ending.");
> return false;
> }
>
> System.out.println("rows != 0 not ending");
> // Otherwise reset the counter and let it go on...
> current_row = 0;
> }
Index: org/postgresql/jdbc1/AbstractJdbc1Statement.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java,v
retrieving revision 1.12
diff -r1.12 AbstractJdbc1Statement.java
120c120
<
---
>
136c136
< ((AbstractJdbc1Connection)connection).ExecSQL("DEALLOCATE " + m_statementName);
---
> ((AbstractJdbc1Connection)connection).doQuery("DEALLOCATE " + m_statementName);
153c153
< this.execute();
---
> this.nic_execute();
178c178
< ((AbstractJdbc1Connection)connection).ExecSQL("DEALLOCATE " + m_statementName);
---
> ((AbstractJdbc1Connection)connection).doQuery("DEALLOCATE " + m_statementName);
222c222
< ((AbstractJdbc1Connection)connection).ExecSQL("DEALLOCATE " + m_statementName);
---
> ((AbstractJdbc1Connection)connection).doQuery("DEALLOCATE " + m_statementName);
320c320,322
< result = ((AbstractJdbc1Connection)connection).ExecSQL(m_sqlFragments, m_binds, (java.sql.Statement)this);
---
> result = ((AbstractJdbc1Connection)connection).createResultSet((java.sql.Statement)this);
> ((AbstractJdbc1Connection)connection).execSQL(m_sqlFragments, m_binds,
> (java.sql.Statement)this, result);
343a346,458
>
>
> // For now used to store the statement name.
> String nic_statementName = "";
>
> // For now stores the fetch size. There's no way of altering this with JDBC1.
> protected int nic_fetchSize = 0;
>
> /** version of execute which converts the query to a cursor.
> */
> public boolean nic_execute() throws SQLException
> {
> if (isFunction && !returnTypeSet)
> throw new PSQLException("postgresql.call.noreturntype");
> if (isFunction)
> { // set entry 1 to dummy entry..
> m_binds[0] = ""; // dummy entry which ensured that no one overrode
> m_bindTypes[0] = PG_TEXT;
> // and calls to setXXX (2,..) really went to first arg in a function call..
> }
>
> // New in 7.1, if we have a previous resultset then force it to close
> // This brings us nearer to compliance, and helps memory management.
> // Internal stuff will call ExecSQL directly, bypassing this.
> if (result != null)
> {
> java.sql.ResultSet rs = getResultSet();
> if (rs != null)
> rs.close();
> }
>
> // I've pretty much ignored server prepared statements... can declare and prepare be
> // used together?
> // It's trivial to change this: you just have to resolve this issue
> // of how to work out whether there's a function call. If there isn't then the first
> // element of the array must be the bit that you extend to become the cursor
> // decleration.
> // The last thing that can go wrong is when the user supplies a cursor statement
> // directly: the translation takes no account of that. I think we should just look
> // for declare and stop the translation if we find it.
>
> // The first thing to do is transform the statement text into the cursor form.
> String[] origSqlFragments = m_sqlFragments;
> if (origSqlFragments.length > 1)
> m_sqlFragments = new String[origSqlFragments.length + 1];
> else
> m_sqlFragments = new String[origSqlFragments.length];
> System.arraycopy(origSqlFragments, 0, m_sqlFragments, 0, origSqlFragments.length);
> // Pinch the prepared count for our own nefarious purposes.
> m_statementName = "JDBC_CURS_" + m_preparedCount++;
> nic_statementName = m_statementName;
> // The static bit to prepend to all querys.
> String cursDecl = "BEGIN; DECLARE " + m_statementName + " CURSOR FOR ";
> String endCurs = " FETCH FORWARD " + nic_fetchSize + " FROM " + m_statementName + ";";
>
> // Add the real query to the curs decleration.
> // This is the bit that really makes the presumption about
> // m_sqlFragments not being a function call.
> if (m_sqlFragments.length < 1)
> m_sqlFragments[0] = cursDecl + "SELECT NULL;";
>
> else if (m_sqlFragments.length < 2)
> {
> if (m_sqlFragments[0].endsWith(";"))
> m_sqlFragments[0] = cursDecl + m_sqlFragments[0] + endCurs;
> else
> m_sqlFragments[0] = cursDecl + m_sqlFragments[0] + ";" + endCurs;
> }
> else
> {
> m_sqlFragments[0] = cursDecl + m_sqlFragments[0];
> if (m_sqlFragments[m_sqlFragments.length - 2].endsWith(";"))
> m_sqlFragments[m_sqlFragments.length - 1] = endCurs;
> else
> m_sqlFragments[m_sqlFragments.length - 1] = ";" + endCurs;
> }
>
> // Make the call to the query executor.
> AbstractJdbc1Connection execr = (AbstractJdbc1Connection)connection;
> java.sql.Statement st = (java.sql.Statement)this;
> result = (java.sql.ResultSet) execr.createResultSet(st);
> // Nic says:
> // we don't need to collect the result here, rs is altered to
> // be the result set so "result = rs" would do ok after this call.
> execr.execSQL(m_sqlFragments, m_binds, st, result);
>
> //If we are executing a callable statement function set the return data
> if (isFunction)
> {
> if (!((AbstractJdbc1ResultSet)result).reallyResultSet())
> throw new PSQLException("postgresql.call.noreturnval");
> if (!result.next ())
> throw new PSQLException ("postgresql.call.noreturnval");
> callResult = result.getObject(1);
> int columnType = result.getMetaData().getColumnType(1);
> if (columnType != functionReturnType)
> {
> Object[] arr =
> { "java.sql.Types=" + columnType,
> "java.sql.Types=" + functionReturnType
> };
> throw new PSQLException ("postgresql.call.wrongrtntype",arr);
> }
> result.close ();
> return true;
> }
> else
> {
> return (result != null && ((AbstractJdbc1ResultSet)result).reallyResultSet());
> }
> }
>
>
596c711
< ((AbstractJdbc1Connection)connection).ExecSQL("DEALLOCATE " + m_statementName);
---
> ((AbstractJdbc1Connection)connection).doQuery("DEALLOCATE " + m_statementName);
1839c1954
< ((AbstractJdbc1Connection)connection).ExecSQL("DEALLOCATE " + m_statementName);
---
> ((AbstractJdbc1Connection)connection).doQuery("DEALLOCATE " + m_statementName);
Index: org/postgresql/jdbc1/Jdbc1Connection.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/Jdbc1Connection.java,v
retrieving revision 1.5
diff -r1.5 Jdbc1Connection.java
48a49,54
>
> public java.sql.ResultSet createResultSet (java.sql.Statement stat) throws SQLException
> {
> // This needs doing.
> return null;
> }
cvs server: Diffing org/postgresql/jdbc2
Index: org/postgresql/jdbc2/AbstractJdbc2Connection.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2Connection.java,v
retrieving revision 1.2
diff -r1.2 AbstractJdbc2Connection.java
8a9
>
20c21
<
---
>
Index: org/postgresql/jdbc2/AbstractJdbc2ResultSet.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java,v
retrieving revision 1.10
diff -r1.10 AbstractJdbc2ResultSet.java
40a41,45
>
> AbstractJdbc2ResultSet (org.postgresql.PGConnection conn, Statement statement)
> {
> super(conn, statement);
> }
144a150,157
> else if (type.equals("refcursor"))
> {
> // We must return a ResultSet with the results packaged.
> // We should probably check that auto commit is turned off.
> String cursorName = getString(columnIndex);
> // return new RefCursorResultSet(cursorName);
> return null;
> }
757d769
<
790d801
<
Index: org/postgresql/jdbc2/AbstractJdbc2Statement.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.java,v
retrieving revision 1.8
diff -r1.8 AbstractJdbc2Statement.java
133c133,135
< throw org.postgresql.Driver.notImplemented();
---
> // I don't think this should happen, since it's a hint it should just
> // fail quietly.
> // throw org.postgresql.Driver.notImplemented();
138c140,144
< throw org.postgresql.Driver.notImplemented();
---
> // I don't think this should happen, since it's a hint it should just
> // fail quietly.
> // throw org.postgresql.Driver.notImplemented();
>
> super.nic_fetchSize = rows;
Index: org/postgresql/jdbc2/Array.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc2/Array.java,v
retrieving revision 1.18
diff -r1.18 Array.java
346c346,349
< return ((AbstractJdbc2Connection)conn).getResultSet(null, fields, rows, "OK", 1 );
---
> java.sql.Statement stat = ((AbstractJdbc2Connection)conn).createStatement();
> java.sql.ResultSet retRs = ((AbstractJdbc2Connection)conn).createResultSet(stat);
> ((AbstractJdbc2ResultSet)retRs).init(fields, rows, "OK", 1, 0, false);
> return retRs;
Index: org/postgresql/jdbc2/Jdbc2Connection.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2Connection.java,v
retrieving revision 1.5
diff -r1.5 Jdbc2Connection.java
48a49,80
>
>
> // the new method override which re-inits existing resultsets
> public java.sql.ResultSet getResultSet(java.sql.Statement stat,
> org.postgresql.jdbc1.AbstractJdbc1ResultSet rs,
> Field[] fields,
> Vector tuples,
> String status,
> int updateCount, long insertOID, boolean binaryCursor)
> throws SQLException
> {
> if (rs == null)
> return new Jdbc2ResultSet(this, stat, fields,
> tuples, status,
> updateCount, insertOID, binaryCursor);
> else
> {
> rs.init(fields, tuples, status, updateCount, insertOID, binaryCursor);
> return (java.sql.ResultSet) rs;
> }
> }
>
>
>
>
> /** new nic method **/
> public java.sql.ResultSet createResultSet (Statement statement)
> {
> return new Jdbc2ResultSet(this, statement);
> }
>
>
Index: org/postgresql/jdbc2/Jdbc2ResultSet.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2ResultSet.java,v
retrieving revision 1.6
diff -r1.6 Jdbc2ResultSet.java
15a16,21
> Jdbc2ResultSet (org.postgresql.PGConnection conn, Statement statement)
> {
> super (conn, statement);
> }
>
>
cvs server: Diffing org/postgresql/jdbc2/optional
cvs server: Diffing org/postgresql/jdbc3
Index: org/postgresql/jdbc3/AbstractJdbc3ResultSet.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc3/AbstractJdbc3ResultSet.java,v
retrieving revision 1.2
diff -r1.2 AbstractJdbc3ResultSet.java
14a15,20
> AbstractJdbc3ResultSet (org.postgresql.PGConnection conn, Statement statement)
> {
> super(conn, statement);
> }
>
>
Index: org/postgresql/jdbc3/Jdbc3Connection.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3Connection.java,v
retrieving revision 1.2
diff -r1.2 Jdbc3Connection.java
49,52d48
< public java.sql.ResultSet getResultSet(Statement statement, Field[] fields, Vector tuples, String status, int updateCount, long insertOID, boolean binaryCursor) throws SQLException
< {
< return new Jdbc3ResultSet(this, statement, fields, tuples, status, updateCount, insertOID, binaryCursor);
< }
54c50,56
< public java.sql.ResultSet getResultSet(Statement statement, Field[] fields, Vector tuples, String status, int updateCount) throws SQLException
---
>
>
>
>
>
> /** new nic method **/
> public java.sql.ResultSet createResultSet (Statement statement)
56c58
< return new Jdbc3ResultSet(this, statement, fields, tuples, status, updateCount, 0, false);
---
> return new Jdbc3ResultSet(this, statement);
Index: org/postgresql/jdbc3/Jdbc3ResultSet.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3ResultSet.java,v
retrieving revision 1.3
diff -r1.3 Jdbc3ResultSet.java
15a16,22
> Jdbc3ResultSet (org.postgresql.PGConnection conn, Statement statement)
> {
> super (conn, statement);
> }
>
>
>
cvs server: Diffing org/postgresql/largeobject
cvs server: Diffing org/postgresql/test
cvs server: Diffing org/postgresql/test/jdbc2
cvs server: Diffing org/postgresql/test/jdbc2/optional
cvs server: Diffing org/postgresql/test/jdbc3
cvs server: Diffing org/postgresql/test/util
cvs server: Diffing org/postgresql/util
Index: org/postgresql/util/Serialize.java
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/util/Serialize.java,v
retrieving revision 1.14
diff -r1.14 Serialize.java
408c408
< ResultSet rs = ((org.postgresql.jdbc1.AbstractJdbc1Connection)conn).ExecSQL(sb.toString());
---
> ResultSet rs = ((org.postgresql.jdbc1.AbstractJdbc1Connection)conn).doQuery(sb.toString());

In response to

Browse pgsql-jdbc by date

  From Date Subject
Next Message snpe 2002-11-15 02:12:35 Re: streaming result sets: progress
Previous Message Hale Pringle 2002-11-14 22:30:45 Re: PostgreSQL/Oracle/MSSQL differences (was: streaming result