[ https://issues.apache.org/jira/browse/CALCITE-5143?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Julian Hyde updated CALCITE-5143: --------------------------------- Description: Babel parser can't parse DATEADD(S, ...). The parser should allow custom time unit abbreviations in FLOOR, CEIL, EXTRACT, DATE_PART, DATEADD, DATEDIFF and similar functions. I'm trying to parse and rewrite some SQL dialects including SQL Server which supports some functions that receive HOUR as an argument using. But Calcite's Planner#parse can't handle this kind of SQL. {code:java} FrameworkConfig config = Frameworks.newConfigBuilder().build(); Planner planner = Frameworks.getPlanner(config); System.out.println(planner.parse("SELECT DATEDIFF(HOUR, NOW(), NOW())")); {code} {noformat} Exception in thread "main" org.apache.calcite.sql.parser.SqlParseException: Incorrect syntax near the keyword 'HOUR' at line 2, column 21. Was expecting one of: "ALL" ... "ARRAY" ... "CASE" ... : "GROUPING" ... "HOUR" ... "HOUR" "(" ... "*" ... ")" ... at org.apache.calcite.sql.parser.impl.SqlParserImpl.convertException(SqlParserImpl.java:389) at org.apache.calcite.sql.parser.impl.SqlParserImpl.normalizeException(SqlParserImpl.java:153) at org.apache.calcite.sql.parser.SqlParser.handleException(SqlParser.java:145) at org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:160) at org.apache.calcite.sql.parser.SqlParser.parseStmt(SqlParser.java:185) at org.apache.calcite.prepare.PlannerImpl.parse(PlannerImpl.java:214) at org.apache.calcite.tools.Planner.parse(Planner.java:50) {noformat} This issue happens with other date/time keyword-ish ones like YEAR. I guess it happens because HOUR and YEAR are reserved keywords. Is this an expected behavior? If so, is there any workaround? was: I'm trying to parse and rewrite some SQL dialects including SQL Server which supports some functions that receive HOUR as an argument using. But Calcite's Planner#parse can't handle this kind of SQL. {code:java} FrameworkConfig config = Frameworks.newConfigBuilder().build(); Planner planner = Frameworks.getPlanner(config); System.out.println(planner.parse("SELECT DATEDIFF(HOUR, NOW(), NOW())")); {code} {code:java} Exception in thread "main" org.apache.calcite.sql.parser.SqlParseException: Incorrect syntax near the keyword 'HOUR' at line 2, column 21. Was expecting one of: "ALL" ... "ARRAY" ... "CASE" ... : "GROUPING" ... "HOUR" ... "HOUR" "(" ... "*" ... ")" ... at org.apache.calcite.sql.parser.impl.SqlParserImpl.convertException(SqlParserImpl.java:389) at org.apache.calcite.sql.parser.impl.SqlParserImpl.normalizeException(SqlParserImpl.java:153) at org.apache.calcite.sql.parser.SqlParser.handleException(SqlParser.java:145) at org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:160) at org.apache.calcite.sql.parser.SqlParser.parseStmt(SqlParser.java:185) at org.apache.calcite.prepare.PlannerImpl.parse(PlannerImpl.java:214) at org.apache.calcite.tools.Planner.parse(Planner.java:50) {code} This issue happens with other date/time keyword-ish ones like YEAR. I guess it happens because HOUR and YEAR are reserved keywords. Is this an expected behavior? If so, is there any workaround? > Allow custom time unit abbreviations in FLOOR, CEIL, EXTRACT, DATE_PART, > DATEADD, DATEDIFF and similar functions > ---------------------------------------------------------------------------------------------------------------- > > Key: CALCITE-5143 > URL: https://issues.apache.org/jira/browse/CALCITE-5143 > Project: Calcite > Issue Type: Bug > Components: babel > Affects Versions: 1.30.0 > Reporter: Mitsunori Komatsu > Assignee: Jiajun Xie > Priority: Major > Labels: pull-request-available > Fix For: 1.31.0 > > Time Spent: 10m > Remaining Estimate: 0h > > Babel parser can't parse DATEADD(S, ...). The parser should allow custom time > unit abbreviations in FLOOR, CEIL, EXTRACT, DATE_PART, DATEADD, DATEDIFF and > similar functions. > I'm trying to parse and rewrite some SQL dialects including SQL Server which > supports some functions that receive HOUR as an argument using. But Calcite's > Planner#parse can't handle this kind of SQL. > {code:java} > FrameworkConfig config = Frameworks.newConfigBuilder().build(); > Planner planner = Frameworks.getPlanner(config); > System.out.println(planner.parse("SELECT DATEDIFF(HOUR, NOW(), NOW())")); > {code} > {noformat} > Exception in thread "main" org.apache.calcite.sql.parser.SqlParseException: > Incorrect syntax near the keyword 'HOUR' at line 2, column 21. > Was expecting one of: > "ALL" ... > "ARRAY" ... > "CASE" ... > : > "GROUPING" ... > "HOUR" ... > "HOUR" "(" ... > "*" ... > ")" ... > > at > org.apache.calcite.sql.parser.impl.SqlParserImpl.convertException(SqlParserImpl.java:389) > at > org.apache.calcite.sql.parser.impl.SqlParserImpl.normalizeException(SqlParserImpl.java:153) > at > org.apache.calcite.sql.parser.SqlParser.handleException(SqlParser.java:145) > at org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:160) > at org.apache.calcite.sql.parser.SqlParser.parseStmt(SqlParser.java:185) > at org.apache.calcite.prepare.PlannerImpl.parse(PlannerImpl.java:214) > at org.apache.calcite.tools.Planner.parse(Planner.java:50) > {noformat} > This issue happens with other date/time keyword-ish ones like YEAR. > I guess it happens because HOUR and YEAR are reserved keywords. > Is this an expected behavior? If so, is there any workaround? -- This message was sent by Atlassian Jira (v8.20.7#820007)