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

Vladimir Sitnikov commented on CALCITE-601:
-------------------------------------------

In fact it does not.
You might probably want to hack 
{{org.apache.calcite.adapter.enumerable.EnumerableRelImplementor#implementRoot}},
 however I do not like that since it would diverge APIs. Bindable vs enumerable 
battle is not yet over, thus I do not want to diverge things unless it makes 
sense.

See: if we consider "Enumerable convention" as a pluggable implementation, then 
base interface should be capable to support features.
In other words, things like "if (instanceof enumerable) \{ grab shape from 
it\}" do not suit "core" component with "enumerable" being a plug-in.

Here's one more relevant use-case: "accept of {{cursor}} parameter". It is not 
clear what calling convention should be.
It would be nice to make it clear what will be passed in the parameter. 
{{Enumerable<Object\[\]>}} or {{Enumerable<Class>}} or {{ResultSet}} or 
whatever.
It would be nice to have "converter" out of the box.

If all plays well, we could probably make JdbcToEnumerable to by-pass code 
generation by simple composition of "ResultSet shape vs Meta.CursorFactory"

> Meta.CursorFactory#deduce should not try to check column count
> --------------------------------------------------------------
>
>                 Key: CALCITE-601
>                 URL: https://issues.apache.org/jira/browse/CALCITE-601
>             Project: Calcite
>          Issue Type: Bug
>    Affects Versions: 1.0.0-incubating
>            Reporter: Vladimir Sitnikov
>            Assignee: Julian Hyde
>
> Current implementation of {{Meta.CursorFactory#deduce}} thinks that 
> Enumerable with single column cannot be {{Object\[\]}} wrapped.
> This sounds like an extreme high coupling.
> I think it makes sense if "Bindable" would provide its {{JavaRowFormat}} 
> along with "ElementType".
> I think it makes sense to reject non-typed, non-rowformatproviding Bindables 
> out of Enumerable/Bindable conventions.
> {code:java}
>     public static CursorFactory deduce(List<ColumnMetaData> columns,
>         Class resultClazz) {
>       if (columns.size() == 1) {
>         return OBJECT;  // <-- !! Look here. deduce just assumes 
> single-column results are always naked
>       } else if (resultClazz != null && !resultClazz.isArray()) {
>         return record(resultClazz);
>       } else {
>         return ARRAY;
>       }
>     }
> {code}



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

Reply via email to