public interface ReadContext extends AutoCloseable
Modifier and Type | Interface and Description |
---|---|
static class |
ReadContext.QueryAnalyzeMode
Used to specify the mode in which the query should be analyzed by
analyzeQuery(Statement,QueryAnalyzeMode) . |
Modifier and Type | Method and Description |
---|---|
ResultSet |
analyzeQuery(Statement statement,
ReadContext.QueryAnalyzeMode queryMode)
Analyzes a query and returns query plan and/or query execution statistics information.
|
void |
close()
Closes this read context and frees up the underlying resources.
|
ResultSet |
executeQuery(Statement statement,
Options.QueryOption... options)
Executes a query against the database.
|
AsyncResultSet |
executeQueryAsync(Statement statement,
Options.QueryOption... options)
Same as
#executeQuery(Statement, QueryOption...) , but is guaranteed to be non-blocking
and returns its results as an AsyncResultSet . |
ResultSet |
read(String table,
KeySet keys,
Iterable<String> columns,
Options.ReadOption... options)
Reads zero or more rows from a database.
|
AsyncResultSet |
readAsync(String table,
KeySet keys,
Iterable<String> columns,
Options.ReadOption... options)
Same as
#read(String, KeySet, Iterable, ReadOption...) , but is guaranteed to be
non-blocking and will return the results as an AsyncResultSet . |
Struct |
readRow(String table,
Key key,
Iterable<String> columns)
Reads a single row from a database, returning
null if the row does not exist. |
com.google.api.core.ApiFuture<Struct> |
readRowAsync(String table,
Key key,
Iterable<String> columns)
Same as
readRow(String, Key, Iterable) , but is guaranteed to be non-blocking. |
Struct |
readRowUsingIndex(String table,
String index,
Key key,
Iterable<String> columns)
Reads a single row from a database using an index, returning
null if the row does not
exist. |
com.google.api.core.ApiFuture<Struct> |
readRowUsingIndexAsync(String table,
String index,
Key key,
Iterable<String> columns)
Same as
readRowUsingIndex(String, String, Key, Iterable) , but is guaranteed to be
non-blocking. |
ResultSet |
readUsingIndex(String table,
String index,
KeySet keys,
Iterable<String> columns,
Options.ReadOption... options)
Reads zero or more rows from a database using an index.
|
AsyncResultSet |
readUsingIndexAsync(String table,
String index,
KeySet keys,
Iterable<String> columns,
Options.ReadOption... options)
Same as
#readUsingIndex(String, String, KeySet, Iterable, ReadOption...) , but is
guaranteed to be non-blocking and will return its results as an AsyncResultSet . |
ResultSet read(String table, KeySet keys, Iterable<String> columns, Options.ReadOption... options)
Implementations may or may not block in the initial read(...)
call; for those that
do not, the remote call will be initiated immediately but blocking on the response is deferred
to the first ResultSet.next()
call. Regardless of blocking behavior, any SpannerException
is deferred to the first or subsequent ResultSet.next()
call.
ReadContext readContext = dbClient.singleUse();
ResultSet resultSet =
readContext.read(
"Albums",
// KeySet.all() can be used to read all rows in a table. KeySet exposes other
// methods to read only a subset of the table.
KeySet.all(),
Arrays.asList("SingerId", "AlbumId", "AlbumTitle"));
table
- the name of the table to readkeys
- the keys and ranges of rows to read. Regardless of ordering in keys
, rows
are returned in their natural key order.columns
- the columns to readoptions
- the options to configure the readAsyncResultSet readAsync(String table, KeySet keys, Iterable<String> columns, Options.ReadOption... options)
#read(String, KeySet, Iterable, ReadOption...)
, but is guaranteed to be
non-blocking and will return the results as an AsyncResultSet
.ResultSet readUsingIndex(String table, String index, KeySet keys, Iterable<String> columns, Options.ReadOption... options)
Implementations may or may not block in the initial read(...)
call; for those that
do not, the remote call will be initiated immediately but blocking on the response is deferred
to the first ResultSet.next()
call. Regardless of blocking behavior, any SpannerException
is deferred to the first or subsequent ResultSet.next()
call.
ReadContext readContext = dbClient.singleUse();
Struct row =
readContext.readRowUsingIndex("Albums", "AlbumsByAlbumId", Key.of(1, "Green"),
Arrays.asList("AlbumId", "AlbumTitle"));
table
- the name of the table to readindex
- the name of the index on table
to usekeys
- the keys and ranges of index rows to read. Regardless of ordering in keys
,
rows are returned in the natural key order of the index.columns
- the columns to readoptions
- the options to configure the readAsyncResultSet readUsingIndexAsync(String table, String index, KeySet keys, Iterable<String> columns, Options.ReadOption... options)
#readUsingIndex(String, String, KeySet, Iterable, ReadOption...)
, but is
guaranteed to be non-blocking and will return its results as an AsyncResultSet
.@Nullable Struct readRow(String table, Key key, Iterable<String> columns)
null
if the row does not exist.
ReadContext readContext = dbClient.singleUse();
Struct row =
readContext.readRow("Albums", Key.of(2, 1), Arrays.asList("MarketingBudget"));
table
- the name of the table to readkey
- the row to readcolumns
- the columns to returncom.google.api.core.ApiFuture<Struct> readRowAsync(String table, Key key, Iterable<String> columns)
readRow(String, Key, Iterable)
, but is guaranteed to be non-blocking.@Nullable Struct readRowUsingIndex(String table, String index, Key key, Iterable<String> columns)
null
if the row does not
exist.
ReadContext readContext = dbClient.singleUse();
Struct row =
readContext.readRowUsingIndex("Albums", "AlbumsByAlbumId", Key.of(1, "Green"),
Arrays.asList("AlbumId", "AlbumTitle"));
table
- the name of the table to readindex
- the name of the index on table
to usekey
- the index row to readcolumns
- the columns to returncom.google.api.core.ApiFuture<Struct> readRowUsingIndexAsync(String table, String index, Key key, Iterable<String> columns)
readRowUsingIndex(String, String, Key, Iterable)
, but is guaranteed to be
non-blocking.ResultSet executeQuery(Statement statement, Options.QueryOption... options)
Implementations may or may not block in the initial executeQuery(...)
call; for
those that do not, the remote call will be initiated immediately but blocking on the response
is deferred to the first ResultSet.next()
call. Regardless of blocking behavior, any
SpannerException
is deferred to the first or subsequent ResultSet.next()
call.
// Rows without an explicit value for MarketingBudget will have a MarketingBudget equal to
// null.
ReadContext readContext = dbClient.singleUse();
ResultSet resultSet =
readContext.executeQuery(
Statement.of(
"SELECT SingerId, AlbumId, MarketingBudget, LastUpdateTime FROM Albums"));
statement
- the query statement to executeoptions
- the options to configure the queryAsyncResultSet executeQueryAsync(Statement statement, Options.QueryOption... options)
#executeQuery(Statement, QueryOption...)
, but is guaranteed to be non-blocking
and returns its results as an AsyncResultSet
.ResultSet analyzeQuery(Statement statement, ReadContext.QueryAnalyzeMode queryMode)
The query plan and query statistics information is contained in ResultSetStats
that can be accessed by calling ResultSet.getStats()
on the returned ResultSet
.
ReadContext rc = dbClient.singleUse();
ResultSet resultSet =
rc.analyzeQuery(
Statement.of("SELECT SingerId, AlbumId, MarketingBudget FROM Albums"),
ReadContext.QueryAnalyzeMode.PROFILE);
while (resultSet.next()) {
// Discard the results. We're only processing because getStats() below requires it.
resultSet.getCurrentRowAsStruct();
}
ResultSetStats stats = resultSet.getStats();
statement
- the query statement to executequeryMode
- the mode in which to execute the queryvoid close()
close
in interface AutoCloseable
Copyright © 2021 Google LLC. All rights reserved.