code: public Plan makeJoinPlan(Plan trunk) {
  		Schema trunkSch = trunk.schema();
  		Predicate joinPred = pred.joinPredicate(sch, trunkSch);
  		if (joinPred == null)
  			return null;
  		Plan p = makeIndexJoinPlan(trunk, trunkSch);
  		if (p == null)
  			p = makeProductJoinPlan(trunk, trunkSch);
  		return p;
  	}
docs: Constructs a join plan of the specified trunk and this table. The plan
  will use an indexjoin, if possible; otherwise a multi-buffer product
  join. The method returns null if no join is possible.
  
  <p>
  The select predicate applicable to this table is pushed down below the
  join.
  </p>
  
  @param trunk
  the specified trunk of join
  @return a join plan of the trunk and this table