You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Yuzhao Chen (JIRA)" <ji...@apache.org> on 2018/11/15 10:11:00 UTC
[jira] [Created] (CALCITE-2674) Column name with escape character
should not be verified as a function when the column name is same with it
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)