package com.linkedin.thirdeye.datalayer.util; import java.util.List; import org.apache.commons.lang3.tuple.ImmutablePair; import com.google.common.collect.Range; public class Predicate { enum OPER { AND("AND"), OR("OR"), EQ("="), GT(">"), GE(">="), LT("<"), LE("<="), NEQ("!="), IN( "IN"), BETWEEN("BETWEEN"); private String sign; OPER(String sign) { this.sign = sign; } @Override public String toString() { return sign; } } private String lhs; private OPER oper; private Object rhs; private Predicate[] childPredicates; private Predicate(String lhs, OPER oper, Object rhs) { this.lhs = lhs; this.oper = oper; this.rhs = rhs; } private Predicate(OPER oper, Predicate[] childPredicates) { this.childPredicates = childPredicates; this.oper = oper; } public String getLhs() { return lhs; } public OPER getOper() { return oper; } public Object getRhs() { return rhs; } public Predicate[] getChildPredicates() { return childPredicates; } public static Predicate EQ(String columnName, Object value) { return new Predicate(columnName, OPER.EQ, value); } public static Predicate NEQ(String columnName, Object value) { return new Predicate(columnName, OPER.NEQ, value); } public static Predicate LT(String columnName, Object value) { return new Predicate(columnName, OPER.LT, value); } public static Predicate GT(String columnName, Object value) { return new Predicate(columnName, OPER.GT, value); } public static Predicate LE(String columnName, Object value) { return new Predicate(columnName, OPER.LE, value); } public static Predicate GE(String columnName, Object value) { return new Predicate(columnName, OPER.GE, value); } public static Predicate IN(String columnName, Object[] values) { return new Predicate(columnName, OPER.IN, values); } public static Predicate AND(Predicate... childPredicates) { return new Predicate(OPER.AND, childPredicates); } public static Predicate OR(Predicate... childPredicates) { return new Predicate(OPER.OR, childPredicates); } public static Predicate BETWEEN(String columnName, Object startValue, Object endValue) { return new Predicate(columnName, OPER.BETWEEN, new ImmutablePair<Object, Object>(startValue, endValue)); } }