> 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,
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);
is equivalent to:
for every column that has a (non-duplicate) name.
I have to think this is going to break more code than just
In response to
pgsql-jdbc by date
|Next:||From: Kris Jurka||Date: 2004-07-29 03:20:46|
|Subject: Re: Wrong column names in ResultSetMetaData|
|Previous:||From: Mike Martin||Date: 2004-07-28 23:43:44|
|Subject: Wrong column names in ResultSetMetaData|