[ 
https://issues.apache.org/jira/browse/CALCITE-506?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14240331#comment-14240331
 ] 

Julian Hyde edited comment on CALCITE-506 at 12/9/14 11:58 PM:
---------------------------------------------------------------

{quote}How would you implement MongoToEnumerableConverter without 
EnumerableRelImplementor?{quote}

OK, you proved your point. EnumerableRelImplementor is a public API.

That said, I'd love people to be able to write adapters without getting their 
hands dirty with the enumerable convention. The Mongo adapter is a good 
example. There's no advantage to generating Java; its performance would not be 
affected if it was implemented as an interpreter. Then what you pass to it is 
not a pre-computed string but (a copy of) the root RelNode.

{quote}EnumerableImplementor detects such OTHER literals and passes it via 
DataContext transparently to the user.  Would this qualify as proper usage of 
OTHER sql type?{quote}

Yes, I guess so. I didn't have a specific purpose in mind for OTHER.

I do worry a bit about promising to handle arbitrary data types. We want to be 
able to generate a plan on node 1 and execute it on node 2. That means that all 
objects we pass between planner and executor have to be serializable or 
externalizable.


was (Author: julianhyde):
.bq How would you implement MongoToEnumerableConverter without 
EnumerableRelImplementor?

OK, you proved your point. EnumerableRelImplementor is a public API.

That said, I'd love people to be able to write adapters without getting their 
hands dirty with the enumerable convention. The Mongo adapter is a good 
example. There's no advantage to generating Java; its performance would not be 
affected if it was implemented as an interpreter. Then what you pass to it is 
not a pre-computed string but (a copy of) the root RelNode.

.bq EnumerableImplementor detects such OTHER literals and passes it via 
DataContext transparently to the user.  Would this qualify as proper usage of 
OTHER sql type?

Yes, I guess so. I didn't have a specific purpose in mind for OTHER.

I do worry a bit about promising to handle arbitrary data types. We want to be 
able to generate a plan on node 1 and execute it on node 2. That means that all 
objects we pass between planner and executor have to be serializable or 
externalizable.

> Update EnumerableRelImplementor.stash so it is suitable for all kinds of 
> classes
> --------------------------------------------------------------------------------
>
>                 Key: CALCITE-506
>                 URL: https://issues.apache.org/jira/browse/CALCITE-506
>             Project: Calcite
>          Issue Type: Bug
>    Affects Versions: 1.0.0-incubating
>            Reporter: Vladimir Sitnikov
>            Assignee: Julian Hyde
>              Labels: newbie
>
> {code:java}
>   public Expression stash(RelNode child, Class clazz) {
>     final ParameterExpression x = register(child, clazz);
>     final Expression e = Expressions.call(getRootExpression(),
>         BuiltInMethod.DATA_CONTEXT_GET.method, Expressions.constant(x.name));
>     return Expressions.convert_(e, clazz);
>   }
> {code}
> I would like to make two corrections here:
> 1) I think {{public <T> Expression st(T x, Class<? super T> clazz) \{}} 
> should be better signature.
> 2) It makes sense to translate {{DATA_CONTEXT_GET}} as a store to a {{final}} 
> local variable at the very start of {{public 
> org.apache.calcite.linq4j.Enumerable bind(final 
> org.apache.calcite.DataContext root0)}} method (see {{implementRoot}}), so at 
> the usage time it is just a load of local variable, not a {{map.get}}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to