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

Reply via email to