@InterfaceStability.Committed @InterfaceAudience.Public public class AsyncLookupInBuilder extends Object
A builder for subdocument lookups. In order to perform the final set of operations, use the execute()
method. Operations are performed asynchronously (see LookupInBuilder
for a synchronous version).
Instances of this builder should be obtained through AsyncBucket.lookupIn(String)
rather than directly constructed.
Constructor and Description |
---|
AsyncLookupInBuilder(ClusterFacade core,
String bucketName,
CouchbaseEnvironment environment,
FragmentTranscoder transcoder,
String docId)
Instances of this builder should be obtained through
AsyncBucket.lookupIn(String) rather than directly constructed. |
Modifier and Type | Method and Description |
---|---|
AsyncLookupInBuilder |
accessDeleted(boolean accessDeleted)
Set accessDeleted to true, if the document has been deleted to access xattrs
|
protected rx.Observable<DocumentFragment<Lookup>> |
doMultiLookup(long timeout,
TimeUnit timeUnit)
Helper method to perform a multi path lookup.
|
protected rx.Observable<DocumentFragment<Lookup>> |
doSingleLookup(LookupSpec spec,
long timeout,
TimeUnit timeUnit) |
rx.Observable<DocumentFragment<Lookup>> |
execute()
Perform several
lookup operations inside a single existing JSON document . |
rx.Observable<DocumentFragment<Lookup>> |
execute(long timeout,
TimeUnit timeUnit)
Perform several
lookup operations inside a single existing JSON document . |
AsyncLookupInBuilder |
exists(Iterable<String> paths,
SubdocOptionsBuilder optionsBuilder)
Check if a value exists inside the document (if it does not, attempting to get the
DocumentFragment.content(int) will raise an error). |
AsyncLookupInBuilder |
exists(String... paths)
Check if a value exists inside the document (if it does not, attempting to get the
DocumentFragment.content(int) will raise an error). |
AsyncLookupInBuilder |
exists(String path,
SubdocOptionsBuilder optionsBuilder)
Check if a value exists inside the document (if it does not, attempting to get the
DocumentFragment.content(int) will raise an error). |
AsyncLookupInBuilder |
get()
Get the full JSON document.
|
AsyncLookupInBuilder |
get(Iterable<String> paths,
SubdocOptionsBuilder optionsBuilder)
Get a value inside the JSON document.
|
AsyncLookupInBuilder |
get(String... paths)
Get a value inside the JSON document.
|
AsyncLookupInBuilder |
get(String path,
SubdocOptionsBuilder optionsBuilder)
Get a value inside the JSON document.
|
AsyncLookupInBuilder |
getCount(Iterable<String> paths,
SubdocOptionsBuilder optionsBuilder)
Get a value inside the JSON document.
|
AsyncLookupInBuilder |
getCount(String... paths)
Get the count of values inside the JSON document.
|
AsyncLookupInBuilder |
getCount(String path,
SubdocOptionsBuilder optionsBuilder)
Get the count of values inside the JSON document.
|
AsyncLookupInBuilder |
includeRaw(boolean includeRaw)
Set to true, includes the raw byte value for each GET in the results, in addition to the deserialized content.
|
boolean |
isIncludeRaw() |
String |
toString() |
@InterfaceAudience.Private public AsyncLookupInBuilder(ClusterFacade core, String bucketName, CouchbaseEnvironment environment, FragmentTranscoder transcoder, String docId)
Instances of this builder should be obtained through AsyncBucket.lookupIn(String)
rather than directly constructed.
@InterfaceStability.Committed public AsyncLookupInBuilder accessDeleted(boolean accessDeleted)
Set accessDeleted to true, if the document has been deleted to access xattrs
accessDeleted
- true to access deleted document xattrspublic rx.Observable<DocumentFragment<Lookup>> execute()
Perform several lookup
operations inside a single existing JSON document
. The list of path to look for inside the JSON is constructed through builder methods get(String...)
and exists(String...)
.
The subdocument API has the benefit of only transmitting the fragment of the document you work with on the wire, instead of the whole document.
If multiple operations are specified, each spec will receive an answer, overall contained in a DocumentFragment
, meaning that if sub-document level error conditions happen (like the path is malformed or doesn’t exist), the whole operation still succeeds.
If a single operation is specified, then any error other that a path not found will cause the Observable to fail with the corresponding SubDocumentException
. Otherwise a DocumentFragment
is returned.
Calling DocumentFragment.content(String)
or one of its variants on a failed spec/path will throw the corresponding SubDocumentException
. For successful gets, it will return the value (or null in the case of a path not found, and only in this case). For exists, it will return true (or false for a path not found).
To check for any error without throwing an exception, use DocumentFragment.status(String)
(or its index-based variant).
To check that a given path (or index) is valid for calling content()
on it without raising an Exception, use DocumentFragment.exists(String)
.
One special fatal error can also happen, when the value couldn’t be decoded from JSON. In that case, the ResponseStatus for the path is ResponseStatus.FAILURE
and the content(path) will throw a TranscodingException
.
This Observable most notable error conditions are:
DocumentDoesNotExistException
DocumentNotJsonException
IllegalArgumentException
Other document-level error conditions are similar to those encountered during a document-level AsyncBucket.get(String)
.
Observable
of a single DocumentFragment
representing the whole list of results (1 for each spec), unless a document-level error happened (in which case an exception is propagated).public rx.Observable<DocumentFragment<Lookup>> execute(long timeout, TimeUnit timeUnit)
Perform several lookup
operations inside a single existing JSON document
. The list of path to look for inside the JSON is constructed through builder methods get(String...)
and exists(String...)
.
The subdocument API has the benefit of only transmitting the fragment of the document you work with on the wire, instead of the whole document.
If multiple operations are specified, each spec will receive an answer, overall contained in a DocumentFragment
, meaning that if sub-document level error conditions happen (like the path is malformed or doesn’t exist), the whole operation still succeeds.
If a single operation is specified, then any error other that a path not found will cause the Observable to fail with the corresponding SubDocumentException
. Otherwise a DocumentFragment
is returned.
Calling DocumentFragment.content(String)
or one of its variants on a failed spec/path will throw the corresponding SubDocumentException
. For successful gets, it will return the value (or null in the case of a path not found, and only in this case). For exists, it will return true (or false for a path not found).
To check for any error without throwing an exception, use DocumentFragment.status(String)
(or its index-based variant).
To check that a given path (or index) is valid for calling content()
on it without raising an Exception, use DocumentFragment.exists(String)
.
One special fatal error can also happen, when the value couldn’t be decoded from JSON. In that case, the ResponseStatus for the path is ResponseStatus.FAILURE
and the content(path) will throw a TranscodingException
.
This Observable most notable error conditions are:
DocumentDoesNotExistException
DocumentNotJsonException
IllegalArgumentException
Other document-level error conditions are similar to those encountered during a document-level AsyncBucket.get(String)
.
timeout
- the specific timeout to apply for the operation.timeUnit
- the time unit for the timeout.Observable
of a single DocumentFragment
representing the whole list of results (1 for each spec), unless a document-level error happened (in which case an exception is propagated).public AsyncLookupInBuilder includeRaw(boolean includeRaw)
Set to true, includes the raw byte value for each GET in the results, in addition to the deserialized content.
public boolean isIncludeRaw()
public AsyncLookupInBuilder get(String... paths)
Get a value inside the JSON document.
paths
- the path inside the document where to get the value from.@InterfaceStability.Committed public AsyncLookupInBuilder get()
Get the full JSON document.
public AsyncLookupInBuilder get(String path, SubdocOptionsBuilder optionsBuilder)
Get a value inside the JSON document.
path
- the path inside the document where to get the value from.optionsBuilder
- SubdocOptionsBuilder
public AsyncLookupInBuilder get(Iterable<String> paths, SubdocOptionsBuilder optionsBuilder)
Get a value inside the JSON document.
paths
- the path inside the document where to get the value from.optionsBuilder
- SubdocOptionsBuilder
public AsyncLookupInBuilder exists(String... paths)
Check if a value exists inside the document (if it does not, attempting to get the DocumentFragment.content(int)
will raise an error). This doesn’t transmit the value on the wire if it exists, saving the corresponding byte overhead.
paths
- the path inside the document to check for existence.public AsyncLookupInBuilder exists(String path, SubdocOptionsBuilder optionsBuilder)
Check if a value exists inside the document (if it does not, attempting to get the DocumentFragment.content(int)
will raise an error). This doesn’t transmit the value on the wire if it exists, saving the corresponding byte overhead.
path
- the path inside the document to check for existence.optionsBuilder
- SubdocOptionsBuilder
public AsyncLookupInBuilder exists(Iterable<String> paths, SubdocOptionsBuilder optionsBuilder)
Check if a value exists inside the document (if it does not, attempting to get the DocumentFragment.content(int)
will raise an error). This doesn’t transmit the value on the wire if it exists, saving the corresponding byte overhead.
paths
- the path inside the document to check for existence.optionsBuilder
- SubdocOptionsBuilder
public AsyncLookupInBuilder getCount(String... paths)
Get the count of values inside the JSON document.
This method is only available with Couchbase Server 5.0 and later.
paths
- the path inside the document where to get the count from.public AsyncLookupInBuilder getCount(String path, SubdocOptionsBuilder optionsBuilder)
Get the count of values inside the JSON document.
This method is only available with Couchbase Server 5.0 and later.
path
- the path inside the document where to get the count from.optionsBuilder
- SubdocOptionsBuilder
public AsyncLookupInBuilder getCount(Iterable<String> paths, SubdocOptionsBuilder optionsBuilder)
Get a value inside the JSON document.
This method is only available with Couchbase Server 5.0 and later.
paths
- the path inside the document where to get the value from.optionsBuilder
- SubdocOptionsBuilder
protected rx.Observable<DocumentFragment<Lookup>> doSingleLookup(LookupSpec spec, long timeout, TimeUnit timeUnit)
protected rx.Observable<DocumentFragment<Lookup>> doMultiLookup(long timeout, TimeUnit timeUnit)
Helper method to perform a multi path lookup.
Copyright © 2015 Couchbase, Inc.