Il sab 14 apr 2018, 18:20 Enrico Olivelli <eolive...@gmail.com> ha scritto:
> > > Il sab 14 apr 2018, 17:39 Vova Vysotskyi <vvo...@gmail.com> 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 <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 >> > >>>>> >> > >>>> >> > >> >> > >> > -- > > > -- Enrico Olivelli > -- -- Enrico Olivelli