Обсуждение: NULL values in arrays
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] );
On Tue, 20 Nov 2007, Christian Schr�der wrote: > 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? > Marek did post a patch that additionally contains support for multi-dimensional indexes which has complicated the reviewing process. I'll post my comments on that patch tomorrow and we'll hopefully get it into the 8.3 release. For the 8.2 driver I'll take a closer look at your patch and apply it barring some unforeseen issue. Kris Jurka
On Tue, 20 Nov 2007, Kris Jurka wrote: > On Tue, 20 Nov 2007, Christian Schr�der wrote: > >> 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.) > > Marek did post a patch that additionally contains support for > multi-dimensional indexes which has complicated the reviewing process. I'll > post my comments on that patch tomorrow and we'll hopefully get it into the > 8.3 release. For the 8.2 driver I'll take a closer look at your patch and > apply it barring some unforeseen issue. > I've applied your patch to the 8.2 branch while we wait to see what will be done for 8.3. Kris Jurka