[ https://issues.apache.org/jira/browse/CALCITE-2674?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Yuzhao Chen updated CALCITE-2674: --------------------------------- Description: 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. was: 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. > 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)