Skip to content

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 implements Cloneable {
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 implements Cloneable {
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)