Ok, I will try to prepare a test case and will log a bug on Janino soon. Kind regards, Volodymyr Vysotskyi
2018-04-14 20:02 GMT+03:00 Julian Hyde <[email protected]>: > Vova, > > Thanks for doing the research. Your explanation sounds very plausible > (I suspected default methods, too). Can you please log a bug on > JANINO? https://github.com/janino-compiler/janino/issues Arno, the > project maintainer, has been very good to us over the years. > > Julian > > > On Sat, Apr 14, 2018 at 9:28 AM, Enrico Olivelli <[email protected]> > wrote: > > Il sab 14 apr 2018, 18:20 Enrico Olivelli <[email protected]> ha > scritto: > > > >> > >> > >> Il sab 14 apr 2018, 17:39 Vova Vysotskyi <[email protected]> ha scritto: > >> > >>> Hi all, > >>> > >>> I think the reason for this issue is that at the compile stage was > assumed > >>> that *getSubSchema()* method returns *Schema *inheritor, but not > >>> *SchemaPlus*. > >>> But the interesting thing is that with Java 8, methods list of > >>> *SchemaPlus *interface > >>> contains default *getSubSchema()* method. > >>> It may be observed by executing this code: > >>> * Method[] declaredMethods = > >>> > >>> Class.forName("org.apache.calcite.schema.SchemaPlus"). > getDeclaredMethods();* > >>> * for (Method m : declaredMethods) {* > >>> * if (m.getName().equals("getSubSchema")) {* > >>> * System.out.println(m);* > >>> * }* > >>> * }* > >>> > >>> Its output: > >>> > >>> *public default org.apache.calcite.schema.Schema > >>> org.apache.calcite.schema.SchemaPlus.getSubSchema(java.lang.String)* > >>> *public abstract org.apache.calcite.schema.SchemaPlus > >>> org.apache.calcite.schema.SchemaPlus.getSubSchema(java.lang.String)* > >>> > >>> The output of the same code for Java 7: > >>> > >>> *public abstract org.apache.calcite.schema.SchemaPlus > >>> org.apache.calcite.schema.SchemaPlus.getSubSchema(java.lang.String)* > >>> > >>> Kind regards, > >>> Volodymyr Vysotskyi > >>> > >> > >> Good catch! > >> It would be useful to look into that 'default' method by disassembling > >> .class file. > >> Enrico > >> > > > > Anyway a fix would be to add an unwrap method to Schema > > Cheers > > Enrico > > > > > >> > >> > >>> 2018-04-10 18:43 GMT+03:00 Julian Hyde <[email protected]>: > >>> > >>> > I’d really appreciate that. > >>> > > >>> > Can you please log a JIRA case, and record your observations/progress > >>> > there. > >>> > > >>> > There’s no particular hurry on this one. > >>> > > >>> > Julian > >>> > > >>> > > On Apr 10, 2018, at 06:32, Enrico Olivelli <[email protected]> > >>> wrote: > >>> > > > >>> > > 2018-04-10 13:48 GMT+02:00 Julian Hyde <[email protected]>: > >>> > > > >>> > >> Yes, that’s it. > >>> > >> > >>> > >> Next step would be to check whether the generated code is the > same as > >>> > >> previously, and if so, it is a Janino bug. Then try to create a > >>> minimal > >>> > >> test case for Janino. Maybe we can work around by adding an > explicit > >>> > cast > >>> > >> somewhere. > >>> > >> > >>> > >> Thanks for reproducing this, and trying the Janino upgrade. > >>> > >> > >>> > > > >>> > > > >>> > > Julian, > >>> > > If you have no hurry for this I will be happy to spend some time in > >>> order > >>> > > to figure out the root cause. > >>> > > > >>> > > I will follow the discussion and jump in when I have some idea. > >>> > > > >>> > > It will be great to have Calcite really built on jdk8 and leverage > >>> > lambdas > >>> > > > >>> > > > >>> > > Cheers > >>> > > Enrico > >>> > > > >>> > > > >>> > > > >>> > >> > >>> > >> Julian > >>> > >> > >>> > >>> On Apr 10, 2018, at 3:37 AM, Enrico Olivelli < > [email protected]> > >>> > >> wrote: > >>> > >>> > >>> > >>> This is "the" error (see below). Unfortunately just be upgrading > >>> Janino > >>> > >> to > >>> > >>> 3.0.8 the problem still is present. > >>> > >>> > >>> > >>> the only 'unwrap' word in the generated code is here > >>> > >>> ... > >>> > >>> public org.apache.calcite.linq4j.Enumerable bind(final > >>> > >>> org.apache.calcite.DataContext root0) { > >>> > >>> root = root0; > >>> > >>> final org.apache.calcite.linq4j.Enumerable _inputEnumerable = > >>> > >>> org.apache.calcite.linq4j.Linq4j.asEnumerable(((org. > >>> > apache.calcite.test. > >>> > >> ReflectiveSchemaTest.CatchallSchema) > >>> > >>> ((org.apache.calcite.adapter.java.ReflectiveSchema) > >>> > >>> root.getRootSchema().getSubSchema("s").unwrap(org. > >>> > >> apache.calcite.adapter.java.ReflectiveSchema.class)). > >>> > >> getTarget()).nullables); > >>> > >>> .... > >>> > >>> > >>> > >>> Does any ring bell ? > >>> > >>> > >>> > >>> Enrico > >>> > >>> > >>> > >>> > >>> > >>> Caused by: org.codehaus.commons.compiler.CompileException: Line > 5, > >>> > >> Column > >>> > >>> 272: A method named "unwrap" is not declared in any enclosing > class > >>> nor > >>> > >> any > >>> > >>> supertype, nor through a static import > >>> > >>>> at > >>> > >>> > >>> org.codehaus.janino.UnitCompiler.compileError(UnitCompiler.java:11821) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.findIMethod( > UnitCompiler.java:8731) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileGet2( > UnitCompiler.java:4737) > >>> > >>>> at org.codehaus.janino.UnitCompiler.access$8300( > >>> > >> UnitCompiler.java:212) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$12.visitMethodInvocation( > >>> > >> UnitCompiler.java:4097) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$12.visitMethodInvocation( > >>> > >> UnitCompiler.java:4070) > >>> > >>>> at > >>> org.codehaus.janino.Java$MethodInvocation.accept(Java.java:4902) > >>> > >>>> at org.codehaus.janino.UnitCompiler.compileGet( > >>> > >> UnitCompiler.java:4070) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileGetValue( > >>> > UnitCompiler.java:5253) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileGet2( > UnitCompiler.java:4696) > >>> > >>>> at org.codehaus.janino.UnitCompiler.access$7800( > >>> > >> UnitCompiler.java:212) > >>> > >>>> at > >>> > >>> > >>> org.codehaus.janino.UnitCompiler$12.visitCast(UnitCompiler.java:4092) > >>> > >>>> at > >>> > >>> > >>> org.codehaus.janino.UnitCompiler$12.visitCast(UnitCompiler.java:4070) > >>> > >>>> at org.codehaus.janino.Java$Cast.accept(Java.java:4727) > >>> > >>>> at org.codehaus.janino.UnitCompiler.compileGet( > >>> > >> UnitCompiler.java:4070) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileGet2( > UnitCompiler.java:4732) > >>> > >>>> at org.codehaus.janino.UnitCompiler.access$7300( > >>> > >> UnitCompiler.java:212) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$12$1. > visitParenthesizedExpression( > >>> > >> UnitCompiler.java:4083) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$12$1. > visitParenthesizedExpression( > >>> > >> UnitCompiler.java:4074) > >>> > >>>> at > >>> > >>> org.codehaus.janino.Java$ParenthesizedExpression. > >>> > accept(Java.java:4753) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$12.visitLvalue( > >>> > UnitCompiler.java:4074) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$12.visitLvalue( > >>> > UnitCompiler.java:4070) > >>> > >>>> at org.codehaus.janino.Java$Lvalue.accept(Java.java:3977) > >>> > >>>> at org.codehaus.janino.UnitCompiler.compileGet( > >>> > >> UnitCompiler.java:4070) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileGetValue( > >>> > UnitCompiler.java:5253) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileGet2( > UnitCompiler.java:4792) > >>> > >>>> at org.codehaus.janino.UnitCompiler.access$8300( > >>> > >> UnitCompiler.java:212) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$12.visitMethodInvocation( > >>> > >> UnitCompiler.java:4097) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$12.visitMethodInvocation( > >>> > >> UnitCompiler.java:4070) > >>> > >>>> at > >>> org.codehaus.janino.Java$MethodInvocation.accept(Java.java:4902) > >>> > >>>> at org.codehaus.janino.UnitCompiler.compileGet( > >>> > >> UnitCompiler.java:4070) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileGetValue( > >>> > UnitCompiler.java:5253) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileGet2( > UnitCompiler.java:4696) > >>> > >>>> at org.codehaus.janino.UnitCompiler.access$7800( > >>> > >> UnitCompiler.java:212) > >>> > >>>> at > >>> > >>> > >>> org.codehaus.janino.UnitCompiler$12.visitCast(UnitCompiler.java:4092) > >>> > >>>> at > >>> > >>> > >>> org.codehaus.janino.UnitCompiler$12.visitCast(UnitCompiler.java:4070) > >>> > >>>> at org.codehaus.janino.Java$Cast.accept(Java.java:4727) > >>> > >>>> at org.codehaus.janino.UnitCompiler.compileGet( > >>> > >> UnitCompiler.java:4070) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileGet2( > UnitCompiler.java:4732) > >>> > >>>> at org.codehaus.janino.UnitCompiler.access$7300( > >>> > >> UnitCompiler.java:212) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$12$1. > visitParenthesizedExpression( > >>> > >> UnitCompiler.java:4083) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$12$1. > visitParenthesizedExpression( > >>> > >> UnitCompiler.java:4074) > >>> > >>>> at > >>> > >>> org.codehaus.janino.Java$ParenthesizedExpression. > >>> > accept(Java.java:4753) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$12.visitLvalue( > >>> > UnitCompiler.java:4074) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$12.visitLvalue( > >>> > UnitCompiler.java:4070) > >>> > >>>> at org.codehaus.janino.Java$Lvalue.accept(Java.java:3977) > >>> > >>>> at org.codehaus.janino.UnitCompiler.compileGet( > >>> > >> UnitCompiler.java:4070) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileGetValue( > >>> > UnitCompiler.java:5253) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileContext2( > >>> > UnitCompiler.java:4010) > >>> > >>>> at org.codehaus.janino.UnitCompiler.access$6100( > >>> > >> UnitCompiler.java:212) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$11$1. > visitFieldAccess(UnitCompiler. > >>> > >> java:3947) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$11$1. > visitFieldAccess(UnitCompiler. > >>> > >> java:3942) > >>> > >>>> at org.codehaus.janino.Java$FieldAccess.accept(Java.java: > 4139) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$11.visitLvalue( > >>> > UnitCompiler.java:3942) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$11.visitLvalue( > >>> > UnitCompiler.java:3938) > >>> > >>>> at org.codehaus.janino.Java$Lvalue.accept(Java.java:3977) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileContext( > >>> > UnitCompiler.java:3938) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileContext2( > >>> > UnitCompiler.java:4047) > >>> > >>>> at org.codehaus.janino.UnitCompiler.access$6200( > >>> > >> UnitCompiler.java:212) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$11$1. > visitFieldAccessExpression( > >>> > >> UnitCompiler.java:3948) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$11$1. > visitFieldAccessExpression( > >>> > >> UnitCompiler.java:3942) > >>> > >>>> at > >>> > >>> > >>> org.codehaus.janino.Java$FieldAccessExpression.accept(Java.java:4468) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$11.visitLvalue( > >>> > UnitCompiler.java:3942) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$11.visitLvalue( > >>> > UnitCompiler.java:3938) > >>> > >>>> at org.codehaus.janino.Java$Lvalue.accept(Java.java:3977) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileContext( > >>> > UnitCompiler.java:3938) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileGetValue( > >>> > UnitCompiler.java:5252) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileGet2( > UnitCompiler.java:4842) > >>> > >>>> at org.codehaus.janino.UnitCompiler.access$8300( > >>> > >> UnitCompiler.java:212) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$12.visitMethodInvocation( > >>> > >> UnitCompiler.java:4097) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$12.visitMethodInvocation( > >>> > >> UnitCompiler.java:4070) > >>> > >>>> at > >>> org.codehaus.janino.Java$MethodInvocation.accept(Java.java:4902) > >>> > >>>> at org.codehaus.janino.UnitCompiler.compileGet( > >>> > >> UnitCompiler.java:4070) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler.compileGetValue( > >>> > UnitCompiler.java:5253) > >>> > >>>> at org.codehaus.janino.UnitCompiler.compile2( > >>> > UnitCompiler.java:2559) > >>> > >>>> at org.codehaus.janino.UnitCompiler.access$2700( > >>> > >> UnitCompiler.java:212) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$6. > visitLocalVariableDeclarationS > >>> > >> tatement(UnitCompiler.java:1482) > >>> > >>>> at > >>> > >>> org.codehaus.janino.UnitCompiler$6. > visitLocalVariableDeclarationS > >>> > >> tatement(UnitCompiler.java:1466) > >>> > >>>> at > >>> > >>> org.codehaus.janino.Java$LocalVariableDeclarationStatem > >>> > >> ent.accept(Java.java:3351) > >>> > >>>> at > >>> org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:1466) > >>> > >>>> at org.cod (stack truncated) > >>> > >>> > >>> > >>> > >>> > >>> 2018-04-09 23:10 GMT+02:00 Cade Markegard < > [email protected] > >>> >: > >>> > >>> > >>> > >>>> Awesome! > >>> > >>>> > >>> > >>>> On Mon, Apr 9, 2018 at 1:29 PM Enrico Olivelli < > >>> [email protected]> > >>> > >>>> wrote: > >>> > >>>> > >>> > >>>>> Il lun 9 apr 2018, 22:20 Cade Markegard < > [email protected]> > >>> ha > >>> > >>>>> scritto: > >>> > >>>>> > >>> > >>>>>> Not sure if this is related, but it seems like Janino doesn't > >>> > support > >>> > >>>>> Java8 > >>> > >>>>>> lambdas under "Limitations" in http://janino-compiler.github. > >>> > >>>> io/janino/ > >>> > >>>>> > >>> > >>>>> > >>> > >>>>> > >>> > >>>>> This should not be a problem, we are not generating java > sources > >>> with > >>> > >>>>> lambdas (maybe in future?). > >>> > >>>>> I will be happy to do some trials with new Janino, but I guess > >>> that > >>> > >> would > >>> > >>>>> be the only way (or to drop Janino, but I think it will be > >>> harder). I > >>> > >>>> have > >>> > >>>>> not much time these days. > >>> > >>>>> > >>> > >>>>> Anyhow I am testing my apps on jdk10 and Calcite is working > like a > >>> > >> charm > >>> > >>>> ! > >>> > >>>>> > >>> > >>>>> Enrico > >>> > >>>>> > >>> > >>>>>> > >>> > >>>>>> > >>> > >>>>>>> On Mon, Apr 9, 2018 at 12:54 PM Julian Hyde < > [email protected]> > >>> > >> wrote: > >>> > >>>>>>> > >>> > >>>>>>> I didn’t try. We’re on janino 2.7.6. The 2.x line only goes > up > >>> to > >>> > >>>>> 2.7.8. > >>> > >>>>>>> I’m not eager to try upgrading to 3.x (latest release is > 3.0.8) > >>> > >>>>>> especially > >>> > >>>>>>> as they don’t explicitly mention fixing a JDK 8 issue. > >>> > >>>>>>> > >>> > >>>>>>> http://janino-compiler.github.io/janino/changelog.html < > >>> > >>>>>>> http://janino-compiler.github.io/janino/changelog.html> > >>> > >>>>>>> > >>> > >>>>>>> > >>> > >>>>>>>> On Apr 9, 2018, at 12:42 PM, Enrico Olivelli < > >>> [email protected] > >>> > > > >>> > >>>>>>> wrote: > >>> > >>>>>>>> > >>> > >>>>>>>> Il lun 9 apr 2018, 21:37 Julian Hyde <[email protected] > >>> <mailto: > >>> > >>>>>>> [email protected]>> ha scritto: > >>> > >>>>>>>> > >>> > >>>>>>>>> Don’t have the error stack, but janino could not compile > >>> > generated > >>> > >>>>>> code > >>> > >>>>>>>>> because it said an “unwrap” method did not exist. > >>> > >>>>>>>>> > >>> > >>>>>>>>> There were no lambdas. I think perhaps that version of > janino > >>> > >>>> could > >>> > >>>>>> not > >>> > >>>>>>>>> fully understand the Calcite class files. > >>> > >>>>>>>>> > >>> > >>>>>>>>> To reproduce, change 2 lines in core/pom.xml and run “mvn > >>> test”. > >>> > >>>>>>>>> > >>> > >>>>>>>> > >>> > >>>>>>>> Did you try to update to latest Janino? > >>> > >>>>>>>> It seems to that we have an old version (2.7.6) > >>> > >>>>>>>> > >>> > >>>>>>>> Enrico > >>> > >>>>>>>> > >>> > >>>>>>>>> > >>> > >>>>>>>>> Julian > >>> > >>>>>>>>> > >>> > >>>>>>>>> > >>> > >>>>>>>>>> On Apr 9, 2018, at 12:15 PM, Enrico Olivelli < > >>> > >>>> [email protected]> > >>> > >>>>>>>>> wrote: > >>> > >>>>>>>>>> > >>> > >>>>>>>>>> Il lun 9 apr 2018, 19:05 Julian Hyde <[email protected]> > ha > >>> > >>>>> scritto: > >>> > >>>>>>>>>> > >>> > >>>>>>>>>>> Has anyone had any luck using JDK 8 syntax (e.g. “->” for > >>> > >>>> lambdas) > >>> > >>>>>> in > >>> > >>>>>>>>>>> Calcite? > >>> > >>>>>>>>>>> > >>> > >>>>>>>>>>> In core/pom.xml I changed source=1.7 target=1.7 to > source=8 > >>> > >>>>> target=8 > >>> > >>>>>>> and > >>> > >>>>>>>>>>> it allowed the syntax but it seemed to break any tests > that > >>> > >>>> relied > >>> > >>>>>> on > >>> > >>>>>>>>>>> janino. > >>> > >>>>>>>>>>> > >>> > >>>>>>>>>> > >>> > >>>>>>>>>> Julian, > >>> > >>>>>>>>>> Could you please share a stacktrace of your error? > >>> > >>>>>>>>>> As far as I know using lambdas is not only a matter of > >>> syntactic > >>> > >>>>>> sugar > >>> > >>>>>>>>> but > >>> > >>>>>>>>>> they are more efficient than simple anonymous classes. > >>> > >>>>>>>>>> > >>> > >>>>>>>>>> Cheers > >>> > >>>>>>>>>> Enrico > >>> > >>>>>>>>>> > >>> > >>>>>>>>>> > >>> > >>>>>>>>>>> Related: https://issues.apache.org/ > jira/browse/CALCITE-2027 > >>> < > >>> > >>>>>>>>>>> https://issues.apache.org/jira/browse/CALCITE-2027> > >>> > >>>>>>>>>>> > >>> > >>>>>>>>>>> Julian > >>> > >>>>>>>>>>> > >>> > >>>>>>>>>>> -- > >>> > >>>>>>>>>> > >>> > >>>>>>>>>> > >>> > >>>>>>>>>> -- Enrico Olivelli > >>> > >>>>>>>>> > >>> > >>>>>>>>> -- > >>> > >>>>>>>> > >>> > >>>>>>>> > >>> > >>>>>>>> -- Enrico Olivelli > >>> > >>>>>>> > >>> > >>>>>>> > >>> > >>>>>> > >>> > >>>>> -- > >>> > >>>>> > >>> > >>>>> > >>> > >>>>> -- Enrico Olivelli > >>> > >>>>> > >>> > >>>> > >>> > >> > >>> > > >>> > >> -- > >> > >> > >> -- Enrico Olivelli > >> > > -- > > > > > > -- Enrico Olivelli >
