summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian S. O'Neill <bronee@gmail.com>2007-03-31 18:28:22 +0000
committerBrian S. O'Neill <bronee@gmail.com>2007-03-31 18:28:22 +0000
commit518a7f8bd19d8ab635596f37c2263668d928f616 (patch)
treecb89f76af16db7361f3c396e4c2b17977bb7ed04
parentcd3aadc9a18c7a3f13dde27b11a29c33574ce61d (diff)
Consider weak matches in filtering score.
-rw-r--r--src/test/java/com/amazon/carbonado/qe/TestFilteringScore.java60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/test/java/com/amazon/carbonado/qe/TestFilteringScore.java b/src/test/java/com/amazon/carbonado/qe/TestFilteringScore.java
index e6b4374..c4b6afe 100644
--- a/src/test/java/com/amazon/carbonado/qe/TestFilteringScore.java
+++ b/src/test/java/com/amazon/carbonado/qe/TestFilteringScore.java
@@ -79,6 +79,8 @@ public class TestFilteringScore extends TestCase {
assertFalse(score.hasAnyMatches());
assertEquals(0, score.getRemainderCount());
assertEquals(0, score.getRemainderFilters().size());
+ assertEquals(0, score.getWeakMatchCount());
+ assertEquals(0, score.getWeakMatchFilters().size());
}
public void testSimpleIndexMisses() throws Exception {
@@ -103,6 +105,8 @@ public class TestFilteringScore extends TestCase {
assertEquals(1, score.getRemainderFilters().size());
assertEquals(filter, score.getRemainderFilters().get(0));
assertEquals(filter, score.getRemainderFilter());
+ assertEquals(0, score.getWeakMatchCount());
+ assertEquals(0, score.getWeakMatchFilters().size());
// Try again with matching property, but with an operator that cannot be used by index.
filter = Filter.filterFor(StorableTestBasic.class, "intProp != ?");
@@ -124,6 +128,12 @@ public class TestFilteringScore extends TestCase {
assertEquals(1, score.getRemainderFilters().size());
assertEquals(filter, score.getRemainderFilters().get(0));
assertEquals(filter, score.getRemainderFilter());
+
+ // Can be weakly used, however.
+ assertEquals(1, score.getWeakMatchCount());
+ assertEquals(1, score.getWeakMatchFilters().size());
+ assertEquals(filter, score.getWeakMatchFilters().get(0));
+ assertEquals(filter, score.getWeakMatchFilter());
}
public void testSimpleIndexMatches() throws Exception {
@@ -148,6 +158,9 @@ public class TestFilteringScore extends TestCase {
assertEquals(0, score.getRemainderCount());
assertEquals(0, score.getRemainderFilters().size());
assertEquals(null, score.getRemainderFilter());
+ assertEquals(0, score.getWeakMatchCount());
+ assertEquals(0, score.getWeakMatchFilters().size());
+ assertEquals(null, score.getWeakMatchRemainderFilter());
// Try again with open ranges.
for (int i=0; i<4; i++) {
@@ -170,6 +183,9 @@ public class TestFilteringScore extends TestCase {
assertEquals(0, score.getRemainderCount());
assertEquals(0, score.getRemainderFilters().size());
assertEquals(null, score.getRemainderFilter());
+ assertEquals(0, score.getWeakMatchCount());
+ assertEquals(0, score.getWeakMatchFilters().size());
+ assertEquals(null, score.getWeakMatchRemainderFilter());
if (i < 2) {
assertTrue(score.hasRangeStart());
@@ -198,6 +214,9 @@ public class TestFilteringScore extends TestCase {
assertEquals(0, score.getRemainderCount());
assertEquals(0, score.getRemainderFilters().size());
assertEquals(null, score.getRemainderFilter());
+ assertEquals(0, score.getWeakMatchCount());
+ assertEquals(0, score.getWeakMatchFilters().size());
+ assertEquals(null, score.getWeakMatchRemainderFilter());
assertTrue(score.hasRangeStart());
assertEquals(2, score.getRangeStartFilters().size());
@@ -220,6 +239,9 @@ public class TestFilteringScore extends TestCase {
assertEquals(0, score.getRemainderCount());
assertEquals(0, score.getRemainderFilters().size());
assertEquals(null, score.getRemainderFilter());
+ assertEquals(0, score.getWeakMatchCount());
+ assertEquals(0, score.getWeakMatchFilters().size());
+ assertEquals(null, score.getWeakMatchRemainderFilter());
assertFalse(score.hasRangeStart());
assertEquals(0, score.getRangeStartFilters().size());
@@ -242,6 +264,9 @@ public class TestFilteringScore extends TestCase {
assertEquals(0, score.getRemainderCount());
assertEquals(0, score.getRemainderFilters().size());
assertEquals(null, score.getRemainderFilter());
+ assertEquals(0, score.getWeakMatchCount());
+ assertEquals(0, score.getWeakMatchFilters().size());
+ assertEquals(null, score.getWeakMatchRemainderFilter());
assertTrue(score.hasRangeStart());
assertEquals(1, score.getRangeStartFilters().size());
@@ -329,6 +354,9 @@ public class TestFilteringScore extends TestCase {
assertEquals(0, score.getRemainderCount());
assertEquals(0, score.getRemainderFilters().size());
assertEquals(null, score.getRemainderFilter());
+ assertEquals(0, score.getWeakMatchCount());
+ assertEquals(0, score.getWeakMatchFilters().size());
+ assertEquals(null, score.getWeakMatchRemainderFilter());
// Filter by a property with a gap. (filter must include "id" to use index)
filter = Filter.filterFor(StorableTestBasic.class, "intProp = ?");
@@ -341,6 +369,11 @@ public class TestFilteringScore extends TestCase {
assertEquals(1, score.getRemainderFilters().size());
assertEquals(filter, score.getRemainderFilter());
+ // Can be weakly used, however.
+ assertEquals(1, score.getWeakMatchCount());
+ assertEquals(1, score.getWeakMatchFilters().size());
+ assertEquals(filter, score.getWeakMatchFilter());
+
// Filter by a property with a gap and a range operator. (index still cannot be used)
filter = Filter.filterFor(StorableTestBasic.class, "intProp = ? & stringProp < ?");
@@ -352,6 +385,11 @@ public class TestFilteringScore extends TestCase {
assertEquals(2, score.getRemainderFilters().size());
assertEquals(filter, score.getRemainderFilter());
+ // Can be weakly used, however.
+ assertEquals(2, score.getWeakMatchCount());
+ assertEquals(2, score.getWeakMatchFilters().size());
+ assertEquals(filter, score.getWeakMatchFilter());
+
// Filter with range match before identity match. Identity cannot be used.
filter = Filter.filterFor(StorableTestBasic.class, "intProp = ? & id < ?");
@@ -370,6 +408,12 @@ public class TestFilteringScore extends TestCase {
assertEquals(Filter.filterFor(StorableTestBasic.class, "intProp = ?"),
score.getRemainderFilter());
+ // Can be weakly used, however.
+ assertEquals(1, score.getWeakMatchCount());
+ assertEquals(1, score.getWeakMatchFilters().size());
+ assertEquals(Filter.filterFor(StorableTestBasic.class, "intProp = ?"),
+ score.getWeakMatchFilter());
+
// Filter with fully specified identity match, but a few remaining.
filter = Filter.filterFor
(StorableTestBasic.class,
@@ -396,6 +440,15 @@ public class TestFilteringScore extends TestCase {
assertEquals(Filter.filterFor(StorableTestBasic.class, "stringProp > ?"),
score.getRemainderFilters().get(1));
+ // Weakly match other use of stringProp.
+ assertEquals(1, score.getWeakMatchCount());
+ assertEquals(1, score.getWeakMatchFilters().size());
+ assertEquals(Filter.filterFor(StorableTestBasic.class, "stringProp > ?"),
+ score.getWeakMatchFilters().get(0));
+
+ assertEquals(Filter.filterFor(StorableTestBasic.class, "doubleProp = ?"),
+ score.getWeakMatchRemainderFilter());
+
// Filter with identity and range matches.
filter = Filter.filterFor
(StorableTestBasic.class,
@@ -418,6 +471,13 @@ public class TestFilteringScore extends TestCase {
assertEquals(Filter.filterFor(StorableTestBasic.class, "stringProp < ?"),
score.getRemainderFilters().get(2));
+ assertEquals(2, score.getWeakMatchCount());
+ assertEquals(2, score.getWeakMatchFilters().size());
+ assertEquals(Filter.filterFor(StorableTestBasic.class, "stringProp = ?"),
+ score.getWeakMatchFilters().get(0));
+ assertEquals(Filter.filterFor(StorableTestBasic.class, "stringProp < ?"),
+ score.getWeakMatchFilters().get(1));
+
assertTrue(score.hasRangeMatch());
assertTrue(score.hasRangeStart());
assertEquals(1, score.getRangeStartFilters().size());