From 5b26e77cfd42f1ec9a8b6ed3f7960ef88be43a89 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Fri, 18 Sep 2015 11:39:47 +1200 Subject: [PATCH] #413 - ENH: Add ability to clear the OrderBy ... so that a default order by can be set in code and then cleared / overwritten --- src/main/java/com/avaje/ebean/OrderBy.java | 12 +++++ .../tests/query/orderby/TestOrderByClear.java | 45 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/test/java/com/avaje/tests/query/orderby/TestOrderByClear.java diff --git a/src/main/java/com/avaje/ebean/OrderBy.java b/src/main/java/com/avaje/ebean/OrderBy.java index c39617551..a045d3812 100644 --- a/src/main/java/com/avaje/ebean/OrderBy.java +++ b/src/main/java/com/avaje/ebean/OrderBy.java @@ -198,6 +198,18 @@ public final class OrderBy implements Serializable { return list.hashCode(); } + /** + * Clear the orderBy removing any current order by properties. + *

+ * This is intended to be used when some code creates a query with a + * 'default' order by clause and some other code may clear the 'default' + * order by clause and replace. + *

+ */ + public void clear() { + list.clear(); + } + /** * A property and its ascending descending order. */ diff --git a/src/test/java/com/avaje/tests/query/orderby/TestOrderByClear.java b/src/test/java/com/avaje/tests/query/orderby/TestOrderByClear.java new file mode 100644 index 000000000..4338c6d7f --- /dev/null +++ b/src/test/java/com/avaje/tests/query/orderby/TestOrderByClear.java @@ -0,0 +1,45 @@ +package com.avaje.tests.query.orderby; + +import com.avaje.ebean.BaseTestCase; +import com.avaje.ebean.Ebean; +import com.avaje.ebean.OrderBy; +import com.avaje.ebean.Query; +import com.avaje.tests.model.basic.Order; +import com.avaje.tests.model.basic.OrderDetail; +import com.avaje.tests.model.basic.ResetBasicData; +import org.avaje.ebeantest.LoggedSqlCollector; +import org.junit.Assert; +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertTrue; + +public class TestOrderByClear extends BaseTestCase { + + @Test + public void test() { + + ResetBasicData.reset(); + + Query query = Ebean.find(Order.class) + .orderBy().asc("orderDate"); + + + OrderBy orderBy = query.orderBy(); + assertTrue(orderBy.containsProperty("orderDate")); + + orderBy.clear(); + Assert.assertFalse(orderBy.containsProperty("orderDate")); + + orderBy.asc("shipDate"); + assertTrue(orderBy.containsProperty("shipDate")); + + query.findList(); + String sql = query.getGeneratedSql(); + + assertTrue(sql.contains("order by t0.ship_date")); + + } + +}