From 49d0e32955c647f33dbfbec592cd77fba3c7d8fa Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" Date: Mon, 4 Sep 2006 23:29:27 +0000 Subject: Ensure remainder orderings have a specified direction. --- src/main/java/com/amazon/carbonado/qe/OrderingScore.java | 11 ++++++++++- src/test/java/com/amazon/carbonado/qe/TestOrderingScore.java | 11 +++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/amazon/carbonado/qe/OrderingScore.java b/src/main/java/com/amazon/carbonado/qe/OrderingScore.java index ce85cb6..a2b46b9 100644 --- a/src/main/java/com/amazon/carbonado/qe/OrderingScore.java +++ b/src/main/java/com/amazon/carbonado/qe/OrderingScore.java @@ -224,6 +224,13 @@ public class OrderingScore { } // Property not handled and not an identity filter. + + if (property.getDirection() == UNSPECIFIED) { + // Specify a direction in order for a comparator to be later + // created from remainder orderings. + property = property.direction(ASCENDING); + } + remainderProperties.add(property); indexPos = Integer.MAX_VALUE; } @@ -317,7 +324,9 @@ public class OrderingScore { /** * Returns the ordering properties that the evaluated index does not - * support. The list of orderings is reduced to eliminate redundancies. + * support. The list of orderings is reduced to eliminate redundancies. If + * any remainder ordering properties originally had an unspecified + * direction, the direction in this list is specified as ascending. * * @return remainder orderings, never null */ diff --git a/src/test/java/com/amazon/carbonado/qe/TestOrderingScore.java b/src/test/java/com/amazon/carbonado/qe/TestOrderingScore.java index ecacf9a..25e9489 100644 --- a/src/test/java/com/amazon/carbonado/qe/TestOrderingScore.java +++ b/src/test/java/com/amazon/carbonado/qe/TestOrderingScore.java @@ -584,5 +584,16 @@ public class TestOrderingScore extends TestCase { assertEquals("-id", score.getHandledOrderings().get(0).toString()); assertEquals("-intProp", score.getHandledOrderings().get(1).toString()); assertEquals("-doubleProp", score.getHandledOrderings().get(2).toString()); + + ops = makeOrderings(StorableTestBasic.class, "~id", "-intProp", "~longProp"); + + score = OrderingScore.evaluate(ix, null, ops); + assertEquals(2, score.getHandledCount()); + assertEquals(1, score.getRemainderCount()); + assertEquals(true, score.shouldReverseOrder()); + + assertEquals("-id", score.getHandledOrderings().get(0).toString()); + assertEquals("-intProp", score.getHandledOrderings().get(1).toString()); + assertEquals("+longProp", score.getRemainderOrderings().get(0).toString()); } } -- cgit v1.2.3