You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Zhengqiang Duan (Jira)" <ji...@apache.org> on 2022/02/24 02:02:00 UTC
[jira] [Created] (CALCITE-5020) ResultSetMetaData.getColumnLabel should return columnName when not use column alias
Zhengqiang Duan created CALCITE-5020:
----------------------------------------
Summary: 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
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-[].|https://docs.oracle.com/javase/8/docs/api/java/sql/ResultSetMetaData.html#getColumnLabel].]
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_idPostgreSQL:
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)