From 924f0db8a087a3ae396ceeec88dc78d826a50f2a Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" Date: Sun, 21 Oct 2007 00:46:26 +0000 Subject: Allow open exists filter to operate on many-to-one join. --- .../carbonado/cursor/TestFilteredCursor.java | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'src/test/java/com/amazon/carbonado/cursor') 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 orders = repo.storageFor(Order.class); + Storage 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 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 orders = repo.storageFor(Order.class); -- cgit v1.2.3