You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Julian Hyde (JIRA)" <ji...@apache.org> on 2018/11/26 19:22:00 UTC

[jira] [Commented] (CALCITE-2701) Make generated Baz classes immutable

    [ https://issues.apache.org/jira/browse/CALCITE-2701?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16699463#comment-16699463 ] 

Julian Hyde commented on CALCITE-2701:
--------------------------------------

Forgive me for being pedantic. I think the classes (i.e. instances of java.lang.Class produced by janino) are already immutable, as are all JVM classes. Your problem is that they are not re-entrant, because a they have static variables, and if two users in the same ClassLoader use the same class then their assignments to static variables will stomp on each other. Is that the problem you are seeing? 

> Make generated Baz classes immutable
> ------------------------------------
>
>                 Key: CALCITE-2701
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2701
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.17.0
>            Reporter: Stamatis Zampetakis
>            Assignee: Julian Hyde
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.18.0
>
>
> Currently the Baz classes that are used to execute queries in the EnumerableConvention are stateful since the code generated by EnumerableRelImplementor#implementRoot method creates an instance variable (i.e., DataContext root). Every call to the bind method changes the value of the root variable making the object mutable.
> I propose to remove the instance variable and in the body of the method use the DataContext passed as a parameter.
> It appears that the addition of the instance variable was a workaround for a bug in Janino (JANINO-169). It seems that the bug is no longer present at the current version of Janino used in Calcite (3.0.9) since the test JdbcTest#testJanino169 (and the complete suite) pass successfully with the proposed modification. 
> Unfortunately, I couldn't verify the fix in the release notes of Janino neither in the commit history. The best, I could find is the following commits in the Janino repository:
> {code:none}
> commit fe5edc1904278c1c189f3379e06417aaf4a26315
> Author: aunkrig <au...@eb4544d6-894b-0410-9319-a9612837a279>
> Date: Wed Jan 22 21:19:48 2014 +0000
> Partly fixed JANINO-169 - now you get "Compiler limitation: Initializers cannot access local variables declared in an enclosing block".
> commit 4d2bacf16229ac1278eafa0fb4d5a0377134d3f2
> Author: aunkrig <au...@eb4544d6-894b-0410-9319-a9612837a279>
> Date: Wed Jan 22 15:03:17 2014 +0000
> Added test case for JANINO-169.
> {code}
>  
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)