[ 
https://issues.apache.org/jira/browse/CALCITE-5020?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17498394#comment-17498394
 ] 

Zhengqiang Duan commented on CALCITE-5020:
------------------------------------------

Thank you very much for your detailed explanation. As can be seen from above 
example, different databases have different processing logic for column label, 
so I prefer not to modify calcite, after all, the unique column label is more 
convenient to use.

> ResultSetMetaData.getColumnLabel should return columnName when not use column 
> alias
> -----------------------------------------------------------------------------------
>
>                 Key: CALCITE-5020
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5020
>             Project: Calcite
>          Issue Type: Bug
>          Components: jdbc-driver
>    Affects Versions: 1.27.0
>            Reporter: Zhengqiang Duan
>            Priority: Major
>
> I have two tables as below, t_order and t_order_item.
> {code:java}
> CREATE TABLE `t_order` (
>   `order_id` bigint(20) unsigned NOT NULL,
>   `user_id` int(11) DEFAULT NULL,
>   `content` varchar(100) DEFAULT NULL,
>   `creation_date` date DEFAULT NULL,
>   PRIMARY KEY (`order_id`)
> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
> CREATE TABLE `t_order_item` (
>   `item_id` int(11) DEFAULT NULL,
>   `order_id` int(11) NOT NULL,
>   `user_id` int(11) DEFAULT NULL,
>   `content` varchar(100) DEFAULT NULL,
>   PRIMARY KEY (`order_id`)
> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; {code}
> Since they have columns order_id and user_id with the same name, the 
> ResultSetMetaData returned using calcite is as follows:
> {code:java}
> TableName: t_order, ColumnName: order_id, ColumnLabel: order_id
> TableName: t_order, ColumnName: user_id, ColumnLabel: user_id
> TableName: t_order, ColumnName: content, ColumnLabel: content
> TableName: t_order, ColumnName: creation_date, ColumnLabel: creation_date
> TableName: t_order_item, ColumnName: item_id, ColumnLabel: item_id
> TableName: t_order_item, ColumnName: order_id, ColumnLabel: order_id0
> TableName: t_order_item, ColumnName: user_id, ColumnLabel: user_id0 {code}
> The column label corresponding to orderId and userId in the t_order_item 
> table returned orderId0 and userId0, which seems to be inconsistent with the 
> [JDBC 
> specification|https://docs.oracle.com/javase/8/docs/api/java/sql/ResultSetMetaData.html#getColumnLabel-int-[].].]
> As described in the JDBC specification, if a SQL AS is not specified, the 
> value returned from getColumnLabel will be the same as the value returned by 
> the getColumnName method.
> For comparison, I tested the results returned by MySQL and PostgreSQL, both 
> of which follow the JDBC specification.
> {code:java}
> MySQL:
> TableName: t_order, ColumnName: order_id, ColumnLabel: order_id
> TableName: t_order, ColumnName: user_id, ColumnLabel: user_id
> TableName: t_order, ColumnName: content, ColumnLabel: content
> TableName: t_order, ColumnName: creation_date, ColumnLabel: creation_date
> TableName: t_order_item, ColumnName: item_id, ColumnLabel: item_id
> TableName: t_order_item, ColumnName: order_id, ColumnLabel: order_id
> TableName: t_order_item, ColumnName: user_id, ColumnLabel: user_id
> PostgreSQL:
> TableName: t_order, ColumnName: order_id, ColumnLabel: order_id
> TableName: t_order, ColumnName: user_id, ColumnLabel: user_id
> TableName: t_order, ColumnName: content, ColumnLabel: content
> TableName: t_order, ColumnName: creation_date, ColumnLabel: creation_date
> TableName: t_order_item, ColumnName: item_id, ColumnLabel: item_id
> TableName: t_order_item, ColumnName: order_id, ColumnLabel: order_id
> TableName: t_order_item, ColumnName: user_id, ColumnLabel: user_id{code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to