private void checkImplicit(FromClause clause) { if (clause instanceof JoinPredicate) { JoinPredicate jp = (JoinPredicate)clause; if (jp.getJoinType() == JoinType.JOIN_FULL_OUTER || jp.getJoinType() == JoinType.JOIN_RIGHT_OUTER) { allowImplicit = false; return; } checkImplicit(jp.getLeftClause()); if (allowImplicit) { checkImplicit(jp.getRightClause()); } } }
if (jp.getJoinType() == JoinType.JOIN_CROSS || jp.getJoinType() == JoinType.JOIN_FULL_OUTER) { return; if (!leftPk.isEmpty() && (jp.getJoinType() == JoinType.JOIN_INNER || jp.getJoinType() == JoinType.JOIN_LEFT_OUTER)) { findKeyPreserved(keyPreservingGroups, leftPk, crits, true, metadata, rightPk); if (!rightPk.isEmpty() && (jp.getJoinType() == JoinType.JOIN_INNER || jp.getJoinType() == JoinType.JOIN_RIGHT_OUTER)) { findKeyPreserved(keyPreservingGroups, rightPk, crits, false, metadata, leftPk);
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)); }
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; }
/** * Get hash code for object * @return Hash code */ public int hashCode() { int hash = HashCodeUtil.hashCode(0, getLeftClause()); hash = HashCodeUtil.hashCode(hash, getJoinType().getTypeCode()); hash = HashCodeUtil.hashCode(hash, getRightClause()); return hash; }
/** * 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); }
/** * Get hash code for object * @return Hash code */ public int hashCode() { int hash = HashCodeUtil.hashCode(0, getLeftClause()); hash = HashCodeUtil.hashCode(hash, getJoinType().getTypeCode()); hash = HashCodeUtil.hashCode(hash, getRightClause()); return hash; }
/** * Get hash code for object * @return Hash code */ public int hashCode() { int hash = HashCodeUtil.hashCode(0, getLeftClause()); hash = HashCodeUtil.hashCode(hash, getJoinType().getTypeCode()); hash = HashCodeUtil.hashCode(hash, getRightClause()); return hash; }
/** * @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 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) {
/** * @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()); }
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) {