[
https://issues.apache.org/jira/browse/CALCITE-5541?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Julian Hyde updated CALCITE-5541:
---------------------------------
Fix Version/s: 1.38.0
> Upgrade JavaCC
> --------------
>
> Key: CALCITE-5541
> URL: https://issues.apache.org/jira/browse/CALCITE-5541
> Project: Calcite
> Issue Type: Improvement
> Components: core
> Reporter: John Wright
> Assignee: Julian Hyde
> Priority: Minor
> Fix For: 1.38.0
>
>
> After
> [https://github.com/apache/calcite/commit/515f3356a6a1ab4bd570c1c20bec9a7e5d4aca5f#diff-e873041549333502af52ece8a1b34301ae5a059ff4719e9bddbaef48929e7047]
> there appears to be an issue with JavaCC codegen of the Parser.jj template
> in "newer" versions of JavaCC (6.1.2 was the version I tested).
> {code:java}
>
> build/scala_2.10/generated-sources/java/com/redacted/query/sql/parser/impl/QuerySqlParserImpl.java:15266:
> error: variable startNum might not have been initialized
> startNum.intValue(true) != endNum.intValue(true),
> ^
> redacted/build/scala_2.10/generated-sources/java/com/redacted/query/sql/parser/impl/QuerySqlParserImpl.java:15266:
> error: variable endNum might not have been initialized
> startNum.intValue(true) != endNum.intValue(true),
> ^
> redacted/build/scala_2.10/generated-sources/java/com/redacted/query/sql/parser/impl/QuerySqlParserImpl.java:15281:
> error: variable startNum might not have been initialized
> span().end(e), e, startNum, endNum, reluctant);}
> ^
> redacted/build/scala_2.10/generated-sources/java/com/redacted/query/sql/parser/impl/QuerySqlParserImpl.java:15281:
> error: variable endNum might not have been initialized
> span().end(e), e, startNum, endNum, reluctant);}
> ^
> redacted/build/scala_2.10/generated-sources/java/com/redacted/query/sql/parser/impl/QuerySqlParserImpl.java:15281:
> error: variable reluctant might not have been initialized
> span().end(e), e, startNum, endNum, reluctant);}{code}
> [[email protected]] helped me debug this, and he pointed out which generated
> code was incorrect:
> {code:java}
> final public SqlNode PatternFactor() throws ParseException {final SqlNode e;
> final SqlNode extra;
> final SqlLiteral startNum;
> final SqlLiteral endNum;
> final SqlLiteral reluctant;
> ...
> default:
> jj_la1[163] = jj_gen;
> {if ("" != null) return e;}
> }
> {if ("" != null) return SqlStdOperatorTable.PATTERN_QUANTIFIER.createCall(
> span().end(e), e, startNum, endNum, reluctant);}
> throw new Error("Missing return statement in function");
> }{code}
> instead of:
> {code:java}
> default:
> jj_la1[163] = jj_gen;
> {if (true) return e;}
> }
> {if (true) return SqlStdOperatorTable.PATTERN_QUANTIFIER.createCall(
> span().end(e), e, startNum, endNum, reluctant);}
> throw new Error("Missing return statement in function");
> } {code}
> I've worked around this by pinning to JavaCC 4.0, however the Gradle JavaCC
> plugin we use [https://github.com/javacc/javaccPlugin] defaults to 6.1.2.
> It looks like JavaCC 4.0 was release in 2006, 6.1.2 in 2014, and current
> 7.0.12 in 2022 so it felt like it might be worth updating.
> If this is intended / known, feel free to close - Thanks
--
This message was sent by Atlassian Jira
(v8.20.10#820010)