/* * Copyright (c) 1998-2011 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the * * Free Software Foundation, Inc. * 59 Temple Place, Suite 330 * Boston, MA 02111-1307 USA * * @author Scott Ferguson */ package javax.persistence.criteria; import java.math.BigDecimal; import java.math.BigInteger; import java.sql.Date; import java.sql.Time; import java.sql.Timestamp; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import javax.persistence.Tuple; /** * Interface to build criteria. * * @since JPA 2.0 */ public interface CriteriaBuilder { public enum Trimspec { BOTH, LEADING, TRAILING } public CriteriaQuery<Object> createQuery(); public <T> CriteriaQuery<T> createQuery(Class<T> resultClass); public CriteriaQuery<Tuple> createTupleQuery(); public <Y> CompoundSelection<Y> construct(Class<Y> resultClass, Selection<?> ...selections); public CompoundSelection<Tuple> tuple(Selection<?>... selections); public CompoundSelection<Object[]> array(Selection<?>... selections); public Order asc(Expression<?> x); public Order desc(Expression<?> x); public <N extends Number> Expression<Double> avg(Expression<N> x); public <N extends Number> Expression<N> sum(Expression<N> x); public Expression<Long> sumAsLong(Expression<Integer> x); public Expression<Double> sumAsDouble(Expression<Float> x); public <N extends Number> Expression<N> max(Expression<N> x); public <N extends Number> Expression<N> min(Expression<N> x); public <X extends Comparable<? super X>> Expression<X> greatest(Expression<X> x); public <X extends Comparable<? super X>> Expression<X> least(Expression<X> x); public Expression<Long> count(Expression<?> x); public Expression<Long> countDistinct(Expression<?> x); public Predicate exists(Subquery<?> subquery); public <Y> Expression<Y> all(Subquery<Y> subquery); public <Y> Expression<Y> some(Subquery<Y> subquery); public <Y> Expression<Y> any(Subquery<Y> subquery); public Predicate and(Expression<Boolean> x, Expression<Boolean> y); public Predicate and(Predicate... restrictions); public Predicate or(Expression<Boolean> x, Expression<Boolean> y); public Predicate or(Predicate... restrictions); public Predicate not(Expression<Boolean> restriction); public Predicate conjunction(); public Predicate disjunction(); public Predicate isTrue(Expression<Boolean> x); public Predicate isFalse(Expression<Boolean> x); public Predicate isNull(Expression<?> x); public Predicate isNotNull(Expression<?> x); public Predicate equal(Expression<?> x, Expression<?> y); public Predicate equal(Expression<?> x, Object y); public Predicate notEqual(Expression<?> x, Expression<?> y); public Predicate notEqual(Expression<?> x, Object y); public <Y extends Comparable<? super Y>> Predicate greaterThan(Expression<? extends Y> x, Expression<? extends Y> y); public <Y extends Comparable<? super Y>> Predicate greaterThan(Expression<? extends Y> x, Y y); public <Y extends Comparable<? super Y>> Predicate greaterThanOrEqualTo(Expression<? extends Y> x, Expression<? extends Y> y); public <Y extends Comparable<? super Y>> Predicate greaterThanOrEqualTo(Expression<? extends Y> x, Y y); public <Y extends Comparable<? super Y>> Predicate lessThan(Expression<? extends Y> x, Expression<? extends Y> y); public <Y extends Comparable<? super Y>> Predicate lessThan(Expression<? extends Y> x, Y y); public <Y extends Comparable<? super Y>> Predicate lessThanOrEqualTo(Expression<? extends Y> x, Expression<? extends Y> y); public <Y extends Comparable<? super Y>> Predicate lessThanOrEqualTo(Expression<? extends Y> x, Y y); <Y extends Comparable<? super Y>> Predicate between(Expression<? extends Y> v, Expression<? extends Y> x, Expression<? extends Y> y); <Y extends Comparable<? super Y>> Predicate between(Expression<? extends Y> v, Y x, Y y); public Predicate gt(Expression<? extends Number> x, Expression<? extends Number> y); public Predicate gt(Expression<? extends Number> x, Number y); public Predicate ge(Expression<? extends Number> x, Expression<? extends Number> y); public Predicate ge(Expression<? extends Number> x, Number y); public Predicate lt(Expression<? extends Number> x, Expression<? extends Number> y); public Predicate lt(Expression<? extends Number> x, Number y); public Predicate le(Expression<? extends Number> x, Expression<? extends Number> y); public Predicate le(Expression<? extends Number> x, Number y); public <N extends Number> Expression<N> neg(Expression<N> x); public <N extends Number> Expression<N> abs(Expression<N> x); public <N extends Number> Expression<N> sum(Expression<? extends N> x, Expression<? extends N> y); public <N extends Number> Expression<N> sum(Expression<? extends N> x, N y); public <N extends Number> Expression<N> sum(N x, Expression<? extends N> y); public <N extends Number> Expression<N> prod(Expression<? extends N> x, Expression<? extends N> y); public <N extends Number> Expression<N> prod(Expression<? extends N> x, N y); public <N extends Number> Expression<N> prod(N x, Expression<? extends N> y); public <N extends Number> Expression<N> diff(Expression<? extends N> x, Expression<? extends N> y); public <N extends Number> Expression<N> diff(Expression<? extends N> x, N y); public <N extends Number> Expression<N> diff(N x, Expression<? extends N> y); public Expression<Number> quot(Expression<? extends Number> x, Expression<? extends Number> y); public Expression<Number> quot(Expression<? extends Number> x, Number y); public Expression<Number> quot(Number x, Expression<? extends Number> y); public Expression<Integer> mod(Expression<Integer> x, Expression<Integer> y); public Expression<Integer> mod(Expression<Integer> x, Integer y); public Expression<Integer> mod(Integer x, Expression<Integer> y); public Expression<Double> sqrt(Expression<? extends Number> x); public Expression<Long> toLong(Expression<? extends Number> number); public Expression<Integer> toInteger(Expression<? extends Number> number); public Expression<Float> toFloat(Expression<? extends Number> number); public Expression<Double> toDouble(Expression<? extends Number> number); public Expression<BigDecimal> toBigDecimal(Expression<? extends Number> number); public Expression<BigInteger> toBigInteger(Expression<? extends Number> number); public Expression<String> toString(Expression<Character> expr); public <T> Expression<T> literal(T value); public <T> Expression<T> nullLiteral(Class<T> resultClass); public <T> ParameterExpression<T> parameter(Class<T> paramClass); public <T> ParameterExpression<T> parameter(Class<T> paramClass, String name); public <C extends Collection<?>> Predicate isEmpty(Expression<C> collection); public <C extends Collection<?>> Predicate isNotEmpty(Expression<C> collection); public <C extends Collection<?>> Expression<Integer> size(Expression<C> collection); public <C extends Collection<?>> Expression<Integer> size(C collection); public <E,C extends Collection<E>> Predicate isMember(Expression<E> elem, Expression<C> collection); public <E,C extends Collection<E>> Predicate isMember(E elem, Expression<C> collection); public <E,C extends Collection<E>> Predicate isNotMember(Expression<E> elem, Expression<C> collection); public <E,C extends Collection<E>> Predicate isNotMember(E elem, Expression<C> collection); public <V,M extends Map<?,V>> Expression<Collection<V>> values(M map); public <K,M extends Map<K,?>> Expression<Set<K>> keys(M map); public Predicate like(Expression<String> x, Expression<String> pattern); public Predicate like(Expression<String> x, String pattern); public Predicate like(Expression<String> x, Expression<String> pattern, Expression<Character> escapeChar); public Predicate like(Expression<String> x, Expression<String> pattern, char escapeChar); public Predicate like(Expression<String> x, String pattern, Expression<Character> escapeChar); public Predicate like(Expression<String> x, String pattern, char escapeChar); public Predicate notLike(Expression<String> x, Expression<String> pattern); public Predicate notLike(Expression<String> x, String pattern); public Predicate notLike(Expression<String> x, Expression<String> pattern, Expression<Character> escapeChar); public Predicate notLike(Expression<String> x, Expression<String> pattern, char escapeChar); public Predicate notLike(Expression<String> x, String pattern, Expression<Character> escapeChar); public Predicate notLike(Expression<String> x, String pattern, char escapeChar); public Expression<String> concat(Expression<String> x, Expression<String> y); public Expression<String> concat(Expression<String> x, String y); public Expression<String> concat(String x, Expression<String> y); public Expression<String> substring(Expression<String> x, Expression<Integer> from); public Expression<String> substring(Expression<String> x, int from); public Expression<String> substring(Expression<String> x, Expression<Integer> from, Expression<Integer> len); public Expression<String> substring(Expression<String> x, int from, int len); public Expression<String> trim(Expression<String> x); public Expression<String> trim(Trimspec trim, Expression<String> x); public Expression<String> trim(Expression<Character> t, Expression<String> x); public Expression<String> trim(Trimspec trimSpec, Expression<Character> t, Expression<String> x); public Expression<String> trim(char t, Expression<String> x); public Expression<String> trim(Trimspec trimSpec, char t, Expression<String> x); public Expression<String> lower(Expression<String> x); public Expression<String> upper(Expression<String> x); public Expression<Integer> length(Expression<String> x); public Expression<Integer> locate(Expression<String> x, Expression<String> pattern); public Expression<Integer> locate(Expression<String> x, String pattern); public Expression<Integer> locate(Expression<String> x, Expression<String> pattern, Expression<Integer> from); public Expression<Integer> locate(Expression<String> x, String pattern, int from); public Expression<Date> currentDate(); public Expression<Timestamp> currentTimestamp(); public Expression<Time> currentTime(); public <T> In<T> in(Expression<? extends T> expression); public <Y> Expression<Y> coalesce(Expression<? extends Y> x, Expression<? extends Y> y); public <Y> Expression<Y> coalesce(Expression<? extends Y> x, Y y); public <Y> Expression<Y> nullif(Expression<Y> x, Expression<?> y); public <Y> Expression<Y> nullif(Expression<Y> x, Y y); public <T> Coalesce<T> coalesce(); public <C,R> SimpleCase<C,R> selectCase(Expression<? extends C> expression); public <R> Case<R> selectCase(); public <T> Expression<T> function(String name, Class<T> type, Expression<?>... args); public interface Case<R> extends Expression<R> { public Case<R> when(Expression<Boolean> condition, R result); public Case<R> when(Expression<Boolean> condition, Expression<? extends R> result); public Expression<R> otherwise(R result); public Expression<R> otherwise(Expression<? extends R> result); } public interface SimpleCase<C,R> extends Expression<R> { public Expression<C> getExpression(); public SimpleCase<C,R> when(C condition, R result); public SimpleCase<C,R> when(C condition, Expression<? extends R> result); public Expression<R> otherwise(R result); public Expression<R> otherwise(Expression<? extends R> result); } public interface Coalesce<T> extends Expression<T> { public Coalesce<T> value(T value); public Coalesce<T> value(Expression<? extends T> value); } public interface In<T> extends Predicate { public Expression<T> getExpression(); public In<T> value(T value); public In<T> value(Expression<? extends T> value); } }