You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2015/11/10 06:29:23 UTC
olingo-odata4 git commit: [OLINGO-568] Fixed issue with implicit and
Repository: olingo-odata4
Updated Branches:
refs/heads/OLINGO-568_SearchParserPoC 96483ae55 -> f64abe136
[OLINGO-568] Fixed issue with implicit and
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/f64abe13
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/f64abe13
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/f64abe13
Branch: refs/heads/OLINGO-568_SearchParserPoC
Commit: f64abe136b0d8b6b8ec195319f2a5e3db98c27d5
Parents: 96483ae
Author: Michael Bolz <mi...@sap.com>
Authored: Tue Nov 10 06:25:54 2015 +0100
Committer: Michael Bolz <mi...@sap.com>
Committed: Tue Nov 10 06:25:54 2015 +0100
----------------------------------------------------------------------
.../core/uri/parser/search/SearchTokenizer.java | 94 ++++++++------------
.../uri/parser/search/SearchTokenizerTest.java | 9 +-
2 files changed, 40 insertions(+), 63 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f64abe13/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java
index 12af609..f393d22 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizer.java
@@ -73,6 +73,11 @@ public class SearchTokenizer {
return this;
}
+ public State finish(Token token) {
+ this.token = token;
+ return finish();
+ }
+
public boolean isFinished() {
return finished;
}
@@ -167,12 +172,15 @@ public class SearchTokenizer {
public SearchExpressionState() {
super(null);
}
+ public SearchExpressionState(String initLiteral) {
+ super(null, initLiteral);
+ }
@Override
public State nextChar(char c) {
if (c == CHAR_OPEN) {
return new OpenState();
} else if (isWhitespace(c)) {
- return new RwsImplicitAndState();
+ return new RwsImplicitAndOrState();
} else if(c == CHAR_CLOSE) {
return new CloseState();
} else {
@@ -224,7 +232,7 @@ public class SearchTokenizer {
return new CloseState();
} else if (isWhitespace(c)) {
finish();
- return new RwsImplicitAndState();
+ return new RwsImplicitAndOrState();
}
return forbidden(c);
}
@@ -254,14 +262,8 @@ public class SearchTokenizer {
allowed(c);
return new SearchExpressionState();
} else if (isWhitespace(c)) {
- if(isFinished()) {
- return new RwsImplicitAndState();
- }
return allowed(c);
} else if (c == CHAR_CLOSE) {
- if(isFinished()) {
- return new CloseState();
- }
return allowed(c);
}
return forbidden(c);
@@ -317,48 +319,6 @@ public class SearchTokenizer {
}
}
- private class AndState extends LiteralState {
- public AndState(char c) {
- super(Token.AND, c);
- if(c != CHAR_A) {
- forbidden(c);
- }
- }
- @Override
- public State nextChar(char c) {
- if (literal.length() == 1 && c == CHAR_N) {
- return allowed(c);
- } else if (literal.length() == 2 && c == CHAR_D) {
- return allowed(c);
- } else if(literal.length() == 3 && isWhitespace(c)) {
- finish();
- return new BeforeSearchExpressionRwsState();
- } else {
- return new SearchWordState(this);
- }
- }
- }
-
- private class OrState extends LiteralState {
- public OrState(char c) {
- super(Token.OR, c);
- if(c != CHAR_O) {
- forbidden(c);
- }
- }
- @Override
- public State nextChar(char c) {
- if (literal.length() == 1 && (c == CHAR_R)) {
- return allowed(c);
- } else if(literal.length() == 2 && isWhitespace(c)) {
- finish();
- return new BeforeSearchExpressionRwsState();
- } else {
- return new SearchWordState(this);
- }
- }
- }
-
// RWS 'OR' RWS searchExpr
// RWS [ 'AND' RWS ] searchExpr
private class BeforeSearchExpressionRwsState extends State {
@@ -376,21 +336,39 @@ public class SearchTokenizer {
}
// implicit and
- private class RwsImplicitAndState extends State {
- public RwsImplicitAndState() {
- super(Token.AND);
+ private class RwsImplicitAndOrState extends LiteralState {
+ private boolean noneRws = false;
+ public RwsImplicitAndOrState() {
+ super(null);
}
@Override
public State nextChar(char c) {
- if (isWhitespace(c)) {
+ if (!noneRws && isWhitespace(c)) {
return allowed(c);
} else if (c == CHAR_O) {
- return new OrState(c);
+ noneRws = true;
+ return allowed(c);
+ } else if (literal.length() == 1 && c == CHAR_R) {
+ return allowed(c);
+ } else if (literal.length() == 2 && isWhitespace(c)) {
+ finish(Token.OR);
+ return new BeforeSearchExpressionRwsState();
} else if (c == CHAR_A) {
- return new AndState(c);
+ noneRws = true;
+ return allowed(c);
+ } else if (literal.length() == 1 && c == CHAR_N) {
+ return allowed(c);
+ } else if (literal.length() == 2 && c == CHAR_D) {
+ return allowed(c);
+ } else if(literal.length() == 3 && isWhitespace(c)) {
+ finish(Token.AND);
+ return new BeforeSearchExpressionRwsState();
+ } else if(noneRws) {
+ finish(Token.AND);
+ return new SearchWordState(this);
} else {
- finish();
- return new SearchExpressionState().init(c);
+ finish(Token.AND);
+ return new SearchExpressionState(literal.toString()).init(c);
}
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f64abe13/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java
index 29287cd..548d3fd 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/search/SearchTokenizerTest.java
@@ -290,12 +290,11 @@ public class SearchTokenizerTest {
SearchValidator.init("abc AND ANDsomething")
.addExpected(WORD, AND, WORD).validate();
- // FIXME (mibo): issue with implicit and
-// SearchValidator.init("abc ANDsomething").enableLogging()
-// .addExpected(WORD, AND, WORD).validate();
+ SearchValidator.init("abc ANDsomething")
+ .addExpected(WORD, AND, WORD).validate();
-// SearchValidator.init("abc ORsomething")
-// .addExpected(WORD, AND, WORD).validate();
+ SearchValidator.init("abc ORsomething")
+ .addExpected(WORD, AND, WORD).validate();
SearchValidator.init("abc OR orsomething")
.addExpected(WORD, OR, WORD).validate();