Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8817fb0

Browse files
authored
made AqlQueryOptions cloneable (#510)
1 parent 6bdea52 commit 8817fb0

File tree

2 files changed

+69
-6
lines changed

2 files changed

+69
-6
lines changed

‎core/src/main/java/com/arangodb/model/AqlQueryOptions.java‎

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,15 @@
2222

2323
import com.arangodb.internal.serde.UserDataInside;
2424

25-
import java.util.Arrays;
26-
import java.util.Collection;
27-
import java.util.Map;
25+
import java.util.*;
2826

2927
/**
3028
* @author Mark Vollmary
3129
* @author Michele Rastelli
3230
* @see <a href="https://www.arangodb.com/docs/stable/http/aql-query-cursor-accessing-cursors.html#create-cursor">API
3331
* Documentation</a>
3432
*/
35-
public final class AqlQueryOptions {
33+
public final class AqlQueryOptions implementsCloneable{
3634

3735
private Boolean count;
3836
private Integer ttl;
@@ -491,7 +489,19 @@ public AqlQueryOptions streamTransactionId(final String streamTransactionId) {
491489
return this;
492490
}
493491

494-
public static final class Options {
492+
@Override
493+
public AqlQueryOptions clone() {
494+
try {
495+
AqlQueryOptions clone = (AqlQueryOptions) super.clone();
496+
clone.bindVars = bindVars != null ? new HashMap<>(bindVars) : null;
497+
clone.options = options != null ? options.clone() : null;
498+
return clone;
499+
} catch (CloneNotSupportedException e) {
500+
throw new AssertionError();
501+
}
502+
}
503+
504+
public static final class Options implements Cloneable {
495505

496506
private Boolean failOnWarning;
497507
private Boolean profile;
@@ -577,14 +587,36 @@ public Collection<String> getShardIds() {
577587
return shardIds;
578588
}
579589

590+
@Override
591+
public Options clone() {
592+
try {
593+
Options clone = (Options) super.clone();
594+
clone.optimizer = optimizer != null ? optimizer.clone() : null;
595+
clone.shardIds = shardIds != null ? new ArrayList<>(shardIds) : null;
596+
return clone;
597+
} catch (CloneNotSupportedException e) {
598+
throw new AssertionError();
599+
}
600+
}
580601
}
581602

582-
public static final class Optimizer {
603+
public static final class Optimizer implementsCloneable{
583604
private Collection<String> rules;
584605

585606
public Collection<String> getRules() {
586607
return rules;
587608
}
609+
610+
@Override
611+
public Optimizer clone() {
612+
try {
613+
Optimizer clone = (Optimizer) super.clone();
614+
clone.rules = rules != null ? new ArrayList<>(rules) : null;
615+
return clone;
616+
} catch (CloneNotSupportedException e) {
617+
throw new AssertionError();
618+
}
619+
}
588620
}
589621

590622
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.arangodb.model;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.util.Arrays;
6+
import java.util.List;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
class AqlQueryOptionsTest {
11+
12+
@Test
13+
void cloneable() {
14+
List<String> rules = Arrays.asList("foo", "bar");
15+
AqlQueryOptions options = new AqlQueryOptions()
16+
.cache(true)
17+
.stream(true)
18+
.rules(rules)
19+
.shardIds("a", "b");
20+
AqlQueryOptions clone = options.clone();
21+
assertThat(clone.getCache()).isEqualTo(options.getCache());
22+
assertThat(clone.getStream()).isEqualTo(options.getStream());
23+
assertThat(clone.getRules())
24+
.isEqualTo(options.getRules())
25+
.isNotSameAs(options.getRules());
26+
assertThat(clone.getShardIds())
27+
.isEqualTo(options.getShardIds())
28+
.isNotSameAs(options.getShardIds());
29+
}
30+
31+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /