aboutsummaryrefslogtreecommitdiffstats
path: root/vsm
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-05-03 21:32:17 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2017-05-03 21:32:17 +0200
commit7fde613086507baf449990707e3ed600d442e8a2 (patch)
treedd92d4cea6b5e19489d9cff6fdd7cebbc569fa7d /vsm
parentde7d68c6ac40e7ee840f8872d1fe6ff1b691c4e6 (diff)
Clear array before prepare to avoid crash on reuse.
Diffstat (limited to 'vsm')
-rw-r--r--vsm/src/tests/searcher/searcher.cpp118
-rw-r--r--vsm/src/vespa/vsm/searcher/floatfieldsearcher.cpp21
-rw-r--r--vsm/src/vespa/vsm/searcher/intfieldsearcher.cpp25
3 files changed, 83 insertions, 81 deletions
diff --git a/vsm/src/tests/searcher/searcher.cpp b/vsm/src/tests/searcher/searcher.cpp
index 3d1f6939887..8bde7dce7e0 100644
--- a/vsm/src/tests/searcher/searcher.cpp
+++ b/vsm/src/tests/searcher/searcher.cpp
@@ -598,70 +598,70 @@ TEST("utf8 flexible searcher"){
TEST("integer search")
{
IntFieldSearcher fs;
- assertInt(fs, "10", 10, true);
- assertInt(fs, "9", 10, false);
- assertInt(fs, ">9", 10, true);
- assertInt(fs, ">9", 9, false);
- assertInt(fs, "<11", 10, true);
- assertInt(fs, "<11", 11, false);
- assertInt(fs, "-10", -10, true);
- assertInt(fs, "-9", -10, false);
- assertInt(fs, "a", 10, false);
- assertInt(fs, "[-5;5]", -5, true);
- assertInt(fs, "[-5;5]", 0, true);
- assertInt(fs, "[-5;5]", 5, true);
- assertInt(fs, "[-5;5]", -6, false);
- assertInt(fs, "[-5;5]", 6, false);
-
- assertInt(fs, StringList().add("9").add("11"), 10, BoolList().add(false).add(false));
- assertInt(fs, StringList().add("9").add("10"), 10, BoolList().add(false).add(true));
- assertInt(fs, StringList().add("10").add(">9"), 10, BoolList().add(true).add(true));
-
- assertInt(fs, "10", LongList().add(10).add(20).add(10).add(30), Hits().add(0).add(2));
- assertInt(fs, StringList().add("10").add("20"), LongList().add(10).add(20).add(10).add(30),
- HitsList().add(Hits().add(0).add(2)).add(Hits().add(1)));
-
- assertFieldInfo(fs, "10", 10, QTFieldInfo(0, 1, 1));
- assertFieldInfo(fs, "10", LongList().add(10).add(20).add(10).add(30), QTFieldInfo(0, 2, 4));
- assertFieldInfo(fs, StringList().add("10").add("20"), 10,
- FieldInfoList().add(QTFieldInfo(0, 1, 1)).add(QTFieldInfo(0, 0, 1)));
- assertFieldInfo(fs, StringList().add("10").add("20"), LongList().add(10).add(20).add(10).add(30),
- FieldInfoList().add(QTFieldInfo(0, 2, 4)).add(QTFieldInfo(0, 1, 4)));
+ TEST_DO(assertInt(fs, "10", 10, true));
+ TEST_DO(assertInt(fs, "9", 10, false));
+ TEST_DO(assertInt(fs, ">9", 10, true));
+ TEST_DO(assertInt(fs, ">9", 9, false));
+ TEST_DO(assertInt(fs, "<11", 10, true));
+ TEST_DO(assertInt(fs, "<11", 11, false));
+ TEST_DO(assertInt(fs, "-10", -10, true));
+ TEST_DO(assertInt(fs, "-9", -10, false));
+ TEST_DO(assertInt(fs, "a", 10, false));
+ TEST_DO(assertInt(fs, "[-5;5]", -5, true));
+ TEST_DO(assertInt(fs, "[-5;5]", 0, true));
+ TEST_DO(assertInt(fs, "[-5;5]", 5, true));
+ TEST_DO(assertInt(fs, "[-5;5]", -6, false));
+ TEST_DO(assertInt(fs, "[-5;5]", 6, false));
+
+ TEST_DO(assertInt(fs, StringList().add("9").add("11"), 10, BoolList().add(false).add(false)));
+ TEST_DO(assertInt(fs, StringList().add("9").add("10"), 10, BoolList().add(false).add(true)));
+ TEST_DO(assertInt(fs, StringList().add("10").add(">9"), 10, BoolList().add(true).add(true)));
+
+ TEST_DO(assertInt(fs, "10", LongList().add(10).add(20).add(10).add(30), Hits().add(0).add(2)));
+ TEST_DO(assertInt(fs, StringList().add("10").add("20"), LongList().add(10).add(20).add(10).add(30),
+ HitsList().add(Hits().add(0).add(2)).add(Hits().add(1))));
+
+ TEST_DO(assertFieldInfo(fs, "10", 10, QTFieldInfo(0, 1, 1)));
+ TEST_DO(assertFieldInfo(fs, "10", LongList().add(10).add(20).add(10).add(30), QTFieldInfo(0, 2, 4)));
+ TEST_DO(assertFieldInfo(fs, StringList().add("10").add("20"), 10,
+ FieldInfoList().add(QTFieldInfo(0, 1, 1)).add(QTFieldInfo(0, 0, 1))));
+ TEST_DO(assertFieldInfo(fs, StringList().add("10").add("20"), LongList().add(10).add(20).add(10).add(30),
+ FieldInfoList().add(QTFieldInfo(0, 2, 4)).add(QTFieldInfo(0, 1, 4))));
}
TEST("floating point search")
{
FloatFieldSearcher fs;
- assertFloat(fs, "10", 10, true);
- assertFloat(fs, "10.5", 10.5, true);
- assertFloat(fs, "-10.5", -10.5, true);
- assertFloat(fs, ">10.5", 10.6, true);
- assertFloat(fs, ">10.5", 10.5, false);
- assertFloat(fs, "<10.5", 10.4, true);
- assertFloat(fs, "<10.5", 10.5, false);
- assertFloat(fs, "10.4", 10.5, false);
- assertFloat(fs, "-10.4", -10.5, false);
- assertFloat(fs, "a", 10.5, false);
- assertFloat(fs, "[-5.5;5.5]", -5.5, true);
- assertFloat(fs, "[-5.5;5.5]", 0, true);
- assertFloat(fs, "[-5.5;5.5]", 5.5, true);
- assertFloat(fs, "[-5.5;5.5]", -5.6, false);
- assertFloat(fs, "[-5.5;5.5]", 5.6, false);
-
- assertFloat(fs, StringList().add("10").add("11"), 10.5, BoolList().add(false).add(false));
- assertFloat(fs, StringList().add("10").add("10.5"), 10.5, BoolList().add(false).add(true));
- assertFloat(fs, StringList().add(">10.4").add("10.5"), 10.5, BoolList().add(true).add(true));
-
- assertFloat(fs, "10.5", FloatList().add(10.5).add(20.5).add(10.5).add(30.5), Hits().add(0).add(2));
- assertFloat(fs, StringList().add("10.5").add("20.5"), FloatList().add(10.5).add(20.5).add(10.5).add(30.5),
- HitsList().add(Hits().add(0).add(2)).add(Hits().add(1)));
-
- assertFieldInfo(fs, "10.5", 10.5, QTFieldInfo(0, 1, 1));
- assertFieldInfo(fs, "10.5", FloatList().add(10.5).add(20.5).add(10.5).add(30.5), QTFieldInfo(0, 2, 4));
- assertFieldInfo(fs, StringList().add("10.5").add("20.5"), 10.5,
- FieldInfoList().add(QTFieldInfo(0, 1, 1)).add(QTFieldInfo(0, 0, 1)));
- assertFieldInfo(fs, StringList().add("10.5").add("20.5"), FloatList().add(10.5).add(20.5).add(10.5).add(30.5),
- FieldInfoList().add(QTFieldInfo(0, 2, 4)).add(QTFieldInfo(0, 1, 4)));
+ TEST_DO(assertFloat(fs, "10", 10, true));
+ TEST_DO(assertFloat(fs, "10.5", 10.5, true));
+ TEST_DO(assertFloat(fs, "-10.5", -10.5, true));
+ TEST_DO(assertFloat(fs, ">10.5", 10.6, true));
+ TEST_DO(assertFloat(fs, ">10.5", 10.5, false));
+ TEST_DO(assertFloat(fs, "<10.5", 10.4, true));
+ TEST_DO(assertFloat(fs, "<10.5", 10.5, false));
+ TEST_DO(assertFloat(fs, "10.4", 10.5, false));
+ TEST_DO(assertFloat(fs, "-10.4", -10.5, false));
+ TEST_DO(assertFloat(fs, "a", 10.5, false));
+ TEST_DO(assertFloat(fs, "[-5.5;5.5]", -5.5, true));
+ TEST_DO(assertFloat(fs, "[-5.5;5.5]", 0, true));
+ TEST_DO(assertFloat(fs, "[-5.5;5.5]", 5.5, true));
+ TEST_DO(assertFloat(fs, "[-5.5;5.5]", -5.6, false));
+ TEST_DO(assertFloat(fs, "[-5.5;5.5]", 5.6, false));
+
+ TEST_DO(assertFloat(fs, StringList().add("10").add("11"), 10.5, BoolList().add(false).add(false)));
+ TEST_DO(assertFloat(fs, StringList().add("10").add("10.5"), 10.5, BoolList().add(false).add(true)));
+ TEST_DO(assertFloat(fs, StringList().add(">10.4").add("10.5"), 10.5, BoolList().add(true).add(true)));
+
+ TEST_DO(assertFloat(fs, "10.5", FloatList().add(10.5).add(20.5).add(10.5).add(30.5), Hits().add(0).add(2)));
+ TEST_DO(assertFloat(fs, StringList().add("10.5").add("20.5"), FloatList().add(10.5).add(20.5).add(10.5).add(30.5),
+ HitsList().add(Hits().add(0).add(2)).add(Hits().add(1))));
+
+ TEST_DO(assertFieldInfo(fs, "10.5", 10.5, QTFieldInfo(0, 1, 1)));
+ TEST_DO(assertFieldInfo(fs, "10.5", FloatList().add(10.5).add(20.5).add(10.5).add(30.5), QTFieldInfo(0, 2, 4)));
+ TEST_DO(assertFieldInfo(fs, StringList().add("10.5").add("20.5"), 10.5,
+ FieldInfoList().add(QTFieldInfo(0, 1, 1)).add(QTFieldInfo(0, 0, 1))));
+ TEST_DO(assertFieldInfo(fs, StringList().add("10.5").add("20.5"), FloatList().add(10.5).add(20.5).add(10.5).add(30.5),
+ FieldInfoList().add(QTFieldInfo(0, 2, 4)).add(QTFieldInfo(0, 1, 4))));
}
TEST("Snippet modifier search") {
diff --git a/vsm/src/vespa/vsm/searcher/floatfieldsearcher.cpp b/vsm/src/vespa/vsm/searcher/floatfieldsearcher.cpp
index eb18e99fc58..6abfac2dc1e 100644
--- a/vsm/src/vespa/vsm/searcher/floatfieldsearcher.cpp
+++ b/vsm/src/vespa/vsm/searcher/floatfieldsearcher.cpp
@@ -12,8 +12,8 @@ IMPLEMENT_DUPLICATE(DoubleFieldSearcher);
template<typename T>
FloatFieldSearcherT<T>::FloatFieldSearcherT(FieldIdT fId) :
- FieldSearcher(fId),
- _floatTerm()
+ FieldSearcher(fId),
+ _floatTerm()
{}
template<typename T>
@@ -22,17 +22,18 @@ FloatFieldSearcherT<T>::~FloatFieldSearcherT() {}
template<typename T>
void FloatFieldSearcherT<T>::prepare(QueryTermList & qtl, const SharedSearcherBuf & buf)
{
- FieldSearcher::prepare(qtl, buf);
- for (QueryTermList::const_iterator it=qtl.begin(); it < qtl.end(); it++) {
+ _floatTerm.clear();
+ FieldSearcher::prepare(qtl, buf);
+ for (QueryTermList::const_iterator it=qtl.begin(); it < qtl.end(); it++) {
const QueryTerm * qt = *it;
size_t sz(qt->termLen());
- if (sz) {
- double low;
- double high;
- bool valid = qt->getAsDoubleTerm(low, high);
- _floatTerm.push_back(FloatInfo(low, high, valid));
+ if (sz) {
+ double low;
+ double high;
+ bool valid = qt->getAsDoubleTerm(low, high);
+ _floatTerm.push_back(FloatInfo(low, high, valid));
+ }
}
- }
}
diff --git a/vsm/src/vespa/vsm/searcher/intfieldsearcher.cpp b/vsm/src/vespa/vsm/searcher/intfieldsearcher.cpp
index eaa3110f821..9fc15cf919a 100644
--- a/vsm/src/vespa/vsm/searcher/intfieldsearcher.cpp
+++ b/vsm/src/vespa/vsm/searcher/intfieldsearcher.cpp
@@ -9,25 +9,26 @@ namespace vsm {
IMPLEMENT_DUPLICATE(IntFieldSearcher);
IntFieldSearcher::IntFieldSearcher(FieldIdT fId) :
- FieldSearcher(fId),
- _intTerm()
+ FieldSearcher(fId),
+ _intTerm()
{ }
IntFieldSearcher::~IntFieldSearcher() {}
void IntFieldSearcher::prepare(QueryTermList & qtl, const SharedSearcherBuf & buf)
{
- FieldSearcher::prepare(qtl, buf);
- for (QueryTermList::const_iterator it=qtl.begin(); it < qtl.end(); it++) {
- const QueryTerm * qt = *it;
- size_t sz(qt->termLen());
- if (sz) {
- int64_t low;
- int64_t high;
- bool valid = qt->getAsIntegerTerm(low, high);
- _intTerm.push_back(IntInfo(low, high, valid));
+ _intTerm.clear();
+ FieldSearcher::prepare(qtl, buf);
+ for (QueryTermList::const_iterator it=qtl.begin(); it < qtl.end(); it++) {
+ const QueryTerm * qt = *it;
+ size_t sz(qt->termLen());
+ if (sz) {
+ int64_t low;
+ int64_t high;
+ bool valid = qt->getAsIntegerTerm(low, high);
+ _intTerm.push_back(IntInfo(low, high, valid));
+ }
}
- }
}
void IntFieldSearcher::onValue(const document::FieldValue & fv)