Interface ReadContext (6.52.0)

public interface ReadContext extends AutoCloseable

A concurrency context in which to run a read or SQL statement. All ReadContexts are implicitly bound to a Session and therefore a particular Database.

Implements

AutoCloseable

Methods

analyzeQuery(Statement statement, ReadContext.QueryAnalyzeMode queryMode)

public abstract ResultSet analyzeQuery(Statement statement, ReadContext.QueryAnalyzeMode queryMode)

Analyzes a query and returns query plan and/or query execution statistics information.

The query plan and query statistics information is contained in com.google.spanner.v1.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();
 
Parameters
NameDescription
statementStatement

the query statement to execute

queryModeReadContext.QueryAnalyzeMode

the mode in which to execute the query

Returns
TypeDescription
ResultSet

close()

public abstract void close()

Closes this read context and frees up the underlying resources.

executeQuery(Statement statement, Options.QueryOption[] options)

public abstract ResultSet executeQuery(Statement statement, Options.QueryOption[] options)

Executes a query against the database. Can also execute a DML statement with returning clause in a read/write transaction.

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"));
 
Parameters
NameDescription
statementStatement

the query statement to execute

optionsQueryOption[]

the options to configure the query

Returns
TypeDescription
ResultSet

executeQueryAsync(Statement statement, Options.QueryOption[] options)

public abstract 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.

Parameters
NameDescription
statementStatement
optionsQueryOption[]
Returns
TypeDescription
AsyncResultSet

read(String table, KeySet keys, Iterable<String> columns, Options.ReadOption[] options)

public abstract ResultSet read(String table, KeySet keys, Iterable<String> columns, Options.ReadOption[] options)

Reads zero or more rows from a database.

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"));
 
Parameters
NameDescription
tableString

the name of the table to read

keysKeySet

the keys and ranges of rows to read. Regardless of ordering in keys, rows are returned in their natural key order.

columnsIterable<String>

the columns to read

optionsReadOption[]

the options to configure the read

Returns
TypeDescription
ResultSet

readAsync(String table, KeySet keys, Iterable<String> columns, Options.ReadOption[] options)

public abstract 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.

Parameters
NameDescription
tableString
keysKeySet
columnsIterable<String>
optionsReadOption[]
Returns
TypeDescription
AsyncResultSet

readRow(String table, Key key, Iterable<String> columns)

public abstract Struct readRow(String table, Key key, Iterable<String> columns)

Reads a single row from a database, returning null if the row does not exist.


 ReadContext readContext = dbClient.singleUse();
 Struct row =
     readContext.readRow("Albums", Key.of(2, 1), Arrays.asList("MarketingBudget"));
 
Parameters
NameDescription
tableString

the name of the table to read

keyKey

the row to read

columnsIterable<String>

the columns to return

Returns
TypeDescription
Struct

readRowAsync(String table, Key key, Iterable<String> columns)

public abstract ApiFuture<Struct> readRowAsync(String table, Key key, Iterable<String> columns)

Same as #readRow(String, Key, Iterable), but is guaranteed to be non-blocking.

Parameters
NameDescription
tableString
keyKey
columnsIterable<String>
Returns
TypeDescription
ApiFuture<Struct>

readRowUsingIndex(String table, String index, Key key, Iterable<String> columns)

public abstract 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.


 ReadContext readContext = dbClient.singleUse();
 Struct row =
     readContext.readRowUsingIndex("Albums", "AlbumsByAlbumId", Key.of(1, "Green"),
         Arrays.asList("AlbumId", "AlbumTitle"));
 
Parameters
NameDescription
tableString

the name of the table to read

indexString

the name of the index on table to use

keyKey

the index row to read

columnsIterable<String>

the columns to return

Returns
TypeDescription
Struct

readRowUsingIndexAsync(String table, String index, Key key, Iterable<String> columns)

public abstract 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.

Parameters
NameDescription
tableString
indexString
keyKey
columnsIterable<String>
Returns
TypeDescription
ApiFuture<Struct>

readUsingIndex(String table, String index, KeySet keys, Iterable<String> columns, Options.ReadOption[] options)

public abstract 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.

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"));
 
Parameters
NameDescription
tableString

the name of the table to read

indexString

the name of the index on table to use

keysKeySet

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.

columnsIterable<String>

the columns to read

optionsReadOption[]

the options to configure the read

Returns
TypeDescription
ResultSet

readUsingIndexAsync(String table, String index, KeySet keys, Iterable<String> columns, Options.ReadOption[] options)

public abstract 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.

Parameters
NameDescription
tableString
indexString
keysKeySet
columnsIterable<String>
optionsReadOption[]
Returns
TypeDescription
AsyncResultSet