code: private void generateMorePlansForJoinTree(JoinNode joinTree) {
          assert(joinTree != null);
          // generate the access paths for all nodes
          generateAccessPaths(joinTree);
  
          List<JoinNode> nodes = joinTree.generateAllNodesJoinOrder();
          generateSubPlanForJoinNodeRecursively(joinTree, 0, nodes);
      }
docs: Given a specific join order, compute all possible sub-plan-graphs for that
  join order and add them to the deque of plans. If this doesn't add plans,
  it doesn't mean no more plans can be generated. It's possible that the
  particular join order it got had no reasonable plans.
  
  @param joinTree An array of tables in the join order.