Обсуждение: BUG #4638: Bug with Geometry in Array

Поиск
Список
Период
Сортировка

BUG #4638: Bug with Geometry in Array

От
"Bjoern Weitzig"
Дата:
The following bug has been logged online:

Bug reference:      4638
Logged by:          Bjoern Weitzig
Email address:      weitzig@supportgis.de
PostgreSQL version: 8.3.5
Operating system:   Windows
Description:        Bug with Geometry in Array
Details:

System: PostgreSQL 8.3.5, compiled by Visual C++ build 1400
(Windows-Installer), PostGIS 1.3.5, GEOS 3.0.3-CAPI-1.4.2 on Windows

I use arrays like "select array(select n from a)". This works well except of
the case with geometry as datatype.

In case of geometry, the JDBC ResultSet.getArray(1).getResultSet() only
lists the first element.

Testcase:

create table a(n VARCHAR);
SELECT AddGeometryColumn( 'a', 'feature', -1, 'GEOMETRY', 3 );
INSERT INTO a(n, feature) VALUES (1,GeomFromText('Point(1 1 0)',-1));
INSERT INTO a(n, feature) VALUES (2,GeomFromText('Point(2 2 0)',-1));

select array(select n from a);
  =>  "{1,2}"  (ok)
select array(select feature from a);
 =>

"{0101000080000000000000F03F000000000000F03F0000000000000000:010100008000000
0000000004000000000000000400000000000000000}"
I wonder why there is a ":" instead of an ",".

JDBC:
        ResultSet rset = stmt.executeQuery("select array(select feature from
a)");
            if (rset.next()) {
                Array array = rset.getArray(1);
                ResultSet rs2 = array.getResultSet();
                int n=0;
                while (rs2.next()) {
                    Object o = rs2.getObject(2);
                    n++;
                    System.out.println(n+": "+o);
                }
                rs2.close();
            }
This lists only the first point "1: POINT(1 1 0)", instead of expected "1:
POINT(1 1 0) \n 2: POINT(2 2 0)"

Re: BUG #4638: Bug with Geometry in Array

От
Tom Lane
Дата:
"Bjoern Weitzig" <weitzig@supportgis.de> writes:
> I use arrays like "select array(select n from a)". This works well except of
> the case with geometry as datatype.

The geometry type intentionally uses ':' as the array delimiter.  It
seems like a good bet that the JDBC driver you're using doesn't expect
anything but ',' as array delimiter.  I checked with the postgis-devel
list and they recommend using the modified JDBC driver that's
distributed with postgis.
http://postgis.refractions.net/documentation/manual-1.3.6SVN/ch04.html#id2726248

            regards, tom lane

Re: BUG #4638: Bug with Geometry in Array

От
"Dr. Björn Weitzig"
Дата:
Thank you for your fast reply.

I can't find any "modified JDBC driver", only the "JDBC extension"
postgis.jar (your link), which I use und which doesn't help. postgis.jar
seems to be an add-on to the default JDBC driver, not an replacement.
I use postgis_1.3.5.jar with postgresql-8.3-603.jdbc3.jar

It would be great if you can show me where to get the "modified JDBC
driver".
As PostGIS is a common extension to PostgreSQL, wouldn't it be good to
handle this case in the default JDBC driver?

Thank you,
Bjoern Weitzig

On 2009-02-03 17:43, Tom Lane wrote:
> "Bjoern Weitzig" writes:
> > I use arrays like "select array(select n from a)". This works well
except of
> > the case with geometry as datatype.
>
> The geometry type intentionally uses ':' as the array delimiter. It
> seems like a good bet that the JDBC driver you're using doesn't expect
> anything but ',' as array delimiter. I checked with the postgis-devel
> list and they recommend using the modified JDBC driver that's
> distributed with postgis.
>
http://postgis.refractions.net/documentation/manual-1.3.6SVN/ch04.html#id2726248
>
> regards, tom lane
>
>


Re: BUG #4638: Bug with Geometry in Array

От
Kris Jurka
Дата:
On Mon, 2 Mar 2009, "Dr. Bj=F6rn Weitzig" wrote:

> I can't find any "modified JDBC driver", only the "JDBC extension"
> postgis.jar (your link), which I use und which doesn't help. postgis.jar
> seems to be an add-on to the default JDBC driver, not an replacement.
> I use postgis_1.3.5.jar with postgresql-8.3-603.jdbc3.jar
>

Right, postgis.jar is just an addon, and it's really a bug in the main=20
JDBC driver.  I have put in a fix for this bug into the JDBC driver for=20
the next release.  I've put up a copy of it here, and it should fix things=
=20
for you.

http://ejurka.com/pgsql/jars/arrdim/

Kris Jurka

Re: BUG #4638: Bug with Geometry in Array

От
"Dr. Björn Weitzig"
Дата:
Thank you very much!
I made several tests, and (with postgresql-8.4dev-arraydim.jdbc3.jar) it
worked.

Greetings,
Bjoern Weitzig

Kris Jurka wrote:
> On Mon, 2 Mar 2009, "Dr. Björn Weitzig" wrote:
>> I can't find any "modified JDBC driver", only the "JDBC extension"
>> postgis.jar (your link), which I use und which doesn't help. postgis.jar
>> seems to be an add-on to the default JDBC driver, not an replacement.
>> I use postgis_1.3.5.jar with postgresql-8.3-603.jdbc3.jar
> Right, postgis.jar is just an addon, and it's really a bug in the main
> JDBC driver.  I have put in a fix for this bug into the JDBC driver
> for the next release.  I've put up a copy of it here, and it should
> fix things for you.
>
> http://ejurka.com/pgsql/jars/arrdim/
>
> Kris Jurka