@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));
 }