columns(column("type1", "a1", "a"), column("type1", "a2", "b"), column("type2", "a3", "c"),
column("type2", "a4", "d")));
PlanNode join = new PlanNode(Type.JOIN, project, selector("type1"), selector("type2"));
join.setProperty(Property.JOIN_ALGORITHM, JoinAlgorithm.NESTED_LOOP);
join.setProperty(Property.JOIN_TYPE, JoinType.INNER);
join.setProperty(Property.JOIN_CONDITION, new EquiJoinCondition(selector("type1"), "a2", selector("type2"), "a3"));
PlanNode leftAccess = new PlanNode(Type.ACCESS, join, selector("type1"));
PlanNode leftProject = new PlanNode(Type.PROJECT, leftAccess, selector("type1"));
leftProject.setProperty(Property.PROJECT_COLUMNS, columns(column("type1", "a1"), column("type1", "a2")));
PlanNode leftSelect1 = new PlanNode(Type.SELECT, leftProject, selector("type1"));