Thread: Bug? Reading items of array of composite a type

Bug? Reading items of array of composite a type

From
Daniel Dekany
Date:
(Sorry for this is a duplicate of
http://pgfoundry.org/tracker/index.php?func=detail&aid=1010898&group_id=1000224&atid=854
but now I guess it's unused and you expect reports here?)

The items of an array of composite items are returned so that the
composite values will only have their first field returned correctly,
the second field will be a PGObject that represents the whole
composite value, and there will not be more fields.

Example:

  ResultSet rs = con.createStatement().executeQuery(
          "SELECT ARRAY[ROW(1,2,3)::some_composite_type]");
  while (rs.next()) {
      ResultSet arrayRs = rs.getArray(1).getResultSet();
      while (arrayRs.next()) {
          assert(arrayRs.getObject(1), 1); // Passes
          assert(arrayRs.getObject(2), 2); // Fails, it's PGObject "(1,2,3)"
          assert(arrayRs.getObject(3), 3); // Exception: there's only 2 columns
      }
  }

This same issue doesn't appear if the composite value is not an item of an array.

Versions:
  postgresql-8.4-702.jdbc4.jar and postgresql-9.0dev-800.jdbc4.jar
  PostgreSQL 8.3.11 (Win32)
  Java 1.6.0_20-b02

Working demonstration code:
  http://pgfoundry.org/tracker/download.php/1000224/854/1010898/547/PgJDBCBugDemo.java

--
Best regards,
 Daniel Dekany


Re: Bug? Reading items of array of composite a type

From
Daniel Dekany
Date:
Nope... no bug here. Array items has two "columns": an index and the
value, and the index happened to be the same as the first value which
led to the misunderstanding here.


Monday, September 20, 2010, 12:55:55 PM, Daniel Dekany wrote:

> (Sorry for this is a duplicate of
> http://pgfoundry.org/tracker/index.php?func=detail&aid=1010898&group_id=1000224&atid=854
> but now I guess it's unused and you expect reports here?)
>
> The items of an array of composite items are returned so that the
> composite values will only have their first field returned correctly,
> the second field will be a PGObject that represents the whole
> composite value, and there will not be more fields.
>
> Example:
>
>   ResultSet rs = con.createStatement().executeQuery(
>           "SELECT ARRAY[ROW(1,2,3)::some_composite_type]");
>   while (rs.next()) {
>       ResultSet arrayRs = rs.getArray(1).getResultSet();
>       while (arrayRs.next()) {
>           assert(arrayRs.getObject(1), 1); // Passes
>           assert(arrayRs.getObject(2), 2); // Fails, it's PGObject "(1,2,3)"
>           assert(arrayRs.getObject(3), 3); // Exception: there's only 2 columns
>       }
>   }
>
> This same issue doesn't appear if the composite value is not an item of an array.
>
> Versions:
>   postgresql-8.4-702.jdbc4.jar and postgresql-9.0dev-800.jdbc4.jar
>   PostgreSQL 8.3.11 (Win32)
>   Java 1.6.0_20-b02
>
> Working demonstration code:
>
> http://pgfoundry.org/tracker/download.php/1000224/854/1010898/547/PgJDBCBugDemo.java
>
> --
> Best regards,
>  Daniel Dekany
>
>

--
Best regards,
 Daniel Dekany