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)
            {