Fix bugs in MatchReal (StrippedQuery)

Reviewers: buda

Reviewed By: buda

Subscribers: pullbot

Differential Revision: https://phabricator.memgraph.io/D546
This commit is contained in:
Mislav Bradac 2017-07-12 15:23:56 +02:00
parent 5c810b6579
commit 26144ee8fd
2 changed files with 12 additions and 4 deletions

View File

@ -343,15 +343,17 @@ int StrippedQuery::MatchHexadecimalInt(int start) const {
}
int StrippedQuery::MatchReal(int start) const {
enum class State { BEFORE_DOT, DOT, AFTER_DOT, E, E_MINUS, AFTER_E };
State state = State::BEFORE_DOT;
enum class State { START, BEFORE_DOT, DOT, AFTER_DOT, E, E_MINUS, AFTER_E };
State state = State::START;
auto i = start;
while (i < static_cast<int>(original_.size())) {
if (original_[i] == '.') {
if (state != State::BEFORE_DOT) break;
if (state != State::BEFORE_DOT && state != State::START) break;
state = State::DOT;
} else if ('0' <= original_[i] && original_[i] <= '9') {
if (state == State::DOT) {
if (state == State::START) {
state = State::BEFORE_DOT;
} else if (state == State::DOT) {
state = State::AFTER_DOT;
} else if (state == State::E || state == State::E_MINUS) {
state = State::AFTER_E;

View File

@ -97,6 +97,12 @@ TEST(QueryStripper, ExponentDecimal4) {
EXPECT_EQ(stripped.query(), "return " + kStrippedDoubleToken);
}
TEST(QueryStripper, SymbolicNameStartingWithE) {
StrippedQuery stripped("RETURN e1");
EXPECT_EQ(stripped.literals().size(), 0);
EXPECT_EQ(stripped.query(), "return e1");
}
TEST(QueryStripper, StringLiteral) {
StrippedQuery stripped("RETURN 'something'");
EXPECT_EQ(stripped.literals().size(), 1);