Re: Wrong column names in ResultSetMetaData

Поиск
Список
Период
Сортировка
От Mike Martin
Тема Re: Wrong column names in ResultSetMetaData
Дата
Msg-id ce9jk0$15mb$1@news.hub.org
обсуждение исходный текст
Ответы Re: Wrong column names in ResultSetMetaData  (Kris Jurka <books@ejurka.com>)
Re: Wrong column names in ResultSetMetaData  (Oliver Jowett <oliver@opencloud.com>)
Список pgsql-jdbc
I wrote:
> With the new V3 driver the column names in ResultSetMetaData
> don't reflect the aliases used in the SQL.  I.e. if I do:
>
>     SELECT name as name_alias FROM ...
>
> the metadata says I have a result column called "name" instead
> of "name_alias".

I think I see the problem.  v2/QueryExecutorImpl.java:400 says:

    fields[i] = new Field(columnLabel, columnLabel, typeOid, typeLength,
typeModifier, 0, 0);

whereas v3/QueryExecutorImpl.java:1097 says:

    fields[i] = new Field(columnLabel,
                          null, /* name not yet determined */
                          typeOid, typeLength, typeModifier, tableOid,
positionInTable);

and a separate query is later done in getColumnName() to try
to return the unaliased *source* column name used in the query.

I'm almost certain this is wrong from a JDBC standpoint.

rsmd.getColumnName() is supposed to return the given name of
the *result* column, which SQL has rules to define.
rsmd.getColumnLabel() is "for use in printouts and displays"
and will often equate to the column name unless the DBMS has
some "prettier" column title for display purposes.

For programmatic purposes the column name concept is pretty
well defined by the docs on ResultSet.  They're supposed to
behave such that:

   String colname = rsmd.getColumnName(col);
   return rs.getXXX(colname);

is equivalent to:

   return rs.getXXX(col);

for every column that has a (non-duplicate) name.

I have to think this is going to break more code than just
ours.

Mike



В списке pgsql-jdbc по дате отправления:

Предыдущее
От: dgr
Дата:
Сообщение: Re: SSL Connection Problems
Следующее
От: "Mike Martin"
Дата:
Сообщение: Wrong column names in ResultSetMetaData