From 80feb9546265d9c0feb9837e6cca041dbffc222d Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" <bronee@gmail.com> Date: Tue, 15 Apr 2008 16:13:37 +0000 Subject: Revert to original "after" filter construction, but ensure property filters are bound. --- .../com/amazon/carbonado/qe/StandardQuery.java | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/com/amazon/carbonado/qe/StandardQuery.java b/src/main/java/com/amazon/carbonado/qe/StandardQuery.java index 3137d3c..71ad1e6 100644 --- a/src/main/java/com/amazon/carbonado/qe/StandardQuery.java +++ b/src/main/java/com/amazon/carbonado/qe/StandardQuery.java @@ -222,6 +222,8 @@ public abstract class StandardQuery<S extends Storable> extends AbstractQuery<S> Filter<S> orderFilter = Filter.getClosedFilter(storableType); Filter<S> lastSubFilter = Filter.getOpenFilter(storableType); + Object[] values = new Object[orderings.size()]; + for (int i=0;;) { OrderedProperty<S> property = orderings.get(i); RelOp operator = RelOp.GT; @@ -229,15 +231,27 @@ public abstract class StandardQuery<S extends Storable> extends AbstractQuery<S> operator = RelOp.LT; } String propertyName = property.getChainedProperty().toString(); - Object value = start.getPropertyValue(propertyName); - orderFilter = orderFilter.or(lastSubFilter.and(propertyName, operator, value)); + + values[i] = start.getPropertyValue(propertyName); + + orderFilter = orderFilter.or(lastSubFilter.and(propertyName, operator)); + if (++i >= orderings.size()) { break; } - lastSubFilter = lastSubFilter.and(propertyName, RelOp.EQ, value); + + lastSubFilter = lastSubFilter.and(propertyName, RelOp.EQ).bind(); + } + + Query<S> query = this.and(orderFilter); + + for (int i=0; i<values.length; i++) { + for (int j=0; j<=i; j++) { + query = query.with(values[j]); + } } - return and(orderFilter); + return query; } public Cursor<S> fetch() throws FetchException { -- cgit v1.2.3