[
https://issues.apache.org/jira/browse/DBUTILS-144?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Carl Franklin Hall resolved DBUTILS-144.
----------------------------------------
Fix Version/s: 2.0
Resolution: Fixed
Added extra check for null then use column index if still null.
> RowProcessor.asMap is invalid for multiple computed columns with no aliases
> ---------------------------------------------------------------------------
>
> Key: DBUTILS-144
> URL: https://issues.apache.org/jira/browse/DBUTILS-144
> Project: Commons DbUtils
> Issue Type: Bug
> Affects Versions: 1.7
> Environment: JDK: OpenJDK 1.8.0_212
> JDBC Driver: JTDS 1.2.8.1
> Database: SQL Server 2017 (Docker image
> mcr.microsoft.com/mssql/server:2017-latest)
>
> Reporter: Robert Huffman
> Assignee: Carl Franklin Hall
> Priority: Minor
> Fix For: 2.0
>
>
> At least one database driver (JDTS) returns an empty string for both
> ResultSet.getColumnName and ResultSet.getColumnLabel if it is not a table
> column and it has no alias. If there are more than one such column in a
> result set, then BasicRowProcessor.toMap will put all of them in the map
> using the empty string as key. This means only the last column added will be
> retained in the map.
> For example, this query will create map with a single entry (the result of
> the second case statement) using the key "":
> {{SELECT}}
> {{ CASE WHEN foo = 0 THEN '' ELSE 'FOO' END,}}
> {{ CASE WHEN bar = 0 THEN '' ELSE 'BAR' END}}
> FROM FooBar
> Presumably this is not an issue for most usages. However, for a tool that
> does something like run canned queries and output the result as JSON, this is
> a problem. I propose that if both the columnName and columnLabel are null or
> zero length, the column index (converted to a String) be used as the key.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)