package eu.eudat.queryable; import eu.eudat.entities.DataEntity; import eu.eudat.queryable.predicates.NestedQuerySinglePredicate; import eu.eudat.queryable.predicates.OrderByPredicate; import eu.eudat.queryable.predicates.SelectPredicate; import eu.eudat.queryable.predicates.SinglePredicate; import eu.eudat.queryable.types.SelectionField; import javax.persistence.criteria.Subquery; import java.util.List; import java.util.Set; import java.util.concurrent.CompletableFuture; public interface QueryableList { QueryableList where(SinglePredicate predicate); List select(SelectPredicate predicate); CompletableFuture> selectAsync(SelectPredicate predicate); List toList(); CompletableFuture> toListAsync(); T getSingle(); CompletableFuture getSingleAsync(); T getSingleOrDefault(); CompletableFuture getSingleOrDefaultAsync(); QueryableList skip(Integer offset); QueryableList take(Integer length); QueryableList distinct(); QueryableList orderBy(OrderByPredicate predicate); QueryableList setHints(Set hints); QueryableList withHint(String hint); Long count(); QueryableList where(NestedQuerySinglePredicate predicate); CompletableFuture countAsync(); Subquery subQuery(SinglePredicate predicate, List fields); Subquery subQuery(NestedQuerySinglePredicate predicate, List fields); Subquery subQueryCount(NestedQuerySinglePredicate predicate, List fields); Subquery subQueryCount(SinglePredicate predicate, List fields); Subquery subQueryMax(SinglePredicate predicate, List fields, Class uClass); Subquery subQueryMax(NestedQuerySinglePredicate predicate, List fields, Class uClass); }