summaryrefslogtreecommitdiffstats
path: root/document
diff options
context:
space:
mode:
authorfreva <valerijf@yahoo-inc.com>2017-02-10 11:14:52 +0100
committerfreva <valerijf@yahoo-inc.com>2017-02-10 11:14:52 +0100
commitdd4d45b74bcafac741a43e213336853f21b476b0 (patch)
tree27b9d98150e42cd176e5cc1038a95fb452fcfba1 /document
parent7f7b4e172e4ab301c46b8c7d2377f45685862221 (diff)
Buffer fieldpaths to process later
Diffstat (limited to 'document')
-rw-r--r--document/src/main/java/com/yahoo/document/json/TokenBuffer.java14
-rw-r--r--document/src/main/java/com/yahoo/document/json/document/DocumentParser.java35
-rw-r--r--document/src/main/java/com/yahoo/document/json/readers/DocumentParseInfo.java1
3 files changed, 28 insertions, 22 deletions
diff --git a/document/src/main/java/com/yahoo/document/json/TokenBuffer.java b/document/src/main/java/com/yahoo/document/json/TokenBuffer.java
index 9f6a0ba3641..edb2ba0be00 100644
--- a/document/src/main/java/com/yahoo/document/json/TokenBuffer.java
+++ b/document/src/main/java/com/yahoo/document/json/TokenBuffer.java
@@ -72,12 +72,20 @@ public class TokenBuffer {
buffer.addLast(new Token(token, name, text));
}
- public void bufferObject(JsonToken first, JsonParser tokens) {
+ public void bufferObject(JsonToken first, JsonParser tokens) {
+ bufferJsonStruct(first, tokens, JsonToken.START_OBJECT);
+ }
+
+ public void bufferArray(JsonToken first, JsonParser tokens) {
+ bufferJsonStruct(first, tokens, JsonToken.START_ARRAY);
+ }
+
+ private void bufferJsonStruct(JsonToken first, JsonParser tokens, JsonToken firstToken) {
int localNesting = 0;
JsonToken t = first;
- Preconditions.checkArgument(first == JsonToken.START_OBJECT,
- "Expected START_OBJECT, got %s.", t);
+ Preconditions.checkArgument(first == firstToken,
+ "Expected %s, got %s.", firstToken.name(), t);
if (size() == 0) {
updateNesting(t);
}
diff --git a/document/src/main/java/com/yahoo/document/json/document/DocumentParser.java b/document/src/main/java/com/yahoo/document/json/document/DocumentParser.java
index 8053246a266..1c3f3af58b0 100644
--- a/document/src/main/java/com/yahoo/document/json/document/DocumentParser.java
+++ b/document/src/main/java/com/yahoo/document/json/document/DocumentParser.java
@@ -21,6 +21,7 @@ public class DocumentParser {
private static final String CONDITION = "condition";
public static final String CREATE_IF_NON_EXISTENT = "create";
public static final String FIELDS = "fields";
+ public static final String FIELDPATHS = "fieldpaths";
public static final String REMOVE = "remove";
public static Optional<DocumentParseInfo> parseDocument(JsonParser parser) throws IOException {
@@ -109,35 +110,31 @@ public class DocumentParser {
indentLevel--;
break;
case START_ARRAY:
- indentLevel+=10000L;
+ indentLevel += 10000L;
break;
case END_ARRAY:
- indentLevel-=10000L;
+ indentLevel -= 10000L;
break;
}
- if (indentLevel == 1 && (t == JsonToken.VALUE_TRUE || t == JsonToken.VALUE_FALSE)) {
- try {
+ try {
+ if (indentLevel == 0L && t == JsonToken.END_OBJECT) {
+ break;
+ } else if (indentLevel == 1L && (t == JsonToken.VALUE_TRUE || t == JsonToken.VALUE_FALSE)) {
if (CREATE_IF_NON_EXISTENT.equals(parser.getCurrentName())) {
documentParseInfo.create = Optional.ofNullable(parser.getBooleanValue());
- continue;
}
- } catch (IOException e) {
- throw new RuntimeException("Got IO exception while parsing document", e);
- }
- }
- if (indentLevel == 2L && t == JsonToken.START_OBJECT) {
-
- try {
- if (!FIELDS.equals(parser.getCurrentName())) {
- continue;
- }
- } catch (IOException e) {
- throw new RuntimeException("Got IO exception while parsing document", e);
+ } else if (indentLevel == 2L && t == JsonToken.START_OBJECT && FIELDS.equals(parser.getCurrentName())) {
+ documentParseInfo.fieldsBuffer.bufferObject(t, parser);
+ indentLevel--;
+ } else if (indentLevel == 10001L && t == JsonToken.START_ARRAY && FIELDPATHS.equals(parser.getCurrentName())) {
+ documentParseInfo.fieldpathsBuffer.bufferArray(t, parser);
+ indentLevel -= 10000L;
}
- documentParseInfo.fieldsBuffer.bufferObject(t, parser);
- break;
+ } catch (IOException e) {
+ throw new RuntimeException("Got IO exception while parsing document", e);
}
}
+
return documentParseInfo;
}
}
diff --git a/document/src/main/java/com/yahoo/document/json/readers/DocumentParseInfo.java b/document/src/main/java/com/yahoo/document/json/readers/DocumentParseInfo.java
index 7401e33c607..2661c3f0097 100644
--- a/document/src/main/java/com/yahoo/document/json/readers/DocumentParseInfo.java
+++ b/document/src/main/java/com/yahoo/document/json/readers/DocumentParseInfo.java
@@ -13,4 +13,5 @@ public class DocumentParseInfo {
public Optional<String> condition = Optional.empty();
public DocumentParser.SupportedOperation operationType = null;
public TokenBuffer fieldsBuffer = new TokenBuffer();
+ public TokenBuffer fieldpathsBuffer = new TokenBuffer();
}