提交 7a9ef7ee 编写于 作者: B Barry Lind

fixed bug in ResultSet. Version 1.29 backed out two previous fixes (1.26 and...

fixed bug in ResultSet.  Version 1.29 backed out two previous fixes (1.26 and 1.25).  This checkin add back those two previous fixes.  Problem reported by Daniel Germain
上级 3c879e37
...@@ -445,7 +445,13 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu ...@@ -445,7 +445,13 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
String s = getString(columnIndex); String s = getString(columnIndex);
if (s == null) if (s == null)
return null; return null;
return java.sql.Date.valueOf(s); // length == 10: SQL Date
// length > 10: SQL Timestamp, assumes PGDATESTYLE=ISO
try {
return java.sql.Date.valueOf((s.length() == 10) ? s : s.substring(0,10));
} catch (NumberFormatException e) {
throw new PSQLException("postgresql.res.baddate", s);
}
} }
/** /**
......
...@@ -1554,14 +1554,26 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu ...@@ -1554,14 +1554,26 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
{ {
if (s == null) if (s == null)
return null; return null;
return java.sql.Date.valueOf(s); // length == 10: SQL Date
// length > 10: SQL Timestamp, assumes PGDATESTYLE=ISO
try {
return java.sql.Date.valueOf((s.length() == 10) ? s : s.substring(0,10));
} catch (NumberFormatException e) {
throw new PSQLException("postgresql.res.baddate", s);
}
} }
public static Time toTime(String s) throws SQLException public static Time toTime(String s) throws SQLException
{ {
if (s == null) if (s == null)
return null; // SQL NULL return null; // SQL NULL
return java.sql.Time.valueOf(s); // length == 8: SQL Time
// length > 8: SQL Timestamp
try {
return java.sql.Time.valueOf((s.length() == 8) ? s : s.substring(11,19));
} catch (NumberFormatException e) {
throw new PSQLException("postgresql.res.badtime",s);
}
} }
public static Timestamp toTimestamp(String s, ResultSet resultSet) throws SQLException public static Timestamp toTimestamp(String s, ResultSet resultSet) throws SQLException
...@@ -1598,9 +1610,17 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu ...@@ -1598,9 +1610,17 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
resultSet.sbuf.setLength(0); resultSet.sbuf.setLength(0);
resultSet.sbuf.append(s); resultSet.sbuf.append(s);
//we are looking to see if the backend has appended on a timezone.
//currently postgresql will return +/-HH:MM or +/-HH for timezone offset
//(i.e. -06, or +06:30, note the expectation of the leading zero for the
//hours, and the use of the : for delimiter between hours and minutes)
//if the backend ISO format changes in the future this code will
//need to be changed as well
char sub = resultSet.sbuf.charAt(resultSet.sbuf.length() - 3); char sub = resultSet.sbuf.charAt(resultSet.sbuf.length() - 3);
if (sub == '+' || sub == '-') if (sub == '+' || sub == '-')
{ {
//we have found timezone info of format +/-HH
resultSet.sbuf.setLength(resultSet.sbuf.length() - 3); resultSet.sbuf.setLength(resultSet.sbuf.length() - 3);
if (subsecond) if (subsecond)
{ {
...@@ -1610,6 +1630,23 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu ...@@ -1610,6 +1630,23 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
{ {
resultSet.sbuf.append("GMT").append(s.substring(s.length() - 3)).append(":00"); resultSet.sbuf.append("GMT").append(s.substring(s.length() - 3)).append(":00");
} }
} else if (sub == ':') {
//we may have found timezone info of format +/-HH:MM, or there is no
//timezone info at all and this is the : preceding the seconds
char sub2 = resultSet.sbuf.charAt(resultSet.sbuf.length()-5);
if (sub2 == '+' || sub2 == '-')
{
//we have found timezone info of format +/-HH:MM
resultSet.sbuf.setLength(resultSet.sbuf.length()-5);
if (subsecond)
{
resultSet.sbuf.append('0').append("GMT").append(s.substring(s.length()-5));
} else {
resultSet.sbuf.append("GMT").append(s.substring(s.length()-5));
}
} else if (subsecond) {
resultSet.sbuf.append('0');
}
} }
else if (subsecond) else if (subsecond)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册