Skip to content

Commit 2953335

Browse files
committed
ArangoCursor refactoring
1 parent 834f875 commit 2953335

File tree

10 files changed

+38
-202
lines changed

10 files changed

+38
-202
lines changed

Diff for: core/src/main/java/com/arangodb/BaseArangoCursor.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
public interface BaseArangoCursor<T> {
88
String getId();
99

10-
Long getCount();
10+
Integer getCount();
1111

1212
Boolean isCached();
1313

@@ -19,5 +19,5 @@ public interface BaseArangoCursor<T> {
1919

2020
String getNextBatchId();
2121

22-
CursorEntity.Extra getExtra();
22+
CursorEntity.Extras getExtra();
2323
}

Diff for: core/src/main/java/com/arangodb/entity/CursorEntity.java

+5-8
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,14 @@
3333
*/
3434
public final class CursorEntity<T> {
3535
private String id;
36-
private Long count;
36+
private Integer count;
3737
private Boolean cached;
3838
private Boolean hasMore;
39-
40-
// TODO: test whether user-serde is used for result elements
4139
@UserDataInside
4240
private List<T> result;
4341
private Boolean potentialDirtyRead;
4442
private String nextBatchId;
45-
private final Extra extra = new Extra();
43+
private final Extras extra = new Extras();
4644

4745
public String getId() {
4846
return id;
@@ -52,7 +50,7 @@ public String getId() {
5250
* @return the total number of result documents available (only available if the query was executed with the count
5351
* attribute set)
5452
*/
55-
public Long getCount() {
53+
public Integer getCount() {
5654
return count;
5755
}
5856

@@ -62,7 +60,7 @@ public Long getCount() {
6260
* documents and the number of documents that could not be modified due to an error (if ignoreErrors query
6361
* option is specified)
6462
*/
65-
public Extra getExtra() {
63+
public Extras getExtra() {
6664
return extra;
6765
}
6866

@@ -110,7 +108,7 @@ public String getNextBatchId() {
110108
return nextBatchId;
111109
}
112110

113-
public static final class Extra {
111+
public static final class Extras {
114112
private final Collection<CursorWarning> warnings = Collections.emptyList();
115113
private CursorStats stats;
116114

@@ -121,7 +119,6 @@ public CursorStats getStats() {
121119
public Collection<CursorWarning> getWarnings() {
122120
return warnings;
123121
}
124-
125122
}
126123

127124
}

Diff for: core/src/main/java/com/arangodb/internal/ArangoCursorExecute.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@
2020

2121
package com.arangodb.internal;
2222

23-
import com.arangodb.internal.cursor.entity.InternalCursorEntity;
23+
import com.arangodb.entity.CursorEntity;
2424

2525

2626
/**
2727
* @author Mark Vollmary
2828
*/
29-
public interface ArangoCursorExecute {
29+
public interface ArangoCursorExecute<T> {
3030

31-
InternalCursorEntity next(String id, String nextBatchId);
31+
CursorEntity<T> next(String id, String nextBatchId);
3232

3333
void close(String id);
3434

Diff for: core/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java

+8-9
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import com.arangodb.entity.*;
2525
import com.arangodb.entity.arangosearch.analyzer.SearchAnalyzer;
2626
import com.arangodb.internal.cursor.ArangoCursorImpl;
27-
import com.arangodb.internal.cursor.entity.InternalCursorEntity;
2827
import com.arangodb.internal.net.HostHandle;
2928
import com.arangodb.internal.util.DocumentUtil;
3029
import com.arangodb.model.*;
@@ -168,7 +167,7 @@ public <T> ArangoCursor<T> query(
168167
final String query, final Class<T> type, final Map<String, Object> bindVars, final AqlQueryOptions options) {
169168
final InternalRequest request = queryRequest(query, bindVars, options);
170169
final HostHandle hostHandle = new HostHandle();
171-
final InternalCursorEntity result = executorSync().execute(request, internalCursorEntityDeserializer(), hostHandle);
170+
final CursorEntity<T> result = executorSync().execute(request, cursorEntityDeserializer(type), hostHandle);
172171
return createCursor(result, type, options, hostHandle);
173172
}
174173

@@ -195,23 +194,23 @@ public <T> ArangoCursor<T> cursor(final String cursorId, final Class<T> type) {
195194
@Override
196195
public <T> ArangoCursor<T> cursor(final String cursorId, final Class<T> type, final String nextBatchId) {
197196
final HostHandle hostHandle = new HostHandle();
198-
final InternalCursorEntity result = executorSync().execute(
197+
final CursorEntity<T> result = executorSync().execute(
199198
queryNextRequest(cursorId, new AqlQueryOptions(), nextBatchId),
200-
internalCursorEntityDeserializer(),
199+
cursorEntityDeserializer(type),
201200
hostHandle);
202201
return createCursor(result, type, null, hostHandle);
203202
}
204203

205204
private <T> ArangoCursor<T> createCursor(
206-
final InternalCursorEntity result,
205+
final CursorEntity<T> result,
207206
final Class<T> type,
208207
final AqlQueryOptions options,
209208
final HostHandle hostHandle) {
210209

211-
final ArangoCursorExecute execute = new ArangoCursorExecute() {
210+
final ArangoCursorExecute<T> execute = new ArangoCursorExecute<T>() {
212211
@Override
213-
public InternalCursorEntity next(final String id, final String nextBatchId) {
214-
return executorSync().execute(queryNextRequest(id, options, nextBatchId), internalCursorEntityDeserializer(), hostHandle);
212+
public CursorEntity<T> next(final String id, final String nextBatchId) {
213+
return executorSync().execute(queryNextRequest(id, options, nextBatchId), cursorEntityDeserializer(type), hostHandle);
215214
}
216215

217216
@Override
@@ -220,7 +219,7 @@ public void close(final String id) {
220219
}
221220
};
222221

223-
return new ArangoCursorImpl<>(this, execute, type, result);
222+
return new ArangoCursorImpl<>(execute, type, result);
224223
}
225224

226225
@Override

Diff for: core/src/main/java/com/arangodb/internal/InternalArangoCursor.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public String getId() {
5858
}
5959

6060
@Override
61-
public Long getCount() {
61+
public Integer getCount() {
6262
return entity.getCount();
6363
}
6464

@@ -88,7 +88,7 @@ public String getNextBatchId() {
8888
}
8989

9090
@Override
91-
public CursorEntity.Extra getExtra() {
91+
public CursorEntity.Extras getExtra() {
9292
return entity.getExtra();
9393
}
9494

Diff for: core/src/main/java/com/arangodb/internal/InternalArangoDatabase.java

-10
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import com.arangodb.entity.*;
2424
import com.arangodb.entity.arangosearch.analyzer.SearchAnalyzer;
2525
import com.arangodb.internal.ArangoExecutor.ResponseDeserializer;
26-
import com.arangodb.internal.cursor.entity.InternalCursorEntity;
2726
import com.arangodb.internal.util.RequestUtils;
2827
import com.arangodb.model.*;
2928
import com.arangodb.model.arangosearch.*;
@@ -232,15 +231,6 @@ protected InternalRequest deleteAqlFunctionRequest(final String name, final AqlF
232231
return request;
233232
}
234233

235-
protected ResponseDeserializer<InternalCursorEntity> internalCursorEntityDeserializer() {
236-
return response -> {
237-
InternalCursorEntity e = getSerde().deserialize(response.getBody(), InternalCursorEntity.class);
238-
boolean potentialDirtyRead = Boolean.parseBoolean(response.getMeta("X-Arango-Potential-Dirty-Read"));
239-
e.setPontentialDirtyRead(potentialDirtyRead);
240-
return e;
241-
};
242-
}
243-
244234
public <T> ResponseDeserializer<CursorEntity<T>> cursorEntityDeserializer(final Class<T> type) {
245235
return response -> {
246236
CursorEntity<T> e = getSerde().deserialize(response.getBody(), constructParametricType(CursorEntity.class, type));

Diff for: core/src/main/java/com/arangodb/internal/cursor/ArangoCursorImpl.java

+16-27
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,10 @@
2222

2323
import com.arangodb.ArangoCursor;
2424
import com.arangodb.ArangoIterator;
25+
import com.arangodb.entity.CursorEntity;
2526
import com.arangodb.entity.CursorStats;
2627
import com.arangodb.entity.CursorWarning;
2728
import com.arangodb.internal.ArangoCursorExecute;
28-
import com.arangodb.internal.InternalArangoDatabase;
29-
import com.arangodb.internal.cursor.entity.InternalCursorEntity;
30-
import com.fasterxml.jackson.databind.JsonNode;
3129

3230
import java.util.Collection;
3331
import java.util.Iterator;
@@ -41,18 +39,18 @@ public class ArangoCursorImpl<T> implements ArangoCursor<T> {
4139
protected final ArangoCursorIterator<T> iterator;
4240
private final Class<T> type;
4341
private final String id;
44-
private final ArangoCursorExecute execute;
42+
private final ArangoCursorExecute<T> execute;
4543
private final boolean pontentialDirtyRead;
4644
private final boolean allowRetry;
4745

48-
public ArangoCursorImpl(final InternalArangoDatabase db, final ArangoCursorExecute execute,
49-
final Class<T> type, final InternalCursorEntity result) {
46+
public ArangoCursorImpl(final ArangoCursorExecute<T> execute,
47+
final Class<T> type, final CursorEntity<T> result) {
5048
super();
5149
this.execute = execute;
5250
this.type = type;
5351
id = result.getId();
54-
pontentialDirtyRead = result.isPontentialDirtyRead();
55-
iterator = new ArangoCursorIterator<>(id, type, execute, db, result);
52+
pontentialDirtyRead = result.isPotentialDirtyRead();
53+
iterator = new ArangoCursorIterator<>(id, execute, result);
5654
this.allowRetry = result.getNextBatchId() != null;
5755
}
5856

@@ -85,13 +83,13 @@ public Integer getCount() {
8583

8684
@Override
8785
public CursorStats getStats() {
88-
final InternalCursorEntity.Extras extra = iterator.result.getExtra();
86+
final CursorEntity.Extras extra = iterator.result.getExtra();
8987
return extra != null ? extra.getStats() : null;
9088
}
9189

9290
@Override
9391
public Collection<CursorWarning> getWarnings() {
94-
final InternalCursorEntity.Extras extra = iterator.result.getExtra();
92+
final CursorEntity.Extras extra = iterator.result.getExtra();
9593
return extra != null ? extra.getWarnings() : null;
9694
}
9795

@@ -121,24 +119,20 @@ public String getNextBatchId() {
121119
return iterator.result.getNextBatchId();
122120
}
123121

124-
protected ArangoCursorExecute getExecute() {
122+
protected ArangoCursorExecute<T> getExecute() {
125123
return execute;
126124
}
127125

128126
protected static class ArangoCursorIterator<T> implements ArangoIterator<T> {
129127
private final String cursorId;
130-
private final Class<T> type;
131-
private final InternalArangoDatabase db;
132-
private final ArangoCursorExecute execute;
133-
private InternalCursorEntity result;
134-
private Iterator<JsonNode> arrayIterator;
135-
136-
protected ArangoCursorIterator(final String cursorId, final Class<T> type, final ArangoCursorExecute execute,
137-
final InternalArangoDatabase db, final InternalCursorEntity result) {
128+
private final ArangoCursorExecute<T> execute;
129+
private CursorEntity<T> result;
130+
private Iterator<T> arrayIterator;
131+
132+
protected ArangoCursorIterator(final String cursorId, final ArangoCursorExecute<T> execute,
133+
final CursorEntity<T> result) {
138134
this.cursorId = cursorId;
139-
this.type = type;
140135
this.execute = execute;
141-
this.db = db;
142136
this.result = result;
143137
arrayIterator = result.getResult().iterator();
144138
}
@@ -157,13 +151,8 @@ public T next() {
157151
if (!hasNext()) {
158152
throw new NoSuchElementException();
159153
}
160-
return deserialize(db.getSerde().serialize(arrayIterator.next()), type);
161-
}
162-
163-
private <R> R deserialize(final byte[] result, final Class<R> type) {
164-
return db.getSerde().deserializeUserData(result, type);
154+
return arrayIterator.next();
165155
}
166-
167156
}
168157

169158
}

0 commit comments

Comments
 (0)