Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
992c3ca
preview CI
rashtao Mar 19, 2020
0b4f404
Insert-Update (#336)
rashtao Mar 24, 2020
4f0a9e1
satellite graphs (#337)
rashtao Mar 24, 2020
ba7a162
schema validation (#339)
rashtao Mar 24, 2020
8e61624
added peakMemoryUsage aql stats
rashtao Mar 20, 2020
4c76631
v6.7.0_PREVIEW_3.7.0-alpha.2_0
rashtao Mar 24, 2020
597b007
Merge branch 'master' into preview
rashtao Apr 2, 2020
74c7561
renamed collection validation to schema
rashtao Apr 16, 2020
8f74095
bugfix validation error response code
rashtao Apr 17, 2020
4b507ce
Merge branch 'master' into preview
rashtao May 19, 2020
d7bf6dc
overwriteMode conflict and ignore
rashtao May 19, 2020
262568f
primarySortCompression
rashtao May 19, 2020
99c3c9a
ArangoSearchProperties storedValues
rashtao May 19, 2020
f7adff3
check db version in ArangoSearchTest
rashtao May 19, 2020
b007c94
added keepNull & mergeObjects parameters for insert-update document
rashtao May 20, 2020
b33f14f
disjoint smart graphs
rashtao May 20, 2020
489accd
docker images matrix upd
rashtao May 20, 2020
599fdd3
bugfix getAndClearSlowQueries test
rashtao May 20, 2020
15f0181
Revert "added keepNull & mergeObjects parameters for insert-update do…
rashtao May 22, 2020
9f2420c
ChangeLog.md upd
rashtao May 22, 2020
d7714a9
ChangeLog.md upd
rashtao May 22, 2020
f2f26d9
added mergeObjects parameters for insert-update document
rashtao May 22, 2020
40693f6
v6.7.0_PREVIEW_3.7.1-alpha.1
rashtao May 22, 2020
b40b24a
gh actions debug containers on tests failure
rashtao May 25, 2020
c57080b
fixed async tests
rashtao Jun 29, 2020
1285877
Merge branch 'master' into preview
rashtao Jun 30, 2020
b36e0ef
javadoc upd
rashtao Jun 30, 2020
c3bf2d5
javadoc upd
rashtao Jun 30, 2020
04578bb
test matrix upd
rashtao Jun 30, 2020
e97d2f5
Merge branch 'master' into preview
rashtao Jul 1, 2020
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Insert-Update (#336)
  • Loading branch information
rashtao authored Mar 24, 2020
commit 0b4f4044a92f7ca5ba2d04c74a62147ed60bee80
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ public abstract class InternalArangoCollection<A extends InternalArangoDB<E>, D
private static final String NEW = "new";
private static final String RETURN_OLD = "returnOld";
private static final String OVERWRITE = "overwrite";
private static final String OVERWRITE_MODE = "overwriteMode";
private static final String OLD = "old";
private static final String SILENT = "silent";

Expand Down Expand Up @@ -86,6 +87,7 @@ protected <T> Request insertDocumentRequest(final T value, final DocumentCreateO
request.putQueryParam(RETURN_OLD, params.getReturnOld());
request.putQueryParam(SILENT, params.getSilent());
request.putQueryParam(OVERWRITE, params.getOverwrite());
request.putQueryParam(OVERWRITE_MODE, params.getOverwriteMode() != null ? params.getOverwriteMode().getValue() : null);
request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId());
request.setBody(util(Serializer.CUSTOM).serialize(value));
return request;
Expand Down Expand Up @@ -122,6 +124,7 @@ protected <T> Request insertDocumentsRequest(final Collection<T> values, final D
request.putQueryParam(RETURN_OLD, params.getReturnOld());
request.putQueryParam(SILENT, params.getSilent());
request.putQueryParam(OVERWRITE, params.getOverwrite());
request.putQueryParam(OVERWRITE_MODE, params.getOverwriteMode() != null ? params.getOverwriteMode().getValue() : null);
request.putHeaderParam(TRANSACTION_ID, params.getStreamTransactionId());
request.setBody(util(Serializer.CUSTOM)
.serialize(values, new ArangoSerializer.Options().serializeNullValues(false).stringAsJson(true)));
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/com/arangodb/model/DocumentCreateOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public class DocumentCreateOptions {
private Boolean returnNew;
private Boolean returnOld;
private Boolean overwrite;
private OverwriteMode overwriteMode;
private Boolean silent;
private String streamTransactionId;

Expand Down Expand Up @@ -96,6 +97,22 @@ public DocumentCreateOptions overwrite(final Boolean overwrite) {
return this;
}

public OverwriteMode getOverwriteMode() {
return overwriteMode;
}

/**
* @param overwriteMode This parameter can be set to replace or update. If given it sets implicitly the overwrite
* flag. In case it is set to update, the replace-insert becomes an update-insert. Otherwise
* this option follows the rules of the overwrite parameter.
* @return options
* @since ArangoDB 3.7
*/
public DocumentCreateOptions overwriteMode(final OverwriteMode overwriteMode) {
this.overwriteMode = overwriteMode;
return this;
}

public Boolean getSilent() {
return silent;
}
Expand Down
39 changes: 39 additions & 0 deletions src/main/java/com/arangodb/model/OverwriteMode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
* DISCLAIMER
*
* Copyright 2016 ArangoDB GmbH, Cologne, Germany
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Copyright holder is ArangoDB GmbH, Cologne, Germany
*/

package com.arangodb.model;


/**
* @author Michele Rastelli
*/
public enum OverwriteMode {
replace("replace"), update("update");

private final String value;

OverwriteMode(String value) {
this.value = value;
}

public String getValue() {
return value;
}
}
67 changes: 67 additions & 0 deletions src/test/java/com/arangodb/ArangoCollectionTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,44 @@ public void insertDocumentOverwriteReturnOld() {
assertThat(collection.count().getCount(), is(initialCount + 1L));
}

@Test
public void insertDocumentOverwriteModeReplace() {
assumeTrue(isAtLeastVersion(3, 7));

String key = "key-" + UUID.randomUUID().toString();
final BaseDocument doc = new BaseDocument(key);
doc.addAttribute("foo", "a");
final DocumentCreateEntity<BaseDocument> meta = collection.insertDocument(doc);

final BaseDocument doc2 = new BaseDocument(key);
doc2.addAttribute("bar", "b");
final DocumentCreateEntity<BaseDocument> repsert = collection
.insertDocument(doc2, new DocumentCreateOptions().overwriteMode(OverwriteMode.replace).returnNew(true));

assertThat(repsert, is(notNullValue()));
assertThat(repsert.getRev(), is(not(meta.getRev())));
assertThat(repsert.getNew().getProperties().containsKey("foo"), is(false));
assertThat(repsert.getNew().getAttribute("bar").toString(), is("b"));
}

@Test
public void insertDocumentOverwriteModeUpdate() {
assumeTrue(isAtLeastVersion(3, 7));

final BaseDocument doc = new BaseDocument();
doc.addAttribute("foo", "a");
final DocumentCreateEntity<BaseDocument> meta = collection.insertDocument(doc);

doc.addAttribute("bar", "b");
final DocumentCreateEntity<BaseDocument> upsert = collection
.insertDocument(doc, new DocumentCreateOptions().overwriteMode(OverwriteMode.update).returnNew(true));

assertThat(upsert, is(notNullValue()));
assertThat(upsert.getRev(), is(not(meta.getRev())));
assertThat(upsert.getNew().getAttribute("foo").toString(), is("a"));
assertThat(upsert.getNew().getAttribute("bar").toString(), is("b"));
}

@Test
public void insertDocumentWaitForSync() {
final DocumentCreateOptions options = new DocumentCreateOptions().waitForSync(true);
Expand Down Expand Up @@ -1506,6 +1544,35 @@ public void insertDocumentsOverwrite() {
}
}

@Test
public void insertDocumentsOverwriteModeUpdate() {
assumeTrue(isAtLeastVersion(3, 7));

final BaseDocument doc1 = new BaseDocument();
doc1.addAttribute("foo", "a");
final DocumentCreateEntity<BaseDocument> meta1 = collection.insertDocument(doc1);

final BaseDocument doc2 = new BaseDocument();
doc2.addAttribute("foo", "a");
final DocumentCreateEntity<BaseDocument> meta2 = collection.insertDocument(doc2);

doc1.addAttribute("bar", "b");
doc2.addAttribute("bar", "b");

final MultiDocumentEntity<DocumentCreateEntity<BaseDocument>> repsert = collection
.insertDocuments(Arrays.asList(doc1, doc2),
new DocumentCreateOptions().overwriteMode(OverwriteMode.update).returnNew(true));
assertThat(repsert, is(notNullValue()));
assertThat(repsert.getDocuments().size(), is(2));
assertThat(repsert.getErrors().size(), is(0));
for (final DocumentCreateEntity<BaseDocument> documentCreateEntity : repsert.getDocuments()) {
assertThat(documentCreateEntity.getRev(), is(not(meta1.getRev())));
assertThat(documentCreateEntity.getRev(), is(not(meta2.getRev())));
assertThat(documentCreateEntity.getNew().getAttribute("foo").toString(), is("a"));
assertThat(documentCreateEntity.getNew().getAttribute("bar").toString(), is("b"));
}
}

@Test
public void insertDocumentsJson() {
final Collection<String> values = new ArrayList<>();
Expand Down