diff --git a/src/main/java/com/avaje/ebeaninternal/server/expression/ExistsExpression.java b/src/main/java/com/avaje/ebeaninternal/server/expression/ExistsExpression.java index 64537e6eb..0625c68fc 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/expression/ExistsExpression.java +++ b/src/main/java/com/avaje/ebeaninternal/server/expression/ExistsExpression.java @@ -14,74 +14,74 @@ import com.avaje.ebeaninternal.server.query.CQuery; public class ExistsExpression implements SpiExpression { - private static final long serialVersionUID = 666990277309851644L; + private static final long serialVersionUID = 666990277309851644L; - private final boolean not; - private final SpiQuery subQuery; + private final boolean not; + private final SpiQuery subQuery; - private transient CQuery compiledSubQuery; + private transient CQuery compiledSubQuery; - public ExistsExpression(SpiQuery subQuery, boolean not) { - this.subQuery = subQuery; - this.not=not; - } + public ExistsExpression(SpiQuery subQuery, boolean not) { + this.subQuery = subQuery; + this.not = not; + } - public void queryAutoFetchHash(HashQueryPlanBuilder builder) { - builder.add(ExistsExpression.class).add(not); - - subQuery.queryAutofetchHash(builder); - } + public void queryAutoFetchHash(HashQueryPlanBuilder builder) { + builder.add(ExistsExpression.class).add(not); - public void queryPlanHash(BeanQueryRequest request, HashQueryPlanBuilder builder) { + subQuery.queryAutofetchHash(builder); + } - // queryPlanHash executes prior to addSql() or addBindValues() - // ... so compiledQuery will exist - compiledSubQuery = compileSubQuery(request); + public void queryPlanHash(BeanQueryRequest request, HashQueryPlanBuilder builder) { - queryAutoFetchHash(builder); - } + // queryPlanHash executes prior to addSql() or addBindValues() + // ... so compiledQuery will exist + compiledSubQuery = compileSubQuery(request); - /** - * Compile/build the sub query. - */ - private CQuery compileSubQuery(BeanQueryRequest queryRequest) { + queryAutoFetchHash(builder); + } - SpiEbeanServer ebeanServer = (SpiEbeanServer) queryRequest.getEbeanServer(); - return ebeanServer.compileQuery(subQuery, queryRequest.getTransaction()); - } + /** + * Compile/build the sub query. + */ + private CQuery compileSubQuery(BeanQueryRequest queryRequest) { - public int queryBindHash() { - return subQuery.queryBindHash(); - } + SpiEbeanServer ebeanServer = (SpiEbeanServer) queryRequest.getEbeanServer(); + return ebeanServer.compileQuery(subQuery, queryRequest.getTransaction()); + } - public void addSql(SpiExpressionRequest request) { + public int queryBindHash() { + return subQuery.queryBindHash(); + } - String subSelect = compiledSubQuery.getGeneratedSql(); - subSelect = subSelect.replace('\n', ' '); + public void addSql(SpiExpressionRequest request) { + String subSelect = compiledSubQuery.getGeneratedSql(); + subSelect = subSelect.replace('\n', ' '); - if(not) request.append(" not"); - request.append(" exists ("); - request.append(subSelect); - request.append(") "); - } + if (not) { + request.append(" not"); + } + request.append(" exists ("); + request.append(subSelect); + request.append(") "); + } - public void addBindValues(SpiExpressionRequest request) { + public void addBindValues(SpiExpressionRequest request) { - List bindParams = compiledSubQuery.getPredicates().getWhereExprBindValues(); + List bindParams = compiledSubQuery.getPredicates().getWhereExprBindValues(); - if (bindParams == null) { - return; - } + if (bindParams == null) { + return; + } - for (int i = 0; i < bindParams.size(); i++) { - request.addBindValue(bindParams.get(i)); - } - } + for (int i = 0; i < bindParams.size(); i++) { + request.addBindValue(bindParams.get(i)); + } + } - @Override - public void containsMany(BeanDescriptor desc, ManyWhereJoins whereManyJoins) { - // TODO Auto-generated method stub - - } + @Override + public void containsMany(BeanDescriptor desc, ManyWhereJoins whereManyJoins) { + // Nothing to do for exists expression + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java b/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java index ed042b0fb..5dbef07c4 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java +++ b/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java @@ -1290,13 +1290,13 @@ public class DefaultOrmQuery implements SpiQuery { this.cancelableQuery = cancelableQuery; } } - + @Override public Query alias(String alias) { - this.rootTableAlias=alias; - return this; + this.rootTableAlias = alias; + return this; } - + @Override public String getAlias() { return rootTableAlias; diff --git a/src/main/java/com/avaje/ebeaninternal/util/DefaultExpressionList.java b/src/main/java/com/avaje/ebeaninternal/util/DefaultExpressionList.java index 5faaac083..c6a4444c0 100644 --- a/src/main/java/com/avaje/ebeaninternal/util/DefaultExpressionList.java +++ b/src/main/java/com/avaje/ebeaninternal/util/DefaultExpressionList.java @@ -468,19 +468,18 @@ public class DefaultExpressionList implements SpiExpressionList { add(expr.in(propertyName, values)); return this; } - + @Override public ExpressionList exists(Query subQuery) { - add(expr.exists(subQuery)); - return this; - } - - @Override - public ExpressionList notExists(Query subQuery) { - add(expr.notExists(subQuery)); - return this; + add(expr.exists(subQuery)); + return this; } + @Override + public ExpressionList notExists(Query subQuery) { + add(expr.notExists(subQuery)); + return this; + } @Override public ExpressionList isNotNull(String propertyName) { diff --git a/src/test/java/com/avaje/tests/query/TestQueryAlias.java b/src/test/java/com/avaje/tests/query/TestQueryAlias.java index 04e21be76..5b498ac34 100644 --- a/src/test/java/com/avaje/tests/query/TestQueryAlias.java +++ b/src/test/java/com/avaje/tests/query/TestQueryAlias.java @@ -10,26 +10,29 @@ import com.avaje.tests.model.basic.CKeyParent; import com.avaje.tests.model.basic.ResetBasicData; public class TestQueryAlias extends BaseTestCase { - @Test - public void testExists() { - ResetBasicData.reset(); - - Query sq = Ebean.createQuery(CKeyParent.class).select("id.oneKey").alias("st0") - .setAutofetch(false).where().query(); + @Test + public void testExists() { + ResetBasicData.reset(); - Query pq = Ebean.find(CKeyParent.class).alias("myt0").where().in("id.oneKey", sq).query(); + Query sq = Ebean.createQuery(CKeyParent.class) + .select("id.oneKey").alias("st0") + .setAutofetch(false).where().query(); - pq.findList(); + Query pq = Ebean.find(CKeyParent.class).alias("myt0").where().in("id.oneKey", sq).query(); - String sql = pq.getGeneratedSql(); - - System.out.println(sql); - // Without alias command is should be: - // select t0.one_key c0, t0.two_key c1, t0.name c2, t0.version c3, t0.assoc_id c4 from ckey_parent t0 where (t0.one_key) in (select t0.one_key from ckey_parent t0) - // but with alias command SQL should look like this: - // select myt0.one_key c0, myt0.two_key c1, myt0.name c2, myt0.version c3, myt0.assoc_id c4 from ckey_parent myt0 where (myt0.one_key) in (select st0.one_key from ckey_parent st0) - - Assert.assertTrue(sql.indexOf("ckey_parent myt0")>0); - Assert.assertTrue(sql.indexOf("in (select st0.one_key from ckey_parent st0)")>0); - } + pq.findList(); + + String sql = pq.getGeneratedSql(); + + System.out.println(sql); + // Without alias command is should be: + // select t0.one_key c0, t0.two_key c1, t0.name c2, t0.version c3, t0.assoc_id c4 from ckey_parent t0 where (t0 + // .one_key) in (select t0.one_key from ckey_parent t0) + // but with alias command SQL should look like this: + // select myt0.one_key c0, myt0.two_key c1, myt0.name c2, myt0.version c3, myt0.assoc_id c4 from ckey_parent myt0 + // where (myt0.one_key) in (select st0.one_key from ckey_parent st0) + + Assert.assertTrue(sql.indexOf("ckey_parent myt0") > 0); + Assert.assertTrue(sql.indexOf("in (select st0.one_key from ckey_parent st0)") > 0); + } } diff --git a/src/test/java/com/avaje/tests/query/TestQueryExists.java b/src/test/java/com/avaje/tests/query/TestQueryExists.java index 453fee06a..43a62139d 100644 --- a/src/test/java/com/avaje/tests/query/TestQueryExists.java +++ b/src/test/java/com/avaje/tests/query/TestQueryExists.java @@ -11,31 +11,31 @@ import com.avaje.tests.model.basic.Order; import com.avaje.tests.model.basic.ResetBasicData; public class TestQueryExists extends BaseTestCase { - @Test - public void testExists() { - ResetBasicData.reset(); - Query subQuery=Ebean.find(Order.class).alias("sq").select("id").where().raw("sq.kcustomer_id = qt.id") - .query(); - Query query=Ebean.find(Customer.class).alias("qt").where().exists(subQuery).query(); + @Test + public void testExists() { + ResetBasicData.reset(); - query.findList(); - String sql=query.getGeneratedSql(); + Query subQuery = Ebean.find(Order.class).alias("sq").select("id").where().raw("sq.kcustomer_id = qt.id").query(); - Assert.assertTrue(sql.indexOf("exists (")>0); - } + Query query = Ebean.find(Customer.class).alias("qt").where().exists(subQuery).query(); - @Test - public void testNotExists() { - ResetBasicData.reset(); + query.findList(); + String sql = query.getGeneratedSql(); - Query subQuery=Ebean.find(Order.class).alias("sq").select("id").where().raw("sq.kcustomer_id = qt.id") - .query(); - Query query=Ebean.find(Customer.class).alias("qt").where().notExists(subQuery).query(); + Assert.assertTrue(sql.indexOf("exists (") > 0); + } - query.findList(); - String sql=query.getGeneratedSql(); + @Test + public void testNotExists() { + ResetBasicData.reset(); - Assert.assertTrue(sql.indexOf("not exists (")>0); - } + Query subQuery = Ebean.find(Order.class).alias("sq").select("id").where().raw("sq.kcustomer_id = qt.id").query(); + Query query = Ebean.find(Customer.class).alias("qt").where().notExists(subQuery).query(); + + query.findList(); + String sql = query.getGeneratedSql(); + + Assert.assertTrue(sql.indexOf("not exists (") > 0); + } }