diff --git a/src/main/java/io/ebean/Query.java b/src/main/java/io/ebean/Query.java index 8d61e223c..d8898ae5d 100644 --- a/src/main/java/io/ebean/Query.java +++ b/src/main/java/io/ebean/Query.java @@ -1485,6 +1485,11 @@ public interface Query { */ Class getBeanType(); + /** + * Return the type of query being executed. + */ + QueryType getQueryType(); + /** * Set true if you want to disable lazy loading. *

diff --git a/src/main/java/io/ebean/QueryType.java b/src/main/java/io/ebean/QueryType.java new file mode 100644 index 000000000..4c167ac7d --- /dev/null +++ b/src/main/java/io/ebean/QueryType.java @@ -0,0 +1,22 @@ +package io.ebean; + +/** + * The type of the query being executed. + */ +public enum QueryType { + + /** + * A find query. + */ + FIND, + + /** + * An update query. + */ + UPDATE, + + /** + * A delete query. + */ + DELETE +} diff --git a/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java b/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java index bc14d10d7..a7aef2d50 100644 --- a/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java +++ b/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java @@ -17,6 +17,7 @@ import io.ebean.PersistenceContextScope; import io.ebean.ProfileLocation; import io.ebean.Query; import io.ebean.QueryIterator; +import io.ebean.QueryType; import io.ebean.RawSql; import io.ebean.Version; import io.ebean.bean.CallStack; @@ -914,6 +915,19 @@ public class DefaultOrmQuery implements SpiQuery { this.profilingListener = profilingListener; } + @Override + public QueryType getQueryType() { + if (type != null) { + switch (type) { + case DELETE: + return QueryType.DELETE; + case UPDATE: + return QueryType.UPDATE; + } + } + return QueryType.FIND; + } + @Override public Mode getMode() { return mode; diff --git a/src/test/java/org/tests/basic/event/TestQueryAdapter.java b/src/test/java/org/tests/basic/event/TestQueryAdapter.java index ab7dbd763..4aea4efa9 100644 --- a/src/test/java/org/tests/basic/event/TestQueryAdapter.java +++ b/src/test/java/org/tests/basic/event/TestQueryAdapter.java @@ -3,10 +3,14 @@ package org.tests.basic.event; import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.Query; +import io.ebean.QueryType; +import org.ebeantest.LoggedSqlCollector; import org.junit.Test; import org.tests.model.basic.ResetBasicData; import org.tests.model.basic.TOne; +import java.util.List; + import static org.assertj.core.api.Assertions.assertThat; public class TestQueryAdapter extends BaseTestCase { @@ -27,5 +31,26 @@ public class TestQueryAdapter extends BaseTestCase { assertThat(one.getId()).isEqualTo(o.getId()); assertThat(sqlOf(queryFindId)).contains(" 1=1"); + + Query notUsedQuery = Ebean.find(TOne.class); + assertThat(notUsedQuery.getQueryType()).isEqualTo(QueryType.FIND); + + LoggedSqlCollector.start(); + + Ebean.update(TOne.class) + .set("name", "mod") + .where().idEq(o.getId()) + .update(); + + List sql = LoggedSqlCollector.current(); + assertThat(sql.get(0)).contains(" 2=2"); + + Ebean.find(TOne.class) + .where().idEq(o.getId()) + .delete(); + + sql = LoggedSqlCollector.stop(); + assertThat(sql.get(0)).contains(" 3=3"); + } } diff --git a/src/test/java/org/tests/model/basic/event/SimpleTOneQueryAdapter.java b/src/test/java/org/tests/model/basic/event/SimpleTOneQueryAdapter.java index 040fc5cef..6a4ccd346 100644 --- a/src/test/java/org/tests/model/basic/event/SimpleTOneQueryAdapter.java +++ b/src/test/java/org/tests/model/basic/event/SimpleTOneQueryAdapter.java @@ -23,10 +23,20 @@ public class SimpleTOneQueryAdapter implements BeanQueryAdapter { Query query = request.getQuery(); - // can get the type of query Bean, List, RowCount, Id's etc - //Type queryType = query.getType(); - - query.where().raw("1=1"); + switch (query.getQueryType()) { + case DELETE: { + query.where().raw("3=3"); + break; + } + case UPDATE: { + query.where().raw("2=2"); + break; + } + case FIND: { + query.where().raw("1=1"); + break; + } + } }