From: | Doug Fields <dfields-postgres(at)pexicom(dot)com> |
---|---|
To: | pgsql-jdbc(at)postgresql(dot)org |
Subject: | [PATCH] Empty arrays cause SQLExceptions when using Array.getArray |
Date: | 2002-02-21 02:28:18 |
Message-ID: | 5.1.0.14.2.20020220212808.035013a8@mail.pexicom.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
I have fixed a minor bug in empty arrays as described below - Unified
Context Diff provided at the end:
I have the following table and values:
=# \d array_test
Table "array_test"
Attribute
| Type | Modifier
-----------+-----------+-------------------------------------------------------
id | integer | not null default nextval('"array_test_id_seq"'::text)
first | integer[] |
second | integer[] |
number | integer |
Index: array_test_pkey
=# select * from array_test;
id | first | second | number
----+------------+-----------------------------------+--------
1 | {1,2,3} | {4,5,6} | 7
2 | {10,20,30} | {40,50,60} | 70
3 | {100,200} | {300,400,500,600} | 700
4 | {1000} | {2000,3000,4000,5000,6000} | 7000
5 | {} | {10000,2000,3000,4000,5000,6000} | 70000
6 | | {100000,2000,3000,4000,5000,6000} | 700000
7 | {9,8,7} | {6,5,4} | 8482
(7 rows)
When I am getting row 5, the ResultSet.getArray().getArray() call fails:
DbArrayTest.doTest: SQLException: Bad Integer
DbArrayTest.doTest: SQLState: null
DbArrayTest.doTest: VendorError: 0
Bad Integer
at org.postgresql.jdbc2.ResultSet.toInt(ResultSet.java:1481)
at org.postgresql.jdbc2.Array.getArray(Array.java:127)
at org.postgresql.jdbc2.Array.getArray(Array.java:54)
at com.pexicom.test.DbArrayTest.doTest(DbArrayTest.java:55)
Code snippet in question:
Array arrayObj;
int[] array;
while (rs.next()) {
System.out.println("\nColumn 1: " + rs.getInt(1));
arrayObj = rs.getArray(2);
if (arrayObj != null) {
array = (int[])arrayObj.getArray();
System.out.println("Column 2: " + arrayObj);
It fails at the arrayObj.getArray() call.
This shouldn't happen; it should return a zero-length array.
The diffs for my fix against the 7.2 source code:
diff -ru5 org-orig/postgresql/jdbc2/Array.java org/postgresql/jdbc2/Array.java
--- org-orig/postgresql/jdbc2/Array.java Mon Nov 19 18:16:46 2001
+++ org/postgresql/jdbc2/Array.java Wed Feb 20 19:50:41 2002
@@ -72,11 +72,15 @@
if (index < 1)
throw new PSQLException("postgresql.arr.range");
Object retVal = null;
ArrayList array = new ArrayList();
- if ( rawString != null )
+ /* Check if the String is also not an empty array
+ * otherwise there will be an exception thrown below
+ * in the ResultSet.toX with an empty string.
+ * -- Doug Fields <dfields-pg-jdbc(at)pexicom(dot)com> Feb 20, 2002 */
+ if ( rawString != null && !rawString.equals("{}") )
{
char[] chars = rawString.toCharArray();
StringBuffer sbuf = new StringBuffer();
boolean foundOpen = false;
boolean insideString = false;
From | Date | Subject | |
---|---|---|---|
Next Message | zhousj | 2002-02-21 02:34:35 | SQLException::GetErrorMessage() return so much message!!! |
Previous Message | Doug Fields | 2002-02-21 01:39:35 | [PATCH] Ability to PreparedStatement.setObject(#, int[]) |