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