Yuzhao Chen created CALCITE-2674:
------------------------------------
Summary: Column name with escape character should not be verified
as a function when the column name is same with it
Key: CALCITE-2674
URL: https://issues.apache.org/jira/browse/CALCITE-2674
Project: Calcite
Issue Type: Bug
Components: core
Affects Versions: 1.18.0
Reporter: Yuzhao Chen
Assignee: Julian Hyde
Fix For: 1.18.0
If use defines table as schema below:
{code:java}
create table tt(
`current_time` int,
b int);
{code}
Then start a query:
{code:java}
select `current_time` from tt;
{code}
Calcite parser will parse the *current_time* as a normal *SqlIdentifier*, then
the SqlValidator will recognize it a a builtin function with below code snippet:
{code:java}
public static SqlCall makeCall(
SqlOperatorTable opTab,
SqlIdentifier id) {
if (id.names.size() == 1) {
final List<SqlOperator> list = new ArrayList<>();
opTab.lookupOperatorOverloads(id, null, SqlSyntax.FUNCTION, list);
for (SqlOperator operator : list) {
if (operator.getSyntax() == SqlSyntax.FUNCTION_ID) {
// Even though this looks like an identifier, it is a
// actually a call to a function. Construct a fake
// call to this function, so we can use the regular
// operator validation.
return new SqlBasicCall(
operator,
SqlNode.EMPTY_ARRAY,
id.getParserPosition(),
true,
null);
}
}
}
return null;
}{code}
While i tried MYSQL and such query can work properly, so is this a bug ? Cause
if the matched function return type is same with the column, then the query
will output wrong results.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)