]> granicus.if.org Git - postgresql/commitdiff
fixed bug in ResultSet. Version 1.29 backed out two previous fixes (1.26 and 1.25...
authorBarry Lind <barry@xythos.com>
Mon, 12 Nov 2001 19:59:46 +0000 (19:59 +0000)
committerBarry Lind <barry@xythos.com>
Mon, 12 Nov 2001 19:59:46 +0000 (19:59 +0000)
src/interfaces/jdbc/org/postgresql/jdbc1/ResultSet.java
src/interfaces/jdbc/org/postgresql/jdbc2/ResultSet.java

index 07d5a998e64841b65f8e2edf33569a6bef944d29..348b84a657bc98732208dad1fd024f774aaf351f 100644 (file)
@@ -445,7 +445,13 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
                String s = getString(columnIndex);
                if (s == 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);
+               }
        }
 
        /**
index 4c2c61ce043562e104235b30b2730fa297c7d7a7..c5a6429624516f7da7d140fdf1832d2da127208f 100644 (file)
@@ -1554,14 +1554,26 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
        {
                if (s == 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
        {
                if (s == 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
@@ -1598,9 +1610,17 @@ public class ResultSet extends org.postgresql.ResultSet implements java.sql.Resu
                        resultSet.sbuf.setLength(0);
                        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);
                        if (sub == '+' || sub == '-')
                        {
+                               //we have found timezone info of format +/-HH
+
                                resultSet.sbuf.setLength(resultSet.sbuf.length() - 3);
                                if (subsecond)
                                {
@@ -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");
                                }
+                       } 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)
                        {