Re: streaming result sets: progress
От | Haris Peco |
---|---|
Тема | Re: streaming result sets: progress |
Дата | |
Msg-id | 200211181437.04884.snpe@snpe.co.yu обсуждение исходный текст |
Ответ на | Re: streaming result sets: progress (Nic Ferrier <nferrier@tapsellferrier.co.uk>) |
Список | pgsql-jdbc |
I have tried. DatabaseMetaData is fine, but ResultSet.[get|set]FetchSize don't work Prepared command don't work, but my greatest problem are trasnaction I hope that cursor in 7.4 will be out of a transaction Can Yoy yet another : set driver's flag btw jdbc:pgsql:...?cursor=yes for use cursor or old way regards Haris Peco On Saturday 16 November 2002 11:47 pm, Nic Ferrier wrote: > Message-ID: <87heehjcv3.fsf@pooh-sticks-bridge.tapsellferrier.co.uk> > Lines: 19 > MIME-Version: 1.0 > Content-Type: multipart/mixed; boundary="=-=-=" > --text follows this line-- > --=-=-= > > snpe <snpe@snpe.co.yu> writes: > > Hello Nic, > > Please call patch with ; > > diff -Naur olddir newdir > > and add in message like attach > > This is add PGResultSet > > I can't open this patch > > Here's a diff based patch. > > > > --=-=-= > Content-Type: text/patch > Content-Disposition: attachment; filename=nic-diff > Content-Description: patch for query stuff. > > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/PGConnection.java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/PGConnection.java --- > currentcvs/src/interfaces/jdbc/org/postgresql/PGConnection.java Fri Sep 6 > 21:23:05 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/PGConnection.java Thu Nov 7 > 20:38:44 2002 @@ -77,5 +77,15 @@ > public PGNotification[] getNotifications(); > > > + > + > + // 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); > } > > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/PGResultSet.java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/PGResultSet.java --- > currentcvs/src/interfaces/jdbc/org/postgresql/PGResultSet.java Thu Jan 1 > 00:00:00 1970 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/PGResultSet.java Sat Nov 2 > 01:18:43 2002 @@ -0,0 +1,16 @@ > +package org.postgresql; > + > + > +import java.util.Vector; > + > + > +/** PG base rep of a Res Set. > + */ > +public interface PGResultSet > +{ > + > + /** The init method is what is used to put the data into a ResultSet. > + */ > + public void init (Field[] fields, Vector tuples, String status, > + int update_count, long insert_oid, boolean binaryCursor); > +} > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/core/Encoding.java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/core/Encoding.java --- > currentcvs/src/interfaces/jdbc/org/postgresql/core/Encoding.java Sat Nov 16 > 22:24:28 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/core/Encoding.java Fri Nov 15 > 09:30:46 2002 @@ -8,7 +8,7 @@ > /* > * Converts to and from the character encoding used by the backend. > * > - * $Id: Encoding.java,v 1.8 2002/11/14 05:35:45 barry Exp $ > + * $Id: Encoding.java,v 1.7.2.1 2002/11/14 05:54:39 barry Exp $ > */ > > public class Encoding > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/core/QueryExecutor.java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/core/QueryExecutor.java --- > currentcvs/src/interfaces/jdbc/org/postgresql/core/QueryExecutor.java Sat > Nov 16 22:24:28 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/core/QueryExecutor.java Fri > Nov 15 09:30:50 2002 @@ -13,17 +13,61 @@ > * <p>The lifetime of a QueryExecutor object is from sending the query > * until the response has been received from the backend. > * > - * $Id: QueryExecutor.java,v 1.17 2002/11/14 05:35:45 barry Exp $ > + * $Id: QueryExecutor.java,v 1.16.2.1 2002/11/14 05:54:39 barry Exp $ > */ > > public class QueryExecutor > { > + /** 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; > > - 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; > > public QueryExecutor(String[] p_sqlFrags, Object[] p_binds, > java.sql.Statement statement, > @@ -33,7 +77,7 @@ > { > this.m_sqlFrags = p_sqlFrags; > this.m_binds = p_binds; > - this.statement = statement; > + this.statement = statement; > this.pg_stream = pg_stream; > this.connection = > (org.postgresql.jdbc1.AbstractJdbc1Connection)connection; > > @@ -43,6 +87,7 @@ > maxRows = 0; > } > > + > private Field[] fields = null; > private Vector tuples = new Vector(); > private boolean binaryCursor = false; > @@ -51,8 +96,10 @@ > private long insert_oid = 0; > private int maxRows; > > + > /* > * Execute a query on the backend. > + * > */ > public java.sql.ResultSet execute() throws SQLException > { > @@ -130,7 +177,12 @@ > if ( errorMessage != null ) > throw new SQLException( errorMessage.toString() ); > > - 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; > } > } > > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Connection >.java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Connection. >java --- > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Connection >.java Sat Nov 16 22:24:29 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Connection. >java Fri Nov 15 09:34:39 2002 @@ -14,7 +14,7 @@ > import org.postgresql.util.*; > > > -/* $Header: > /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/Abs >tractJdbc1Connection.java,v 1.13 2002/11/14 05:35:45 barry Exp $ +/* > $Header: > /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/Abs >tractJdbc1Connection.java,v 1.12.2.1 2002/11/14 05:54:39 barry Exp $ * This > class defines methods of the jdbc1 specification. This class is * extended > by org.postgresql.jdbc2.AbstractJdbc2Connection which adds the jdbc2 * > methods. The real Connection class (for jdbc1) is > org.postgresql.jdbc1.Jdbc1Connection @@ -350,9 +350,10 @@ > // Set datestyle and fetch db encoding in a single call, to avoid making > // more than one round trip to the backend during connection startup. > > - java.sql.ResultSet resultSet = > - ExecSQL("set datestyle to 'ISO'; select version(), " + encodingQuery + > ";"); > > + java.sql.ResultSet resultSet > + = doQuery("set datestyle to 'ISO'; select version(), " + encodingQuery > + ";"); + > if (! resultSet.next()) > { > throw new PSQLException("postgresql.con.failed", "failed getting > backend encoding"); @@ -373,7 +374,7 @@ > if (haveMinimumServerVersion("7.3")) > { > java.sql.ResultSet acRset = > - ExecSQL("set client_encoding = 'UNICODE'; show autocommit"); > + doQuery("set client_encoding = 'UNICODE'; show autocommit"); > > //set encoding to be unicode > encoding = Encoding.getEncoding("UNICODE", null); > @@ -388,7 +389,7 @@ > //to make the setting permanent > if (acRset.getString(1).equals("off")) > { > - ExecSQL("set autocommit = on; commit;"); > + doQuery("set autocommit = on; commit;"); > } > } > > @@ -409,13 +410,6 @@ > return this_driver; > } > > - // 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; > > /* > * This adds a warning to the warning chain. > @@ -445,66 +439,40 @@ > //} > } > > - /* > - * 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. > */ > - public java.sql.ResultSet ExecSQL(String sql) throws SQLException > + public java.sql.ResultSet doQuery (String s) throws SQLException > { > - 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; > } > > - /* > - * 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 - { > - if (isClosed()) > - { > - throw new PSQLException("postgresql.con.closed"); > - } > - 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. > * > * @param p_sqlFragmentss the SQL statement parts to be executed > * @param p_binds the SQL bind values > - * @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. > * @exception SQLException if a database error occurs > */ > - public java.sql.ResultSet ExecSQL(String[] p_sqlFragments, Object[] > p_binds, java.sql.Statement stat) throws SQLException - { > - if (isClosed()) > - { > - throw new PSQLException("postgresql.con.closed"); > - } > - 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); > } > > + > /* > * In SQL, a result table can be retrieved through a cursor that > * is named. The current row of a result can be updated or deleted > @@ -939,27 +907,27 @@ > //We do the select to ensure a transaction is in process > //before we do the commit to avoid warning messages > //from issuing a commit without a transaction in process > - ExecSQL("select 1; commit; set autocommit = on;"); > + doQuery("select 1; commit; set autocommit = on;"); > } > else > { > - ExecSQL("end"); > + doQuery("end"); > } > } > else > { > if (haveMinimumServerVersion("7.3")) > { > - ExecSQL("set autocommit = off; " + getIsolationLevelSQL()); > + doQuery("set autocommit = off; " + getIsolationLevelSQL()); > } > else if (haveMinimumServerVersion("7.1")) > { > - ExecSQL("begin;" + getIsolationLevelSQL()); > + doQuery("begin;" + getIsolationLevelSQL()); > } > else > { > - ExecSQL("begin"); > - ExecSQL(getIsolationLevelSQL()); > + doQuery("begin"); > + doQuery(getIsolationLevelSQL()); > } > } > this.autoCommit = autoCommit; > @@ -993,17 +961,17 @@ > return ; > if (haveMinimumServerVersion("7.3")) > { > - ExecSQL("commit; " + getIsolationLevelSQL()); > + doQuery("commit; " + getIsolationLevelSQL()); > } > else if (haveMinimumServerVersion("7.1")) > { > - ExecSQL("commit;begin;" + getIsolationLevelSQL()); > + doQuery("commit;begin;" + getIsolationLevelSQL()); > } > else > { > - ExecSQL("commit"); > - ExecSQL("begin"); > - ExecSQL(getIsolationLevelSQL()); > + doQuery("commit"); > + doQuery("begin"); > + doQuery(getIsolationLevelSQL()); > } > } > > @@ -1024,17 +992,17 @@ > //we don't automatically start a transaction > //but let the server functionality automatically start > //one when the first statement is executed > - ExecSQL("rollback; " + getIsolationLevelSQL()); > + doQuery("rollback; " + getIsolationLevelSQL()); > } > else if (haveMinimumServerVersion("7.1")) > { > - ExecSQL("rollback; begin;" + getIsolationLevelSQL()); > + doQuery("rollback; begin;" + getIsolationLevelSQL()); > } > else > { > - ExecSQL("rollback"); > - ExecSQL("begin"); > - ExecSQL(getIsolationLevelSQL()); > + doQuery("rollback"); > + doQuery("begin"); > + doQuery(getIsolationLevelSQL()); > } > } > > @@ -1049,14 +1017,14 @@ > String sql = "show transaction isolation level"; > String level = null; > if (haveMinimumServerVersion("7.3")) { > - ResultSet rs = ExecSQL(sql); > + ResultSet rs = doQuery(sql); > if (rs.next()) { > level = rs.getString(1); > } > rs.close(); > } else { > clearWarnings(); > - ExecSQL(sql); > + doQuery(sql); > SQLWarning warning = getWarnings(); > if (warning != null) > { > @@ -1121,7 +1089,7 @@ > new Integer(isolationLevel)); > } > } > - ExecSQL(isolationLevelSQL); > + doQuery(isolationLevelSQL); > } > > /* > @@ -1264,7 +1232,7 @@ > } else { > sql = "SELECT typname FROM pg_type WHERE oid = " +oid; > } > - ResultSet result = ExecSQL(sql); > + ResultSet result = doQuery(sql); > if (((AbstractJdbc1ResultSet)result).getColumnCount() != 1 || > ((AbstractJdbc1ResultSet)result).getTupleCount() != 1) { throw new > PSQLException("postgresql.unexpected"); > } > @@ -1305,7 +1273,7 @@ > } else { > sql = "SELECT oid FROM pg_type WHERE typname='" + typeName + "'"; > } > - ResultSet result = ExecSQL(sql); > + ResultSet result = doQuery(sql); > if (((AbstractJdbc1ResultSet)result).getColumnCount() != 1 || > ((AbstractJdbc1ResultSet)result).getTupleCount() != 1) throw new > PSQLException("postgresql.unexpected"); > result.next(); > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMe >taData.java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMet >aData.java --- > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMe >taData.java Mon Nov 11 07:11:12 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMet >aData.java Fri Nov 15 09:31:00 2002 @@ -1913,7 +1913,9 @@ > } > rs.close(); > > - 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; > } > > /* > @@ -2199,7 +2201,10 @@ > tuple[0] = types[i].getBytes(); > v.addElement(tuple); > } > - 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; > } > > /* > @@ -2366,7 +2371,9 @@ > } > rs.close(); > > - 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; > } > > /* > @@ -2478,7 +2485,10 @@ > } > } > rs.close(); > - 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; > } > > /* > @@ -2580,7 +2590,9 @@ > } > rs.close(); > > - 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; > } > > private static void sortStringArray(String s[]) { > @@ -2773,7 +2785,10 @@ > tuple[7] = > Integer.toString(java.sql.DatabaseMetaData.bestRowNotPseudo).getBytes(); > v.addElement(tuple); > } > - 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; > } > > /* > @@ -2843,7 +2858,9 @@ > /* Perhaps we should check that the given > * catalog.schema.table actually exists. -KJ > */ > - 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; > } > > /* > @@ -3193,7 +3210,9 @@ > tuples.addElement(tuple); > } > > - 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; > } > > /* > @@ -3478,7 +3497,10 @@ > v.addElement(tuple); > } > rs.close(); > - 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; > } > > /* > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1ResultSet. >java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1ResultSet.j >ava --- > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1ResultSet. >java Sat Oct 19 22:10:36 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1ResultSet.j >ava Fri Nov 15 23:29:26 2002 @@ -18,7 +18,7 @@ > * extended by org.postgresql.jdbc2.AbstractJdbc2ResultSet which adds the > jdbc2 * methods. The real ResultSet class (for jdbc1) is > org.postgresql.jdbc1.Jdbc1ResultSet */ > -public abstract class AbstractJdbc1ResultSet > +public abstract class AbstractJdbc1ResultSet implements > org.postgresql.PGResultSet { > > protected Vector rows; // The results > @@ -42,7 +42,13 @@ > public byte[][] rowBuffer = null; > > > - 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) > { > this.connection = conn; > this.statement = statement; > @@ -50,6 +56,9 @@ > this.rows = tuples; > this.status = status; > this.updateCount = updateCount; > + > + System.out.println(getClass().getName() + " updateCount = " + > updateCount); + > this.insertOID = insertOID; > this.this_row = null; > this.current_row = -1; > @@ -57,13 +66,63 @@ > } > > > + /*** 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. > public boolean next() throws SQLException > { > if (rows == null) > throw new PSQLException("postgresql.con.closed"); > > if (++current_row >= rows.size()) > - return false; > + { > + int fetchSize = ((AbstractJdbc1Statement)statement).fetchSize; > + // Must be false if we weren't batching. > + if (fetchSize == 0) > + 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??? > + String cursorName = > ((AbstractJdbc1Statement)statement).m_statementName; + sql[0] = "FETCH > FORWARD " + fetchSize + " FROM " + cursorName + " ;"; > + ((AbstractJdbc1Connection)connection).execSQL(sql, binds, statement, > (java.sql.ResultSet)this); + > + // Test the new rows array. > + if (rows.size() == 0) > + return false; > + // Otherwise reset the counter and let it go on... > + current_row = 0; > + } > > this_row = (byte [][])rows.elementAt(current_row); > > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement. >java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.j >ava --- > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement. >java Sat Nov 16 22:24:29 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.j >ava Fri Nov 15 23:12:53 2002 @@ -8,7 +8,7 @@ > import org.postgresql.largeobject.*; > import org.postgresql.util.*; > > -/* $Header: > /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/Abs >tractJdbc1Statement.java,v 1.13 2002/11/14 05:35:45 barry Exp $ +/* $Header: > /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/Abs >tractJdbc1Statement.java,v 1.12.2.1 2002/11/14 05:54:39 barry Exp $ * This > class defines methods of the jdbc1 specification. This class is * extended > by org.postgresql.jdbc2.AbstractJdbc2Statement which adds the jdbc2 * > methods. The real Statement class (for jdbc1) is > org.postgresql.jdbc1.Jdbc1Statement @@ -25,6 +25,9 @@ > /** Maximum number of rows to return, 0 = unlimited */ > protected int maxrows = 0; > > + /** Number of rows to get in a batch. */ > + protected int fetchSize = 0; > + > /** Timeout (in seconds) for a query (not used) */ > protected int timeout = 0; > > @@ -48,7 +51,7 @@ > private String[] m_executeSqlFragments; > protected Object[] m_binds = new Object[0]; > private String[] m_bindTypes = new String[0]; > - private String m_statementName = null; > + protected String m_statementName = null; > private boolean m_useServerPrepare = false; > private static int m_preparedCount = 1; > > @@ -117,7 +120,7 @@ > > } > > - > + > /* > * Execute a SQL statement that retruns a single ResultSet > * > @@ -133,7 +136,7 @@ > //If we have already created a server prepared statement, we need > //to deallocate the existing one > if (m_statementName != null) { > - ((AbstractJdbc1Connection)connection).ExecSQL("DEALLOCATE " + > m_statementName); > + ((AbstractJdbc1Connection)connection).doQuery("DEALLOCATE " + > m_statementName); m_statementName = null; > m_origSqlFragments = null; > m_executeSqlFragments = null; > @@ -150,7 +153,10 @@ > */ > public java.sql.ResultSet executeQuery() throws SQLException > { > - this.execute(); > + if (fetchSize > 0) > + this.nic_execute(); > + else > + this.execute(); > while (result != null && > !((AbstractJdbc1ResultSet)result).reallyResultSet()) result = > ((AbstractJdbc1ResultSet)result).getNext(); > if (result == null) > @@ -175,7 +181,7 @@ > //If we have already created a server prepared statement, we need > //to deallocate the existing one > if (m_statementName != null) { > - ((AbstractJdbc1Connection)connection).ExecSQL("DEALLOCATE " + > m_statementName); > + ((AbstractJdbc1Connection)connection).doQuery("DEALLOCATE " + > m_statementName); m_statementName = null; > m_origSqlFragments = null; > m_executeSqlFragments = null; > @@ -219,7 +225,7 @@ > //If we have already created a server prepared statement, we need > //to deallocate the existing one > if (m_statementName != null) { > - ((AbstractJdbc1Connection)connection).ExecSQL("DEALLOCATE " + > m_statementName); > + ((AbstractJdbc1Connection)connection).doQuery("DEALLOCATE " + > m_statementName); m_statementName = null; > m_origSqlFragments = null; > m_executeSqlFragments = null; > @@ -317,7 +323,9 @@ > } > > // New in 7.1, pass Statement so that ExecSQL can customise to it > - result = ((AbstractJdbc1Connection)connection).ExecSQL(m_sqlFragments, > m_binds, (java.sql.Statement)this); + result = > ((AbstractJdbc1Connection)connection).createResultSet((java.sql.Statement)t >his); + ((AbstractJdbc1Connection)connection).execSQL(m_sqlFragments, > m_binds, + (java.sql.Statement)this, result); > > //If we are executing a callable statement function set the return data > if (isFunction) > @@ -341,6 +349,110 @@ > } > } > > + /** 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++; > + // The static bit to prepend to all querys. > + String cursDecl = "BEGIN; DECLARE " + m_statementName + " CURSOR FOR "; > + String endCurs = " FETCH FORWARD " + 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()); + } > + } > + > + > /* > * setCursorName defines the SQL cursor name that will be used by > * subsequent execute methods. This name can then be used in SQL > @@ -593,7 +705,7 @@ > > // If using server prepared statements deallocate them > if (m_useServerPrepare && m_statementName != null) { > - ((AbstractJdbc1Connection)connection).ExecSQL("DEALLOCATE " + > m_statementName); > + ((AbstractJdbc1Connection)connection).doQuery("DEALLOCATE " + > m_statementName); } > > // Disasociate it from us (For Garbage Collection) > @@ -1912,7 +2024,7 @@ > //If turning server prepared statements off deallocate statement > //and reset statement name > if (m_useServerPrepare != flag && !flag) > - ((AbstractJdbc1Connection)connection).ExecSQL("DEALLOCATE " + > m_statementName); > + ((AbstractJdbc1Connection)connection).doQuery("DEALLOCATE " + > m_statementName); m_statementName = null; > m_useServerPrepare = flag; > } else { > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc1/Jdbc1Connection.java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc1/Jdbc1Connection.java --- > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc1/Jdbc1Connection.java Fr >i Sep 6 21:23:06 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc1/Jdbc1Connection.java Thu > Nov 7 22:27:15 2002 @@ -46,6 +46,12 @@ > return new Jdbc1ResultSet(this, stat, fields, tuples, status, > updateCount, 0, false); } > > + > + public java.sql.ResultSet createResultSet (java.sql.Statement stat) > throws SQLException + { > + // This needs doing. > + return null; > + } > } > > > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2Connection >.java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2Connection. >java --- > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2Connection >.java Fri Sep 6 21:23:06 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2Connection. >java Sat Oct 12 19:37:33 2002 @@ -6,6 +6,7 @@ > import java.sql.*; > import org.postgresql.util.PSQLException; > > + > /* $Header: > /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc2/Abs >tractJdbc2Connection.java,v 1.2 2002/09/06 21:23:06 momjian Exp $ * This > class defines methods of the jdbc2 specification. This class extends * > org.postgresql.jdbc1.AbstractJdbc1Connection which provides the jdbc1 @@ > -17,7 +18,7 @@ > * The current type mappings > */ > protected java.util.Map typemap; > - > + > public java.sql.Statement createStatement() throws SQLException > { > // The spec says default of TYPE_FORWARD_ONLY but everyone is used to > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet. >java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.j >ava --- > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet. >java Mon Nov 4 06:42:33 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.j >ava Fri Nov 15 09:52:10 2002 @@ -38,6 +38,11 @@ > protected PreparedStatement deleteStatement = null; > private PreparedStatement selectStatement = null; > > + > + AbstractJdbc2ResultSet (org.postgresql.PGConnection conn, Statement > statement) + { > + super(conn, statement); > + } > > > public AbstractJdbc2ResultSet(org.postgresql.PGConnection conn, Statement > statement, Field[] fields, Vector tuples, String status, int updateCount, > long insertOID, boolean binaryCursor) @@ -142,6 +147,14 @@ > { > return getString(columnIndex); > } > + 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; > + } > else > { > return connection.getObject(field.getPGType(), > getString(columnIndex)); @@ -366,9 +379,7 @@ > > public int getFetchSize() throws SQLException > { > - // In this implementation we return the entire result set, so > - // here return the number of rows we have. Sub-classes can return a > proper - // value > + // Returning the current batch size seems the right thing to do. > return rows.size(); > } > > @@ -754,7 +765,6 @@ > } > > updateValue(columnIndex, theData); > - > } > > > @@ -787,7 +797,6 @@ > throw new PSQLException("postgresql.updateable.ioerror" + ie); > } > updateValue(columnIndex, theData); > - > } > > > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2Statement. >java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.j >ava --- > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2Statement. >java Wed Oct 30 04:33:29 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.j >ava Fri Nov 15 09:47:27 2002 @@ -115,7 +115,7 @@ > > public int getFetchSize() throws SQLException > { > - return 0; > + return super.fetchSize; > } > > public int getResultSetConcurrency() throws SQLException > @@ -130,12 +130,14 @@ > > public void setFetchDirection(int direction) throws SQLException > { > - 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(); > } > > public void setFetchSize(int rows) throws SQLException > { > - throw org.postgresql.Driver.notImplemented(); > + super.fetchSize = rows; > } > > public void setResultSetConcurrency(int value) throws SQLException > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc2/Array.java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc2/Array.java --- > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc2/Array.java Fri Sep 6 > 21:23:06 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc2/Array.java Thu Nov 7 > 23:32:30 2002 @@ -343,7 +343,10 @@ > default: > throw org.postgresql.Driver.notImplemented(); > } > - 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; > } > > public String toString() > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2Connection.java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2Connection.java --- > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2Connection.java Fr >i Sep 6 21:23:06 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2Connection.java Thu > Nov 7 23:29:13 2002 @@ -46,6 +46,38 @@ > return metadata; > } > > + > + > + // 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); > + } > + > + > public java.sql.ResultSet getResultSet(Statement statement, Field[] > fields, Vector tuples, String status, int updateCount, long insertOID, > boolean binaryCursor) throws SQLException { > return new Jdbc2ResultSet(this, statement, fields, tuples, status, > updateCount, insertOID, binaryCursor); diff --exclude .#* --exclude > Makefile --exclude build.xml --exclude filelis* --exclude Driver.java > --exclude CVS --exclude *.jar --exclude *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2ResultSet.java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2ResultSet.java --- > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2ResultSet.java Wed > Sep 11 05:38:45 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2ResultSet.java Wed > Nov 6 12:19:43 2002 @@ -13,6 +13,12 @@ > public class Jdbc2ResultSet extends > org.postgresql.jdbc2.AbstractJdbc2ResultSet implements java.sql.ResultSet { > > + Jdbc2ResultSet (org.postgresql.PGConnection conn, Statement statement) > + { > + super (conn, statement); > + } > + > + > public Jdbc2ResultSet(Jdbc2Connection conn, Statement statement, Field[] > fields, Vector tuples, String status, int updateCount, long insertOID, > boolean binaryCursor) { > super(conn, statement, fields, tuples, status, updateCount, insertOID, > binaryCursor); diff --exclude .#* --exclude Makefile --exclude build.xml > --exclude filelis* --exclude Driver.java --exclude CVS --exclude *.jar > --exclude *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc3/AbstractJdbc3ResultSet. >java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc3/AbstractJdbc3ResultSet.j >ava --- > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc3/AbstractJdbc3ResultSet. >java Fri Sep 6 21:23:06 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc3/AbstractJdbc3ResultSet.j >ava Thu Nov 14 23:14:05 2002 @@ -12,6 +12,12 @@ > public abstract class AbstractJdbc3ResultSet extends > org.postgresql.jdbc2.AbstractJdbc2ResultSet { > > + AbstractJdbc3ResultSet (org.postgresql.PGConnection conn, Statement > statement) + { > + super(conn, statement); > + } > + > + > public AbstractJdbc3ResultSet(org.postgresql.PGConnection conn, Statement > statement, org.postgresql.Field[] fields, Vector tuples, String status, int > updateCount, long insertOID, boolean binaryCursor) { > super (conn, statement, fields, tuples, status, updateCount, insertOID, > binaryCursor); diff --exclude .#* --exclude Makefile --exclude build.xml > --exclude filelis* --exclude Driver.java --exclude CVS --exclude *.jar > --exclude *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3Connection.java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3Connection.java --- > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3Connection.java Fr >i Sep 6 21:23:06 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3Connection.java Thu > Nov 14 23:12:57 2002 @@ -46,14 +46,16 @@ > return metadata; > } > > - 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); - } > > - 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) > { > - return new Jdbc3ResultSet(this, statement, fields, tuples, status, > updateCount, 0, false); + return new Jdbc3ResultSet(this, statement); > } > > } > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3ResultSet.java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3ResultSet.java --- > currentcvs/src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3ResultSet.java Wed > Sep 11 05:38:45 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3ResultSet.java Thu > Nov 14 23:13:35 2002 @@ -13,6 +13,13 @@ > public class Jdbc3ResultSet extends > org.postgresql.jdbc3.AbstractJdbc3ResultSet implements java.sql.ResultSet { > > + Jdbc3ResultSet (org.postgresql.PGConnection conn, Statement statement) > + { > + super (conn, statement); > + } > + > + > + > public Jdbc3ResultSet(Jdbc3Connection conn, Statement statement, Field[] > fields, Vector tuples, String status, int updateCount, long insertOID, > boolean binaryCursor) { > super(conn, statement, fields, tuples, status, updateCount, insertOID, > binaryCursor); diff --exclude .#* --exclude Makefile --exclude build.xml > --exclude filelis* --exclude Driver.java --exclude CVS --exclude *.jar > --exclude *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/test/jdbc2/DatabaseMetaDataTe >st.java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/test/jdbc2/DatabaseMetaDataTes >t.java --- > currentcvs/src/interfaces/jdbc/org/postgresql/test/jdbc2/DatabaseMetaDataTe >st.java Mon Nov 11 07:11:12 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/test/jdbc2/DatabaseMetaDataTes >t.java Fri Nov 15 09:31:03 2002 @@ -9,7 +9,7 @@ > * > * PS: Do you know how difficult it is to type on a train? ;-) > * > - * $Id: DatabaseMetaDataTest.java,v 1.16 2002/11/11 07:11:12 barry Exp $ > + * $Id: DatabaseMetaDataTest.java,v 1.15.2.1 2002/11/11 07:30:08 barry Exp > $ */ > > public class DatabaseMetaDataTest extends TestCase > diff --exclude .#* --exclude Makefile --exclude build.xml --exclude > filelis* --exclude Driver.java --exclude CVS --exclude *.jar --exclude > *.class --exclude *~ -Naur > currentcvs/src/interfaces/jdbc/org/postgresql/util/Serialize.java > pgsql-cvs/src/interfaces/jdbc/org/postgresql/util/Serialize.java --- > currentcvs/src/interfaces/jdbc/org/postgresql/util/Serialize.java Tue Oct > 1 00:39:02 2002 +++ > pgsql-cvs/src/interfaces/jdbc/org/postgresql/util/Serialize.java Thu Nov 7 > 23:29:29 2002 @@ -405,7 +405,7 @@ > > if (Driver.logDebug) > Driver.debug("Serialize.store: " + sb.toString() ); > - ResultSet rs = > ((org.postgresql.jdbc1.AbstractJdbc1Connection)conn).ExecSQL(sb.toString()) >; + ResultSet rs = > ((org.postgresql.jdbc1.AbstractJdbc1Connection)conn).doQuery(sb.toString()) >; > > // fetch the OID for returning > if (update) > > --=-=-= > > > > > Nic > > --=-=-=-- > > > ---------------------------(end of broadcast)--------------------------- > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
В списке pgsql-jdbc по дате отправления: