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 <frank...@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.
>
>

Reply via email to