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 2018-04-10 18:43 GMT+03:00 Julian Hyde <jhyde.apa...@gmail.com>: > 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 <eolive...@gmail.com> wrote: > > > > 2018-04-10 13:48 GMT+02:00 Julian Hyde <jhyde.apa...@gmail.com>: > > > >> 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 <eolive...@gmail.com> > >> 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 <cademarkeg...@gmail.com>: > >>> > >>>> Awesome! > >>>> > >>>> On Mon, Apr 9, 2018 at 1:29 PM Enrico Olivelli <eolive...@gmail.com> > >>>> wrote: > >>>> > >>>>> Il lun 9 apr 2018, 22:20 Cade Markegard <cademarkeg...@gmail.com> 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 <jh...@apache.org> > >> 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 <eolive...@gmail.com > > > >>>>>>> wrote: > >>>>>>>> > >>>>>>>> Il lun 9 apr 2018, 21:37 Julian Hyde <jh...@apache.org <mailto: > >>>>>>> jh...@apache.org>> 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 < > >>>> eolive...@gmail.com> > >>>>>>>>> wrote: > >>>>>>>>>> > >>>>>>>>>> Il lun 9 apr 2018, 19:05 Julian Hyde <jh...@apache.org> 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 > >>>>> > >>>> > >> >