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
> >>>>>
> >>>>
> >>
>

Reply via email to