Re: Wrong column names in ResultSetMetaData
От | Mike Martin |
---|---|
Тема | Re: Wrong column names in ResultSetMetaData |
Дата | |
Msg-id | cemhbu$2anv$1@news.hub.org обсуждение исходный текст |
Ответ на | Re: Wrong column names in ResultSetMetaData ("Mike Martin" <mmartin@vieo.com>) |
Список | pgsql-jdbc |
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
В списке pgsql-jdbc по дате отправления: