package eu.eudat.queryable; import eu.eudat.queryable.jpa.predicates.*; import eu.eudat.queryable.queryableentity.DataEntity; import eu.eudat.queryable.types.SelectionField; import javax.persistence.TypedQuery; import javax.persistence.criteria.Expression; import javax.persistence.criteria.Subquery; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; public interface QueryableList { QueryableList where(SinglePredicate predicate); List select(SelectPredicate predicate); CompletableFuture> selectAsync(SelectPredicate predicate); List toList(); void update(EntitySelectPredicate selectPredicate, V value); QueryableList withFields(List fields); List toListWithFields(); 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 groupBy(GroupByPredicate predicate); QueryableList withHint(String hint); Long count(); QueryableList where(NestedQuerySinglePredicate predicate); CompletableFuture countAsync(); Subquery query(List fields); Subquery subQuery(SinglePredicate predicate, List fields); Subquery subQuery(NestedQuerySinglePredicate predicate, List fields); Subquery subQueryCount(NestedQuerySinglePredicate predicate, List fields); Subquery subQueryCount(SinglePredicate predicate, List fields); QueryableList initSubQuery(Class uClass); Subquery subQueryMax(SinglePredicate predicate, List fields, Class uClass); Subquery subQueryMax(NestedQuerySinglePredicate predicate, List fields, Class uClass); }