mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
fix bug in getTime() with fractional seconds reported by Laurette Cisneros (laurette@nextbus.com)
This commit is contained in:
@ -74,12 +74,12 @@ public class Array implements java.sql.Array
|
||||
Object retVal = null;
|
||||
|
||||
ArrayList array = new ArrayList();
|
||||
|
||||
|
||||
/* Check if the String is also not an empty array
|
||||
* otherwise there will be an exception thrown below
|
||||
* in the ResultSet.toX with an empty string.
|
||||
* -- Doug Fields <dfields-pg-jdbc@pexicom.com> Feb 20, 2002 */
|
||||
|
||||
|
||||
if ( rawString != null && !rawString.equals("{}") )
|
||||
{
|
||||
char[] chars = rawString.toCharArray();
|
||||
@ -166,7 +166,7 @@ public class Array implements java.sql.Array
|
||||
case Types.TIME:
|
||||
retVal = new java.sql.Time[ count ];
|
||||
for ( ; count > 0; count-- )
|
||||
((java.sql.Time[])retVal)[i++] = ResultSet.toTime( arrayContents[(int)index++] );
|
||||
((java.sql.Time[])retVal)[i++] = ResultSet.toTime( arrayContents[(int)index++], rs, getBaseTypeName() );
|
||||
break;
|
||||
case Types.TIMESTAMP:
|
||||
retVal = new Timestamp[ count ];
|
||||
|
@ -388,7 +388,7 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
|
||||
*/
|
||||
public Time getTime(int columnIndex) throws SQLException
|
||||
{
|
||||
return toTime( getString(columnIndex) );
|
||||
return toTime( getString(columnIndex), this, fields[columnIndex-1].getPGType() );
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1626,15 +1626,32 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
|
||||
}
|
||||
}
|
||||
|
||||
public static Time toTime(String s) throws SQLException
|
||||
public static Time toTime(String s, ResultSet resultSet, String pgDataType) throws SQLException
|
||||
{
|
||||
if (s == null)
|
||||
return null; // SQL NULL
|
||||
// length == 8: SQL Time
|
||||
// length > 8: SQL Timestamp
|
||||
try
|
||||
{
|
||||
return java.sql.Time.valueOf((s.length() == 8) ? s : s.substring(11, 19));
|
||||
if (s.length() == 8) {
|
||||
//value is a time value
|
||||
return java.sql.Time.valueOf(s);
|
||||
} else if (s.indexOf(".") == 8) {
|
||||
//value is a time value with fractional seconds
|
||||
java.sql.Time l_time = java.sql.Time.valueOf(s.substring(0,8));
|
||||
String l_strMillis = s.substring(9);
|
||||
if (l_strMillis.length() > 3)
|
||||
l_strMillis = l_strMillis.substring(0,3);
|
||||
int l_millis = Integer.parseInt(l_strMillis);
|
||||
if (l_millis < 10) {
|
||||
l_millis = l_millis * 100;
|
||||
} else if (l_millis < 100) {
|
||||
l_millis = l_millis * 10;
|
||||
}
|
||||
return new java.sql.Time(l_time.getTime() + l_millis);
|
||||
} else {
|
||||
//value is a timestamp
|
||||
return new java.sql.Time(toTimestamp(s, resultSet, pgDataType).getTime());
|
||||
}
|
||||
}
|
||||
catch (NumberFormatException e)
|
||||
{
|
||||
|
Reference in New Issue
Block a user