Skip to content

Commit f2f26d9

Browse files
committed
added mergeObjects parameters for insert-update document
1 parent d7714a9 commit f2f26d9

File tree

4 files changed

+51
-5
lines changed

4 files changed

+51
-5
lines changed

ChangeLog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
88

99
## [6.7.0_PREVIEW_3.7.1-alpha.1] - 2020-05-??
1010

11+
- added support of `mergeObjects` for insert document with `overwriteMode: update` (ArangoDB v3.7)
1112
- added support of `DisjointSmartGraphs` (ArangoDB v3.7)
1213
- added support of `ArangoSearchProperties` value `storedValues` (ArangoDB v3.7)
1314
- added support of `ArangoSearchProperties` value `primarySortCompression` (ArangoDB v3.7)

src/main/java/com/arangodb/internal/InternalArangoCollection.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,11 @@ protected <T> Request insertDocumentRequest(final T value, final DocumentCreateO
8888
request.putQueryParam(SILENT, params.getSilent());
8989
request.putQueryParam(OVERWRITE, params.getOverwrite());
9090
request.putQueryParam(OVERWRITE_MODE, params.getOverwriteMode() != null ? params.getOverwriteMode().getValue() : null);
91+
request.putQueryParam(MERGE_OBJECTS, params.getMergeObjects());
9192
request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId());
93+
9294
request.setBody(util(Serializer.CUSTOM).serialize(value));
95+
9396
return request;
9497
}
9598

@@ -125,7 +128,9 @@ protected <T> Request insertDocumentsRequest(final Collection<T> values, final D
125128
request.putQueryParam(SILENT, params.getSilent());
126129
request.putQueryParam(OVERWRITE, params.getOverwrite());
127130
request.putQueryParam(OVERWRITE_MODE, params.getOverwriteMode() != null ? params.getOverwriteMode().getValue() : null);
131+
request.putQueryParam(MERGE_OBJECTS, params.getMergeObjects());
128132
request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId());
133+
129134
request.setBody(util(Serializer.CUSTOM)
130135
.serialize(values, new ArangoSerializer.Options().serializeNullValues(false).stringAsJson(true)));
131136
return request;

src/main/java/com/arangodb/model/DocumentCreateOptions.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public class DocumentCreateOptions {
3535
private OverwriteMode overwriteMode;
3636
private Boolean silent;
3737
private String streamTransactionId;
38+
private Boolean mergeObjects;
39+
3840

3941
public DocumentCreateOptions() {
4042
super();
@@ -141,4 +143,20 @@ public DocumentCreateOptions streamTransactionId(final String streamTransactionI
141143
return this;
142144
}
143145

146+
public Boolean getMergeObjects() {
147+
return mergeObjects;
148+
}
149+
150+
/**
151+
* @param mergeObjects Controls whether objects (not arrays) will be merged if present in both the existing and the patch
152+
* document. If set to false, the value in the patch document will overwrite the existing document's
153+
* value. If set to true, objects will be merged. The default is true.
154+
* @return options
155+
* @apiNote only considered if {@link this#overwriteMode} is set to {@link OverwriteMode#update}
156+
*/
157+
public DocumentCreateOptions mergeObjects(Boolean mergeObjects) {
158+
this.mergeObjects = mergeObjects;
159+
return this;
160+
}
161+
144162
}

src/test/java/com/arangodb/ArangoCollectionTest.java

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -224,13 +224,35 @@ public void insertDocumentOverwriteModeUpdate() {
224224
final DocumentCreateEntity<BaseDocument> meta = collection.insertDocument(doc);
225225

226226
doc.addAttribute("bar", "b");
227-
final DocumentCreateEntity<BaseDocument> upsert = collection
227+
final DocumentCreateEntity<BaseDocument> updated = collection
228228
.insertDocument(doc, new DocumentCreateOptions().overwriteMode(OverwriteMode.update).returnNew(true));
229229

230-
assertThat(upsert, is(notNullValue()));
231-
assertThat(upsert.getRev(), is(not(meta.getRev())));
232-
assertThat(upsert.getNew().getAttribute("foo").toString(), is("a"));
233-
assertThat(upsert.getNew().getAttribute("bar").toString(), is("b"));
230+
assertThat(updated, is(notNullValue()));
231+
assertThat(updated.getRev(), is(not(meta.getRev())));
232+
assertThat(updated.getNew().getAttribute("foo").toString(), is("a"));
233+
assertThat(updated.getNew().getAttribute("bar").toString(), is("b"));
234+
}
235+
236+
@Test
237+
public void insertDocumentOverwriteModeUpdateMergeObjectsFalse() {
238+
assumeTrue(isAtLeastVersion(3, 7));
239+
240+
final BaseDocument doc = new BaseDocument();
241+
Map<String, String> fieldA = Collections.singletonMap("a", "a");
242+
doc.addAttribute("foo", fieldA);
243+
final DocumentCreateEntity<BaseDocument> meta = collection.insertDocument(doc);
244+
245+
Map<String, String> fieldB = Collections.singletonMap("b", "b");
246+
doc.addAttribute("foo", fieldB);
247+
final DocumentCreateEntity<BaseDocument> updated = collection
248+
.insertDocument(doc, new DocumentCreateOptions()
249+
.overwriteMode(OverwriteMode.update)
250+
.mergeObjects(false)
251+
.returnNew(true));
252+
253+
assertThat(updated, is(notNullValue()));
254+
assertThat(updated.getRev(), is(not(meta.getRev())));
255+
assertThat(updated.getNew().getAttribute("foo"), is(fieldB));
234256
}
235257

236258
@Test

0 commit comments

Comments
 (0)