Skip to content

Commit 75ddd5a

Browse files
committed
DATACOUCH-1055 - Queries on field annotated properties have original name.
Queries on field annotated properties have original name. They should use getFieldName() which will use the annotated if it exists.
1 parent 1329cae commit 75ddd5a

File tree

5 files changed

+70
-25
lines changed

5 files changed

+70
-25
lines changed

src/main/java/org/springframework/data/couchbase/repository/query/N1qlQueryCreator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ protected QueryCriteria create(final Part part, final Iterator<Object> iterator)
6161
}
6262

6363
static Converter<? super CouchbasePersistentProperty, String> cvtr = (
64-
source) -> new StringBuilder(source.getName().length() + 2).append('`').append(source.getName()).append('`')
65-
.toString();
64+
source) -> new StringBuilder(source.getFieldName().length() + 2).append('`').append(source.getFieldName())
65+
.append('`').toString();
6666

6767
@Override
6868
protected QueryCriteria and(final Part part, final QueryCriteria base, final Iterator<Object> iterator) {

src/test/java/org/springframework/data/couchbase/domain/Person.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import java.util.Optional;
1919
import java.util.UUID;
2020

21-
import com.couchbase.client.core.deps.com.fasterxml.jackson.annotation.JsonProperty;
2221
import org.springframework.data.annotation.CreatedBy;
2322
import org.springframework.data.annotation.CreatedDate;
2423
import org.springframework.data.annotation.LastModifiedBy;
@@ -53,6 +52,7 @@ public Person(String firstname, String lastname) {
5352
this();
5453
setFirstname(firstname);
5554
setLastname(lastname);
55+
setMiddlename("Nick");
5656
}
5757

5858
public Person(int id, String firstname, String lastname) {

src/test/java/org/springframework/data/couchbase/domain/PersonRepository.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@
1515
*/
1616
package org.springframework.data.couchbase.domain;
1717

18-
import com.couchbase.client.java.query.QueryScanConsistency;
18+
import java.util.List;
19+
import java.util.Optional;
20+
import java.util.UUID;
21+
1922
import org.springframework.data.couchbase.repository.Query;
2023
import org.springframework.data.couchbase.repository.ScanConsistency;
2124
import org.springframework.data.repository.CrudRepository;
2225
import org.springframework.data.repository.query.Param;
2326

24-
import java.util.List;
25-
import java.util.Optional;
26-
import java.util.UUID;
27+
import com.couchbase.client.java.query.QueryScanConsistency;
2728

2829
/**
2930
* @author Michael Reiche
@@ -107,6 +108,9 @@ public interface PersonRepository extends CrudRepository<Person, String> {
107108

108109
void deleteAll();
109110

110-
@ScanConsistency(query=QueryScanConsistency.REQUEST_PLUS)
111+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
111112
List<Person> findByAddressStreet(String street);
113+
114+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
115+
List<Person> findByMiddlename(String nickName);
112116
}

src/test/java/org/springframework/data/couchbase/repository/CouchbaseRepositoryQueryIntegrationTests.java

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@
1616

1717
package org.springframework.data.couchbase.repository;
1818

19-
import static java.util.Arrays.*;
20-
import static org.assertj.core.api.Assertions.*;
21-
import static org.junit.jupiter.api.Assertions.*;
19+
import static java.util.Arrays.asList;
20+
import static org.assertj.core.api.Assertions.assertThat;
21+
import static org.junit.jupiter.api.Assertions.assertEquals;
22+
import static org.junit.jupiter.api.Assertions.assertFalse;
23+
import static org.junit.jupiter.api.Assertions.assertThrows;
24+
import static org.junit.jupiter.api.Assertions.assertTrue;
2225

2326
import java.util.ArrayList;
2427
import java.util.Arrays;
@@ -49,14 +52,14 @@
4952
import org.springframework.data.couchbase.util.ClusterAwareIntegrationTests;
5053
import org.springframework.data.couchbase.util.ClusterType;
5154
import org.springframework.data.couchbase.util.IgnoreWhen;
52-
import org.springframework.data.util.StreamUtils;
5355
import org.springframework.data.domain.Page;
5456
import org.springframework.data.domain.PageRequest;
5557
import org.springframework.data.domain.Pageable;
5658
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
5759

5860
import com.couchbase.client.core.error.IndexExistsException;
59-
import reactor.core.publisher.Flux;
61+
import com.couchbase.client.java.query.QueryOptions;
62+
import com.couchbase.client.java.query.QueryScanConsistency;
6063

6164
/**
6265
* Repository tests
@@ -112,6 +115,22 @@ void nestedFind() {
112115
personRepository.save(person);
113116
List<Person> persons = personRepository.findByAddressStreet("Maple");
114117
assertEquals(1, persons.size());
118+
List<Person> persons2 = personRepository.findByMiddlename("Nick");
119+
assertEquals(1, persons2.size());
120+
} finally {
121+
personRepository.deleteById(person.getId().toString());
122+
}
123+
}
124+
125+
@Test
126+
void annotatedFieldFind() {
127+
Person person = null;
128+
try {
129+
person = new Person(1, "first", "last");
130+
person.setMiddlename("Nick"); // middlename is stored as nickname
131+
personRepository.save(person);
132+
List<Person> persons2 = personRepository.findByMiddlename("Nick");
133+
assertEquals(1, persons2.size());
115134
} finally {
116135
personRepository.deleteById(person.getId().toString());
117136
}
@@ -145,12 +164,15 @@ void findBySimpleProperty() {
145164
try {
146165
vie = new Airport("airports::vie", "vie", "loww");
147166
vie = airportRepository.save(vie);
167+
Airport airport2 = airportRepository.findByIata(vie.getIata(),
168+
QueryOptions.queryOptions().scanConsistency(QueryScanConsistency.NOT_BOUNDED));
169+
assertEquals(airport2.getId(), vie.getId());
170+
148171
List<Airport> airports = airportRepository.findAllByIata("vie");
149172
assertEquals(1, airports.size());
150173
Airport airport1 = airportRepository.findById(airports.get(0).getId()).get();
151174
assertEquals(airport1.getIata(), vie.getIata());
152-
Airport airport2 = airportRepository.findByIata(airports.get(0).getIata());
153-
assertEquals(airport1.getId(), vie.getId());
175+
154176
} finally {
155177
airportRepository.delete(vie);
156178
}
@@ -173,7 +195,9 @@ void count() {
173195

174196
try {
175197

176-
airportRepository.saveAll( Arrays.stream(iatas).map((iata) -> new Airport("airports::"+iata, iata, iata.toLowerCase(Locale.ROOT))).collect(Collectors.toSet()));
198+
airportRepository.saveAll(
199+
Arrays.stream(iatas).map((iata) -> new Airport("airports::" + iata, iata, iata.toLowerCase(Locale.ROOT)))
200+
.collect(Collectors.toSet()));
177201
Long count = airportRepository.countFancyExpression(asList("JFK"), asList("jfk"), false);
178202
assertEquals(1, count);
179203

@@ -198,7 +222,8 @@ void count() {
198222
assertEquals(0, airportCount);
199223

200224
} finally {
201-
airportRepository.deleteAllById(Arrays.stream(iatas).map((iata) -> "airports::"+iata).collect(Collectors.toSet()));
225+
airportRepository
226+
.deleteAllById(Arrays.stream(iatas).map((iata) -> "airports::" + iata).collect(Collectors.toSet()));
202227
}
203228
}
204229

@@ -295,7 +320,6 @@ void deleteAllById() {
295320

296321
airportRepository.deleteAllById(asList(vienna.getId(), losAngeles.getId()));
297322

298-
299323
assertThat(airportRepository.findAll()).containsExactly(frankfurt);
300324
} finally {
301325
airportRepository.deleteAll();

src/test/java/org/springframework/data/couchbase/repository/query/N1qlQueryCreatorTests.java

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,13 @@
1515
*/
1616
package org.springframework.data.couchbase.repository.query;
1717

18-
import static org.junit.jupiter.api.Assertions.*;
19-
import static org.springframework.data.couchbase.core.query.QueryCriteria.*;
18+
import static org.junit.jupiter.api.Assertions.assertEquals;
19+
import static org.springframework.data.couchbase.core.query.QueryCriteria.where;
2020

2121
import java.lang.reflect.Method;
22-
import java.util.ArrayList;
23-
import java.util.Arrays;
2422
import java.util.LinkedList;
2523
import java.util.List;
2624

27-
import com.couchbase.client.java.json.JsonArray;
28-
import com.couchbase.client.java.json.JsonObject;
2925
import org.junit.jupiter.api.BeforeEach;
3026
import org.junit.jupiter.api.Test;
3127
import org.springframework.data.couchbase.core.convert.CouchbaseConverter;
@@ -34,12 +30,20 @@
3430
import org.springframework.data.couchbase.core.mapping.CouchbasePersistentEntity;
3531
import org.springframework.data.couchbase.core.mapping.CouchbasePersistentProperty;
3632
import org.springframework.data.couchbase.core.query.Query;
33+
import org.springframework.data.couchbase.domain.Person;
34+
import org.springframework.data.couchbase.domain.PersonRepository;
3735
import org.springframework.data.couchbase.domain.User;
3836
import org.springframework.data.couchbase.domain.UserRepository;
3937
import org.springframework.data.mapping.context.MappingContext;
40-
import org.springframework.data.repository.query.*;
38+
import org.springframework.data.repository.query.DefaultParameters;
39+
import org.springframework.data.repository.query.ParameterAccessor;
40+
import org.springframework.data.repository.query.Parameters;
41+
import org.springframework.data.repository.query.ParametersParameterAccessor;
4142
import org.springframework.data.repository.query.parser.PartTree;
4243

44+
import com.couchbase.client.java.json.JsonArray;
45+
import com.couchbase.client.java.json.JsonObject;
46+
4347
/**
4448
* @author Michael Nitschinger
4549
* @author Michael Reiche
@@ -68,6 +72,19 @@ void createsQueryCorrectly() throws Exception {
6872
assertEquals(query.export(), " WHERE " + where("firstname").is("Oliver").export());
6973
}
7074

75+
@Test
76+
void createsQueryFieldAnnotationCorrectly() throws Exception {
77+
String input = "findByMiddlename";
78+
PartTree tree = new PartTree(input, Person.class);
79+
Method method = PersonRepository.class.getMethod(input, String.class);
80+
81+
N1qlQueryCreator creator = new N1qlQueryCreator(tree, getAccessor(getParameters(method), "Oliver"), null,
82+
converter);
83+
Query query = creator.createQuery();
84+
85+
assertEquals(query.export(), " WHERE " + where("nickname").is("Oliver").export());
86+
}
87+
7188
@Test
7289
void queryParametersArray() throws Exception {
7390
String input = "findByFirstnameIn";

0 commit comments

Comments
 (0)