This is an automated email from the git hooks/post-receive script. ebourg-guest pushed a commit to tag REL8_2_507 in repository libpostgresql-jdbc-java.
commit cfb453ca06d8cb1b21c9073b975b02c4c35dd3b9 Author: Kris Jurka <[email protected]> Date: Wed Nov 21 19:49:24 2007 +0000 8.2 servers support NULL array elements, so support them in the JDBC driver. Currently this patch is only applied to 8.2 as a more invasive patch is under discussion for 8.3 and we'll wait to see how that pans out first. Christian Schröder --- org/postgresql/jdbc2/AbstractJdbc2Array.java | 6 +- org/postgresql/test/jdbc2/ArrayTest.java | 89 ++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+), 1 deletion(-) diff --git a/org/postgresql/jdbc2/AbstractJdbc2Array.java b/org/postgresql/jdbc2/AbstractJdbc2Array.java index c74a14e..aa5868b 100644 --- a/org/postgresql/jdbc2/AbstractJdbc2Array.java +++ b/org/postgresql/jdbc2/AbstractJdbc2Array.java @@ -103,6 +103,8 @@ public class AbstractJdbc2Array 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,6 +144,7 @@ public class AbstractJdbc2Array else if (chars[i] == '"') { insideString = !insideString; + isQuoted = true; continue; } else if (!insideString && (chars[i] == ',' || chars[i] == '}') || @@ -149,8 +152,9 @@ public class AbstractJdbc2Array { if ( chars[i] != '"' && chars[i] != '}' && chars[i] != ',' ) sbuf.append(chars[i]); - array.add( sbuf.toString() ); + array.add( sbuf.toString().equals("NULL") && !isQuoted && haveMinServerVersion82 ? null : sbuf.toString() ); sbuf = new StringBuffer(); + isQuoted = false; continue; } sbuf.append( chars[i] ); diff --git a/org/postgresql/test/jdbc2/ArrayTest.java b/org/postgresql/test/jdbc2/ArrayTest.java index caf73ad..d14941e 100644 --- a/org/postgresql/test/jdbc2/ArrayTest.java +++ b/org/postgresql/test/jdbc2/ArrayTest.java @@ -57,6 +57,95 @@ public class ArrayTest extends TestCase pstmt.close(); } + public void testNullElementsPre82() throws SQLException { + if (TestUtil.haveMinimumServerVersion(conn, "8.2")) + return; + + Statement stmt = conn.createStatement(); + + ResultSet rs = stmt.executeQuery("SELECT '{a,null,\"null\"}'::text[]"); + assertTrue(rs.next()); + + Array arr = rs.getArray(1); + String s[] = (String[]) arr.getArray(); + assertEquals(3, s.length); + assertEquals("a", s[0]); + assertEquals("null", s[1]); + assertEquals("null", s[2]); + + rs.close(); + stmt.close(); + } + + public void testWriteNullElements() throws SQLException { + if (!TestUtil.haveMinimumServerVersion(conn, "8.2")) + return; + + Statement stmt = conn.createStatement(); + + ResultSet rs = stmt.executeQuery("SELECT ARRAY[1,NULL,2], ARRAY['a',NULL,'null']"); + assertTrue(rs.next()); + + PreparedStatement pstmt = conn.prepareStatement("SELECT ?,?"); + pstmt.setArray(1, rs.getArray(1)); + pstmt.setArray(2, rs.getArray(2)); + rs.close(); + stmt.close(); + rs = pstmt.executeQuery(); + + assertTrue(rs.next()); + + Array intArr = rs.getArray(1); + int[] ia = (int[]) intArr.getArray(); + assertEquals(3, ia.length); + assertEquals(1, ia[0]); + assertEquals(0, ia[1]); + assertEquals(2, ia[2]); + + Array strArr1 = rs.getArray(2); + String[] sa1 = (String[]) strArr1.getArray(); + assertEquals(3, sa1.length); + assertEquals("a", sa1[0]); + assertNull(sa1[1]); + assertEquals("null", sa1[2]); + + rs.close(); + pstmt.close(); + } + + public void testReadNullElements() throws SQLException { + if (!TestUtil.haveMinimumServerVersion(conn, "8.2")) + return; + + Statement stmt = conn.createStatement(); + + ResultSet rs = stmt.executeQuery("SELECT ARRAY[1,NULL,2], ARRAY['a',NULL,'null'], '{a,\"NULL\",b}'::text[]"); + assertTrue(rs.next()); + + Array intArr = rs.getArray(1); + int[] ia = (int[]) intArr.getArray(); + assertEquals(3, ia.length); + assertEquals(1, ia[0]); + assertEquals(0, ia[1]); + assertEquals(2, ia[2]); + + Array strArr1 = rs.getArray(2); + String[] sa1 = (String[]) strArr1.getArray(); + assertEquals(3, sa1.length); + assertEquals("a", sa1[0]); + assertNull(sa1[1]); + assertEquals("null", sa1[2]); + + Array strArr2 = rs.getArray(3); + String[] sa2 = (String[]) strArr2.getArray(); + assertEquals(3, sa2.length); + assertEquals("a", sa2[0]); + assertEquals("NULL", sa2[1]); + assertEquals("b", sa2[2]); + + rs.close(); + stmt.close(); + } public void testRetrieveArrays() throws SQLException { Statement stmt = conn.createStatement(); -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/libpostgresql-jdbc-java.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

