Skip to content

Commit 2ff18eb

Browse files
authored
Fix number of parameters in string based @query queries. (#1978)
Closed #1977.
1 parent 395c7aa commit 2ff18eb

File tree

3 files changed

+36
-2
lines changed

3 files changed

+36
-2
lines changed

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

+5-2
Original file line numberDiff line numberDiff line change
@@ -711,8 +711,11 @@ private static Object[] getParameters(ParameterAccessor accessor) {
711711
for (Object o : accessor) {
712712
params.add(o);
713713
}
714-
params.add(accessor.getPageable());
715-
params.add(accessor.getSort());
714+
if( accessor.getPageable().isPaged()) {
715+
params.add(accessor.getPageable());
716+
} else if (accessor.getSort().isSorted()) {
717+
params.add(accessor.getSort());
718+
}
716719
return params.toArray();
717720
}
718721
}

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

+6
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.springframework.data.domain.Page;
4141
import org.springframework.data.domain.Pageable;
4242
import org.springframework.data.domain.Slice;
43+
import org.springframework.data.domain.Sort;
4344
import org.springframework.data.repository.query.Param;
4445
import org.springframework.stereotype.Repository;
4546

@@ -154,6 +155,11 @@ Long countFancyExpression(@Param("projectIds") List<String> projectIds, @Param("
154155
@Query("#{#n1ql.selectEntity} WHERE #{#n1ql.filter} AND iata != $1")
155156
Page<Airport> getAllByIataNot(String iata, Pageable pageable);
156157

158+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
159+
@Query("#{#n1ql.selectEntity} WHERE #{#n1ql.filter} AND iata != $1")
160+
List<Airport> getAllByIataNotSort(String iata, Sort sort);
161+
162+
157163
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
158164
@Query("SELECT iata, \"\" as __id, 0 as __cas from #{#n1ql.bucket} WHERE #{#n1ql.filter} order by meta().id")
159165
List<String> getStrings();

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

+25
Original file line numberDiff line numberDiff line change
@@ -884,6 +884,31 @@ void sortedRepository() {
884884
}
885885
}
886886

887+
@Test
888+
void countSlicePageTest() {
889+
airportRepository.withOptions(QueryOptions.queryOptions().scanConsistency(REQUEST_PLUS)).deleteAll();
890+
String[] iatas = { "JFK", "IAD", "SFO", "SJC", "SEA", "LAX", "PHX" };
891+
892+
airportRepository.countOne();
893+
try {
894+
airportRepository.saveAll(
895+
Arrays.stream(iatas).map((iata) -> new Airport("airports::" + iata, iata, iata.toLowerCase(Locale.ROOT)))
896+
.collect(Collectors.toSet()));
897+
898+
Pageable sPageable = PageRequest.of(0, 2).withSort(Sort.by("iata"));
899+
Page<Airport> sPage = airportRepository.getAllByIataNot("JFK", sPageable);
900+
System.out.println(sPage);
901+
902+
Sort sort = Sort.by("iata");
903+
List<Airport> sList = airportRepository.getAllByIataNotSort("JFK", sort);
904+
System.out.println(sList);
905+
906+
} finally {
907+
airportRepository
908+
.deleteAllById(Arrays.stream(iatas).map((iata) -> "airports::" + iata).collect(Collectors.toSet()));
909+
}
910+
}
911+
887912
@Test
888913
void countSlicePage() {
889914
airportRepository.withOptions(QueryOptions.queryOptions().scanConsistency(REQUEST_PLUS)).deleteAll();

0 commit comments

Comments
 (0)