public static JoinType getJoinTypePreventingCriteriaOptimization(PlanNode joinNode, Set<GroupSymbol> groups) { JoinType joinType = (JoinType) joinNode.getProperty(NodeConstants.Info.JOIN_TYPE); if(!joinType.isOuter()) { return null; } if(joinType.equals(JoinType.JOIN_FULL_OUTER)) { return joinType; } Set<GroupSymbol> innerGroups = getInnerSideJoinNodes(joinNode)[0].getGroups(); for (GroupSymbol group : groups) { if (innerGroups.contains(group)) { return joinType; } } return null; }
public static JoinType getJoinTypePreventingCriteriaOptimization(PlanNode joinNode, Set<GroupSymbol> groups) { JoinType joinType = (JoinType) joinNode.getProperty(NodeConstants.Info.JOIN_TYPE); if(!joinType.isOuter()) { return null; } if(joinType.equals(JoinType.JOIN_FULL_OUTER)) { return joinType; } Set<GroupSymbol> innerGroups = getInnerSideJoinNodes(joinNode)[0].getGroups(); for (GroupSymbol group : groups) { if (innerGroups.contains(group)) { return joinType; } } return null; }
public static JoinType getJoinTypePreventingCriteriaOptimization(PlanNode joinNode, Set<GroupSymbol> groups) { JoinType joinType = (JoinType) joinNode.getProperty(NodeConstants.Info.JOIN_TYPE); if(!joinType.isOuter()) { return null; } if(joinType.equals(JoinType.JOIN_FULL_OUTER)) { return joinType; } Set<GroupSymbol> innerGroups = getInnerSideJoinNodes(joinNode)[0].getGroups(); for (GroupSymbol group : groups) { if (innerGroups.contains(group)) { return joinType; } } return null; }
if (!jtype.isOuter()) { candidate.leftCandidate=true; candidates.add(candidate);
if (!jtype.isOuter()) { candidate.leftCandidate=true; candidates.add(candidate);
if (!jtype.isOuter()) { candidate.leftCandidate=true; candidates.add(candidate);
public static boolean supportsJoin(Object modelID, JoinType joinType, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws QueryMetadataException, TeiidComponentException { if (metadata.isVirtualModel(modelID)){ return false; } // Find capabilities SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder); if (!joinType.isOuter()) { return caps.supportsCapability(Capability.QUERY_FROM_JOIN_INNER) || caps.supportsCapability(Capability.QUERY_FROM_JOIN_OUTER); } if(! caps.supportsCapability(Capability.QUERY_FROM_JOIN_OUTER)) { return false; } return !joinType.equals(JoinType.JOIN_FULL_OUTER) || caps.supportsCapability(Capability.QUERY_FROM_JOIN_OUTER_FULL); }
/** * @param clause Clause to check recursively * @return True if tree has outer joins, false otherwise */ static boolean hasOuterJoins(FromClause clause) { if (clause instanceof SubqueryFromClause) { if (((SubqueryFromClause)clause).isLateral()) { return true; } return false; } if(clause instanceof UnaryFromClause) { return false; } JoinPredicate jp = (JoinPredicate) clause; if(jp.getJoinType().isOuter()) { return true; } // Walk children boolean childHasOuter = hasOuterJoins(jp.getLeftClause()); if(childHasOuter) { return true; } return hasOuterJoins(jp.getRightClause()); }
public static boolean supportsJoin(Object modelID, JoinType joinType, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws QueryMetadataException, TeiidComponentException { if (metadata.isVirtualModel(modelID)){ return false; } // Find capabilities SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder); if (!joinType.isOuter()) { return caps.supportsCapability(Capability.QUERY_FROM_JOIN_INNER) || caps.supportsCapability(Capability.QUERY_FROM_JOIN_OUTER); } if(! caps.supportsCapability(Capability.QUERY_FROM_JOIN_OUTER)) { return false; } return !joinType.equals(JoinType.JOIN_FULL_OUTER) || caps.supportsCapability(Capability.QUERY_FROM_JOIN_OUTER_FULL); }
public static boolean supportsJoin(Object modelID, JoinType joinType, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws QueryMetadataException, TeiidComponentException { if (metadata.isVirtualModel(modelID)){ return false; } // Find capabilities SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder); if (!joinType.isOuter()) { return caps.supportsCapability(Capability.QUERY_FROM_JOIN_INNER) || caps.supportsCapability(Capability.QUERY_FROM_JOIN_OUTER); } if(! caps.supportsCapability(Capability.QUERY_FROM_JOIN_OUTER)) { return false; } return !joinType.equals(JoinType.JOIN_FULL_OUTER) || caps.supportsCapability(Capability.QUERY_FROM_JOIN_OUTER_FULL); }
/** * @param clause Clause to check recursively * @return True if tree has outer joins, false otherwise */ static boolean hasOuterJoins(FromClause clause) { if (clause instanceof SubqueryFromClause) { if (((SubqueryFromClause)clause).isLateral()) { return true; } return false; } if(clause instanceof UnaryFromClause) { return false; } JoinPredicate jp = (JoinPredicate) clause; if(jp.getJoinType().isOuter()) { return true; } // Walk children boolean childHasOuter = hasOuterJoins(jp.getLeftClause()); if(childHasOuter) { return true; } return hasOuterJoins(jp.getRightClause()); }
/** * @param clause Clause to check recursively * @return True if tree has outer joins, false otherwise */ static boolean hasOuterJoins(FromClause clause) { if (clause instanceof SubqueryFromClause) { if (((SubqueryFromClause)clause).isLateral()) { return true; } return false; } if(clause instanceof UnaryFromClause) { return false; } JoinPredicate jp = (JoinPredicate) clause; if(jp.getJoinType().isOuter()) { return true; } // Walk children boolean childHasOuter = hasOuterJoins(jp.getLeftClause()); if(childHasOuter) { return true; } return hasOuterJoins(jp.getRightClause()); }
if (optimized == null || optimized.isOuter()) { return currentNode;
if (!jt.isOuter()) { return null; if (type.isOuter() && CapabilitiesUtil.getSupportedJoinCriteria(modelId, metadata, capFinder) != SupportedJoinCriteria.ANY) { PlanNode critNode = NodeEditor.findNodePreOrder(joinNode.getLastChild(), NodeConstants.Types.SELECT, NodeConstants.Types.SOURCE); if (critNode != null) {
if (!jt.isOuter()) { return null; if (type.isOuter() && CapabilitiesUtil.getSupportedJoinCriteria(modelId, metadata, capFinder) != SupportedJoinCriteria.ANY) { PlanNode critNode = NodeEditor.findNodePreOrder(joinNode.getLastChild(), NodeConstants.Types.SELECT, NodeConstants.Types.SOURCE); if (critNode != null) {
if (!jt.isOuter()) { return null; if (type.isOuter() && CapabilitiesUtil.getSupportedJoinCriteria(modelId, metadata, capFinder) != SupportedJoinCriteria.ANY) { PlanNode critNode = NodeEditor.findNodePreOrder(joinNode.getLastChild(), NodeConstants.Types.SELECT, NodeConstants.Types.SOURCE); if (critNode != null) {
if (!joinType.isOuter()) { return null;
if (!joinType.isOuter()) { return null;
if (!joinType.isOuter()) { return null;
if(jtype == JoinType.JOIN_FULL_OUTER || (jtype.isOuter() && JoinUtil.getInnerSideJoinNodes(joinNode)[0] != sourceNode)) { sourceNode.recordDebugAnnotation("node is on outer side of the join", null, "Rejecting dependent join", analysisRecord, null); //$NON-NLS-1$ //$NON-NLS-2$ return false;