@Override public void meet(LeftJoin leftJoin) { if (leftJoin.getLeftArg().getBindingNames().containsAll(filterVars)) { leftJoin.getLeftArg().visit(this); } else { relocate(filter, leftJoin); } }
public long getCardinality(LeftJoin join, BindingSet bindings) { long card1 = getCardinality(join.getLeftArg(), bindings); long card2 = getCardinality(join.getRightArg(), bindings); double sel = 0.5; return Math.max(card1, (long) (card1 * card2 * sel)); }