[ https://issues.apache.org/jira/browse/CALCITE-2674?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16688970#comment-16688970 ]
Yuzhao Chen edited comment on CALCITE-2674 at 11/16/18 3:58 AM: ---------------------------------------------------------------- Hi, [~julianhyde] I check out Oracle and Postgres also, they also support escaped column name same with builtin function in DML. I thought a way to fix this, if we encounter an escape character in sql text during parsing, we set a flag in this SqlIdentifier to mark it as a definitely id attribute, during validation we can just skip catalog checking for it. was (Author: danny0405): Hi, [~julianhyde] I check out Oracle and Postgres also, they also support escaped column name same with builtin function in DML. > 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 > Priority: Major > Fix For: 1.18.0 > > > Now If user 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 as 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's 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)