/* Generated By:JJTree: Do not edit this line. Criteria.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.Collections; import java.util.List; import org.teiid.core.types.DataTypeManagerService; import org.teiid.designer.query.sql.lang.ICompoundCriteria; import org.teiid.designer.query.sql.lang.ICriteria; import org.teiid.designer.runtime.version.spi.ITeiidServerVersion; import org.teiid.query.parser.LanguageVisitor; import org.teiid.query.sql.symbol.Expression; /** * */ public class Criteria extends SimpleNode implements Expression, ICriteria<LanguageVisitor> { /** * @param p * @param id */ public Criteria(ITeiidServerVersion p, int id) { super(p, id); } @Override public Class<?> getType() { return DataTypeManagerService.DefaultDataTypes.BOOLEAN.getTypeClass(); } /** * Helper method for {@link #separateCriteriaByAnd(Criteria)} that * can be called recursively to collect parts. * @param crit Crit to break apart * @param parts Collection to add parts to */ private static void separateCriteria(Criteria crit, Collection<Criteria> parts) { if(crit instanceof CompoundCriteria) { CompoundCriteria compCrit = (CompoundCriteria) crit; if(compCrit.getOperator() == ICompoundCriteria.AND) { for (Criteria conjunct : compCrit.getCriteria()) { separateCriteria(conjunct, parts); } } else { parts.add(crit); } } else { parts.add(crit); } } /** * This utility method will pull apart a tree of criteria by breaking all * compound AND criteria apart. For instance, ((A=1 AND B=2) AND C=3) * will be broken into A=1, B=2, C=3. * @param crit Criteria to break apart * @return List of Criteria, empty list if crit is null */ public static List<Criteria> separateCriteriaByAnd(Criteria crit) { if(crit == null) { return Collections.emptyList(); } List<Criteria> parts = new ArrayList<Criteria>(); separateCriteria(crit, parts); return parts; } /** Accept the visitor. **/ @Override public void acceptVisitor(LanguageVisitor visitor) { visitor.visit(this); } @Override public Criteria clone() { Criteria clone = new Criteria(getTeiidVersion(), this.id); return clone; } } /* JavaCC - OriginalChecksum=d76fcc28dd6818ea751c44825b2d1060 (do not edit this line) */