int regionCount = region.getJoinSourceNodes().size();
int regionCount = region.getJoinSourceNodes().size();
int regionCount = region.getJoinSourceNodes().size();
/** * Return a map of Access Nodes to JoinSources that may be eligible for pushdown as * joins. */ private Map<Object, List<PlanNode>> getAccessMap(QueryMetadataInterface metadata, CapabilitiesFinder capFinder, JoinRegion joinRegion) throws QueryMetadataException, TeiidComponentException { Map<Object, List<PlanNode>> accessMap = new HashMap(); for (PlanNode node : joinRegion.getJoinSourceNodes().values()) { /* check to see if we are directly over an access node. in the event that the join source root * looks like select->access, we still won't consider this node for pushing */ if (node.getType() != NodeConstants.Types.ACCESS) { continue; } Object accessModelID = RuleRaiseAccess.getModelIDFromAccess(node, metadata); if (accessModelID == null || !CapabilitiesUtil.supportsJoin(accessModelID, JoinType.JOIN_INNER, metadata, capFinder)) { continue; } RulePlanUnions.buildModelMap(metadata, capFinder, accessMap, node, accessModelID); } return accessMap; }
/** * Return a map of Access Nodes to JoinSources that may be eligible for pushdown as * joins. */ private Map<Object, List<PlanNode>> getAccessMap(QueryMetadataInterface metadata, CapabilitiesFinder capFinder, JoinRegion joinRegion) throws QueryMetadataException, TeiidComponentException { Map<Object, List<PlanNode>> accessMap = new HashMap(); for (PlanNode node : joinRegion.getJoinSourceNodes().values()) { /* check to see if we are directly over an access node. in the event that the join source root * looks like select->access, we still won't consider this node for pushing */ if (node.getType() != NodeConstants.Types.ACCESS) { continue; } Object accessModelID = RuleRaiseAccess.getModelIDFromAccess(node, metadata); if (accessModelID == null || !CapabilitiesUtil.supportsJoin(accessModelID, JoinType.JOIN_INNER, metadata, capFinder)) { continue; } RulePlanUnions.buildModelMap(metadata, capFinder, accessMap, node, accessModelID); } return accessMap; }
/** * Return a map of Access Nodes to JoinSources that may be eligible for pushdown as * joins. */ private Map<Object, List<PlanNode>> getAccessMap(QueryMetadataInterface metadata, CapabilitiesFinder capFinder, JoinRegion joinRegion) throws QueryMetadataException, TeiidComponentException { Map<Object, List<PlanNode>> accessMap = new HashMap(); for (PlanNode node : joinRegion.getJoinSourceNodes().values()) { /* check to see if we are directly over an access node. in the event that the join source root * looks like select->access, we still won't consider this node for pushing */ if (node.getType() != NodeConstants.Types.ACCESS) { continue; } Object accessModelID = RuleRaiseAccess.getModelIDFromAccess(node, metadata); if (accessModelID == null || !CapabilitiesUtil.supportsJoin(accessModelID, JoinType.JOIN_INNER, metadata, capFinder)) { continue; } RulePlanUnions.buildModelMap(metadata, capFinder, accessMap, node, accessModelID); } return accessMap; }
if (joinRegion.getJoinSourceNodes().isEmpty()) { throw new QueryPlannerException(QueryPlugin.Event.TEIID30275, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30275, joinRegion.getUnsatisfiedAccessPatterns())); for (PlanNode joinSource : joinRegion.getJoinSourceNodes().keySet()) { currentGroups.addAll(joinSource.getGroups());
if (joinRegion.getJoinSourceNodes().isEmpty()) { throw new QueryPlannerException(QueryPlugin.Event.TEIID30275, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30275, joinRegion.getUnsatisfiedAccessPatterns())); for (PlanNode joinSource : joinRegion.getJoinSourceNodes().keySet()) { currentGroups.addAll(joinSource.getGroups());
if (joinRegion.getJoinSourceNodes().isEmpty()) { throw new QueryPlannerException(QueryPlugin.Event.TEIID30275, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30275, joinRegion.getUnsatisfiedAccessPatterns())); for (PlanNode joinSource : joinRegion.getJoinSourceNodes().keySet()) { currentGroups.addAll(joinSource.getGroups());
joinRegion.getJoinSourceNodes().remove(accessNode1); joinRegion.getJoinSourceNodes().remove(accessNode2); accessNodes.remove(i); accessNodes.remove(k < i ? k : k - 1); joinRegion.getJoinSourceNodes().put(newAccess, newAccess); accessNodes.add(newAccess); i = accessNodes.size();
joinRegion.getJoinSourceNodes().remove(accessNode1); joinRegion.getJoinSourceNodes().remove(accessNode2); accessNodes.remove(i); accessNodes.remove(k < i ? k : k - 1); joinRegion.getJoinSourceNodes().put(newAccess, newAccess); accessNodes.add(newAccess); i = accessNodes.size();
joinRegion.getJoinSourceNodes().remove(accessNode1); joinRegion.getJoinSourceNodes().remove(accessNode2); accessNodes.remove(i); accessNodes.remove(k < i ? k : k - 1); joinRegion.getJoinSourceNodes().put(newAccess, newAccess); accessNodes.add(newAccess); i = accessNodes.size();
if (joinRegion.getJoinSourceNodes().size() + joinRegion.getDependentJoinSourceNodes().size() < 2) { joinRegionIter.remove(); if (joinRegion.getLeft() != null) { for (PlanNode joinSource : joinRegion.getJoinSourceNodes().keySet()) { SymbolMap map = (SymbolMap)joinSource.getProperty(NodeConstants.Info.CORRELATED_REFERENCES); if (map !=null) { joinRegion.getJoinSourceNodes().putAll(joinRegion.getDependentJoinSourceNodes()); joinRegion.getCriteriaNodes().addAll(joinRegion.getDependentCriteriaNodes()); joinRegion.getDependentJoinSourceNodes().clear(); joinRegion.getDependentCriteriaNodes().clear(); if (joinRegion.getJoinSourceNodes().size() < 2) { joinRegion.reconstructJoinRegoin(); joinRegionIter.remove();
if (joinRegion.getJoinSourceNodes().size() + joinRegion.getDependentJoinSourceNodes().size() < 2) { joinRegionIter.remove(); if (joinRegion.getLeft() != null) { for (PlanNode joinSource : joinRegion.getJoinSourceNodes().keySet()) { SymbolMap map = (SymbolMap)joinSource.getProperty(NodeConstants.Info.CORRELATED_REFERENCES); if (map !=null) { joinRegion.getJoinSourceNodes().putAll(joinRegion.getDependentJoinSourceNodes()); joinRegion.getCriteriaNodes().addAll(joinRegion.getDependentCriteriaNodes()); joinRegion.getDependentJoinSourceNodes().clear(); joinRegion.getDependentCriteriaNodes().clear(); if (joinRegion.getJoinSourceNodes().size() < 2) { joinRegion.reconstructJoinRegoin(); joinRegionIter.remove();
if (joinRegion.getJoinSourceNodes().size() + joinRegion.getDependentJoinSourceNodes().size() < 2) { joinRegionIter.remove(); if (joinRegion.getLeft() != null) { for (PlanNode joinSource : joinRegion.getJoinSourceNodes().keySet()) { SymbolMap map = (SymbolMap)joinSource.getProperty(NodeConstants.Info.CORRELATED_REFERENCES); if (map !=null) { joinRegion.getJoinSourceNodes().putAll(joinRegion.getDependentJoinSourceNodes()); joinRegion.getCriteriaNodes().addAll(joinRegion.getDependentCriteriaNodes()); joinRegion.getDependentJoinSourceNodes().clear(); joinRegion.getDependentCriteriaNodes().clear(); if (joinRegion.getJoinSourceNodes().size() < 2) { joinRegion.reconstructJoinRegoin(); joinRegionIter.remove();
joinRegion.getLeft().getJoinSourceNodes().remove(planNode); joinRegion.getLeft().getJoinSourceNodes().put(newAccess, newAccess);
joinRegion.getLeft().getJoinSourceNodes().remove(planNode); joinRegion.getLeft().getJoinSourceNodes().put(newAccess, newAccess);
joinRegion.getLeft().getJoinSourceNodes().remove(planNode); joinRegion.getLeft().getJoinSourceNodes().put(newAccess, newAccess);
public void testFindJoinRegions() { List regions = new ArrayList(); PlanNode joinRoot = TestFrameUtil.getExamplePlan(); PlanNode joinRoot1 = TestFrameUtil.getExamplePlan(); PlanNode outerJoin = NodeFactory.getNewNode(NodeConstants.Types.JOIN); outerJoin.setProperty(NodeConstants.Info.JOIN_TYPE, JoinType.JOIN_LEFT_OUTER); outerJoin.addFirstChild(joinRoot); outerJoin.addFirstChild(joinRoot1); PlanNode source = NodeFactory.getNewNode(NodeConstants.Types.SOURCE); source.addFirstChild(outerJoin); RulePlanJoins.findJoinRegions(source, null, regions); assertEquals(3, regions.size()); JoinRegion region = (JoinRegion)regions.get(0); //ensure that the first region is the trivial region of the outer join assertEquals(1, region.getJoinSourceNodes().size()); }
assertEquals(3, region.getJoinSourceNodes().size());