NULL values in arrays - Mailing list pgsql-jdbc

From Christian Schröder
Subject NULL values in arrays
Date
Msg-id 47432E13.4080707@deriva.de
Whole thread Raw
Responses Re: NULL values in arrays
List pgsql-jdbc
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] );

pgsql-jdbc by date:

Previous
From: Kris Jurka
Date:
Subject: Re: XAResource implementation
Next
From: Kris Jurka
Date:
Subject: Re: NULL values in arrays