diff options
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/com/amazon/carbonado/cursor/TestFilteredCursor.java | 59 | ||||
| -rw-r--r-- | src/test/java/com/amazon/carbonado/filter/TestFilterExists.java | 62 |
2 files changed, 115 insertions, 6 deletions
diff --git a/src/test/java/com/amazon/carbonado/cursor/TestFilteredCursor.java b/src/test/java/com/amazon/carbonado/cursor/TestFilteredCursor.java index 2279e9b..6f78c42 100644 --- a/src/test/java/com/amazon/carbonado/cursor/TestFilteredCursor.java +++ b/src/test/java/com/amazon/carbonado/cursor/TestFilteredCursor.java @@ -559,6 +559,65 @@ public class TestFilteredCursor extends TestCase { assertEquals(3, matches.get(2).getOrderID());
}
+ public void testExistsNoParamsManyToOne() throws Exception {
+ Repository repo = new ToyRepository();
+ Storage<Order> orders = repo.storageFor(Order.class);
+ Storage<OrderItem> items = repo.storageFor(OrderItem.class);
+
+ Order order = orders.prepare();
+ order.setOrderID(1);
+ order.setOrderNumber("one");
+ order.setOrderTotal(100);
+ order.setAddressID(0);
+ order.insert();
+
+ OrderItem item = items.prepare();
+ item.setOrderItemID(1);
+ item.setOrderID(1);
+ item.setItemDescription("desc one");
+ item.setItemQuantity(1);
+ item.setItemPrice(100);
+ item.setShipmentID(0);
+ item.insert();
+
+ item = items.prepare();
+ item.setOrderItemID(2);
+ item.setOrderID(1);
+ item.setItemDescription("desc two");
+ item.setItemQuantity(2);
+ item.setItemPrice(5);
+ item.setShipmentID(0);
+ item.insert();
+
+ item = items.prepare();
+ item.setOrderItemID(3);
+ item.setOrderID(0);
+ item.setItemDescription("desc three");
+ item.setItemQuantity(1);
+ item.setItemPrice(5);
+ item.setShipmentID(0);
+ item.insert();
+
+ // Query for items contained in an order.
+ List<OrderItem> matches = items.query("order()").fetch().toList();
+ assertEquals(2, matches.size());
+ assertEquals(1, matches.get(0).getOrderItemID());
+ assertEquals(2, matches.get(1).getOrderItemID());
+
+ // Query for items contained not in an order.
+ matches = items.query("!order()").fetch().toList();
+ assertEquals(1, matches.size());
+ assertEquals(3, matches.get(0).getOrderItemID());
+
+ // Outer join.
+ matches = items.query("itemPrice = ? & (order.orderTotal = ? | !order())")
+ .with(5).with(100)
+ .fetch().toList();
+ assertEquals(2, matches.size());
+ assertEquals(2, matches.get(0).getOrderItemID());
+ assertEquals(3, matches.get(1).getOrderItemID());
+ }
+
public void testExistsWithParams() throws Exception {
Repository repo = new ToyRepository();
Storage<Order> orders = repo.storageFor(Order.class);
diff --git a/src/test/java/com/amazon/carbonado/filter/TestFilterExists.java b/src/test/java/com/amazon/carbonado/filter/TestFilterExists.java index e454d47..05aa535 100644 --- a/src/test/java/com/amazon/carbonado/filter/TestFilterExists.java +++ b/src/test/java/com/amazon/carbonado/filter/TestFilterExists.java @@ -100,12 +100,6 @@ public class TestFilterExists extends TestCase { public void testParseErrors() {
try {
- Filter.filterFor(Order.class, "address()");
- fail();
- } catch (MalformedFilterException e) {
- }
-
- try {
Filter.filterFor(Order.class, "shipments");
fail();
} catch (MalformedFilterException e) {
@@ -124,6 +118,62 @@ public class TestFilterExists extends TestCase { }
}
+ public void testManyToOneParsing() {
+ {
+ Filter<Order> f1 = Filter.filterFor(Order.class, "address()");
+ assertTrue(f1 instanceof ExistsFilter);
+ assertEquals("address", ((ExistsFilter) f1).getChainedProperty().toString());
+ assertTrue(((ExistsFilter) f1).getSubFilter().isOpen());
+ assertFalse(((ExistsFilter) f1).isNotExists());
+ }
+
+ {
+ Filter<Order> f1 = Filter.filterFor(Order.class, "!address()");
+ assertTrue(f1 instanceof ExistsFilter);
+ assertEquals("address", ((ExistsFilter) f1).getChainedProperty().toString());
+ assertTrue(((ExistsFilter) f1).getSubFilter().isOpen());
+ assertTrue(((ExistsFilter) f1).isNotExists());
+ }
+
+ {
+ Filter<Order> f1 = Filter.filterFor(Order.class, "address(addressCity = ?)");
+ assertFalse(f1 instanceof ExistsFilter);
+ assertEquals(Filter.filterFor(Order.class, "address.addressCity = ?"), f1);
+ }
+
+ {
+ Filter<Order> f1 = Filter.filterFor(Order.class, "!address(addressCity = ?)");
+ assertFalse(f1 instanceof ExistsFilter);
+ assertEquals(Filter.filterFor(Order.class, "address.addressCity != ?"), f1);
+ }
+ }
+
+ public void testClosedSubFilter() {
+ {
+ Filter<Order> f1 = Filter.filterFor(Order.class, "orderTotal = ?");
+ f1 = f1.orExists("shipments", Filter.getClosedFilter(Shipment.class));
+ assertEquals(Filter.filterFor(Order.class, "orderTotal = ?"), f1);
+ }
+
+ {
+ Filter<Order> f1 = Filter.filterFor(Order.class, "orderTotal = ?");
+ f1 = f1.andExists("shipments", Filter.getClosedFilter(Shipment.class));
+ assertTrue(f1.isClosed());
+ }
+
+ {
+ Filter<Order> f1 = Filter.filterFor(Order.class, "orderTotal = ?");
+ f1 = f1.orNotExists("shipments", Filter.getClosedFilter(Shipment.class));
+ assertTrue(f1.isOpen());
+ }
+
+ {
+ Filter<Order> f1 = Filter.filterFor(Order.class, "orderTotal = ?");
+ f1 = f1.andNotExists("shipments", Filter.getClosedFilter(Shipment.class));
+ assertEquals(Filter.filterFor(Order.class, "orderTotal = ?"), f1);
+ }
+ }
+
public void testVisitor() {
Filter<Order> f1 = Filter.filterFor
(Order.class, "orderTotal = ? & shipments(orderItems(itemPrice=?)) | orderTotal < ?");
|
