You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by Julian Hyde <jh...@apache.org> on 2016/04/01 17:39:42 UTC
Re: RelMetadataQuery is not pluggable?
RelOptCluster#setMetadataProvider is not deprecated. The process for setting metadata provider is complicated right now. Maybe someone has the time and energy to simplify it.
Julian
> On Mar 29, 2016, at 1:35 AM, Ted Xu <fr...@gmail.com> wrote:
>
> Thanks Julian!
>
> I managed to inject my code by setting a ThreadLocal attribute in
> RelMetadataQuery, as follows,
>
> RelMetadataQuery.THREAD_PROVIDERS.set(
> JaninoRelMetadataProvider.of(new MyRelMetadataProvider()));
>
> Now it works.
>
> However, does that mean RelOptCluster#setMetadataProvider is deprecated?
>
> On Tue, Mar 29, 2016 at 12:26 PM Julian Hyde <jh...@apache.org> wrote:
>
>> Did you take a look at https://issues.apache.org/jira/browse/CALCITE-1147
>> <https://issues.apache.org/jira/browse/CALCITE-1147>? It helps make
>> RelMetadataQuery pluggable.
>>
>>> On Mar 28, 2016, at 9:21 PM, Ted Xu <fr...@gmail.com> wrote:
>>>
>>> Hi all,
>>>
>>> After [CALCITE-604 <https://issues.apache.org/jira/browse/CALCITE-604>],
>> I
>>> found the methods of RelMetadataQuery is not pluggable. By 'pluggable', I
>>> mean RelMetadataQuery's behaviour can be re-defined by registering a
>>> RelMetadataProvider in RelOptCluster.
>>>
>>> For example, if I defined a RelMetadataProvider as follows and register
>> it
>>> using RelOptCluster#setMetadataProvider,
>>>
>>> public class MyRelMetadataProvider extends ChainedRelMetadataProvider {
>>> public MyRelMetadataProvider() {
>>> super(
>>> ImmutableList.of(
>>> MyRelMdRowCount.SOURCE));
>>> }
>>> }
>>>
>>> I expect RelMetadataQuery#getRowCount will invoke MyRelMdRowCount.SOURCE.
>>> However I noticed that after CALCITE-604 it always use
>>> DefaultRelMetadataProvider.
>>>
>>> I do noticed an example of overriding RelMetadataQuery in
>> RelMetadataTest,
>>> but I guess by now I can only add metadata support rather than override
>>> existing metadata?
>>>
>>> I'm not sure if I'm using it in the right way, please correct me if I'm
>>> wrong. Thanks!
>>>
>>> Regards,
>>> Ted Xu.
>>
>>