DATACOUCH-166 - Add basic SpEL support

Added the step of parsing SpEL expressions delimited by ${ } in StringN1qlBasedQuery, then the actual evaluation of each expression.

Refactored StringN1qlBasedQuery to use SpEL across the board, including for N1QL specific placeholders (SELECT-FROM, WHERE filter, etc...).

Refactored StringN1qlBasedQuery to use local methods rather than static methods, and amended the unit tests accordingly (using mocks).

Refactored getStatement and getCountStatement so they can see the parameters passed in at runtime.

Added unit tests + integration test.

Added SpEL support example in documentation.
This commit is contained in:
Simon Baslé
2015-10-16 16:51:31 +02:00
parent 6294b03f46
commit ec129e86a8
10 changed files with 324 additions and 91 deletions

View File

@@ -139,6 +139,14 @@ public class SimpleCouchbaseRepositoryTests {
}
}
@Test
public void shouldFindFromUsernameInlineWithSpelParsing() {
User user = repository.findByUsernameWithSpelAndPlaceholder();
assertNotNull(user);
assertEquals("testuser-4", user.getKey());
assertEquals("uname-4", user.getUsername());
}
@Test
public void shouldFindFromDeriveQueryWithRegexpAndIn() {
User user = repository.findByUsernameRegexAndUsernameIn("uname-[123]", Arrays.asList("uname-2", "uname-4"));

View File

@@ -34,12 +34,15 @@ public interface UserRepository extends CouchbaseRepository<User, String> {
@View(designDocument = "user", viewName = "all")
Iterable<User> customViewQuery(ViewQuery query);
@Query("$SELECT_ENTITY$ WHERE username = $1")
@Query("${#n1ql.selectEntity} WHERE username = $1")
User findByUsername(String username);
@Query("SELECT * FROM $BUCKET$ WHERE username = $1")
@Query("SELECT * FROM ${#n1ql.bucket} WHERE username = $1")
User findByUsernameBadSelect(String username);
@Query("${#n1ql.selectEntity} WHERE username LIKE '%-${3 + 1}'")
User findByUsernameWithSpelAndPlaceholder();
@Query
User findByUsernameRegexAndUsernameIn(String regex, List<String> sample);