Skip to content

Commit 85fc802

Browse files
authored
fixed merge AQL options from @QueryOptions annotation and AqlQueryOptions parameter (#276)
1 parent edcb02b commit 85fc802

File tree

4 files changed

+63
-28
lines changed

4 files changed

+63
-28
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@
299299
<dependency>
300300
<groupId>com.arangodb</groupId>
301301
<artifactId>arangodb-java-driver</artifactId>
302-
<version>6.22.0</version>
302+
<version>6.24.0</version>
303303
</dependency>
304304
<dependency>
305305
<groupId>org.mockito</groupId>

src/main/java/com/arangodb/springframework/repository/query/AbstractArangoQuery.java

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -132,39 +132,53 @@ protected AqlQueryOptions mergeQueryOptions(final AqlQueryOptions oldStatic, fin
132132
if (newDynamic == null) {
133133
return oldStatic;
134134
}
135-
final Integer batchSize = newDynamic.getBatchSize();
136-
if (batchSize != null) {
137-
oldStatic.batchSize(batchSize);
135+
136+
AqlQueryOptions mergedOptions = newDynamic.clone();
137+
138+
if (mergedOptions.getBatchSize() == null) {
139+
mergedOptions.batchSize(oldStatic.getBatchSize());
138140
}
139-
final Integer maxPlans = newDynamic.getMaxPlans();
140-
if (maxPlans != null) {
141-
oldStatic.maxPlans(maxPlans);
141+
142+
if (mergedOptions.getCache() == null) {
143+
mergedOptions.cache(oldStatic.getCache());
142144
}
143-
final Integer ttl = newDynamic.getTtl();
144-
if (ttl != null) {
145-
oldStatic.ttl(ttl);
145+
146+
if (mergedOptions.getCount() == null) {
147+
mergedOptions.count(oldStatic.getCount());
146148
}
147-
final Boolean cache = newDynamic.getCache();
148-
if (cache != null) {
149-
oldStatic.cache(cache);
149+
150+
if (mergedOptions.getFullCount() == null) {
151+
mergedOptions.fullCount(oldStatic.getFullCount());
150152
}
151-
final Boolean count = newDynamic.getCount();
152-
if (count != null) {
153-
oldStatic.count(count);
153+
154+
if (mergedOptions.getMaxPlans() == null) {
155+
mergedOptions.maxPlans(oldStatic.getMaxPlans());
154156
}
155-
final Boolean fullCount = newDynamic.getFullCount();
156-
if (fullCount != null) {
157-
oldStatic.fullCount(fullCount);
157+
158+
if (mergedOptions.getProfile() == null) {
159+
mergedOptions.profile(oldStatic.getProfile());
158160
}
159-
final Boolean profile = newDynamic.getProfile();
160-
if (profile != null) {
161-
oldStatic.profile(profile);
161+
if (mergedOptions.getRules() == null) {
162+
mergedOptions.rules(oldStatic.getRules());
162163
}
163-
final Collection<String> rules = newDynamic.getRules();
164-
if (rules != null) {
165-
oldStatic.rules(rules);
164+
165+
if (mergedOptions.getTtl() == null) {
166+
mergedOptions.ttl(oldStatic.getTtl());
166167
}
167-
return oldStatic;
168+
169+
if (mergedOptions.getStream() == null) {
170+
mergedOptions.stream(oldStatic.getStream());
171+
}
172+
173+
if (mergedOptions.getMemoryLimit() == null) {
174+
mergedOptions.memoryLimit(oldStatic.getMemoryLimit());
175+
}
176+
177+
if (mergedOptions.getAllowDirtyRead() == null) {
178+
mergedOptions.allowDirtyRead(oldStatic.getAllowDirtyRead());
179+
}
180+
181+
return mergedOptions;
168182
}
169183

170184
private Class<?> getTypeToRead(final ResultProcessor processor) {

src/test/java/com/arangodb/springframework/repository/CustomerRepository.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ public interface CustomerRepository extends ArangoRepository<Customer, String>,
5151
@Query("FOR c IN #collection FILTER c._key == @id AND c.`customer-name` == @name RETURN c")
5252
ArangoCursor<Customer> findOneByBindVarsAql(AqlQueryOptions options, @BindVars Map<String, Object> bindVars);
5353

54+
@QueryOptions(count = true)
55+
@Query("for i in @n..10000 return 1/i")
56+
ArangoCursor<Double> sequenceTo10K(@Param("n") Integer n, AqlQueryOptions options);
57+
5458
@Query("FOR c IN #collection FILTER c._key == @id AND c.`customer-name` == @name RETURN c")
5559
Customer findOneByNameAndBindVarsAql(@Param("name") String name, @BindVars Map<String, Object> bindVars);
5660

src/test/java/com/arangodb/springframework/repository/query/ArangoAqlQueryTest.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
import static org.hamcrest.Matchers.*;
55
import static org.hamcrest.collection.IsIn.isOneOf;
66
import static org.hamcrest.core.Is.is;
7-
import static org.junit.Assert.assertEquals;
8-
import static org.junit.Assert.assertTrue;
7+
import static org.junit.Assert.*;
98

109
import java.time.Instant;
1110
import java.util.*;
@@ -92,6 +91,24 @@ public void findOneByBindVarsAqlTest() {
9291
assertEquals(john, retrieved.next());
9392
}
9493

94+
@Test
95+
public void overrideQueryOptions() {
96+
Integer countNotOverridden = repository.sequenceTo10K(1, new AqlQueryOptions()).getCount();
97+
assertThat(countNotOverridden, is(10_000));
98+
99+
Integer countOverridden = repository.sequenceTo10K(1, new AqlQueryOptions().count(false)).getCount();
100+
assertThat(countOverridden, nullValue());
101+
}
102+
103+
@Test
104+
public void mergeQueryOptions() {
105+
List<Double> cursorNotMerged = repository.sequenceTo10K(0, new AqlQueryOptions()).asListRemaining();
106+
assertThat(cursorNotMerged, hasSize(10_001));
107+
assertThat(cursorNotMerged.get(0), nullValue());
108+
assertThrows(ArangoDBException.class,
109+
()-> repository.sequenceTo10K(0, new AqlQueryOptions().failOnWarning(true)));
110+
}
111+
95112
@Test
96113
public void findOneByComplementingNameAndBindVarsAqlTest() {
97114
repository.saveAll(customers);

0 commit comments

Comments
 (0)