Commit Graph

242 Commits

Author SHA1 Message Date
Michael Reiche
b1272bc49a Fix Collection Support for Cache for non-Collection Server. (#1418)
Also fix test setup index flakiness on older servers.

Closes #1417.
2022-05-09 13:34:19 -07:00
Michael Reiche
9fe8472b37 Check for _ID and _CAS as well as __id and __cas being projected from query and analytics. (#1390)
Closes #1389.
2022-05-09 13:18:53 -07:00
Michael Reiche
4a42cba52e Support testing against Capella. (#1386)
Support testing against Capella. Also includes sample to
use Capella control-plane.

Closes #1385.
2022-05-09 13:12:51 -07:00
Michael Reiche
9347a5097a Quotes around bucket name in setup for collection tests. (#1416)
Closes #1415.
2022-04-19 18:30:15 -07:00
Michael Reiche
c288d053c9 Querydsl support. (#1330)
Closes #1288.
2022-03-31 08:04:17 -07:00
Michael Reiche
fe59e0c945 Fix cache to use collections part 2. (#1373)
Closes #1369.
2022-03-15 20:52:34 -07:00
Michael Reiche
13d8b6dbc7 Fix cache.clear() to use collection. (#1371)
Closes #1369.

Co-authored-by: Michael Reiche <michael.reiche@couchbase.com>
2022-03-15 20:13:07 -07:00
Michael Reiche
3ec3a3080a Support derived queries on repositories defined with an abstract entity class. (#1366)
Motivation:
Currently an abstract entity class specified in the repository definition can
be used for the predicate typeKey = typeAlias(of abstract entity class) in
queries. Since documents are stored with typeKey = typeAlias(of concrete class)
those queries will never match any documents.  To allow this to work,
all of the abstract entity class an all concrete subclasses must use the
same typeAlias.

Once those documents are found, regardless of their concrete class,
they will all have the same typeKey = typeAlias, instead of having the
typeAlias specific to the concrete class. Additional information in
the stored document is needed to identify the concrete class (subtype
in the example test case), as well as a TypeMapper to interpret that
 information.

Changes:
This allows a common TypeAlias to be used for the purpose of the predicate
typeKey = typeAlias, and the determination of the concrete type by
implementing an AbstractingMappingCouchbaseConverter that inspects the
'subtype' property.

Closes #1365.

Co-authored-by: Michael Reiche <michael.reiche@couchbase.com>
2022-03-14 09:37:51 -07:00
Michael Reiche
d9327ceea2 Fix update to cache documentation. (#1359)
Closes #1358.
2022-02-22 10:09:25 -08:00
Michael Reiche
5804dd5a7e Reinstate CouchbaseCache documentation. (#1357)
Closes #1356.
2022-02-22 09:56:53 -08:00
Michael Reiche
83f55b1bda Allow CouchbaseCacheConfiguration to set collection. (#1344)
Closes #1343.
2022-02-16 09:32:14 -08:00
Michael Reiche
1fcd252b68 Translate CasMismatchException to OptimisticLockingFailureException. (#1341)
Translate CasMismatchException to OptimisticLockingFailureException
instead of DataIntegrityViolationException.  CasMismatchException is
a ConcurrencyFailureException which is a TransientDataAccessException.
Versus DataIntegrityViolation, which is a NonTransientDataAccessException.

Closed #1339.
2022-02-15 11:38:25 -08:00
Michael Reiche
fc075ccdeb Add collections support to N1qlJoin. (#1333)
The scope for the entity can come from an option, a method annotation,
an annotation on the repository or an annotation on the entity class.
All these possibilities are handle by PseudoArgs in the
OperationSupport implementation. That scope/collection are passed
into decodeEntity(). The scope/collection of the child can only come
from an annotation on the entity class. The scope/collection of the
parent and child are uses as follows:

1) Both the parent and the chold have non-default collections
It's possible that the scope for the parent was set with an annotation on
a repository method, the entity class or the repository class or a query
option. Since there is no means to set the scope of the child class by the
method, repository class or query option (only the annotation) we assume
that the (possibly) dynamic scope of the entity would be a better choice
as it is logical to put collections to be joined in the same scope.

2) The parent has a collection (and therefore a scope as well), but the
child  does not have a collection. Use the lhScope and lhCollection for
the entity.  The child is just the bucket.

3) The parent does not have a collection (or scope), but child does have a
collection. Using the same (default) scope for the child would mean
specifying a non-default collection in a default scope - which is not
allowed. So use the scope and collection from the child class.

4) Neither have collections, just use the bucket.

Closes #1325.
2022-02-15 11:37:54 -08:00
Michael Reiche
ef56e3f3aa Add mechanism for save to do one of insert, replace or upsert. (#1316)
Closes #1277.
2022-02-14 09:10:04 -08:00
Michael Reiche
5c5dde3db1 Collection support for predicates on meta fields. (#1338)
When a derived query is being created and there is a predicate on
a meta-field ( meta().id, cas, expiry), translate that field
(i.e. id -> meta().id) *without* the bucket or collection name,
as it might apply to a collelction which we do not know yet
(for instance, if there is a withCollection() specified)..
This is fine, because in a derived query, meta() without the
bucket or collection name is unambigous.
2022-02-14 09:09:09 -08:00
Michael Reiche
19c9e16717 Make withDurability() return WithScope type for all operations. (#1340)
Some of the operations were mistakenly declared to return a
WithCollection type, making it impossible to call the inScope()
method.

Closes #1329.
2022-02-11 08:22:04 -08:00
Michael Reiche
e20ebae10e Have tests remove the documents they insert. (#1336)
Closes #1335.
2022-02-09 21:56:22 -08:00
Michael Reiche
32f6a05462 Javadoc and other java 1_8 compatible changes in 50x back to main. (#1328)
Closes #1327.
2022-02-08 13:50:25 -08:00
Michael Reiche
c88a35c152 Fix slice support. (#1324)
Fix slice support. Also discontinue use of deprecated class.

Closes #1323.
2022-02-08 09:45:20 -08:00
Michael Reiche
895b2b270e Restore projection of class. (#1319)
Restore projection of class in queries. This is necessary for abstract repositories.

Closes #1315.
2022-02-03 06:19:32 -08:00
Michael Reiche
02bc0b35d3 Fix regression in IN operator. (#1309)
The regression occurred in changes for https://issues.couchbase.com/browse/MB-26606.

Closes #1308.
2022-01-25 10:11:35 -08:00
Michael Reiche
317d9b877c Allow caching null objects. (#1303)
Closes #939.

Co-authored-by: mikereiche <michael.reiche@couchbase.com>
2022-01-17 14:17:53 -08:00
Michael Reiche
e15c6d0b4b Copy sort from pageable to query. (#1305)
Closes #1304.
2022-01-17 11:01:56 -08:00
Michael Reiche
3a216a83b4 Incorporate changes from 5.0.x and bump Couchbase SDK. (#1287)
Closes #1286.

Co-authored-by: mikereiche <michael.reiche@couchbase.com>
2022-01-06 15:00:49 -08:00
Michael Reiche
6c6acf8ae2 Handle Collection<> parameters to repository query methods. (#1271)
Closes #1270.

Co-authored-by: mikereiche <michael.reiche@couchbase.com>
2021-11-12 07:15:45 -08:00
yyfMichaelYan
d8d249502d fix flaky test writesAndReadsCustomFieldsConvertedClass (#1264) 2021-11-08 11:40:01 -08:00
Michael Reiche
9f2d7ee6b5 Field named id treated as document id. (#1261)
Closes #1258.

Co-authored-by: mikereiche <michael.reiche@couchbase.com>
2021-10-26 10:52:50 -07:00
Michael Reiche
e1b0ea98d9 Reinstate the getDefaultConsistency() method in the Configuration. (#1249)
Closes #1243.
2021-10-22 11:42:55 -07:00
Michael Reiche
66cc1b5491 Changes for PR 1223 that I had missed. (#1230)
Closes #1229.
2021-09-14 16:38:11 -07:00
Michael Reiche
b9fa1c76ab Fix test failure against mocked. (#1227)
Closes #1226.
2021-09-14 11:10:16 -07:00
Michael Reiche
1e774d460b Test case for exceptions thrown from events - validation. (#1225)
Closes #1224.
2021-09-14 10:09:51 -07:00
Michael Reiche
a879d0b4e3 Use expiry(duration) with duration. (#1223)
Also adds test for exceptions thrown during events - with validator.

Closes #1204.
2021-09-14 09:49:12 -07:00
Michael Reiche
7c1167f302 Specifying withExpiry(Duration) on findById() uses getTouchAndRead(). (#1196)
Closes #982.
2021-09-13 11:21:23 -07:00
Michael Reiche
345af53930 Pass source as parent when reading subobject. (#1222)
Closes #1221.

Co-authored-by: mikereiche <michael.reiche@couchbase.com>
2021-09-13 11:11:05 -07:00
Michael Reiche
da3e8e0e36 Support N1QL Join Annotations. (#1211)
* Support N1QL Join Annotations.

Closes #1198.
2021-09-12 18:38:01 -07:00
Michael Reiche
4bd82ea23c Add project(fields) to findByQuery similar to same method on findById. (#1212)
Closes #1208, #1213.
2021-09-12 17:17:47 -07:00
Michael Reiche
bcf11ce856 Support derived queries from methods named findDistinctF1AndF2ByF3() (#1202)
Support derived queries from methods named findDistinctF1AndF2ByF3().

Closes #1200.
2021-08-23 13:51:55 -07:00
Michael Reiche
f0880daf7a Fix ArrayIndexOutOfBoundsException on String queries that use paging. (#1197)
Closes #1155.

Co-authored-by: mikereiche <michael.reiche@couchbase.com>
2021-08-23 13:06:57 -07:00
Michael Reiche
dffd203a57 Remove the sort from query before executing count. (#1194)
Also creates the query with skip and limit from any Pageable parameter instead of applying it later.
Closes #1191.
2021-08-18 09:07:15 -07:00
Michael Reiche
7e2963a365 Throw an explicit exception if count query does not return a count. (#1195)
Also just use the first projected property instead of one explicitly named "count".

Closes #925,#960.
2021-08-18 09:06:43 -07:00
Michael Reiche
07022c1e86 Remove unnecessary auditorAwareRef from test config. (#1189)
Remove unnecessary auditorAwareRef from test config as it causes
confusion. The property does not need to be preset for the auditorAwareRef
bean to be used.
The dateTimeProviderRef must be present for the provided
dateTimeProviderRef bean to be used.

Closes #1052.
2021-08-17 10:35:33 -07:00
Michael Reiche
fada241988 N1ql query should project getFieldName() instead of getName(). (#1185)
Closes #1184.
2021-08-16 13:02:55 -07:00
Michael Reiche
d210678c78 Field(name=myName) annotation work like Field(myName) and Field(value=myName). (#1186)
Closes #1068.
2021-08-16 12:55:02 -07:00
Michael Reiche
52b1832cb5 Expiration annotation on field will retrieve expiration in N1ql queries. (#1188)
Closes #1060.
2021-08-16 12:53:46 -07:00
Michael Reiche
6512fc087b To support jdk 16, add converters and module-info. (#1167)
To support jdk 16, add converters and module-info.

Closes #1057.
2021-08-13 11:28:04 -07:00
Michael Reiche
51b0d32636 Add Transient, Stream and Flux Pair tests. (#1175)
Closes #1174.
2021-08-11 14:45:01 -07:00
Michael Reiche
7d5e33ad71 Handle auto index on field path. (#1169)
Closes #1166.

Co-authored-by: mikereiche <michael.reiche@couchbase.com>
2021-08-11 10:29:05 -07:00
Michael Reiche
9e3bfe5b71 Omit annotations from the repository and domaintype in CrudMethodMetadata. (#1170)
Omit annotations from the repository and domaintype in
CrudMethodMetadata as they may be different for the same method.
The annotations from the repository and domaintype are obtained directly
in CouchbaseRepositoryBase.

Closes #1168.

Co-authored-by: mikereiche <michael.reiche@couchbase.com>
2021-08-10 20:17:12 -07:00
Michael Reiche
7cde6b919e Scopes and collections for repositories (#1149)
* Add support for scopes and collections for repositories.

Adds DynamicProxyable and DynamicInvocationHandler to
set scope/collection/options on PseudoArgs when calling
operations via repository interfaces.

Closes #963.

Co-authored-by: mikereiche <michael.reiche@couchbase.com>
2021-08-09 09:57:29 -07:00
Michael Reiche
155663e66f Add missing hooks for callbacks. (#1142)
1) the previous change (#955) to CouchbaseAuditingRegister intended to register
 AuditingEntityCallback instead of AuditingEventListener but only changed the
name that AuditingEventListener was registered with. Since
AuditingEventListener does exactly the same thing as AuditingEntityCallback,
it behaved as those AuditingEntityCallback was being used.

2) It seems that the two mechanisms - EntityCallback and EventListener
both do more-or-less the same thing. I'm not sure why there are two
mechanisms to do the same thing.

3) Although the ReactiveAuditingEntityCallback mechanism is triggered
only for reactive operations and the non-reactive AuditingEntityCallback
is triggered only for non-reactive operations, the events are triggered
for both. Since there was a desire to have distinct callbacks for
reactive/non-reactive operations, I also made distinct events for
reactive/non-reactive operations.  However both the reactive and non-reactive
event mechanisms are triggered for either reactive and non-reactive operations,
so it is necessary for the mechanism to determine if it should act on the
event.

4) Although there is an AbstractCouchbaseEventListener that is extended by
LoggingEventListener and ValidatingEventListener, AuditingEventListener does
not extend it (maybe it should).

Closes #1074.

Co-authored-by: mikereiche <michael.reiche@couchbase.com>
2021-06-09 21:54:24 -04:00