summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2024-01-03 16:32:07 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2024-01-03 16:32:07 +0000
commit9da9d445a93a008f1623ce0719e99be813bd1a71 (patch)
tree87ffea2b9e5e394eb229d07973c64ba0b09226d5
parentc13fd050cf3131595459a6477adf2f92b3cdae5a (diff)
Handle + as number prefix.
-rw-r--r--searchlib/src/tests/query/streaming_query_test.cpp9
-rw-r--r--searchlib/src/vespa/searchlib/query/query_term_simple.cpp4
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();