...
a. there is a join (let's call it J1.) in the nested plan,
b. if J1 is an inner join, one input pipeline of J1 has a NestedTupleSource descendant (let's call it N1),
c. if J1 is a left outer join, the left branch of J1 has a NestedTupleSource descendant (let's call it N1),
d. there is no tuple dropping from N1 to J1
...
--NestedOp
– Inner Join (J1)
– – (Right branch) ..... (L1)
– (Left branch) ..... (R1)
--Nested-Tuple-Source – ..... (R1)
}
--InputOp
.....
(Note that pipeline L1 R1 must satisfy the condition that it does not drop any tuples.)
...
--LeftOuterJoin (J1)
(left branch) – Assign v_new=TRUE
– ...... (L1R1)
– InputOp
.....
(right branch)
– Assign v_new=TRUE
– ..... (R1L1)
In the plan, v_lc_1, ..., v_lc_n are live "covering" variables at InputOp and v_l1, ....v_ln in the decoration part of the added group-by operator are all live variables at InputOp except the covering variables v_lc_1, ..., v_lc_n. In the current implementation, we use "covering" variables as primary key variables. In the next version, we will use the real primary key variables, which will fix ASTERIXDB-1168.
...