diff --git a/querydsl-core/src/main/java/com/mysema/query/Detachable.java b/querydsl-core/src/main/java/com/mysema/query/Detachable.java new file mode 100644 index 000000000..f14bb0586 --- /dev/null +++ b/querydsl-core/src/main/java/com/mysema/query/Detachable.java @@ -0,0 +1,180 @@ +/* + * Copyright 2011, Mysema Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.mysema.query; + +import com.mysema.query.types.Expression; +import com.mysema.query.types.Predicate; +import com.mysema.query.types.expr.BooleanExpression; +import com.mysema.query.types.expr.ComparableExpression; +import com.mysema.query.types.expr.DateExpression; +import com.mysema.query.types.expr.DateTimeExpression; +import com.mysema.query.types.expr.NumberExpression; +import com.mysema.query.types.expr.StringExpression; +import com.mysema.query.types.expr.TimeExpression; +import com.mysema.query.types.query.BooleanSubQuery; +import com.mysema.query.types.query.ComparableSubQuery; +import com.mysema.query.types.query.DateSubQuery; +import com.mysema.query.types.query.DateTimeSubQuery; +import com.mysema.query.types.query.ListSubQuery; +import com.mysema.query.types.query.NumberSubQuery; +import com.mysema.query.types.query.SimpleSubQuery; +import com.mysema.query.types.query.StringSubQuery; +import com.mysema.query.types.query.TimeSubQuery; + +/** + * Detachable defines methods for the construction of SubQuery instances + * + * @author tiwe + * + */ +public interface Detachable { + + /** + * Return the count of matched rows as a sub query + * + * @return + */ + NumberSubQuery count(); + + /** + * Create an exists(this) expression + * + * @return + */ + BooleanExpression exists(); + + /** + * Create a projection expression for the given projection + * + * @param args + * @return + */ + ListSubQuery list(Expression... args); + + /** + * Create a projection expression for the given projection + * Non expression arguments are converted into constant expressions + * + * @param args + * @return + */ + ListSubQuery list(Object... args); + + /** + * Create a projection expression for the given projection + * + * @param + * generic type of the List + * @param projection + * @return a List over the projection + */ + ListSubQuery list(Expression projection); + + + /** + * Create an not exists(this) expression + * + * @return + */ + BooleanExpression notExists(); + + /** + * Create a projection expression for the given projection + * + * @param args + * @return + */ + SimpleSubQuery unique(Expression... args); + + /** + * Create a projection expression for the given projection + * Non expression arguments are converted into constant expressions + * + * @param args + * @return + */ + SimpleSubQuery unique(Object... args); + + /** + * Create a subquery expression for the given projection + * + * @param + * return type + * @param projection + * @return the result or null for an empty result + */ + SimpleSubQuery unique(Expression projection); + + /** + * Create a subquery expression for the given projection + * + * @param projection + * @return + */ + BooleanSubQuery unique(Predicate projection); + + /** + * Create a subquery expression for the given projection + * + * @param projection + * @return + */ + StringSubQuery unique(StringExpression projection); + + /** + * Create a subquery expression for the given projection + * + * @param + * @param projection + * @return + */ + > ComparableSubQuery unique(ComparableExpression projection); + + /** + * Create a subquery expression for the given projection + * + * @param + * @param projection + * @return + */ + > DateSubQuery unique(DateExpression projection); + + /** + * Create a subquery expression for the given projection + * + * @param + * @param projection + * @return + */ + > DateTimeSubQuery unique(DateTimeExpression projection); + + /** + * Create a subquery expression for the given projection + * + * @param + * @param projection + * @return + */ + > TimeSubQuery unique(TimeExpression projection); + + /** + * Create a subquery expression for the given projection + * + * @param + * @param projection + * @return + */ + > NumberSubQuery unique(NumberExpression projection); + +} diff --git a/querydsl-core/src/main/java/com/mysema/query/QueryFactory.java b/querydsl-core/src/main/java/com/mysema/query/QueryFactory.java index a1e3bffff..7c03e54ca 100644 --- a/querydsl-core/src/main/java/com/mysema/query/QueryFactory.java +++ b/querydsl-core/src/main/java/com/mysema/query/QueryFactory.java @@ -13,7 +13,6 @@ */ package com.mysema.query; -import com.mysema.query.types.query.Detachable; /** * Common interface for QueryFactory implementations diff --git a/querydsl-core/src/main/java/com/mysema/query/support/DetachableAdapter.java b/querydsl-core/src/main/java/com/mysema/query/support/DetachableAdapter.java index 4371efbad..c5d200649 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/DetachableAdapter.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/DetachableAdapter.java @@ -15,6 +15,7 @@ package com.mysema.query.support; import javax.annotation.Nullable; +import com.mysema.query.Detachable; import com.mysema.query.Tuple; import com.mysema.query.types.Expression; import com.mysema.query.types.Predicate; @@ -29,7 +30,6 @@ import com.mysema.query.types.query.BooleanSubQuery; import com.mysema.query.types.query.ComparableSubQuery; import com.mysema.query.types.query.DateSubQuery; import com.mysema.query.types.query.DateTimeSubQuery; -import com.mysema.query.types.query.Detachable; import com.mysema.query.types.query.ListSubQuery; import com.mysema.query.types.query.NumberSubQuery; import com.mysema.query.types.query.SimpleSubQuery; diff --git a/querydsl-core/src/main/java/com/mysema/query/support/DetachableMixin.java b/querydsl-core/src/main/java/com/mysema/query/support/DetachableMixin.java index 701e5ce1c..38b1b4662 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/DetachableMixin.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/DetachableMixin.java @@ -15,6 +15,7 @@ package com.mysema.query.support; import javax.annotation.Nullable; +import com.mysema.query.Detachable; import com.mysema.query.QueryMetadata; import com.mysema.query.Tuple; import com.mysema.query.types.ConstantImpl; @@ -34,7 +35,6 @@ import com.mysema.query.types.query.BooleanSubQuery; import com.mysema.query.types.query.ComparableSubQuery; import com.mysema.query.types.query.DateSubQuery; import com.mysema.query.types.query.DateTimeSubQuery; -import com.mysema.query.types.query.Detachable; import com.mysema.query.types.query.ListSubQuery; import com.mysema.query.types.query.NumberSubQuery; import com.mysema.query.types.query.SimpleSubQuery; diff --git a/querydsl-core/src/main/java/com/mysema/query/support/DetachableQuery.java b/querydsl-core/src/main/java/com/mysema/query/support/DetachableQuery.java index bfa78fea8..834cd60b1 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/DetachableQuery.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/DetachableQuery.java @@ -13,6 +13,7 @@ */ package com.mysema.query.support; +import com.mysema.query.Detachable; import com.mysema.query.Tuple; import com.mysema.query.types.Expression; import com.mysema.query.types.Predicate; @@ -27,7 +28,6 @@ import com.mysema.query.types.query.BooleanSubQuery; import com.mysema.query.types.query.ComparableSubQuery; import com.mysema.query.types.query.DateSubQuery; import com.mysema.query.types.query.DateTimeSubQuery; -import com.mysema.query.types.query.Detachable; import com.mysema.query.types.query.ListSubQuery; import com.mysema.query.types.query.NumberSubQuery; import com.mysema.query.types.query.SimpleSubQuery; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/SubQueryExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/SubQueryExpression.java index ba7382bfd..e21a79648 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/SubQueryExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/SubQueryExpression.java @@ -13,8 +13,8 @@ */ package com.mysema.query.types; +import com.mysema.query.Detachable; import com.mysema.query.QueryMetadata; -import com.mysema.query.types.query.Detachable; /** * diff --git a/querydsl-core/src/test/java/com/mysema/query/support/DetachableAdapterTest.java b/querydsl-core/src/test/java/com/mysema/query/support/DetachableAdapterTest.java index a87dcff7c..b54254a17 100644 --- a/querydsl-core/src/test/java/com/mysema/query/support/DetachableAdapterTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/support/DetachableAdapterTest.java @@ -19,9 +19,9 @@ import static org.junit.Assert.assertNotNull; import org.junit.Before; import org.junit.Test; +import com.mysema.query.Detachable; import com.mysema.query.alias.Alias; import com.mysema.query.types.EntityPath; -import com.mysema.query.types.query.Detachable; @SuppressWarnings("unchecked") diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSubQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSubQuery.java index e4ee2af52..a3032829a 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSubQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSubQuery.java @@ -13,7 +13,7 @@ */ package com.mysema.query.jpa; -import com.mysema.query.types.query.Detachable; +import com.mysema.query.Detachable; /** * @author tiwe