/** * 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 (!CapabilitiesUtil.supportsJoin(accessModelID, type, metadata, capFinder)) { return null;
if (!CapabilitiesUtil.supportsJoin(accessModelID, type, metadata, capFinder)) { return null;
if (!CapabilitiesUtil.supportsJoin(accessModelID, type, metadata, capFinder)) { return null;
public void helpTestSupportsOuterJoin(boolean capsSupportsOuterJoin, boolean capsSupportsFullOuterJoin, JoinType joinType, boolean expectedValue) throws QueryMetadataException, TeiidComponentException { // Set up metadata TransformationMetadata metadata = RealMetadataFactory.example1Cached(); Schema modelID = metadata.getMetadataStore().getSchema("PM1"); // Set up capabilities FakeCapabilitiesFinder finder = new FakeCapabilitiesFinder(); BasicSourceCapabilities sourceCaps = new BasicSourceCapabilities(); sourceCaps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, capsSupportsOuterJoin); sourceCaps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, capsSupportsFullOuterJoin); finder.addCapabilities("pm1", sourceCaps); //$NON-NLS-1$ // Test capabilities util boolean actual = CapabilitiesUtil.supportsJoin(modelID, joinType, metadata, finder); assertEquals("Got wrong answer for supports", expectedValue, actual); //$NON-NLS-1$ }