You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by Jess Balint <jb...@gmail.com> on 2016/12/01 21:37:35 UTC

Re: RelBuilder API issue using table aliases in join condition

Thanks...

On Wed, Nov 30, 2016 at 2:34 PM, Julian Hyde <jh...@apache.org> wrote:

> Sorry, my mistake (or my email provider’s). I sent this reply on 11/22 and
> it went into my “sent” folder but it seems not to have made it onto the
> list.
>
> > On Nov 22, 2016, at 7:55 PM, Julian Hyde <jh...@apache.org> wrote:
> >
> > This looks like a bug. But first try writing
> >
> >  rb.scan("EMP").as("t0”)
> >      .scan("DEPT").as("t1")
> >      .join(JoinRelType.LEFT,
> >          rb.field(2, "t0", "emp_dept_no”),
> >          rb.field(2, "t1", "dept_dept_no"));
> >
> > Note that I added an extra “2, “ in each call to “field”.
> >
>

There is no such method in the API. The only field() overload accepting a
table alias is field(alias, fieldName). I will add such method.
Thanks.
Jess


> > The two calls to “field” don’t know they’re in a call to “join”, and in
> particular don’t know that “join” is about to pop two relational
> expressions of the stack. The “2” argument provides that information.
> Without it RelBuilder has no chance to generate the right column offset.
> >
> > If that doesn’t solve the problem, please log a bug.
> >
> > Julian
> >
> >
> >
> >> On Nov 22, 2016, at 1:41 PM, Jess Balint <jb...@gmail.com> wrote:
> >>
> >> Hi,
> >>
> >> Using the RelBuilder API, I would like to create a join condition using
> >> table aliases. The RelBuilder.field(relationAlias, fieldName) method
> only
> >> checks the top of the stack. The top of the stack is not yet a join
> node if
> >> using the RelBuilder.join(joinType, joinCondition) method. Here's an
> >> example:
> >>
> >> rb.scan("EMP").as("t0").scan("DEPT").as("t1")
> >> .join(JoinRelType.LEFT, rb.field("t0", "emp_dept_no"),
> >> rb.field("t1", "dept_dept_no"));
> >>
> >>
> >> I'm getting an error "java.lang.IllegalArgumentException: no relation
> wtih
> >> alias 't0'; aliases are: [t1]". Would it make sense for the RelBuilder
> to
> >> check the entire stack in anticipation that it's contents will be used?
> >>
> >> Thx.
> >> Jess
> >
>
>

Re: RelBuilder API issue using table aliases in join condition

Posted by Julian Hyde <jh...@apache.org>.
And please log a bug.

On Thu, Dec 1, 2016 at 1:37 PM, Jess Balint <jb...@gmail.com> wrote:
> Thanks...
>
> On Wed, Nov 30, 2016 at 2:34 PM, Julian Hyde <jh...@apache.org> wrote:
>
>> Sorry, my mistake (or my email provider’s). I sent this reply on 11/22 and
>> it went into my “sent” folder but it seems not to have made it onto the
>> list.
>>
>> > On Nov 22, 2016, at 7:55 PM, Julian Hyde <jh...@apache.org> wrote:
>> >
>> > This looks like a bug. But first try writing
>> >
>> >  rb.scan("EMP").as("t0”)
>> >      .scan("DEPT").as("t1")
>> >      .join(JoinRelType.LEFT,
>> >          rb.field(2, "t0", "emp_dept_no”),
>> >          rb.field(2, "t1", "dept_dept_no"));
>> >
>> > Note that I added an extra “2, “ in each call to “field”.
>> >
>>
>
> There is no such method in the API. The only field() overload accepting a
> table alias is field(alias, fieldName). I will add such method.
> Thanks.
> Jess
>
>
>> > The two calls to “field” don’t know they’re in a call to “join”, and in
>> particular don’t know that “join” is about to pop two relational
>> expressions of the stack. The “2” argument provides that information.
>> Without it RelBuilder has no chance to generate the right column offset.
>> >
>> > If that doesn’t solve the problem, please log a bug.
>> >
>> > Julian
>> >
>> >
>> >
>> >> On Nov 22, 2016, at 1:41 PM, Jess Balint <jb...@gmail.com> wrote:
>> >>
>> >> Hi,
>> >>
>> >> Using the RelBuilder API, I would like to create a join condition using
>> >> table aliases. The RelBuilder.field(relationAlias, fieldName) method
>> only
>> >> checks the top of the stack. The top of the stack is not yet a join
>> node if
>> >> using the RelBuilder.join(joinType, joinCondition) method. Here's an
>> >> example:
>> >>
>> >> rb.scan("EMP").as("t0").scan("DEPT").as("t1")
>> >> .join(JoinRelType.LEFT, rb.field("t0", "emp_dept_no"),
>> >> rb.field("t1", "dept_dept_no"));
>> >>
>> >>
>> >> I'm getting an error "java.lang.IllegalArgumentException: no relation
>> wtih
>> >> alias 't0'; aliases are: [t1]". Would it make sense for the RelBuilder
>> to
>> >> check the entire stack in anticipation that it's contents will be used?
>> >>
>> >> Thx.
>> >> Jess
>> >
>>
>>