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
