diff options
| author | Brian S. O'Neill <bronee@gmail.com> | 2008-04-06 20:13:22 +0000 | 
|---|---|---|
| committer | Brian S. O'Neill <bronee@gmail.com> | 2008-04-06 20:13:22 +0000 | 
| commit | 1452d2d947c6257fa5328488a30d8059fb36d1ba (patch) | |
| tree | 3116e4c33fa48924f63ff28f318e821d300c86f5 /src | |
| parent | 72ab61c43f291f987970b73f97e13b51ac229582 (diff) | |
Added support for internal query hints.
Diffstat (limited to 'src')
6 files changed, 169 insertions, 49 deletions
diff --git a/src/test/java/com/amazon/carbonado/cursor/TestCursors.java b/src/test/java/com/amazon/carbonado/cursor/TestCursors.java index a6c25aa..79a10e8 100644 --- a/src/test/java/com/amazon/carbonado/cursor/TestCursors.java +++ b/src/test/java/com/amazon/carbonado/cursor/TestCursors.java @@ -113,6 +113,26 @@ public class TestCursors extends TestCase {          compareElements(c);
          c = new SkipCursor<Element>(createElements(1, 2, 3, 4, 5), 6);
          compareElements(c);
 +
 +        // call skip on cursor
 +        c = new SkipCursor<Element>(createElements(1, 2, 3, 4, 5), 2);
 +        assertEquals(1, c.skipNext(1));
 +        compareElements(c, 4, 5);
 +        c = new SkipCursor<Element>(createElements(1, 2, 3, 4, 5), 2);
 +        assertEquals(2, c.skipNext(2));
 +        compareElements(c, 5);
 +        c = new SkipCursor<Element>(createElements(1, 2, 3, 4, 5), 2);
 +        assertEquals(3, c.skipNext(3));
 +        compareElements(c);
 +        c = new SkipCursor<Element>(createElements(1, 2, 3, 4, 5), 2);
 +        assertEquals(3, c.skipNext(4));
 +        compareElements(c);
 +        c = new SkipCursor<Element>(createElements(1, 2, 3, 4, 5), 100);
 +        assertEquals(0, c.skipNext(4));
 +        compareElements(c);
 +        c = new SkipCursor<Element>(createElements(1, 2, 3, 4, 5), 0);
 +        assertEquals(4, c.skipNext(4));
 +        compareElements(c, 5);
      }
      public void testLimit() throws Exception {
 @@ -136,6 +156,26 @@ public class TestCursors extends TestCase {          compareElements(c, 1, 2, 3, 4, 5);
          c = new LimitCursor<Element>(createElements(1, 2, 3, 4, 5), 6);
          compareElements(c, 1, 2, 3, 4, 5);
 +
 +        // call skip on cursor
 +        c = new LimitCursor<Element>(createElements(1, 2, 3, 4, 5), 3);
 +        assertEquals(1, c.skipNext(1));
 +        compareElements(c, 2, 3);
 +        c = new LimitCursor<Element>(createElements(1, 2, 3, 4, 5), 3);
 +        assertEquals(2, c.skipNext(2));
 +        compareElements(c, 3);
 +        c = new LimitCursor<Element>(createElements(1, 2, 3, 4, 5), 3);
 +        assertEquals(3, c.skipNext(3));
 +        compareElements(c);
 +        c = new LimitCursor<Element>(createElements(1, 2, 3, 4, 5), 3);
 +        assertEquals(3, c.skipNext(4));
 +        compareElements(c);
 +        c = new LimitCursor<Element>(createElements(1, 2, 3, 4, 5), 100);
 +        assertEquals(4, c.skipNext(4));
 +        compareElements(c, 5);
 +        c = new LimitCursor<Element>(createElements(1, 2, 3, 4, 5), 0);
 +        assertEquals(0, c.skipNext(4));
 +        compareElements(c);
      }
      public void testUnion() throws Exception {
 diff --git a/src/test/java/com/amazon/carbonado/qe/TestCompositeScore.java b/src/test/java/com/amazon/carbonado/qe/TestCompositeScore.java new file mode 100644 index 0000000..74e0122 --- /dev/null +++ b/src/test/java/com/amazon/carbonado/qe/TestCompositeScore.java @@ -0,0 +1,76 @@ +/*
 + * Copyright 2007 Amazon Technologies, Inc. or its affiliates.
 + * Amazon, Amazon.com and Carbonado are trademarks or registered trademarks
 + * of Amazon Technologies, Inc. or its affiliates.  All rights reserved.
 + *
 + * Licensed under the Apache License, Version 2.0 (the "License");
 + * you may not use this file except in compliance with the License.
 + * You may obtain a copy of the License at
 + *
 + *     http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package com.amazon.carbonado.qe;
 +
 +import junit.framework.TestCase;
 +import junit.framework.TestSuite;
 +
 +import com.amazon.carbonado.info.StorableIndex;
 +
 +import com.amazon.carbonado.stored.StorableTestBasic;
 +
 +/**
 + * 
 + *
 + * @author Brian S O'Neill
 + */
 +public class TestCompositeScore extends TestCase {
 +    public static void main(String[] args) {
 +        junit.textui.TestRunner.run(suite());
 +    }
 +
 +    public static TestSuite suite() {
 +        return new TestSuite(TestCompositeScore.class);
 +    }
 +
 +    public TestCompositeScore(String name) {
 +        super(name);
 +    }
 +
 +    public void testRowRangeHint() throws Exception {
 +        StorableIndex<StorableTestBasic> ix_1, ix_2;
 +        ix_1 = TestFilteringScore.makeIndex(StorableTestBasic.class, "id").clustered(true);
 +        ix_2 = TestFilteringScore.makeIndex(StorableTestBasic.class, "stringProp");
 +
 +        OrderingList<StorableTestBasic> ordering = TestOrderingScore
 +            .makeOrdering(StorableTestBasic.class, "stringProp");
 +
 +        CompositeScore<StorableTestBasic> score_1 = CompositeScore.evaluate(ix_1, null, ordering);
 +        CompositeScore<StorableTestBasic> score_2 = CompositeScore.evaluate(ix_2, null, ordering);
 +
 +        int result_1 = CompositeScore.fullComparator().compare(score_1, score_2);
 +
 +        // Favor full scan and sort.
 +        assertTrue(result_1 < 0);
 +
 +        QueryHints hints = QueryHints.emptyHints().with(QueryHint.CONSUME_SLICE);
 +
 +        int result_2 = CompositeScore.fullComparator(hints).compare(score_1, score_2);
 +
 +        // Favor ordered index.
 +        assertTrue(result_2 > 0);
 +
 +        hints = hints.without(QueryHint.CONSUME_SLICE);
 +
 +        int result_3 = CompositeScore.fullComparator(hints).compare(score_1, score_2);
 +
 +        // Favor full scan without hint.
 +        assertTrue(result_3 < 0);
 +    }
 +}
 diff --git a/src/test/java/com/amazon/carbonado/qe/TestIndexedQueryAnalyzer.java b/src/test/java/com/amazon/carbonado/qe/TestIndexedQueryAnalyzer.java index 9316b34..ce773ec 100644 --- a/src/test/java/com/amazon/carbonado/qe/TestIndexedQueryAnalyzer.java +++ b/src/test/java/com/amazon/carbonado/qe/TestIndexedQueryAnalyzer.java @@ -44,8 +44,6 @@ import com.amazon.carbonado.filter.Filter;  import com.amazon.carbonado.filter.FilterValues;
  import com.amazon.carbonado.filter.PropertyFilter;
 -import com.amazon.carbonado.repo.toy.ToyRepository;
 -
  import com.amazon.carbonado.stored.Address;
  import com.amazon.carbonado.stored.Order;
  import com.amazon.carbonado.stored.OverIndexedUserAddress;
 @@ -82,7 +80,7 @@ public class TestIndexedQueryAnalyzer extends TestCase {          IndexedQueryAnalyzer iqa = new IndexedQueryAnalyzer(Address.class, RepoAccess.INSTANCE);
          Filter<Address> filter = Filter.filterFor(Address.class, "addressZip = ?");
          filter = filter.bind();
 -        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, null);
 +        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, null, null);
          assertFalse(result.handlesAnything());
          assertEquals(filter, result.getCompositeScore().getFilteringScore().getRemainderFilter());
 @@ -95,7 +93,7 @@ public class TestIndexedQueryAnalyzer extends TestCase {          IndexedQueryAnalyzer iqa = new IndexedQueryAnalyzer(Address.class, RepoAccess.INSTANCE);
          Filter<Address> filter = Filter.filterFor(Address.class, "addressID = ?");
          filter = filter.bind();
 -        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, null);
 +        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, null, null);
          assertTrue(result.handlesAnything());
          assertEquals(filter, result.getCompositeScore().getFilteringScore().getIdentityFilter());
 @@ -108,7 +106,7 @@ public class TestIndexedQueryAnalyzer extends TestCase {          IndexedQueryAnalyzer iqa = new IndexedQueryAnalyzer(Shipment.class, RepoAccess.INSTANCE);
          Filter<Shipment> filter = Filter.filterFor(Shipment.class, "shipmentID = ?");
          filter = filter.bind();
 -        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, null);
 +        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, null, null);
          assertTrue(result.handlesAnything());
          assertEquals(filter, result.getCompositeScore().getFilteringScore().getIdentityFilter());
 @@ -118,7 +116,7 @@ public class TestIndexedQueryAnalyzer extends TestCase {          filter = Filter.filterFor(Shipment.class, "orderID = ?");
          filter = filter.bind();
 -        result = iqa.analyze(filter, null);
 +        result = iqa.analyze(filter, null, null);
          assertTrue(result.handlesAnything());
          assertEquals(filter, result.getCompositeScore().getFilteringScore().getIdentityFilter());
 @@ -129,7 +127,7 @@ public class TestIndexedQueryAnalyzer extends TestCase {          filter = Filter.filterFor(Shipment.class, "orderID > ?");
          filter = filter.bind();
 -        result = iqa.analyze(filter, null);
 +        result = iqa.analyze(filter, null, null);
          assertTrue(result.handlesAnything());
          assertTrue(result.getCompositeScore().getFilteringScore().hasRangeStart());
 @@ -148,7 +146,7 @@ public class TestIndexedQueryAnalyzer extends TestCase {          IndexedQueryAnalyzer iqa = new IndexedQueryAnalyzer(Shipment.class, RepoAccess.INSTANCE);
          Filter<Shipment> filter = Filter.filterFor(Shipment.class, "order.orderTotal >= ?");
          filter = filter.bind();
 -        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, null);
 +        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, null, null);
          assertTrue(result.handlesAnything());
          assertTrue(result.getCompositeScore().getFilteringScore().hasRangeStart());
 @@ -164,7 +162,7 @@ public class TestIndexedQueryAnalyzer extends TestCase {          Filter<Shipment> filter = Filter.filterFor
              (Shipment.class, "shipmentNotes = ? & order.orderTotal >= ?");
          filter = filter.bind();
 -        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, null);
 +        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, null, null);
          assertTrue(result.handlesAnything());
          assertTrue(result.getCompositeScore().getFilteringScore().hasRangeStart());
 @@ -183,7 +181,7 @@ public class TestIndexedQueryAnalyzer extends TestCase {          Filter<Shipment> filter = Filter.filterFor
              (Shipment.class, "orderID >= ? & order.orderTotal >= ?");
          filter = filter.bind();
 -        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, null);
 +        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, null, null);
          assertTrue(result.handlesAnything());
          assertTrue(result.getCompositeScore().getFilteringScore().hasRangeStart());
 @@ -200,7 +198,7 @@ public class TestIndexedQueryAnalyzer extends TestCase {          Filter<Shipment> filter = Filter.filterFor
              (Shipment.class, "order.address.addressState = ?");
          filter = filter.bind();
 -        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, null);
 +        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, null, null);
          assertTrue(result.handlesAnything());
          assertEquals(filter, result.getCompositeScore().getFilteringScore().getIdentityFilter());
 @@ -217,7 +215,7 @@ public class TestIndexedQueryAnalyzer extends TestCase {              (Shipment.class, "order.address.addressState = ? & order.address.addressZip = ?");
          FilterValues<Shipment> values = filter.initialFilterValues();
          filter = values.getFilter();
 -        IndexedQueryAnalyzer<Shipment>.Result result = iqa.analyze(filter, null);
 +        IndexedQueryAnalyzer<Shipment>.Result result = iqa.analyze(filter, null, null);
          assertTrue(result.handlesAnything());
          assertEquals(Filter.filterFor(Shipment.class, "order.address.addressState = ?").bind(),
 @@ -231,7 +229,7 @@ public class TestIndexedQueryAnalyzer extends TestCase {          QueryExecutor<Shipment> joinExec = JoinedQueryExecutor.build
              (RepoAccess.INSTANCE,
 -             result.getForeignProperty(), result.getFilter(), result.getOrdering());
 +             result.getForeignProperty(), result.getFilter(), result.getOrdering(), null);
          FilterValues<Shipment> fv = values.with("WA").with("12345");
 @@ -273,7 +271,7 @@ public class TestIndexedQueryAnalyzer extends TestCase {          filter = values.getFilter();
          OrderingList<Shipment> ordering = OrderingList
              .get(Shipment.class, "order.address.addressCity", "shipmentNotes", "order.orderTotal");
 -        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, ordering);
 +        IndexedQueryAnalyzer.Result result = iqa.analyze(filter, ordering, null);
          assertTrue(result.handlesAnything());
          assertEquals(Filter.filterFor(Shipment.class, "order.address.addressState = ?").bind(),
 @@ -285,7 +283,7 @@ public class TestIndexedQueryAnalyzer extends TestCase {          QueryExecutor<Shipment> joinExec = JoinedQueryExecutor.build
              (RepoAccess.INSTANCE,
 -             result.getForeignProperty(), result.getFilter(), result.getOrdering());
 +             result.getForeignProperty(), result.getFilter(), result.getOrdering(), null);
          FilterValues<Shipment> fv =
              values.with("WA").with(45).with("12345").with(100).with("Z").with(2);
 @@ -346,7 +344,8 @@ public class TestIndexedQueryAnalyzer extends TestCase {              (OverIndexedUserAddress.class, "country > ? & city != ? & state = ? & postalCode = ?");
          FilterValues<OverIndexedUserAddress> values = filter.initialFilterValues();
          filter = values.getFilter();
 -        IndexedQueryAnalyzer<OverIndexedUserAddress>.Result result = iqa.analyze(filter, null);
 +        IndexedQueryAnalyzer<OverIndexedUserAddress>.Result result =
 +            iqa.analyze(filter, null, null);
          QueryExecutor<OverIndexedUserAddress> qe = result.createExecutor();
 @@ -398,7 +397,9 @@ public class TestIndexedQueryAnalyzer extends TestCase {              return this;
          }
 -        public QueryExecutor<S> executor(Filter<S> filter, OrderingList<S> ordering) {
 +        public QueryExecutor<S> executor(Filter<S> filter, OrderingList<S> ordering,
 +                                         QueryHints hints)
 +        {
              Iterable<S> iterable = Collections.emptyList();
              QueryExecutor<S> exec = new IterableQueryExecutor<S>
 diff --git a/src/test/java/com/amazon/carbonado/qe/TestJoinedQueryExecutor.java b/src/test/java/com/amazon/carbonado/qe/TestJoinedQueryExecutor.java index 324af75..a6c133c 100644 --- a/src/test/java/com/amazon/carbonado/qe/TestJoinedQueryExecutor.java +++ b/src/test/java/com/amazon/carbonado/qe/TestJoinedQueryExecutor.java @@ -93,7 +93,7 @@ public class TestJoinedQueryExecutor extends TestQueryExecutor {              OrderingList.get(UserInfo.class, "+address.country");
          QueryExecutor<UserInfo> userExecutor = JoinedQueryExecutor.build
 -            (repoAccess, targetToSourceProperty, targetFilter, targetOrdering);
 +            (repoAccess, targetToSourceProperty, targetFilter, targetOrdering, null);
          //System.out.println();
          //userExecutor.printPlan(System.out, 0, null);
 @@ -176,7 +176,7 @@ public class TestJoinedQueryExecutor extends TestQueryExecutor {          targetOrdering = OrderingList.get(UserInfo.class, "+address.neighbor.country");
          userExecutor = JoinedQueryExecutor.build
 -            (repoAccess, targetToSourceProperty, targetFilter, targetOrdering);
 +            (repoAccess, targetToSourceProperty, targetFilter, targetOrdering, null);
          assertEquals("address.neighbor.state = ?", userExecutor.getFilter().toString());
          assertEquals("+address.neighbor.country", userExecutor.getOrdering().get(0).toString());
 @@ -219,7 +219,8 @@ public class TestJoinedQueryExecutor extends TestQueryExecutor {              return this;
          }
 -        public QueryExecutor<S> executor(Filter<S> filter, OrderingList<S> ordering)
 +        public QueryExecutor<S> executor(Filter<S> filter, OrderingList<S> ordering,
 +                                         QueryHints hints)
              throws RepositoryException
          {
              Storage<S> storage = mRepository.storageFor(mType);
 diff --git a/src/test/java/com/amazon/carbonado/qe/TestUnionQueryAnalyzer.java b/src/test/java/com/amazon/carbonado/qe/TestUnionQueryAnalyzer.java index 69a0aa4..8b1ce5a 100644 --- a/src/test/java/com/amazon/carbonado/qe/TestUnionQueryAnalyzer.java +++ b/src/test/java/com/amazon/carbonado/qe/TestUnionQueryAnalyzer.java @@ -33,8 +33,6 @@ import com.amazon.carbonado.filter.Filter;  import com.amazon.carbonado.filter.FilterValues;
  import com.amazon.carbonado.filter.PropertyFilter;
 -import com.amazon.carbonado.repo.toy.ToyRepository;
 -
  import com.amazon.carbonado.stored.Address;
  import com.amazon.carbonado.stored.Order;
  import com.amazon.carbonado.stored.OverIndexedUserAddress;
 @@ -73,7 +71,7 @@ public class TestUnionQueryAnalyzer extends TestCase {      public void testNullFilter() throws Exception {
          UnionQueryAnalyzer uqa =
              new UnionQueryAnalyzer(Shipment.class, TestIndexedQueryAnalyzer.RepoAccess.INSTANCE);
 -        UnionQueryAnalyzer.Result result = uqa.analyze(null, null);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(null, null, null);
          List<IndexedQueryAnalyzer<Shipment>.Result> subResults = result.getSubResults();
          assertEquals(1, subResults.size());
 @@ -84,7 +82,7 @@ public class TestUnionQueryAnalyzer extends TestCase {              new UnionQueryAnalyzer(Shipment.class, TestIndexedQueryAnalyzer.RepoAccess.INSTANCE);
          Filter<Shipment> filter = Filter.filterFor(Shipment.class, "shipmentID = ?");
          filter = filter.bind();
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null, null);
          List<IndexedQueryAnalyzer<Shipment>.Result> subResults = result.getSubResults();
          assertEquals(1, subResults.size());
 @@ -97,7 +95,7 @@ public class TestUnionQueryAnalyzer extends TestCase {          filter = filter.bind();
          OrderingList<Shipment> orderings =
              makeOrdering(Shipment.class, "~shipmentID", "~orderID");
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, orderings);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, orderings, null);
          List<IndexedQueryAnalyzer<Shipment>.Result> subResults = result.getSubResults();
          assertEquals(1, subResults.size());
 @@ -113,7 +111,7 @@ public class TestUnionQueryAnalyzer extends TestCase {          Filter<Shipment> filter = Filter.filterFor(Shipment.class,
                                                     "shipmentID = ? | orderID = ?");
          filter = filter.bind();
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null, null);
          assertEquals(OrderingList.get(Shipment.class, "+shipmentID"), result.getTotalOrdering());
          List<IndexedQueryAnalyzer<Shipment>.Result> subResults = result.getSubResults();
 @@ -146,7 +144,7 @@ public class TestUnionQueryAnalyzer extends TestCase {          Filter<Shipment> filter = Filter.filterFor(Shipment.class,
                                                     "shipmentID = ? | orderID > ?");
          filter = filter.bind();
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null, null);
          assertEquals(OrderingList.get(Shipment.class, "+shipmentID"), result.getTotalOrdering());
          List<IndexedQueryAnalyzer<Shipment>.Result> subResults = result.getSubResults();
 @@ -179,7 +177,7 @@ public class TestUnionQueryAnalyzer extends TestCase {          Filter<Shipment> filter = Filter.filterFor(Shipment.class,
                                                     "shipmentID = ? | orderID > ? & orderID <= ?");
          filter = filter.bind();
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null, null);
          assertEquals(OrderingList.get(Shipment.class, "+shipmentID"), result.getTotalOrdering());
          List<IndexedQueryAnalyzer<Shipment>.Result> subResults = result.getSubResults();
 @@ -223,7 +221,7 @@ public class TestUnionQueryAnalyzer extends TestCase {          filter = filter.bind();
          OrderingList<Shipment> orderings =
              makeOrdering(Shipment.class, "~shipmentID", "~orderID");
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, orderings);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, orderings, null);
          assertEquals(OrderingList.get(Shipment.class, "+shipmentID", "+orderID"),
                       result.getTotalOrdering());
          List<IndexedQueryAnalyzer<Shipment>.Result> subResults = result.getSubResults();
 @@ -269,7 +267,7 @@ public class TestUnionQueryAnalyzer extends TestCase {              (Shipment.class,
               "shipmentID = ? & (shipmentID = ? | orderID = ?)");
          filter = filter.bind();
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null, null);
          List<IndexedQueryAnalyzer<Shipment>.Result> subResults = result.getSubResults();
          assertEquals(1, subResults.size());
 @@ -297,7 +295,7 @@ public class TestUnionQueryAnalyzer extends TestCase {              (OverIndexedUserAddress.class,
               "city = ? & (city = ? | line1 = ?)");
          filter = filter.bind();
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null, null);
          List<IndexedQueryAnalyzer<OverIndexedUserAddress>.Result> subResults =
              result.getSubResults();
 @@ -329,7 +327,7 @@ public class TestUnionQueryAnalyzer extends TestCase {          Filter<Shipment> filter = Filter.filterFor
              (Shipment.class, "shipmentNotes = ? | shipperID = ?");
          filter = filter.bind();
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null, null);
          List<IndexedQueryAnalyzer<Shipment>.Result> subResults = result.getSubResults();
          assertEquals(1, subResults.size());
 @@ -351,7 +349,7 @@ public class TestUnionQueryAnalyzer extends TestCase {          Filter<Shipment> filter = Filter.filterFor
              (Shipment.class, "shipmentNotes = ? | orderID = ?");
          filter = filter.bind();
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null, null);
          List<IndexedQueryAnalyzer<Shipment>.Result> subResults = result.getSubResults();
          assertEquals(1, subResults.size());
 @@ -373,7 +371,7 @@ public class TestUnionQueryAnalyzer extends TestCase {          Filter<Shipment> filter = Filter.filterFor
              (Shipment.class, "shipmentNotes = ? | orderID = ? & order.orderTotal > ?");
          filter = filter.bind();
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null, null);
          List<IndexedQueryAnalyzer<Shipment>.Result> subResults = result.getSubResults();
          assertEquals(2, subResults.size());
 @@ -406,7 +404,7 @@ public class TestUnionQueryAnalyzer extends TestCase {          Filter<StorableTestBasic> filter = Filter.filterFor
              (StorableTestBasic.class, "doubleProp = ? | (stringProp = ? & intProp = ?) | id > ?");
          filter = filter.bind();
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null, null);
          assertEquals(OrderingList.get(StorableTestBasic.class, "+id"), result.getTotalOrdering());
          QueryExecutor<StorableTestBasic> exec = result.createExecutor();
 @@ -446,7 +444,7 @@ public class TestUnionQueryAnalyzer extends TestCase {          Filter<StorableTestBasic> filter = Filter.filterFor
              (StorableTestBasic.class, "doubleProp = ? | stringProp = ?");
          filter = filter.bind();
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null, null);
          assertEquals(OrderingList.get(StorableTestBasic.class, "+doubleProp", "+stringProp"),
                       result.getTotalOrdering());
 @@ -485,7 +483,7 @@ public class TestUnionQueryAnalyzer extends TestCase {          Filter<StorableTestBasic> filter = Filter.filterFor
              (StorableTestBasic.class, "stringProp = ? | stringProp = ?");
          filter = filter.bind();
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null, null);
          assertEquals(OrderingList.get(StorableTestBasic.class, "+stringProp", "+doubleProp"),
                       result.getTotalOrdering());
 @@ -521,7 +519,7 @@ public class TestUnionQueryAnalyzer extends TestCase {          Filter<StorableTestBasic> filter = Filter.filterFor
              (StorableTestBasic.class, "doubleProp = ? | stringProp = ? | id > ?");
          filter = filter.bind();
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null, null);
          assertEquals(OrderingList.get(StorableTestBasic.class, "+doubleProp", "+id"),
                       result.getTotalOrdering());
 @@ -565,7 +563,7 @@ public class TestUnionQueryAnalyzer extends TestCase {          Filter<StorableTestBasic> filter = Filter.filterFor
              (StorableTestBasic.class, "stringProp = ? | stringProp = ? | id > ?");
          filter = filter.bind();
 -        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null);
 +        UnionQueryAnalyzer.Result result = uqa.analyze(filter, null, null);
          assertEquals(OrderingList.get(StorableTestBasic.class, "+stringProp", "+doubleProp"),
                       result.getTotalOrdering());
 diff --git a/src/test/java/com/amazon/carbonado/repo/toy/ToyStorage.java b/src/test/java/com/amazon/carbonado/repo/toy/ToyStorage.java index b37e685..f4e2780 100644 --- a/src/test/java/com/amazon/carbonado/repo/toy/ToyStorage.java +++ b/src/test/java/com/amazon/carbonado/repo/toy/ToyStorage.java @@ -54,6 +54,7 @@ import com.amazon.carbonado.info.StorableIntrospector;  import com.amazon.carbonado.qe.QueryExecutorFactory;
  import com.amazon.carbonado.qe.QueryFactory;
 +import com.amazon.carbonado.qe.QueryHints;
  import com.amazon.carbonado.qe.SortedQueryExecutor;
  import com.amazon.carbonado.qe.FilteredQueryExecutor;
  import com.amazon.carbonado.qe.IterableQueryExecutor;
 @@ -103,7 +104,7 @@ public class ToyStorage<S extends Storable>      }
      public Query<S> query() {
 -        return new ToyQuery(null, null, null, null);
 +        return new ToyQuery(null, null, null);
      }
      public Query<S> query(String filter) {
 @@ -111,14 +112,18 @@ public class ToyStorage<S extends Storable>      }
      public Query<S> query(Filter<S> filter) {
 -        return new ToyQuery(filter, null, null, null);
 +        return new ToyQuery(filter, null, null);
      }
 -    public Query<S> query(Filter<S> filter, FilterValues<S> values, OrderingList<S> ordering) {
 -        return new ToyQuery(filter, values, ordering, null);
 +    public Query<S> query(Filter<S> filter, FilterValues<S> values, OrderingList<S> ordering,
 +                          QueryHints hints)
 +    {
 +        return new ToyQuery(filter, values, ordering);
      }
 -    public QueryExecutor<S> executor(Filter<S> filter, OrderingList<S> ordering) {
 +    public QueryExecutor<S> executor(Filter<S> filter, OrderingList<S> ordering,
 +                                     QueryHints hints)
 +    {
          QueryExecutor<S> executor = new IterableQueryExecutor<S>(mType, mData, mDataLock);
          if (filter != null) {
 @@ -269,10 +274,9 @@ public class ToyStorage<S extends Storable>      private class ToyQuery extends StandardQuery<S> {
          ToyQuery(Filter<S> filter,
                   FilterValues<S> values,
 -                 OrderingList<S> ordering,
 -                 QueryExecutor<S> executor)
 +                 OrderingList<S> ordering)
          {
 -            super(filter, values, ordering, executor);
 +            super(filter, values, ordering, null);
          }
          protected Transaction enterTransaction(IsolationLevel level) {
 @@ -289,9 +293,9 @@ public class ToyStorage<S extends Storable>          protected StandardQuery<S> newInstance(FilterValues<S> values,
                                                 OrderingList<S> ordering,
 -                                               QueryExecutor<S> executor)
 +                                               QueryHints hints)
          {
 -            return new ToyQuery(values.getFilter(), values, ordering, executor);
 +            return new ToyQuery(values.getFilter(), values, ordering);
          }
      }
  }
  | 
