[ 
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)

Reply via email to