public void visit(JoinPredicate obj) { assert currentGroups.isEmpty(); List<GroupSymbol> tempImplicitGroups = new ArrayList<GroupSymbol>(discoveredGroups); discoveredGroups.clear(); visitNode(obj.getLeftClause()); List<GroupSymbol> leftGroups = new ArrayList<GroupSymbol>(discoveredGroups); discoveredGroups.clear(); visitNode(obj.getRightClause()); discoveredGroups.addAll(leftGroups); addDiscoveredGroups(); visitNodes(obj.getJoinCriteria()); discoveredGroups.addAll(currentGroups); currentGroups.clear(); discoveredGroups.addAll(tempImplicitGroups); }
/** * Compare this object to another * @param obj Other object * @return True if equal */ public boolean equals(Object obj) { if (!super.equals(obj)) { return false; } if(!(obj instanceof JoinPredicate)) { return false; } JoinPredicate other = (JoinPredicate) obj; List thisCrit = this.getJoinCriteria(); if(thisCrit != null && thisCrit.size() == 0) { thisCrit = null; } List otherCrit = other.getJoinCriteria(); if(otherCrit != null && otherCrit.size() == 0) { otherCrit = null; } return EquivalenceUtil.areEqual(other.getJoinType(), this.getJoinType()) && EquivalenceUtil.areEqual(other.getLeftClause(), this.getLeftClause()) && EquivalenceUtil.areEqual(other.getRightClause(), this.getRightClause()) && EquivalenceUtil.areEqual(otherCrit, thisCrit); }
/** * Compare this object to another * @param obj Other object * @return True if equal */ public boolean equals(Object obj) { if (!super.equals(obj)) { return false; } if(!(obj instanceof JoinPredicate)) { return false; } JoinPredicate other = (JoinPredicate) obj; List thisCrit = this.getJoinCriteria(); if(thisCrit != null && thisCrit.size() == 0) { thisCrit = null; } List otherCrit = other.getJoinCriteria(); if(otherCrit != null && otherCrit.size() == 0) { otherCrit = null; } return EquivalenceUtil.areEqual(other.getJoinType(), this.getJoinType()) && EquivalenceUtil.areEqual(other.getLeftClause(), this.getLeftClause()) && EquivalenceUtil.areEqual(other.getRightClause(), this.getRightClause()) && EquivalenceUtil.areEqual(otherCrit, thisCrit); }
/** * Compare this object to another * @param obj Other object * @return True if equal */ public boolean equals(Object obj) { if (!super.equals(obj)) { return false; } if(!(obj instanceof JoinPredicate)) { return false; } JoinPredicate other = (JoinPredicate) obj; List thisCrit = this.getJoinCriteria(); if(thisCrit != null && thisCrit.size() == 0) { thisCrit = null; } List otherCrit = other.getJoinCriteria(); if(otherCrit != null && otherCrit.size() == 0) { otherCrit = null; } return EquivalenceUtil.areEqual(other.getJoinType(), this.getJoinType()) && EquivalenceUtil.areEqual(other.getLeftClause(), this.getLeftClause()) && EquivalenceUtil.areEqual(other.getRightClause(), this.getRightClause()) && EquivalenceUtil.areEqual(otherCrit, thisCrit); }
/** * @param rootClause * @param query */ private void shredJoinTree(FromClause clause, Query query) { if(clause instanceof UnaryFromClause || clause instanceof SubqueryFromClause) { query.getFrom().addClause(clause); } else { JoinPredicate jp = (JoinPredicate) clause; List<Criteria> crits = jp.getJoinCriteria(); if(crits != null && crits.size() > 0) { Criteria joinCrit = null; if (crits.size() > 1) { joinCrit = new CompoundCriteria(crits); } else { joinCrit = crits.get(0); } query.setCriteria(CompoundCriteria.combineCriteria(joinCrit, query.getCriteria())); } // Recurse through tree shredJoinTree(jp.getLeftClause(), query); shredJoinTree(jp.getRightClause(), query); } }
RuleChooseJoinStrategy.separateCriteria(leftGroups, rightGroups, leftExpressions, rightExpressions, jp.getJoinCriteria(), new LinkedList<Criteria>());
RuleChooseJoinStrategy.separateCriteria(leftGroups, rightGroups, leftExpressions, rightExpressions, jp.getJoinCriteria(), new LinkedList<Criteria>());
RuleChooseJoinStrategy.separateCriteria(leftGroups, rightGroups, leftExpressions, rightExpressions, jp.getJoinCriteria(), new LinkedList<Criteria>());
/** * @param rootClause * @param query */ private void shredJoinTree(FromClause clause, Query query) { if(clause instanceof UnaryFromClause || clause instanceof SubqueryFromClause) { query.getFrom().addClause(clause); } else { JoinPredicate jp = (JoinPredicate) clause; List<Criteria> crits = jp.getJoinCriteria(); if(crits != null && crits.size() > 0) { Criteria joinCrit = null; if (crits.size() > 1) { joinCrit = new CompoundCriteria(crits); } else { joinCrit = crits.get(0); } query.setCriteria(CompoundCriteria.combineCriteria(joinCrit, query.getCriteria())); } // Recurse through tree shredJoinTree(jp.getLeftClause(), query); shredJoinTree(jp.getRightClause(), query); } }
/** * @param rootClause * @param query */ private void shredJoinTree(FromClause clause, Query query) { if(clause instanceof UnaryFromClause || clause instanceof SubqueryFromClause) { query.getFrom().addClause(clause); } else { JoinPredicate jp = (JoinPredicate) clause; List<Criteria> crits = jp.getJoinCriteria(); if(crits != null && crits.size() > 0) { Criteria joinCrit = null; if (crits.size() > 1) { joinCrit = new CompoundCriteria(crits); } else { joinCrit = crits.get(0); } query.setCriteria(CompoundCriteria.combineCriteria(joinCrit, query.getCriteria())); } // Recurse through tree shredJoinTree(jp.getLeftClause(), query); shredJoinTree(jp.getRightClause(), query); } }
private JoinPredicate rewriteJoinPredicate(Query parent, JoinPredicate predicate) throws TeiidComponentException, TeiidProcessingException{ List joinCrits = predicate.getJoinCriteria(); if(joinCrits != null && joinCrits.size() > 0) { //rewrite join crits by rewriting a compound criteria Criteria criteria = new CompoundCriteria(new ArrayList(joinCrits)); criteria = rewriteCriteria(criteria); joinCrits.clear(); if (criteria instanceof CompoundCriteria && ((CompoundCriteria)criteria).getOperator() == CompoundCriteria.AND) { joinCrits.addAll(((CompoundCriteria)criteria).getCriteria()); } else { joinCrits.add(criteria); } predicate.setJoinCriteria(joinCrits); } if (predicate.getJoinType() == JoinType.JOIN_UNION) { predicate.setJoinType(JoinType.JOIN_FULL_OUTER); predicate.setJoinCriteria(new ArrayList<Criteria>(Arrays.asList(FALSE_CRITERIA))); } else if (predicate.getJoinType() == JoinType.JOIN_RIGHT_OUTER) { predicate.setJoinType(JoinType.JOIN_LEFT_OUTER); FromClause leftClause = predicate.getLeftClause(); predicate.setLeftClause(predicate.getRightClause()); predicate.setRightClause(leftClause); } predicate.setLeftClause( rewriteFromClause(parent, predicate.getLeftClause())); predicate.setRightClause( rewriteFromClause(parent, predicate.getRightClause())); return predicate; }
private JoinPredicate rewriteJoinPredicate(Query parent, JoinPredicate predicate) throws TeiidComponentException, TeiidProcessingException{ List joinCrits = predicate.getJoinCriteria(); if(joinCrits != null && joinCrits.size() > 0) { //rewrite join crits by rewriting a compound criteria Criteria criteria = new CompoundCriteria(new ArrayList(joinCrits)); criteria = rewriteCriteria(criteria); joinCrits.clear(); if (criteria instanceof CompoundCriteria && ((CompoundCriteria)criteria).getOperator() == CompoundCriteria.AND) { joinCrits.addAll(((CompoundCriteria)criteria).getCriteria()); } else { joinCrits.add(criteria); } predicate.setJoinCriteria(joinCrits); } if (predicate.getJoinType() == JoinType.JOIN_UNION) { predicate.setJoinType(JoinType.JOIN_FULL_OUTER); predicate.setJoinCriteria(new ArrayList<Criteria>(Arrays.asList(FALSE_CRITERIA))); } else if (predicate.getJoinType() == JoinType.JOIN_RIGHT_OUTER) { predicate.setJoinType(JoinType.JOIN_LEFT_OUTER); FromClause leftClause = predicate.getLeftClause(); predicate.setLeftClause(predicate.getRightClause()); predicate.setRightClause(leftClause); } predicate.setLeftClause( rewriteFromClause(parent, predicate.getLeftClause())); predicate.setRightClause( rewriteFromClause(parent, predicate.getRightClause())); return predicate; }
private JoinPredicate rewriteJoinPredicate(Query parent, JoinPredicate predicate) throws TeiidComponentException, TeiidProcessingException{ List joinCrits = predicate.getJoinCriteria(); if(joinCrits != null && joinCrits.size() > 0) { //rewrite join crits by rewriting a compound criteria Criteria criteria = new CompoundCriteria(new ArrayList(joinCrits)); criteria = rewriteCriteria(criteria); joinCrits.clear(); if (criteria instanceof CompoundCriteria && ((CompoundCriteria)criteria).getOperator() == CompoundCriteria.AND) { joinCrits.addAll(((CompoundCriteria)criteria).getCriteria()); } else { joinCrits.add(criteria); } predicate.setJoinCriteria(joinCrits); } if (predicate.getJoinType() == JoinType.JOIN_UNION) { predicate.setJoinType(JoinType.JOIN_FULL_OUTER); predicate.setJoinCriteria(new ArrayList<Criteria>(Arrays.asList(FALSE_CRITERIA))); } else if (predicate.getJoinType() == JoinType.JOIN_RIGHT_OUTER) { predicate.setJoinType(JoinType.JOIN_LEFT_OUTER); FromClause leftClause = predicate.getLeftClause(); predicate.setLeftClause(predicate.getRightClause()); predicate.setRightClause(leftClause); } predicate.setLeftClause( rewriteFromClause(parent, predicate.getLeftClause())); predicate.setRightClause( rewriteFromClause(parent, predicate.getRightClause())); return predicate; }
public void visit(JoinPredicate obj) { preVisitVisitor(obj); visitNode(obj.getLeftClause()); visitNode(obj.getJoinType()); visitNode(obj.getRightClause()); visitNodes(obj.getJoinCriteria()); postVisitVisitor(obj); } public void visit(JoinType obj) {
List<Criteria> joinCrits = jp.getJoinCriteria(); List<Object> newJoinCrits = new ArrayList<Object>(1);
public void visit(JoinPredicate obj) { preVisitVisitor(obj); visitNode(obj.getLeftClause()); visitNode(obj.getJoinType()); visitNode(obj.getRightClause()); visitNodes(obj.getJoinCriteria()); postVisitVisitor(obj); } public void visit(JoinType obj) {
public void visit(JoinPredicate obj) { preVisitVisitor(obj); visitNode(obj.getLeftClause()); visitNode(obj.getJoinType()); visitNode(obj.getRightClause()); visitNodes(obj.getJoinCriteria()); postVisitVisitor(obj); } public void visit(JoinType obj) {
Join translate(JoinPredicate join) { List crits = join.getJoinCriteria(); Criteria crit = null; if (crits.size() == 1) { crit = (Criteria)crits.get(0); } else if (crits.size() > 1) { crit = new CompoundCriteria(crits); } Join.JoinType joinType = Join.JoinType.INNER_JOIN; if(join.getJoinType().equals(JoinType.JOIN_INNER)) { joinType = Join.JoinType.INNER_JOIN; } else if(join.getJoinType().equals(JoinType.JOIN_LEFT_OUTER)) { joinType = Join.JoinType.LEFT_OUTER_JOIN; } else if(join.getJoinType().equals(JoinType.JOIN_RIGHT_OUTER)) { joinType = Join.JoinType.RIGHT_OUTER_JOIN; } else if(join.getJoinType().equals(JoinType.JOIN_FULL_OUTER)) { joinType = Join.JoinType.FULL_OUTER_JOIN; } else if(join.getJoinType().equals(JoinType.JOIN_CROSS)) { joinType = Join.JoinType.CROSS_JOIN; } return new Join(translate(join.getLeftClause()), translate(join.getRightClause()), joinType, translate(crit)); }
Join translate(JoinPredicate join) { List crits = join.getJoinCriteria(); Criteria crit = null; if (crits.size() == 1) { crit = (Criteria)crits.get(0); } else if (crits.size() > 1) { crit = new CompoundCriteria(crits); } Join.JoinType joinType = Join.JoinType.INNER_JOIN; if(join.getJoinType().equals(JoinType.JOIN_INNER)) { joinType = Join.JoinType.INNER_JOIN; } else if(join.getJoinType().equals(JoinType.JOIN_LEFT_OUTER)) { joinType = Join.JoinType.LEFT_OUTER_JOIN; } else if(join.getJoinType().equals(JoinType.JOIN_RIGHT_OUTER)) { joinType = Join.JoinType.RIGHT_OUTER_JOIN; } else if(join.getJoinType().equals(JoinType.JOIN_FULL_OUTER)) { joinType = Join.JoinType.FULL_OUTER_JOIN; } else if(join.getJoinType().equals(JoinType.JOIN_CROSS)) { joinType = Join.JoinType.CROSS_JOIN; } return new Join(translate(join.getLeftClause()), translate(join.getRightClause()), joinType, translate(crit)); }
Join translate(JoinPredicate join) { List crits = join.getJoinCriteria(); Criteria crit = null; if (crits.size() == 1) { crit = (Criteria)crits.get(0); } else if (crits.size() > 1) { crit = new CompoundCriteria(crits); } Join.JoinType joinType = Join.JoinType.INNER_JOIN; if(join.getJoinType().equals(JoinType.JOIN_INNER)) { joinType = Join.JoinType.INNER_JOIN; } else if(join.getJoinType().equals(JoinType.JOIN_LEFT_OUTER)) { joinType = Join.JoinType.LEFT_OUTER_JOIN; } else if(join.getJoinType().equals(JoinType.JOIN_RIGHT_OUTER)) { joinType = Join.JoinType.RIGHT_OUTER_JOIN; } else if(join.getJoinType().equals(JoinType.JOIN_FULL_OUTER)) { joinType = Join.JoinType.FULL_OUTER_JOIN; } else if(join.getJoinType().equals(JoinType.JOIN_CROSS)) { joinType = Join.JoinType.CROSS_JOIN; } return new Join(translate(join.getLeftClause()), translate(join.getRightClause()), joinType, translate(crit)); }