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:
@@ -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"));
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user