/* 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) */