diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 1033df33e..1a7cf548c 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -35,12 +35,12 @@ jobs:
user-language:
- en
include:
- - docker-img: docker.io/arangodb/arangodb:3.10.5
+ - docker-img: docker.io/arangodb/arangodb-preview:3.11.0-beta.1
topology: single
db-ext-names: true
java-version: 11
user-language: tr
- - docker-img: docker.io/arangodb/enterprise:3.10.5
+ - docker-img: docker.io/arangodb/enterprise-preview:3.11.0-beta.1
topology: cluster
db-ext-names: true
java-version: 17
diff --git a/src/main/java/com/arangodb/model/AqlQueryOptions.java b/src/main/java/com/arangodb/model/AqlQueryOptions.java
index c09fd143a..57ad8d77a 100644
--- a/src/main/java/com/arangodb/model/AqlQueryOptions.java
+++ b/src/main/java/com/arangodb/model/AqlQueryOptions.java
@@ -34,7 +34,7 @@
* @see API
* Documentation
*/
-public class AqlQueryOptions implements Serializable {
+public class AqlQueryOptions implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
@@ -432,7 +432,18 @@ private Options getOptions() {
return options;
}
- public static class Options implements Serializable {
+ @Override
+ public AqlQueryOptions clone() {
+ try {
+ AqlQueryOptions clone = (AqlQueryOptions) super.clone();
+ clone.options = options != null ? options.clone() : null;
+ return clone;
+ } catch (CloneNotSupportedException e) {
+ throw new AssertionError();
+ }
+ }
+
+ public static class Options implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
@@ -467,10 +478,32 @@ protected Collection getShardIds() {
return shardIds;
}
+ @Override
+ public Options clone() {
+ try {
+ Options clone = (Options) super.clone();
+ clone.optimizer = optimizer != null ? optimizer.clone() : null;
+ clone.shardIds = shardIds != null ? new ArrayList<>(shardIds) : null;
+ return clone;
+ } catch (CloneNotSupportedException e) {
+ throw new AssertionError();
+ }
+ }
}
- public static class Optimizer {
+ public static class Optimizer implements Cloneable {
private Collection rules;
+
+ @Override
+ public Optimizer clone() {
+ try {
+ Optimizer clone = (Optimizer) super.clone();
+ clone.rules = rules != null ? new ArrayList<>(rules) : null;
+ return clone;
+ } catch (CloneNotSupportedException e) {
+ throw new AssertionError();
+ }
+ }
}
/**
diff --git a/src/test/java/com/arangodb/model/AqlQueryOptionsTest.java b/src/test/java/com/arangodb/model/AqlQueryOptionsTest.java
new file mode 100644
index 000000000..39e9c1c43
--- /dev/null
+++ b/src/test/java/com/arangodb/model/AqlQueryOptionsTest.java
@@ -0,0 +1,31 @@
+package com.arangodb.model;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class AqlQueryOptionsTest {
+
+ @Test
+ void cloneable() {
+ List rules = Arrays.asList("foo", "bar");
+ AqlQueryOptions options = new AqlQueryOptions()
+ .cache(true)
+ .stream(true)
+ .rules(rules)
+ .shardIds("a", "b");
+ AqlQueryOptions clone = options.clone();
+ assertThat(clone.getCache()).isEqualTo(options.getCache());
+ assertThat(clone.getStream()).isEqualTo(options.getStream());
+ assertThat(clone.getRules())
+ .isEqualTo(options.getRules())
+ .isNotSameAs(options.getRules());
+ assertThat(clone.getShardIds())
+ .isEqualTo(options.getShardIds())
+ .isNotSameAs(options.getShardIds());
+ }
+
+}