Bug in org.postgresql.jdbc2.AbstractJdbc2Array

Поиск
Список
Период
Сортировка
От Alessandro Di Bella
Тема Bug in org.postgresql.jdbc2.AbstractJdbc2Array
Дата
Msg-id 468D08BB.701@google.com
обсуждение исходный текст
Ответы Re: Bug in org.postgresql.jdbc2.AbstractJdbc2Array  (Heikki Linnakangas <heikki@enterprisedb.com>)
Список pgsql-jdbc
Hi,
I found a bug in the org.postgresql.jdbc2.AbstractJdbc2Array class that
causes the following exception when an array contains a null value:

Caused by: org.postgresql.util.PSQLException: Bad value for type date : NULL
    at
org.postgresql.jdbc2.TimestampUtils.loadCalendar(TimestampUtils.java:246)
    at org.postgresql.jdbc2.TimestampUtils.toDate(TimestampUtils.java:402)
    at
org.postgresql.jdbc2.AbstractJdbc2Array.getArrayImpl(AbstractJdbc2Array.java:210)

I attached a patch that fixes the problem. If you are happy with it,
please merge it with the HEAD stream.


Thanks


Alessandro

Index: org/postgresql/jdbc2/AbstractJdbc2Array.java
===================================================================
RCS file: /usr/local/cvsroot/pgjdbc/pgjdbc/org/postgresql/jdbc2/AbstractJdbc2Array.java,v
retrieving revision 1.18
diff -u -p -r1.18 AbstractJdbc2Array.java
--- org/postgresql/jdbc2/AbstractJdbc2Array.java    4 Dec 2005 21:40:33 -0000    1.18
+++ org/postgresql/jdbc2/AbstractJdbc2Array.java    5 Jul 2007 14:56:50 -0000
@@ -185,8 +185,10 @@ public class AbstractJdbc2Array
             break;
         case Types.NUMERIC:
             retVal = new BigDecimal[ count ];
-            for ( ; count > 0; count-- )
-                ((BigDecimal[])retVal)[i++] = AbstractJdbc2ResultSet.toBigDecimal( arrayContents[(int)index++], -1 );
+            for ( ; count > 0; count-- ){
+                String content = arrayContents[(int)index++];
+                ((BigDecimal[])retVal)[i++] = ("NULL".equals(content)) ? null : AbstractJdbc2ResultSet.toBigDecimal(
content,-1 ); 
+            }
             break;
         case Types.REAL:
             retVal = new float[ count ];
@@ -201,23 +203,31 @@ public class AbstractJdbc2Array
         case Types.CHAR:
         case Types.VARCHAR:
             retVal = new String[ count ];
-            for ( ; count > 0; count-- )
-                ((String[])retVal)[i++] = arrayContents[(int)index++];
+            for ( ; count > 0; count-- ){
+                String content = arrayContents[(int)index++];
+                ((String[])retVal)[i++] = ("NULL".equals(content)) ? null : content;
+            }
             break;
         case Types.DATE:
             retVal = new java.sql.Date[ count ];
-            for ( ; count > 0; count-- )
-                ((java.sql.Date[])retVal)[i++] = conn.getTimestampUtils().toDate(null, arrayContents[(int)index++] );
+            for ( ; count > 0; count-- ){
+                String content = arrayContents[(int)index++];
+                ((java.sql.Date[])retVal)[i++] = ("NULL".equals(content)) ? null :
conn.getTimestampUtils().toDate(null,content ); 
+            }
             break;
         case Types.TIME:
             retVal = new java.sql.Time[ count ];
-            for ( ; count > 0; count-- )
-                ((java.sql.Time[])retVal)[i++] = conn.getTimestampUtils().toTime(null, arrayContents[(int)index++] );
+            for ( ; count > 0; count-- ){
+                String content = arrayContents[(int)index++];
+                ((java.sql.Time[])retVal)[i++] = ("NULL".equals(content)) ? null :
conn.getTimestampUtils().toTime(null,content ); 
+            }
             break;
         case Types.TIMESTAMP:
             retVal = new Timestamp[ count ];
-            for ( ; count > 0; count-- )
-                ((java.sql.Timestamp[])retVal)[i++] = conn.getTimestampUtils().toTimestamp(null,
arrayContents[(int)index++]); 
+            for ( ; count > 0; count-- ){
+                String content = arrayContents[(int)index++];
+                ((java.sql.Timestamp[])retVal)[i++] = ("NULL".equals(content)) ? null :
conn.getTimestampUtils().toTimestamp(null,content ); 
+            }
             break;

             // Other datatypes not currently supported.  If you are really using other types ask

В списке pgsql-jdbc по дате отправления:

Предыдущее
От: Heikki Linnakangas
Дата:
Сообщение: Re: prepared statement: are they pre-compiled?
Следующее
От: Heikki Linnakangas
Дата:
Сообщение: Re: Bug in org.postgresql.jdbc2.AbstractJdbc2Array