/* Generated By:JJTree: Do not edit this line. JoinPredicate.java Version 4.3 */ /* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ package org.teiid.query.sql.lang; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.teiid.designer.query.sql.lang.IJoinPredicate; import org.teiid.designer.query.sql.lang.IJoinType.Types; import org.teiid.query.parser.LanguageVisitor; import org.teiid.query.parser.TeiidNodeFactory.ASTNodes; import org.teiid.designer.runtime.version.spi.ITeiidServerVersion; import org.teiid.query.sql.symbol.GroupSymbol; /** * */ public class JoinPredicate extends FromClause implements IJoinPredicate<FromClause, LanguageVisitor>{ private FromClause leftClause; private FromClause rightClause; private JoinType joinType; private List<Criteria> joinCriteria; /** * @param p * @param id */ public JoinPredicate(ITeiidServerVersion p, int id) { super(p, id); joinType = createASTNode(ASTNodes.JOIN_TYPE); joinType.setKind(Types.JOIN_INNER); } /** * Set left clause * @param predicate Left clause to set */ @Override public void setLeftClause(FromClause predicate) { this.leftClause = predicate; } /** * Get left clause * @return Left clause */ @Override public FromClause getLeftClause() { return this.leftClause; } /** * Set right clause * @param predicate Right clause to set */ @Override public void setRightClause(FromClause predicate) { this.rightClause = predicate; } /** * Get right clause * @return Right clause */ @Override public FromClause getRightClause() { return this.rightClause; } /** * Set join type for this predicate * @param type Type of join */ public void setJoinType(JoinType type) { this.joinType = type; } /** * Get join type for this predicate * @return Type of join */ public JoinType getJoinType() { return this.joinType; } /** * Set join criteria for this predicate * @param criteria List of {@link Criteria} set on this predicate */ public void setJoinCriteria(List<Criteria> criteria) { List<Criteria> newCriteria = new ArrayList<Criteria>(); for (Criteria criterium : criteria) { newCriteria.addAll(Criteria.separateCriteriaByAnd(criterium)); } this.joinCriteria = newCriteria; } /** * Get join criteria for this predicate * @return List of {@link Criteria} */ public List getJoinCriteria() { return this.joinCriteria; } @Override public void collectGroups(Collection<GroupSymbol> groups) { if(this.leftClause != null) { this.leftClause.collectGroups(groups); } if(this.rightClause != null) { this.rightClause.collectGroups(groups); } } @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + ((this.joinCriteria == null) ? 0 : this.joinCriteria.hashCode()); result = prime * result + ((this.joinType == null) ? 0 : this.joinType.hashCode()); result = prime * result + ((this.leftClause == null) ? 0 : this.leftClause.hashCode()); result = prime * result + ((this.rightClause == null) ? 0 : this.rightClause.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (!super.equals(obj)) return false; if (getClass() != obj.getClass()) return false; JoinPredicate other = (JoinPredicate)obj; if (this.joinCriteria == null) { if (other.joinCriteria != null) return false; } else if (!this.joinCriteria.equals(other.joinCriteria)) return false; if (this.joinType == null) { if (other.joinType != null) return false; } else if (!this.joinType.equals(other.joinType)) return false; if (this.leftClause == null) { if (other.leftClause != null) return false; } else if (!this.leftClause.equals(other.leftClause)) return false; if (this.rightClause == null) { if (other.rightClause != null) return false; } else if (!this.rightClause.equals(other.rightClause)) return false; return true; } /** Accept the visitor. **/ @Override public void acceptVisitor(LanguageVisitor visitor) { visitor.visit(this); } @Override public JoinPredicate clone() { JoinPredicate clone = new JoinPredicate(getTeiidVersion(), this.id); if(getLeftClause() != null) clone.setLeftClause(getLeftClause().clone()); if(getRightClause() != null) clone.setRightClause(getRightClause().clone()); if(getJoinType() != null) clone.setJoinType(getJoinType().clone()); if(getJoinCriteria() != null) clone.setJoinCriteria(cloneList(getJoinCriteria())); clone.setOptional(isOptional()); clone.setMakeInd(isMakeInd()); clone.setMakeInd(getMakeInd()); clone.setNoUnnest(isNoUnnest()); clone.setMakeDep(isMakeDep()); clone.setMakeNotDep(isMakeNotDep()); clone.setPreserve(isPreserve()); return clone; } } /* JavaCC - OriginalChecksum=997199fc490b061080c014d8a592db24 (do not edit this line) */