Julian-

Is the only scenario in which the stack depth needs to be specified when you 
are preforming a join? If so, perhaps the RelBuildr API could be simplified so 
that rather than having to do:

        builder.scan("EMP").as("e").scan("DEPT").join(JoinRelType.LEFT, 
builder.equals(builder.field(2, "e", "DEPTNO"), builder.field(2, "DEPT", 
"DEPTNO")))

One could instead specify an “on” condition for the join after the join has 
been made (and thus after the stack has been flattened):

        
builder.scan("EMP").as("e").scan("DEPT").join(JoinRelType.LEFT).on(builder.equals(builder.field("e",
 "DEPTNO"), builder.field("DEPT", "DEPTNO")))

This would be similar to the filter example from 
RelBuilderTest.testAliasPastTop():

        
builder.scan("EMP").as("e").scan("DEPT").join(JoinRelType.LEFT).filter(builder.equals(builder.field("e",
 "DEPTNO"), builder.field("DEPT", "DEPTNO")))

        -Marc


> On Oct 6, 2017, at 4:39 PM, Julian Hyde <[email protected]> wrote:
> 
> When forming a reference it needs to know how many inputs you are
> going to pop off the stack in your next operation. Most operations pop
> 1, but join pops 2. Set operations may pop more, but they don't use
> expressions, so it's moot.
> 
> You don't necessarily pop the whole stack. For instance, if you're
> forming a right-deep join (a join (b join c)) for instance. You would
> have a, b, c on the stack and just pop (b, c) to make the first join.
> 
> So, I can't see a way to remove the inputCount parameter.
> 
> On Fri, Oct 6, 2017 at 12:33 PM, Marc Prud'hommeaux <[email protected]> wrote:
>> 
>> Using the RelBuilder API, I’d like to get a field by alias & name without 
>> having to keep track of the inputCount. I’ve found that the following always 
>> seems to work fine (after making stack a public variable):
>> 
>>  builder.field(builder.stack.count(), “MYALIAS”, “myfield”)
>> 
>> My question: why does RelBuilder.field(String, String) use an inputCount of 
>> 1 instead of the size of the stack? Doing so would allow people to search 
>> for field names without having to keep track of the number of inputs.
>> 
>> I understand why accessing fields by index require the inputCount and 
>> inputOrdinal, but searching for fields by name could just scan the entire 
>> stack and return the first matching field name + alias.
>> 
>> 

Reply via email to