Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
1.18.0
Description
Now If user defines table as schema below:
create table tt( `current_time` int, b int);
Then start a query:
select `current_time` from tt;
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:
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; }
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.
Attachments
Issue Links
- relates to
-
CALCITE-2721 Support parsing of DOT + MEMBER_FUNCTION
- Closed
- links to