Re: FW: Question about the postgres resultset implementation

From: Oliver Jowett <oliver(at)opencloud(dot)com>
To: "Tornroth, Phill" <ptornroth(at)intellidot(dot)net>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: FW: Question about the postgres resultset implementation
Date: 2004-10-13 21:06:48
Message-ID: 416D98E8.5090600@opencloud.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Tornroth, Phill wrote:

> I did some tinkering of my own and found that one of the problems with
> making the driver less cumbersome is the fact that findColumn() is currently
> case insensitive. I don't know if this is required by the jdbc spec, but it
> seems all the field names come back lower case (in the fields[] array), and
> so I could replace the implementation without understanding how to prevent
> the case of the field names from changing (changing from the case they were
> sent in as).

They come back lower-case because that's how they are in the actual
schema. Unless you quote identifiers, they get smashed to lowercase by
the backend:

>> test=> create table t1(lowercase integer, UPPERCASE integer, "QUOTEDUPPERCASE" integer);
>> CREATE TABLE
>> test=> select * from t1;
>> lowercase | uppercase | QUOTEDUPPERCASE
>> -----------+-----------+-----------------
>> (0 rows)

> At any rate, if case insensitivity could be thrown out then a very fast
> implementation could be worked out. As is, the following code was a marked
> improvement:

That change is slightly buggy as you *can* get uppercase characters in a
field name.

We can't entirely discard case-insensitivy as JDBC requires that column
names are found case-insensitively. This actually makes the use of
column names somewhat unreliable if you ever have two columns with names
that only differ by case. From the JDBC javadoc:

>> Column names used as input to getter methods are case insensitive. When
>> a getter method is called with a column name and several columns have
>> the same name, the value of the first matching column will be returned.
>> The column name option is designed to be used when column names are used
>> in the SQL query that generated the result set. For columns that are NOT
>> explicitly named in the query, it is best to use column numbers. If
>> column names are used, there is no way for the programmer to guarantee
>> that they actually refer to the intended columns.

(I am assuming that "findColumn" is considered a getter method.. the
javadoc is vague as ever)

Nevertheless, we could certainly use a hashmap to speed up field
lookups. This should be pretty trivial to implement, expect a patch shortly.

(hah, in fact I see that Kris got there first..)

-O

In response to

Browse pgsql-jdbc by date

  From Date Subject
Next Message Oliver Jowett 2004-10-13 22:52:58 Re: tightening up on use of oid 0
Previous Message Kris Jurka 2004-10-13 21:03:16 Re: FW: Question about the postgres resultset implementation