Kris wrote:
> > PostgreSQL 7.5 price orig_price price ""
>
> I think you have the name and column for 2 backwards. It should return ""
> for the column name because it is a derived column, so there is no
> underlying table column to return.
Sorry, you're right. I inadvertently reversed them in the process
of table-ization.
> This shows the results are different, but it doesn't indicate why. Is it
> simply because the other dbs can't implement getColumnName as we have?
> I certainly wouldn't expect this to be a common feature.
>
> Further it doesn't show that users can't write portable code using the
> ResultSetMetaData calls. It shows all drivers returning the same value
> for getColumnLabel that you would expect. Earlier you had speculated that
> other drivers would return something different for this, but you haven't
> shown that. Yes it may break existing code, but it doesn't show that they
> weren't simply using the wrong call.
No, I speculated that a driver *could*, if it had a special pretty
print label available from the DBMS, return it from getColumnLabel().
Most DBMS's don't. Oracle does in SQL*Plus; for example:
column c1 heading "# OF ROWS" format 99,999,999;
column c2 heading "#_rows*row_len" format 9,999,999,999;
column c3 heading "PCT USED" format 999;
select num_rows c1,
num_rows*avg_row_len c2,
((num_rows*avg_row_len)/(blocks*&blksz))*100 c3
from perfstat.stats$tab_stats a
...
Does their driver support that? I don't know. But it is an
example of exactly what the docs for getColumnLabel() describe:
the "suggested title for use in printouts and displays". In the
absence of such support, doesn't it make sense that driver
writers would have simply defaulted label to column name?
I don't see anything ambiguous in "suggested title for use in
printouts and displays", nor anything that would even remotely
tie it to SQL alias. But I do see, and have given you, text that
explicitly ties column names to SQL aliases. Plus evidence that
many other well-known drivers work on that basis.
And you can't just ask everyone to switch their getColumnName() to
getColumnLabel(). It doesn't even work because of findColumn()
and rs.getXXX(String). Those methods are *required* to resolve a
duplicate name to the first matching column (ResultSet Javadoc).
With your code, my rs.getFloat("PRICE") *must* resolve to column
1, and that's simply the wrong answer.
Mike