summaryrefslogtreecommitdiff
path: root/src/interfaces/jdbc
AgeCommit message (Collapse)Author
2001-05-16This patch fixes a bug which occurs when setObject(1,obj) is called and objBruce Momjian
is of type Object, and is null Dave Cramer
2001-05-16Add NUMERIC tests to jdbc code.Bruce Momjian
David Esposito
2001-05-16I was trying to get a very nice FREE graphical db tool called DbVisualizerBruce Momjian
(http://www.ideit.com/products/dbvis/) to work with Postgresql and I found out the following bug: if database has views then getTables() gets the null pointer exception ('order by relname' makes the listing tree in DbVisualizer a lot useful !!) This patch should propably be applied to the the jdbc1's DatabaseMetaData.java, too. Panu Outinen
2001-05-16Change the line:Bruce Momjian
return ((c == 't') || (c == 'T')); int the getBoolean function on line 184:ish to: return ((c == 't') || (c == 'T') (c == '1')); Hunter Hillegas
2001-05-16Backpatch jdbc2 fixes to jdbc1, ANT fixes, from Peter EisentrautBruce Momjian
2001-05-16Backpatch getImportedKeys to jdbc1.Bruce Momjian
2001-05-16Backpatch ORDER BY fix to jdbc1.Bruce Momjian
2001-05-16Here's an easy patch for todays snapshot to sort the result of theBruce Momjian
public ResultSet getTables(String catalog, String schemaPattern, String Jeroen van Vianen
2001-05-16jdbc2 implementation of getImportedKeys.Bruce Momjian
Ola Sundell
2001-05-16The current implementation of BlobInputStream doesBruce Momjian
not properly handle 8-bit unsigned data as it blindly casts the byte to an int, which java most helpfully promotes to a signed type. This causes problems when you can only return -1 to indicated EOF. The following patch fixes the bug and has been tested locally on image data. Chad David
2001-05-11Stamp CVS as 7.2. Update all interface version numbers. This is theBruce Momjian
time to do it, not during beta because people are using this stuff in production sometimes.
2001-05-09that's just me again, here's normal patch for KOI8_U toBruce Momjian
jdbc/Connection.java Andy P.S. in Connection.java if encoding=="WIN" then dbEncoding is set to "Cp1252". What if it's Cyrillic "WIN"? Than it should be "Cp1251". Is there any way to fix that without making different "WIN" encodings in PostgreSQL? Andy Rysin
2001-05-09Mention new jdbc mailing list instead of interfaces list.Bruce Momjian
2001-05-08Fix paren typo in java.Bruce Momjian
2001-03-19Update Peter Mount's email address in README.Bruce Momjian
2001-03-14We're way past 6.3 ...Peter Eisentraut
2001-03-14Update. Things are now build through 'make'.Peter Eisentraut
2001-03-11Add uninstall target to Java build.Peter Eisentraut
Respect default port setting in JDBC driver. Pick up version number from Makefile.global. Change installation directory to share/java/. Document.
2001-03-06Tue Mar 06 12:05:00 GMT 2001 peter@retep.org.ukPeter Mount
- Removed org.postgresql.xa.Test from the JDBC EE driver as it's an old test class and prevented it from compiling.
2001-03-05Ok, I've split todays commit into three, the first two already done had somePeter Mount
bits in JDBC & the first set of tools into contrib. This is the third, and deals with enabling JDBC to be compiled with the main source. What it does is add a new option to configure: --with-java This option tells configure to look for ant (our build tool of choice) and if found, it then compiles both the JDBC driver and the new tools as part of the normal make. Also, when the postgresql install is done, all the .jar files are also installed into the ${PGLIB}/java directory (thought best to keep then separate) Now I had some conflicts when this applied so could someone please double check that everything is ok? Peter
2001-03-05Minor fixes...Peter Mount
2001-02-16Some more updates...Peter Mount
Fri Feb 17 15:11:00 GMT 2001 peter@retep.org.uk - Reduced the object overhead in PreparedStatement by reusing the same StringBuffer object throughout. Similarly SimpleDateStamp's are alse reused in a thread save manner. - Implemented in PreparedStatement: setNull(), setDate/Time/Timestamp using Calendar, setBlob(), setCharacterStream() - Clob's are now implemented in ResultSet & PreparedStatement! - Implemented a lot of DatabaseMetaData & ResultSetMetaData methods. We have about 18 unimplemented methods left in JDBC2 at the current time.
2001-02-14Web Feb 14 17:29:00 GMT 2001 peter@retep.org.ukPeter Mount
- Fixed bug in LargeObject & BlobOutputStream where the stream's output was not flushed when either the stream or the blob were closed. - Fixed PreparedStatement.setBinaryStream() where it ignored the length
2001-02-13Some more including the patch to DatabaseMetaData backed out by Bruce.Peter Mount
Tue Feb 13 16:33:00 GMT 2001 peter@retep.org.uk - More TestCases implemented. Refined the test suite api's. - Removed need for SimpleDateFormat in ResultSet.getDate() improving performance. - Rewrote ResultSet.getTime() so that it uses JDK api's better. Tue Feb 13 10:25:00 GMT 2001 peter@retep.org.uk - Added MiscTest to hold reported problems from users. - Fixed PGMoney. - JBuilder4/JDBCExplorer now works with Money fields. Patched Field & ResultSet (lots of methods) for this one. Also changed cash/money to return type DOUBLE not DECIMAL. This broke JBuilder as zero scale BigDecimal's can't have decimal places! - When a Statement is reused, the previous ResultSet is now closed. - Removed deprecated call in ResultSet.getTime() Thu Feb 08 18:53:00 GMT 2001 peter@retep.org.uk - Changed a couple of settings in DatabaseMetaData where 7.1 now supports those features - Implemented the DatabaseMetaData TestCase. Wed Feb 07 18:06:00 GMT 2001 peter@retep.org.uk - Added comment to Connection.isClosed() explaining why we deviate from the JDBC2 specification. - Fixed bug where the Isolation Level is lost while in autocommit mode. - Fixed bug where several calls to getTransactionIsolationLevel() returned the first call's result.
2001-02-13Remove postgresql jdbc files, per Peter.Bruce Momjian
2001-02-13Remove postgresql jdbc files, per Peter Mount.Bruce Momjian
2001-02-13Back out *inv* changes for this file. Peter want to handle it.Bruce Momjian
2001-02-09Remove last code that assumed xinv/xinx are large object files.Bruce Momjian
2001-02-07Some updates prior to retrieving a fresh cvs copy:Peter Mount
Tue Feb 06 19:00:00 GMT 2001 peter@retep.org.uk - Completed first two TestCase's for the test suite. JUnit is now recognised by ant.
2001-01-31Wed Jan 31 08:46:00 GMT 2001 peter@retep.org.ukPeter Mount
- Some minor additions to Statement to make our own extensions more portable. - Statement.close() will now call ResultSet.close() rather than just dissasociating with it.
2001-01-31Tue Jan 30 22:24:00 GMT 2001 peter@retep.org.ukPeter Mount
- Fixed bug where Statement.setMaxRows() was a global setting. Now limited to just itself. - Changed LargeObject.read(byte[],int,int) to return the actual number of bytes read (used to be void). - LargeObject now supports InputStream's! - PreparedStatement.setBinaryStream() now works! - ResultSet.getBinaryStream() now returns an InputStream that doesn't copy the blob into memory first! - Connection.isClosed() now tests to see if the connection is still alive rather than if it thinks it's alive.
2001-01-25Added an alternative constructor to PGSQLException so that debuggingPeter Mount
some more osteric bugs is easier. If only 1 arg is supplied and it's of type Exception, then that Exception's stacktrace is now included. This was done as there's been a report of an unusual bug during connection. This will make this sort of bug hunting easier from now on.
2001-01-25This patch fixes an arrayindexoutofbounds exception that was justBruce Momjian
introduced into the code. The fix is a fix to org.postgresql.core.ByteArrayDim1.java. Barry Lind
2001-01-24Attached is a revised patch that removes the static SimpleDateFormatBruce Momjian
objects that Thomas pointed out might be a problem. PPS. I have included and updated the comments from the original patch request to reflect the changes made in this revised patch. > Attached is a set of patches for a couple of bugs dealing with > timestamps in JDBC. > > Bug#1) Incorrect timestamp stored in DB if client timezone different > than DB. > The buggy implementation of setTimestamp() in PreparedStatement simply > used the toString() method of the java.sql.Timestamp object to convert > to a string to send to the database. The format of this is yyyy-MM-dd > hh:mm:ss.SSS which doesn't include any timezone information. Therefore > the DB assumes its timezone since none is specified. That is OK if the > timezone of the client and server are the same, however if they are > different the wrong timestamp is received by the server. For example if > the client is running in timezone GMT and wants to send the timestamp > for noon to a server running in PST (GMT-8 hours), then the server will > receive 2000-01-12 12:00:00.0 and interprete it as 2000-01-12 > 12:00:00-08 which is 2000-01-12 04:00:00 in GMT. The fix is to send a > format to the server that includes the timezone offset. For simplicity > sake the fix uses a SimpleDateFormat object with its timezone set to GMT > so that '+00' can be used as the timezone for postgresql. This is done > as SimpleDateFormat doesn't support formating timezones in the way > postgresql expects. > > Bug#2) Incorrect handling of partial seconds in getting timestamps from > the DB > > When the SimpleDateFormat object parses a string with a format like > yyyy-MM-dd hh:mm:ss.SS it expects the fractional seconds to be three > decimal places (time precision in java is miliseconds = three decimal > places). This seems like a bug in java to me, but it is unlikely to be > fixed anytime soon, so the postgresql code needed modification to > support the java behaviour. So for example a string of '2000-01-12 > 12:00:00.12-08' coming from the database was being converted to a > timestamp object with a value of 2000-01-12 12:00:00.012GMT-08:00. The > fix was to check for a '.' in the string and if one is found append on > an extra zero to the fractional seconds part. > > > I also did some cleanup in ResultSet.getTimestamp(). This method has > had multiple patches applied some of which resulted in code that was no > longer needed. For example the ISO timestamp format that postgresql > uses specifies the timezone as an offset like '-08'. Code was added at > one point to convert the postgresql format to the java one which is > GMT-08:00, however the old code was left around which did nothing. So > there was code that looked for yyyy-MM-dd hh:mm:sszzzzzzzzz and > yyyy-MM-dd hh:mm:sszzz. This second format would never be encountered > because zzz (i.e. -08) would be converted into the former (also note > that the SimpleDateFormat object treats zzzzzzzzz and zzz the same, the > number of z's does not matter). > > > There was another problem/fix mentioned on the email lists today by > mcannon@internet.com which is also fixed by this patch: > > Bug#3) Fractional seconds lost when getting timestamp from the DB > A patch by Jan Thomea handled the case of yyyy-MM-dd hh:mm:sszzzzzzzzz > but not the fractional seconds version yyyy-MM-dd hh:mm:ss.SSzzzzzzzzz. > The code is fixed to handle this case as well. Barry Lind
2001-01-24Removed the 8k row limit reported by DatabaseMetaDataPeter Mount
2001-01-19Fri Jan 19 08:47:00 GMT 2001 peter@retep.org.ukPeter Mount
- Applied patch submitted by John Schutz <schutz@austin.rr.com> that fixed a bug with ANT's SQL functions (not needed for building but nice to have fixed).
2001-01-18Forgot to cvs add UpdateableResultSet.java ;-)Peter Mount
2001-01-18Thu Jan 18 17:37:00 GMT 2001 peter@retep.org.ukPeter Mount
- Added new error message into errors.properties "postgresql.notsensitive" This is used by jdbc2.ResultSet when a method is called that should fetch the current value of a row from the database refreshRow() for example. - These methods no longer throw the not implemented but the new noupdate error. This is in preparation for the Updateable ResultSet support which will overide these methods by extending the existing class to implement that functionality, but needed to show something other than notimplemented: moveToCurrentRow() moveToInsertRow() rowDeleted() rowInserted() all update*() methods, except those that took the column as a String as they were already implemented to convert the String to an int. - getFetchDirection() and setFetchDirection() now throws "postgresql.notimp" as we only support one direction. The CursorResultSet will overide this when its implemented. - Created a new class under jdbc2 UpdateableResultSet which extends ResultSet and overides the relevent update methods. This allows us to implement them easily at a later date. - In jdbc2.Connection, the following methods are now implemented: createStatement(type,concurrency); getTypeMap(); setTypeMap(Map); - The JDBC2 type mapping scheme almost complete, just needs SQLInput & SQLOutput to be implemented. - Removed some Statement methods that somehow appeared in Connection. - In jdbc2.Statement() getResultSetConcurrency() getResultSetType() setResultSetConcurrency() setResultSetType() - Finally removed the old 6.5.x driver.
2001-01-18Thu Jan 18 12:24:00 GMT 2001 peter@retep.org.ukPeter Mount
- These methods in org.postgresql.jdbc2.ResultSet are now implemented: getBigDecimal(int) ie: without a scale (why did this get missed?) getBlob(int) getCharacterStream(int) getConcurrency() getDate(int,Calendar) getFetchDirection() getFetchSize() getTime(int,Calendar) getTimestamp(int,Calendar) getType() NB: Where int represents the column name, the associated version taking a String were already implemented by calling the int version. - These methods no longer throw the not implemented but the new noupdate error. This is in preparation for the Updateable ResultSet support which will overide these methods by extending the existing class to implement that functionality, but needed to show something other than notimplemented: cancelRowUpdates() deleteRow() - Added new error message into errors.properties "postgresql.noupdate" This is used by jdbc2.ResultSet when an update method is called and the ResultSet is not updateable. A new method notUpdateable() has been added to that class to throw this exception, keeping the binary size down. - Added new error message into errors.properties "postgresql.psqlnotimp" This is used instead of unimplemented when it's a feature in the backend that is preventing this method from being implemented. - Removed getKeysetSize() as its not part of the ResultSet API Thu Jan 18 09:46:00 GMT 2001 peter@retep.org.uk - Applied modified patch from Richard Bullington-McGuire <rbulling@microstate.com>. I had to modify it as some of the code patched now exists in different classes, and some of it actually patched obsolete code. Wed Jan 17 10:19:00 GMT 2001 peter@retep.org.uk - Updated Implementation to include both ANT & JBuilder - Updated README to reflect the changes since 7.0 - Created jdbc.jpr file which allows JBuilder to be used to edit the source. JBuilder _CAN_NOT_ be used to compile. You must use ANT for that. It's only to allow JBuilders syntax checking to improve the drivers source. Refer to Implementation for more details
2001-01-13Backed out:Bruce Momjian
--------------------------------------------------------------------------- Attached is a set of patches for a couple of bugs dealing with timestamps in JDBC. Bug#1) Incorrect timestamp stored in DB if client timezone different than DB.
2001-01-13Attached is a set of patches for a couple of bugs dealing withBruce Momjian
timestamps in JDBC. Bug#1) Incorrect timestamp stored in DB if client timezone different than DB. The buggy implementation of setTimestamp() in PreparedStatement simply used the toString() method of the java.sql.Timestamp object to convert to a string to send to the database. The format of this is yyyy-MM-dd hh:mm:ss.SSS which doesn't include any timezone information. Therefore the DB assumes its timezone since none is specified. That is OK if the timezone of the client and server are the same, however if they are different the wrong timestamp is received by the server. For example if the client is running in timezone GMT and wants to send the timestamp for noon to a server running in PST (GMT-8 hours), then the server will receive 2000-01-12 12:00:00.0 and interprete it as 2000-01-12 12:00:00-08 which is 2000-01-12 04:00:00 in GMT. The fix is to send a format to the server that includes the timezone offset. For simplicity sake the fix uses a SimpleDateFormat object with its timezone set to GMT so that '+00' can be used as the timezone for postgresql. This is done as SimpleDateFormat doesn't support formating timezones in the way postgresql expects. Bug#2) Incorrect handling of partial seconds in getting timestamps from the DB When the SimpleDateFormat object parses a string with a format like yyyy-MM-dd hh:mm:ss.SS it expects the fractional seconds to be three decimal places (time precision in java is miliseconds = three decimal places). This seems like a bug in java to me, but it is unlikely to be fixed anytime soon, so the postgresql code needed modification to support the java behaviour. So for example a string of '2000-01-12 12:00:00.12-08' coming from the database was being converted to a timestamp object with a value of 2000-01-12 12:00:00.012GMT-08:00. The fix was to check for a '.' in the string and if one is found append on an extra zero to the fractional seconds part. Bug#3) Performance problems In fixing the above two bugs, I noticed some things that could be improved. In PreparedStatement.setTimestamp(), PreparedStatement.setDate(), ResultSet.getTimestamp(), and ResultSet.getDate() these methods were creating a new SimpleDateFormat object everytime they were called. To avoid this unnecessary object creation overhead, I changed the code to use static variables for keeping a single instance of the needed formating objects. Also the code used the + operator for string concatenation. As everyone should know this is very inefficient and the use of StringBuffers is prefered. I also did some cleanup in ResultSet.getTimestamp(). This method has had multiple patches applied some of which resulted in code that was no longer needed. For example the ISO timestamp format that postgresql uses specifies the timezone as an offset like '-08'. Code was added at one point to convert the postgresql format to the java one which is GMT-08:00, however the old code was left around which did nothing. So there was code that looked for yyyy-MM-dd hh:mm:sszzzzzzzzz and yyyy-MM-dd hh:mm:sszzz. This second format would never be encountered because zzz (i.e. -08) would be converted into the former (also note that the SimpleDateFormat object treats zzzzzzzzz and zzz the same, the number of z's does not matter). There was another problem/fix mentioned on the email lists today by mcannon@internet.com which is also fixed by this patch: Bug#4) Fractional seconds lost when getting timestamp from the DB A patch by Jan Thomea handled the case of yyyy-MM-dd hh:mm:sszzzzzzzzz but not the fractional seconds version yyyy-MM-dd hh:mm:ss.SSzzzzzzzzz. The code is fixed to handle this case as well. Barry Lind
2000-12-28Attached are patches for two fixes to reduce memory usage by the JDBCBruce Momjian
drivers. The first fix fixes the PreparedStatement object to not allocate unnecessary objects when converting native types to Stings. The old code used the following format: (new Integer(x)).toString() whereas this can more efficiently be occompilshed by: Integer.toString(x); avoiding the unnecessary object creation. The second fix is to release some resources on the close() of a ResultSet. Currently the close() method on ResultSet is a noop. The purpose of the close() method is to release resources when the ResultSet is no longer needed. The fix is to free the tuples cached by the ResultSet when it is closed (by clearing out the Vector object that stores the tuples). This is important for my application, as I have a cache of Statement objects that I reuse. Since the Statement object maintains a reference to the ResultSet and the ResultSet kept references to the old tuples, my cache was holding on to a lot of memory. Barry Lind
2000-12-22In looking at the 7.1beta1 code for JDBC, I noticed that support wasBruce Momjian
added to support character set encodings. However I noticed that the encoding that is used isn't obtained from the DB. Since Java uses unicode UCS2 internally the character set encoding is used to translate strings from/to the DB encoding. So it seems logical that the code would get the encoding from the DB instead of the current method of requiring the user pass it as a parameter. Attached is a patch that gets the DB encoding from the DB in the same manner as is done in libpq/fe-connect.c. The patch is created off of the latest CVS sources (Connection.java version 1.10). Barry Lind
2000-12-20Finished build.xml and updated Driver.java.in and buildDriver to match how ↵Peter Mount
Makefile and ANT operate.
2000-12-19Finally created ant build.xml filePeter Mount
2000-11-25Allow jdbc to return proper server version numberBruce Momjian
Anders Bengtsson
2000-11-20Encoding patch to Connection by wrobell@posexperts.com.plPeter Mount
2000-11-10the bug was not fixed in the snapshot of November 5th. Also the enterpriseBruce Momjian
edition of the driver did not compile. I have fixed both issues again. I have attached the modified files to this email, maybe you can check them into the repository. (Fixes are marked with //FIXME). Enterprise edition driver now compiles and seems to work. Jan Thomae
2000-11-01Fixed minor bug in ResultSet for jdbc2 reported by Matthew Denner that ↵Peter Mount
absolute doesnt handle negative row numbers correctly.
2000-10-17Some more getTimestamp() fixesPeter Mount