From e9325a81f7085514f7d8fbeb8eef51c8ff78a0df Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Wed, 19 Feb 2020 11:41:06 +1300 Subject: [PATCH] ENH: Add query.usingDatabase(database) --- src/main/java/io/ebean/Query.java | 5 +++++ .../server/query/DefaultFetchGroupQuery.java | 6 ++++++ .../server/querydefn/DefaultOrmQuery.java | 16 +++++++++++++--- .../tests/basic/TestQueryUsingConnection.java | 16 ++++++++++++++++ 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/ebean/Query.java b/src/main/java/io/ebean/Query.java index d942fcfe8..ac2b246a2 100644 --- a/src/main/java/io/ebean/Query.java +++ b/src/main/java/io/ebean/Query.java @@ -656,6 +656,11 @@ public interface Query { */ Query usingConnection(Connection connection); + /** + * Execute the query using the given database. + */ + Query usingDatabase(Database database); + /** * Execute the query returning the list of Id's. *

diff --git a/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java b/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java index 6bdbd9baf..35aad3cdf 100644 --- a/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java +++ b/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java @@ -2,6 +2,7 @@ package io.ebeaninternal.server.query; import io.ebean.CacheMode; import io.ebean.CountDistinctOrder; +import io.ebean.Database; import io.ebean.DtoQuery; import io.ebean.Expression; import io.ebean.ExpressionFactory; @@ -227,6 +228,11 @@ class DefaultFetchGroupQuery implements SpiFetchGroupQuery { throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup"); } + @Override + public Query usingDatabase(Database database) { + throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup"); + } + @Nonnull @Override public List findIds() { diff --git a/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java b/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java index 9d361d76d..48f192c5d 100644 --- a/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java +++ b/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java @@ -2,6 +2,7 @@ package io.ebeaninternal.server.querydefn; import io.ebean.CacheMode; import io.ebean.CountDistinctOrder; +import io.ebean.Database; import io.ebean.DtoQuery; import io.ebean.Expression; import io.ebean.ExpressionFactory; @@ -89,13 +90,13 @@ public class DefaultOrmQuery implements SpiQuery { private final Class beanType; + private final ExpressionFactory expressionFactory; + private final BeanDescriptor rootBeanDescriptor; private BeanDescriptor beanDescriptor; - private final SpiEbeanServer server; - - private final ExpressionFactory expressionFactory; + private SpiEbeanServer server; private SpiTransaction transaction; @@ -1456,6 +1457,12 @@ public class DefaultOrmQuery implements SpiQuery { return this; } + @Override + public Query usingDatabase(Database database) { + this.server = (SpiEbeanServer) database; + return this; + } + @Override public int delete() { return server.delete(this, transaction); @@ -1664,6 +1671,7 @@ public class DefaultOrmQuery implements SpiQuery { } @Override + @Deprecated public OrderBy orderBy() { return order(); } @@ -1677,6 +1685,7 @@ public class DefaultOrmQuery implements SpiQuery { } @Override + @Deprecated public DefaultOrmQuery orderBy(String orderByClause) { return order(orderByClause); } @@ -1692,6 +1701,7 @@ public class DefaultOrmQuery implements SpiQuery { } @Override + @Deprecated public DefaultOrmQuery setOrderBy(OrderBy orderBy) { return setOrder(orderBy); } diff --git a/src/test/java/org/tests/basic/TestQueryUsingConnection.java b/src/test/java/org/tests/basic/TestQueryUsingConnection.java index 33b0c5473..aeda60bfd 100644 --- a/src/test/java/org/tests/basic/TestQueryUsingConnection.java +++ b/src/test/java/org/tests/basic/TestQueryUsingConnection.java @@ -2,6 +2,7 @@ package org.tests.basic; import io.ebean.BaseTestCase; import io.ebean.DB; +import io.ebean.Database; import io.ebean.Transaction; import io.ebean.annotation.IgnorePlatform; import io.ebean.annotation.Platform; @@ -18,6 +19,21 @@ import static org.junit.Assert.assertEquals; public class TestQueryUsingConnection extends BaseTestCase { + @Test + public void usingDatabase() { + + ResetBasicData.reset(); + + final Database database = DB.getDefault(); + + int count = + DB.find(Country.class) + .usingDatabase(database) + .findCount(); + + assertThat(count).isGreaterThan(0); + } + @Test public void usingConnection() throws SQLException {