postgresql-jdbc.git / summary / log / commit / refs

commit    115c4a42e70643ec22a163dff239b24bb1bc8798
Author:   Dave Cramer <dave.cramer@credativ.ca>
Commit:   Craig Ringer <ringerc@ringerc.id.au>
Date:     Thu Sep 13 11:43:40 2012 +0000

    Added explicit test case for array handling from Craig Ringer


.../test/jdbc3/SendRecvBufferSizeTest.java | 3 ++ org/postgresql/test/jdbc4/ArrayTest.java | 33 ++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/org/postgresql/test/jdbc3/SendRecvBufferSizeTest.java b/org/postgresql/test/jdbc3/SendRecvBufferSizeTest.java index 54c51a5a..80d49ac4 100644 --- a/org/postgresql/test/jdbc3/SendRecvBufferSizeTest.java +++ b/org/postgresql/test/jdbc3/SendRecvBufferSizeTest.java @@ -9,6 +9,8 @@ package org.postgresql.test.jdbc3; import java.sql.*; import junit.framework.TestCase; + +import org.postgresql.jdbc2.AbstractJdbc2Connection; import org.postgresql.test.TestUtil; public class SendRecvBufferSizeTest extends TestCase { @@ -38,6 +40,7 @@ public class SendRecvBufferSizeTest extends TestCase { TestUtil.closeDB(_conn); } + // dummy test public void testSelect() throws SQLException { Statement stmt = _conn.createStatement(); diff --git a/org/postgresql/test/jdbc4/ArrayTest.java b/org/postgresql/test/jdbc4/ArrayTest.java index 714fd156..f852aee3 100644 --- a/org/postgresql/test/jdbc4/ArrayTest.java +++ b/org/postgresql/test/jdbc4/ArrayTest.java @@ -21,9 +21,11 @@ public class ArrayTest extends TestCase { protected void setUp() throws Exception { _conn = TestUtil.openDB(); + TestUtil.createTable(_conn, "arrtest", "intarr int[], decarr decimal(2,1)[], strarr text[]"); } protected void tearDown() throws SQLException { + TestUtil.dropTable(_conn, "arrtest"); TestUtil.closeDB(_conn); } @@ -146,4 +148,35 @@ public class ArrayTest extends TestCase { assertEquals(77, out[1][1], 0.00001); } + public void testSetObjectFromJavaArray() throws SQLException { + String[] strArray = new String[]{"a","b","c"}; + + PreparedStatement pstmt = _conn.prepareStatement("INSERT INTO arrtest(strarr) VALUES (?)"); + + // Incorrect, but commonly attempted by many ORMs: + try { + pstmt.setObject(1, strArray, Types.ARRAY); + pstmt.executeUpdate(); + fail("setObject() with a Java array parameter and Types.ARRAY shouldn't succeed"); + } catch (org.postgresql.util.PSQLException ex) { + // Expected failure. + } + + // Also incorrect, but commonly attempted by many ORMs: + try { + pstmt.setObject(1, strArray); + pstmt.executeUpdate(); + fail("setObject() with a Java array parameter and no Types argument shouldn't succeed"); + } catch (org.postgresql.util.PSQLException ex) { + // Expected failure. + } + + // Correct way, though the use of "text" as a type is non-portable. + // Only supported for JDK 1.6 and JDBC4 + Array sqlArray = _conn.createArrayOf("text", strArray); + pstmt.setArray(1, sqlArray); + pstmt.executeUpdate(); + + pstmt.close(); + } } [parent: eb54c2115366]