Hi list,
since PostgreSQL version 8.2 arrays can contain null values. This
doesn't seem to be correctly handled by the driver. (I had a look at the
latest CVS version.)
I have found in the archive a mail from Marek Lewczuk (sent on
2007-10-11) who adressed this issue, but the thread seems to be dead.
Moreover, he did not supply a patch, so I tried to do it myself. Could
you please have a look at the attached file and decide if it should be
applied to the sources?
Thanks a lot!
Christian
--
Deriva GmbH Tel.: +49 551 489500-42
Financial IT and Consulting Fax: +49 551 489500-91
Hans-Böckler-Straße 2 http://www.deriva.de
D-37079 Göttingen
Deriva CA Certificate: http://www.deriva.de/deriva-ca.cer
Index: AbstractJdbc2Array.java
===================================================================
RCS file: /cvsroot/jdbc/pgjdbc/org/postgresql/jdbc2/AbstractJdbc2Array.java,v
retrieving revision 1.19
diff -c -r1.19 AbstractJdbc2Array.java
*** AbstractJdbc2Array.java 10 Sep 2007 08:34:31 -0000 1.19
--- AbstractJdbc2Array.java 20 Nov 2007 18:29:45 -0000
***************
*** 103,108 ****
--- 103,110 ----
StringBuffer sbuf = new StringBuffer();
boolean foundOpen = false;
boolean insideString = false;
+ boolean isQuoted = false;
+ boolean haveMinServerVersion82 = conn.haveMinimumServerVersion("8.2");
/**
* Starting with 8.0 non-standard (beginning index
***************
*** 142,147 ****
--- 144,150 ----
else if (chars[i] == '"')
{
insideString = !insideString;
+ isQuoted = true;
continue;
}
else if (!insideString && (chars[i] == ',' || chars[i] == '}') ||
***************
*** 149,156 ****
{
if ( chars[i] != '"' && chars[i] != '}' && chars[i] != ',' )
sbuf.append(chars[i]);
! array.add( sbuf.toString() );
sbuf = new StringBuffer();
continue;
}
sbuf.append( chars[i] );
--- 152,160 ----
{
if ( chars[i] != '"' && chars[i] != '}' && chars[i] != ',' )
sbuf.append(chars[i]);
! array.add( sbuf.toString().equals("NULL") && !isQuoted && haveMinServerVersion82 ? null :
sbuf.toString());
sbuf = new StringBuffer();
+ isQuoted = false;
continue;
}
sbuf.append( chars[i] );