static JoinType getJoinTypePreventingCriteriaOptimization(PlanNode joinNode, PlanNode critNode) { Set<GroupSymbol> groups = critNode.getGroups(); //special case for 0 group criteria if (groups.size() == 0) { critNode = FrameUtil.findOriginatingNode(critNode, groups); if (critNode == null) { return null; } groups = critNode.getGroups(); } return getJoinTypePreventingCriteriaOptimization(joinNode, groups); }
static JoinType getJoinTypePreventingCriteriaOptimization(PlanNode joinNode, PlanNode critNode) { Set<GroupSymbol> groups = critNode.getGroups(); //special case for 0 group criteria if (groups.size() == 0) { critNode = FrameUtil.findOriginatingNode(critNode, groups); if (critNode == null) { return null; } groups = critNode.getGroups(); } return getJoinTypePreventingCriteriaOptimization(joinNode, groups); }
static JoinType getJoinTypePreventingCriteriaOptimization(PlanNode joinNode, PlanNode critNode) { Set<GroupSymbol> groups = critNode.getGroups(); //special case for 0 group criteria if (groups.size() == 0) { critNode = FrameUtil.findOriginatingNode(critNode, groups); if (critNode == null) { return null; } groups = critNode.getGroups(); } return getJoinTypePreventingCriteriaOptimization(joinNode, groups); }
/** * check to see if criteria is used in a full outer join or has no groups and is on the inner side of an outer join. if this * is the case then the layers cannot be merged, since merging would possibly force the criteria to change it's position (into * the on clause or above the join). */ static boolean checkJoinCriteria(PlanNode frameRoot, GroupSymbol virtualGroup, PlanNode parentJoin) { if (parentJoin != null) { List<PlanNode> selectNodes = NodeEditor.findAllNodes(frameRoot, NodeConstants.Types.SELECT, NodeConstants.Types.SOURCE); Set<GroupSymbol> groups = new HashSet<GroupSymbol>(); groups.add(virtualGroup); for (PlanNode selectNode : selectNodes) { if (selectNode.hasBooleanProperty(NodeConstants.Info.IS_PHANTOM)) { continue; } JoinType jt = JoinUtil.getJoinTypePreventingCriteriaOptimization(parentJoin, groups); if (jt != null && (jt == JoinType.JOIN_FULL_OUTER || selectNode.getGroups().size() == 0)) { return false; } } } return true; }
/** * check to see if criteria is used in a full outer join or has no groups and is on the inner side of an outer join. if this * is the case then the layers cannot be merged, since merging would possibly force the criteria to change it's position (into * the on clause or above the join). */ static boolean checkJoinCriteria(PlanNode frameRoot, GroupSymbol virtualGroup, PlanNode parentJoin) { if (parentJoin != null) { List<PlanNode> selectNodes = NodeEditor.findAllNodes(frameRoot, NodeConstants.Types.SELECT, NodeConstants.Types.SOURCE); Set<GroupSymbol> groups = new HashSet<GroupSymbol>(); groups.add(virtualGroup); for (PlanNode selectNode : selectNodes) { if (selectNode.hasBooleanProperty(NodeConstants.Info.IS_PHANTOM)) { continue; } JoinType jt = JoinUtil.getJoinTypePreventingCriteriaOptimization(parentJoin, groups); if (jt != null && (jt == JoinType.JOIN_FULL_OUTER || selectNode.getGroups().size() == 0)) { return false; } } } return true; }
/** * check to see if criteria is used in a full outer join or has no groups and is on the inner side of an outer join. if this * is the case then the layers cannot be merged, since merging would possibly force the criteria to change it's position (into * the on clause or above the join). */ static boolean checkJoinCriteria(PlanNode frameRoot, GroupSymbol virtualGroup, PlanNode parentJoin) { if (parentJoin != null) { List<PlanNode> selectNodes = NodeEditor.findAllNodes(frameRoot, NodeConstants.Types.SELECT, NodeConstants.Types.SOURCE); Set<GroupSymbol> groups = new HashSet<GroupSymbol>(); groups.add(virtualGroup); for (PlanNode selectNode : selectNodes) { if (selectNode.hasBooleanProperty(NodeConstants.Info.IS_PHANTOM)) { continue; } JoinType jt = JoinUtil.getJoinTypePreventingCriteriaOptimization(parentJoin, groups); if (jt != null && (jt == JoinType.JOIN_FULL_OUTER || selectNode.getGroups().size() == 0)) { return false; } } } return true; }
JoinType jt = JoinUtil.getJoinTypePreventingCriteriaOptimization(currentNode, critNode);
JoinType jt = JoinUtil.getJoinTypePreventingCriteriaOptimization(currentNode, critNode);
JoinType jt = JoinUtil.getJoinTypePreventingCriteriaOptimization(currentNode, critNode);