Skip to content

Commit 403b741

Browse files
committedJul 21, 2018
Implement Issue #389 : Support for MessagePack
refactor + add javadocs to make MessagePackTraverser more unambiguous
1 parent 23b24f7 commit 403b741

File tree

2 files changed

+42
-17
lines changed

2 files changed

+42
-17
lines changed
 

‎src/main/java/org/influxdb/msgpack/MessagePackResponseBodyConverter.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,7 @@ public class MessagePackResponseBodyConverter implements Converter<ResponseBody,
1919
public QueryResult convert(final ResponseBody value) throws IOException {
2020
try (InputStream is = value.byteStream()) {
2121
MessagePackTraverser traverser = new MessagePackTraverser();
22-
for (QueryResult queryResult : traverser.traverse(is)) {
23-
return queryResult;
24-
}
25-
return null;
22+
return traverser.parse(is);
2623
}
2724
}
2825
}

‎src/main/java/org/influxdb/msgpack/MessagePackTraverser.java

+41-13
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import org.msgpack.value.ValueType;
2121

2222
/**
23-
* Traverse the MessagePack input stream and return Query Result objects.
23+
* Traverse the MessagePack input stream and return Query Result object(s).
2424
*
2525
* @author hoan.le [at] bonitoo.io
2626
*
@@ -29,7 +29,16 @@ public class MessagePackTraverser {
2929

3030
private String lastStringNode;
3131

32-
public Iterable<QueryResult> traverse(final InputStream is) throws IOException {
32+
/**
33+
* Traverse over the whole message pack stream.
34+
* This method can be used for converting query results in chunk
35+
*
36+
* @param is
37+
* The MessagePack format input stream
38+
* @return an Iterable over the QueryResult objects
39+
40+
*/
41+
public Iterable<QueryResult> traverse(final InputStream is) {
3342
MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(is);
3443

3544
return () -> {
@@ -45,23 +54,42 @@ public boolean hasNext() {
4554

4655
@Override
4756
public QueryResult next() {
48-
QueryResult queryResult = new QueryResult();
49-
QueryResultModelPath queryResultPath = new QueryResultModelPath();
50-
queryResultPath.add("queryResult", queryResult);
51-
try {
52-
traverse(unpacker, queryResultPath, 1);
53-
} catch (IOException e) {
54-
throw new InfluxDBException(e);
55-
}
56-
return queryResult;
57+
return parse(unpacker);
5758
}
5859
};
5960
};
6061

6162
}
6263

63-
void traverse(final MessageUnpacker unpacker, final QueryResultModelPath queryResultPath,
64-
final int readAmount) throws IOException {
64+
/**
65+
* Parse the message pack stream.
66+
* This method can be used for converting query result from normal query response
67+
* where exactly one QueryResult returned
68+
*
69+
* @param is
70+
* The MessagePack format input stream
71+
* @return QueryResult
72+
73+
*/
74+
public QueryResult parse(final InputStream is) {
75+
MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(is);
76+
return parse(unpacker);
77+
}
78+
79+
private QueryResult parse(MessageUnpacker unpacker) {
80+
QueryResult queryResult = new QueryResult();
81+
QueryResultModelPath queryResultPath = new QueryResultModelPath();
82+
queryResultPath.add("queryResult", queryResult);
83+
try {
84+
traverse(unpacker, queryResultPath, 1);
85+
} catch (IOException e) {
86+
throw new InfluxDBException(e);
87+
}
88+
return queryResult;
89+
}
90+
91+
void traverse(final MessageUnpacker unpacker, final QueryResultModelPath queryResultPath, final int readAmount)
92+
throws IOException {
6593
int amount = 0;
6694

6795
while (unpacker.hasNext() && amount < readAmount) {

0 commit comments

Comments
 (0)