diff options
-rw-r--r-- | searchlib/src/tests/query/streaming_query_test.cpp | 9 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/query/query_term_simple.cpp | 4 |
2 files changed, 11 insertions, 2 deletions
diff --git a/searchlib/src/tests/query/streaming_query_test.cpp b/searchlib/src/tests/query/streaming_query_test.cpp index a4e84a4d384..f5370785167 100644 --- a/searchlib/src/tests/query/streaming_query_test.cpp +++ b/searchlib/src/tests/query/streaming_query_test.cpp @@ -52,6 +52,15 @@ TEST(StreamingQueryTest, test_query_language) EXPECT_EQ(da, -7); EXPECT_EQ(db, -7); } + { + QueryTerm q(factory.create(), "+7", "index", TermType::WORD); + EXPECT_TRUE(q.getAsIntegerTerm(ia, ib)); + EXPECT_EQ(ia, 7); + EXPECT_EQ(ib, 7); + EXPECT_TRUE(q.getAsFloatTerm(da, db)); + EXPECT_EQ(da, 7); + EXPECT_EQ(db, 7); + } { QueryTerm q(factory.create(), "7.5", "index", TermType::WORD); diff --git a/searchlib/src/vespa/searchlib/query/query_term_simple.cpp b/searchlib/src/vespa/searchlib/query/query_term_simple.cpp index 0550ba5f684..e6cea9c752b 100644 --- a/searchlib/src/vespa/searchlib/query/query_term_simple.cpp +++ b/searchlib/src/vespa/searchlib/query/query_term_simple.cpp @@ -32,7 +32,7 @@ bool isFullRange(vespalib::stringref s) noexcept { struct IntDecoder { static int64_t fromstr(const char * q, const char * qend, const char ** end) noexcept { int64_t v(0); - for (;q < qend && isspace(*q); q++); + for (;q < qend && (isspace(*q) || (*q == '+')); q++); std::from_chars_result err = std::from_chars(q, qend, v, 10); if (err.ec == std::errc::result_out_of_range) { v = (*q == '-') ? std::numeric_limits<int64_t>::min() : std::numeric_limits<int64_t>::max(); @@ -48,7 +48,7 @@ template <typename T> struct FloatDecoder { static T fromstr(const char * q, const char * qend, const char ** end) noexcept { T v(0); - for (;q < qend && isspace(*q); q++); + for (;q < qend && (isspace(*q) || (*q == '+')); q++); std::from_chars_result err = std::from_chars(q, qend, v); if (err.ec == std::errc::result_out_of_range) { v = (*q == '-') ? -std::numeric_limits<T>::infinity() : std::numeric_limits<T>::infinity(); |