You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
DATACOUCH-588 - Part 2 of framework changes. Add support for projection and distinct.
Support for projection is only for properties of the top-level entity. For
instance, in UserSubmission, only the properties below can be specified in
the projection. Projection support does not provide means of specifying
something like address.street - you can only project (or not project) the
whole address property. However, the address type in your resultType could
have a subset of the properties in Address.
If the corresponding submissions in the resultType
contained only the userId property
public class UserSubmission extends ComparableEntity {
private String id;
private String username;
private List<String> roles;
private Address address;
private List<Submission> submissions;
Support for Distinct - I have appropriated the MongoDB model for Distinct.
It defines a separate DistinctOperationSupport class (within
ExecutableFindByQuerySupport) which supports the distinct( distinctFields )
api and execution. The DistinctOperationSupport class has only a
distinctFields member, and a 'delegate' member, which is an
ExecutableFindByQuerySupport object. TBH, I don't see the advantage
over simply adding a distinctFields member to ExecutableFindByQuerySupport
Amend #1 - changes as discussed in Pull Request
- clean up test entity types
Amend #2
- Eliminate DistinctOperationSupport class. In MongoDB, only distinct on
a single field is supported, so the returnType from distinct was very
different from the returnType of other query operations (all(), one()
etc. (but so is count(), and it doesn't need it's own class)). In
Couchbase, distinct on any fields in the entity is allowed - so the
returned type could be the domainType or resultType. And as(resultType)
still allows any resultType to be specified. This makes it unnecessary
to have combinations of interfaces such as DistinctWithProjection and
DistinctWithQuery.
- Clean up the interfaces in ExecutableFindByQuery. There are two types
of interfaces (a) the TerminatingFindByQuery which has the one(), oneValue()
first(), firstValue(), all(), count(), exists() and stream(); and
(b) the option interfaces (FindByQueryWithConsistency etc), which are
essentially with-er interfaces. The changes are:
1) make all the with-er interfaces base interfaces instead of chaining them
together. (I don't know why there isn't simply one interface with all the
with-er methods).
2) make the ExecutableFindByQuery interface extend the Terminating interface
and all the with-er interfaces.
0 commit comments