DATACOUCH-137 - queryDerivation for N1QL annotated methods.

Abstracted the N1QL-based variants in AbstractN1qlBasedQuery. This implementation doesn't recognize QueryParams or QueryPlan anymore in the method parameters so that the method signatures are not store-dependent.

Added query derivation from PartTree to N1QL query, using N1qlQueryCreator.

Unit tested the mapping between a Part.Type and the corresponding N1QL Expression.
This commit is contained in:
Simon Baslé
2015-07-07 19:41:27 +02:00
parent 9deaf6b480
commit c29727595c
12 changed files with 947 additions and 109 deletions

View File

@@ -18,10 +18,13 @@ package org.springframework.data.couchbase.repository;
import static org.junit.Assert.*;
import java.util.Arrays;
import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.view.Stale;
import com.couchbase.client.java.view.ViewQuery;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -101,6 +104,8 @@ public class SimpleCouchbaseRepositoryTests {
}
@Test
@Ignore("View based query with copy of params from a ViewQuery in the method parameter not implemented")
//TODO re-enable test once ViewQuery parameters other than designDoc/viewName can be copied
public void shouldFindCustom() {
Iterable<User> users = repository.customViewQuery(ViewQuery.from("", "").limit(2).stale(Stale.FALSE));
int size = 0;
@@ -133,4 +138,12 @@ public class SimpleCouchbaseRepositoryTests {
}
}
@Test
public void shouldFindFromDeriveQueryWithRegexpAndIn() {
User user = repository.findByUsernameRegexAndUsernameIn("uname-[123]", Arrays.asList("uname-2", "uname-4"));
assertNotNull(user);
assertEquals("testuser-2", user.getKey());
assertEquals("uname-2", user.getUsername());
}
}

View File

@@ -16,6 +16,8 @@
package org.springframework.data.couchbase.repository;
import java.util.List;
import com.couchbase.client.java.view.ViewQuery;
import org.springframework.data.couchbase.core.view.N1QL;
@@ -35,4 +37,7 @@ public interface UserRepository extends CouchbaseRepository<User, String> {
@N1QL("SELECT * FROM $BUCKET$ WHERE username = $1")
User findByUsernameBadSelect(String username);
@N1QL
User findByUsernameRegexAndUsernameIn(String regex, List<String> sample);
}