[
https://issues.apache.org/jira/browse/CALCITE-5839?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ruben Q L resolved CALCITE-5839.
--------------------------------
Resolution: Fixed
Fixed via
https://github.com/apache/calcite/commit/55f714cc37ca7d60a6c95196f404a370d6ff0dfd
Thanks [~zabetak] and [~thomas.rebele] for your help here!
> EnumerableInterpretable#StaticFieldDetector can overwrite its flag and return
> an incorrect result
> -------------------------------------------------------------------------------------------------
>
> Key: CALCITE-5839
> URL: https://issues.apache.org/jira/browse/CALCITE-5839
> Project: Calcite
> Issue Type: Bug
> Components: core
> Reporter: Ruben Q L
> Assignee: Ruben Q L
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.35.0
>
>
> In EnumerableInterpretable, before using the bindable cache, it is verified
> whether the class contains static fields (because in that case, the cache
> shall not be used):
> {code}
> static Bindable getBindable(ClassDeclaration expr, ...) {
> ...
> if (CalciteSystemProperty.BINDABLE_CACHE_MAX_SIZE.value() != 0) {
> StaticFieldDetector detector = new StaticFieldDetector();
> expr.accept(detector);
> if (!detector.containsStaticField) {
> return BINDABLE_CACHE.get(classBody, () ->
> compileToBindable(expr.name, s, compiler));
> }
> }
> ....
> /**
> * A visitor detecting if the Java AST contains static fields.
> */
> static class StaticFieldDetector extends VisitorImpl<Void> {
> boolean containsStaticField = false;
> @Override public Void visit(final FieldDeclaration fieldDeclaration) {
> containsStaticField = (fieldDeclaration.modifier & Modifier.STATIC) !=
> 0;
> return containsStaticField ? null : super.visit(fieldDeclaration);
> }
> }
> {code}
> However, it seem that the {{containsStaticField}} flag in
> {{{StaticFieldDetector}} can be overwritten when inspecting the field
> declarations of the class, so that, if a non-static field is inspected after
> a static field, the flag will be then (re)set to false; and the final result
> of the shuttle will be wrong (false, when it should have been true).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)