rel.getRowType(), leftFieldCount, joinType.generatesNullsOnRight());
/** Returns whether this join type generates nulls on side #{@code i}. */ public boolean generatesNullsOn(int i) { switch (i) { case 0: return generatesNullsOnLeft(); case 1: return generatesNullsOnRight(); default: throw new IllegalArgumentException("invalid: " + i); } }
@Override public void onMatch(RelOptRuleCall call) { JoinRelBase join = call.rel(0); if (join.getJoinType().generatesNullsOnRight()) { // "select * from emp left join dept" is not necessarily empty if // dept is empty return; } call.transformTo(empty(join)); } };
canCombine(right, joinType.generatesNullsOnRight()); if (combineRight) { rightMultiJoin = (MultiJoinRel) right;
&& leftUnique && (rightSet != null) && !(rel.getJoinType().generatesNullsOnRight())) { retSet.addAll(rightSet);
if (rel.getJoinType().generatesNullsOnRight()) { return false;
(joinType == JoinRelType.INNER), !joinType.generatesNullsOnLeft(), !joinType.generatesNullsOnRight(), joinFilters, leftFilters,
joinType == JoinRelType.INNER, !joinType.generatesNullsOnLeft(), !joinType.generatesNullsOnRight(), joinFilters, leftFilters,
rel.getRight(), iOutputColumn - nLeftColumns); if (rel.getJoinType().generatesNullsOnRight()) { derived = true;
public Set<RelColumnOrigin> getColumnOrigins( JoinRelBase rel, int iOutputColumn) { int nLeftColumns = rel.getLeft().getRowType().getFieldList().size(); Set<RelColumnOrigin> set; boolean derived = false; if (iOutputColumn < nLeftColumns) { set = invokeGetColumnOrigins( rel.getLeft(), iOutputColumn); if (rel.getJoinType().generatesNullsOnLeft()) { derived = true; } } else { set = invokeGetColumnOrigins( rel.getRight(), iOutputColumn - nLeftColumns); if (rel.getJoinType().generatesNullsOnRight()) { derived = true; } } if (derived) { // nulls are generated due to outer join; that counts // as derivation set = createDerivedColumnOrigins(set); } return set; }
if (joinRel.getJoinType().generatesNullsOnRight()) { return;
canCombine(left, joinType.generatesNullsOnLeft()); boolean rightCombined = canCombine(right, joinType.generatesNullsOnRight()); switch (joinType) { case LEFT:
if (join.getJoinType().generatesNullsOnRight()) { return;
if (canCombine(right, joinType.generatesNullsOnRight())) { MultiJoinRel multiJoin = (MultiJoinRel) right; rightFilter =
if (canCombine(right, joinType.generatesNullsOnRight())) { MultiJoinRel multiJoin = (MultiJoinRel) right; rightFilter =
joinType.generatesNullsOnLeft())) .append(Expressions.constant( joinType.generatesNullsOnRight())))).toBlock());