Re: Patch for ResultSetMetaData.getColumnClassName(), ResultSet.getObject()
От | Bruce Momjian |
---|---|
Тема | Re: Patch for ResultSetMetaData.getColumnClassName(), ResultSet.getObject() |
Дата | |
Msg-id | 200206160042.g5G0gEY00147@candle.pha.pa.us обсуждение исходный текст |
Ответ на | Patch for ResultSetMetaData.getColumnClassName(), ResultSet.getObject() (Jason Davies <jason@netspade.com>) |
Список | pgsql-jdbc |
Jdbc folks, have you reviewed this patch? --------------------------------------------------------------------------- Jason Davies wrote: > Hi, > > This patch handles Types.{SMALLINT,DATE,TIME,BINARY,VARBINARY,ARRAY} > properly in ResultSetMetaData.getColumnClassName(int col). The > default return value has been improved slightly too. > > In the case of Types.{BINARY,VARBINARY} it should be a byte[] > class name, but AFAIK no such thing exists therefore I used > "java.lang.Object" instead. > > Also I optimized just a couple of things in ResultSet.getObject: > there's no need to create a new Boolean object every time and > there's no need to use (short)getInt(...) since getShort(...) > does the same thing :-) > > Thank you, --Jase > > -- Jason Davies > > jason@netspade.com [ Attachment, skipping... ] > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister > command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026 ? build ? jars ? patch.diff ? org/postgresql/Driver.java ? org/postgresql/jdbc2/ResultSetMetaData.java.diff Index: org/postgresql/jdbc1/ResultSet.java =================================================================== RCS file: /projects/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java,v retrieving revision 1.33 diff -c -r1.33 ResultSet.java *** org/postgresql/jdbc1/ResultSet.java 2002/06/07 16:46:23 1.33 --- org/postgresql/jdbc1/ResultSet.java 2002/06/08 23:58:45 *************** *** 927,935 **** switch (field.getSQLType()) { case Types.BIT: ! return new Boolean(getBoolean(columnIndex)); case Types.SMALLINT: ! return new Short((short)getInt(columnIndex)); case Types.INTEGER: return new Integer(getInt(columnIndex)); case Types.BIGINT: --- 927,935 ---- switch (field.getSQLType()) { case Types.BIT: ! return getBoolean(columnIndex) ? Boolean.TRUE : Boolean.FALSE; case Types.SMALLINT: ! return new Short(getShort(columnIndex)); case Types.INTEGER: return new Integer(getInt(columnIndex)); case Types.BIGINT: Index: org/postgresql/jdbc2/ResultSet.java =================================================================== RCS file: /projects/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java,v retrieving revision 1.52 diff -c -r1.52 ResultSet.java *** org/postgresql/jdbc2/ResultSet.java 2002/06/07 16:46:24 1.52 --- org/postgresql/jdbc2/ResultSet.java 2002/06/08 23:58:47 *************** *** 744,752 **** switch (field.getSQLType()) { case Types.BIT: ! return new Boolean(getBoolean(columnIndex)); case Types.SMALLINT: ! return new Short((short)getInt(columnIndex)); case Types.INTEGER: return new Integer(getInt(columnIndex)); case Types.BIGINT: --- 744,752 ---- switch (field.getSQLType()) { case Types.BIT: ! return getBoolean(columnIndex) ? Boolean.TRUE : Boolean.FALSE; case Types.SMALLINT: ! return new Short(getShort(columnIndex)); case Types.INTEGER: return new Integer(getInt(columnIndex)); case Types.BIGINT: Index: org/postgresql/jdbc2/ResultSetMetaData.java =================================================================== RCS file: /projects/cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/ResultSetMetaData.java,v retrieving revision 1.11 diff -c -r1.11 ResultSetMetaData.java *** org/postgresql/jdbc2/ResultSetMetaData.java 2002/02/22 03:22:31 1.11 --- org/postgresql/jdbc2/ResultSetMetaData.java 2002/06/08 23:58:59 *************** *** 471,476 **** --- 471,491 ---- // ** JDBC 2 Extensions ** // This can hook into our PG_Object mechanism + /** + * Returns the fully-qualified name of the Java class whose instances + * are manufactured if the method <code>ResultSet.getObject</code> + * is called to retrieve a value from the column. + * + * <code>ResultSet.getObject</code> may return a subclass of the class + * returned by this method. + * + * @param column the first column is 1, the second is 2, ... + * @return the fully-qualified name of the class in the Java programming + * language that would be used by the method + * <code>ResultSet.getObject</code> to retrieve the value in the specified + * column. This is the class name used for custom mapping. + * @exception SQLException if a database access error occurs + */ public String getColumnClassName(int column) throws SQLException { /* *************** *** 505,538 **** Types.TIMESTAMP,Types.TIMESTAMP */ ! int sql_type = getField(column).getSQLType(); ! switch (sql_type) ! { ! case Types.BIT: ! return("java.lang.Boolean"); ! case Types.SMALLINT: ! return("java.lang.Integer"); ! case Types.INTEGER: ! return("java.lang.Integer"); ! case Types.BIGINT: ! return("java.lang.Long"); ! case Types.NUMERIC: ! return("java.math.BigDecimal"); ! case Types.REAL: ! return("java.lang.Float"); ! case Types.DOUBLE: ! return("java.lang.Double"); ! case Types.CHAR: ! case Types.VARCHAR: ! return("java.lang.String"); ! case Types.DATE: ! case Types.TIME: ! case Types.TIMESTAMP: ! return("java.sql.Timestamp"); ! default: ! throw org.postgresql.Driver.notImplemented(); ! } ! } } --- 520,566 ---- Types.TIMESTAMP,Types.TIMESTAMP */ ! Field field = getField(column); ! int sql_type = field.getSQLType(); ! switch (sql_type) ! { ! case Types.BIT: ! return("java.lang.Boolean"); ! case Types.SMALLINT: ! return("java.lang.Short"); ! case Types.INTEGER: ! return("java.lang.Integer"); ! case Types.BIGINT: ! return("java.lang.Long"); ! case Types.NUMERIC: ! return("java.math.BigDecimal"); ! case Types.REAL: ! return("java.lang.Float"); ! case Types.DOUBLE: ! return("java.lang.Double"); ! case Types.CHAR: ! case Types.VARCHAR: ! return("java.lang.String"); ! case Types.DATE: ! return("java.sql.Date"); ! case Types.TIME: ! return("java.sql.Time"); ! case Types.TIMESTAMP: ! return("java.sql.Timestamp"); ! case Types.BINARY: ! case Types.VARBINARY: ! return("java.sql.Object"); ! case Types.ARRAY: ! return("java.sql.Array"); ! default: ! String type = field.getPGType(); ! if ("unknown".equals(type)) ! { ! return("java.lang.String"); ! } ! return("java.lang.Object"); ! } ! } }
В списке pgsql-jdbc по дате отправления: