argos/dmp-backend/src/main/java/eu/eudat/queryable/QueryableList.java

65 lines
2.0 KiB
Java
Raw Normal View History

package eu.eudat.queryable;
2018-01-02 09:36:40 +01:00
import eu.eudat.entities.DataEntity;
2018-02-08 09:42:02 +01:00
import eu.eudat.queryable.predicates.NestedQuerySinglePredicate;
import eu.eudat.queryable.predicates.OrderByPredicate;
import eu.eudat.queryable.predicates.SelectPredicate;
import eu.eudat.queryable.predicates.SinglePredicate;
2018-02-08 09:42:02 +01:00
import eu.eudat.queryable.types.SelectionField;
2018-02-07 10:56:30 +01:00
import javax.persistence.criteria.Subquery;
import java.util.List;
2018-01-02 09:36:40 +01:00
import java.util.Set;
2018-02-07 10:56:30 +01:00
import java.util.concurrent.CompletableFuture;
2018-02-20 08:50:17 +01:00
public interface QueryableList<T extends DataEntity> {
QueryableList<T> where(SinglePredicate<T> predicate);
<R> List<R> select(SelectPredicate<T, R> predicate);
2018-02-21 11:07:31 +01:00
<R> CompletableFuture<List<R>> selectAsync(SelectPredicate<T, R> predicate);
List<T> toList();
2018-02-07 10:56:30 +01:00
CompletableFuture<List<T>> toListAsync();
2018-01-19 10:31:05 +01:00
T getSingle();
2018-02-07 10:56:30 +01:00
CompletableFuture<T> getSingleAsync();
2018-01-30 13:23:47 +01:00
T getSingleOrDefault();
2018-02-07 10:56:30 +01:00
CompletableFuture<T> getSingleOrDefaultAsync();
QueryableList<T> skip(Integer offset);
QueryableList<T> take(Integer length);
QueryableList<T> distinct();
2018-02-02 16:24:06 +01:00
QueryableList<T> orderBy(OrderByPredicate<T> predicate);
2018-01-25 16:24:21 +01:00
2018-01-02 09:36:40 +01:00
QueryableList<T> setHints(Set<String> hints);
2018-01-25 16:24:21 +01:00
2018-01-19 10:31:05 +01:00
QueryableList<T> withHint(String hint);
2018-01-25 16:24:21 +01:00
2017-12-19 15:09:49 +01:00
Long count();
2018-02-02 11:33:37 +01:00
2018-02-08 09:42:02 +01:00
QueryableList<T> where(NestedQuerySinglePredicate<T> predicate);
2018-02-07 10:56:30 +01:00
CompletableFuture<Long> countAsync();
2018-02-16 11:34:02 +01:00
Subquery<T> subQuery(SinglePredicate<T> predicate, List<SelectionField> fields);
2018-02-08 09:42:02 +01:00
Subquery<T> subQuery(NestedQuerySinglePredicate<T> predicate, List<SelectionField> fields);
Subquery<Long> subQueryCount(NestedQuerySinglePredicate<T> predicate, List<SelectionField> fields);
Subquery<Long> subQueryCount(SinglePredicate<T> predicate, List<SelectionField> fields);
2018-02-16 11:34:02 +01:00
<U extends Comparable> Subquery<U> subQueryMax(SinglePredicate<T> predicate, List<SelectionField> fields, Class<U> uClass);
2018-02-07 10:56:30 +01:00
2018-02-16 11:34:02 +01:00
<U extends Comparable> Subquery<U> subQueryMax(NestedQuerySinglePredicate<T> predicate, List<SelectionField> fields, Class<U> uClass);
}