Google Cloud Spanner C++ Client
A C++ Client Library for Google Cloud Spanner
Public Types | Public Member Functions | Friends | List of all members
google::cloud::spanner::v1::TupleStream< Tuple > Class Template Reference

A TupleStream<Tuple> defines a range that parses Tuple objects from the given range of RowStreamIterators. More...

#include <google/cloud/spanner/row.h>

Public Types

using iterator = TupleStreamIterator< Tuple >
 

Public Member Functions

iterator begin () const
 
iterator end () const
 

Friends

template<typename T , typename RowRange >
TupleStream< T > StreamOf (RowRange &&range)
 A factory that creates a TupleStream<Tuple> by wrapping the given range. More...
 

Detailed Description

template<typename Tuple>
class google::cloud::spanner::v1::TupleStream< Tuple >

A TupleStream<Tuple> defines a range that parses Tuple objects from the given range of RowStreamIterators.

Users create instances using the StreamOf<T>(range) non-member factory function (defined below). The following is a typical usage of this class in a range-for loop.

auto row_range = ...
using RowType = std::tuple<std::int64_t, std::string, bool>;
for (auto const& row : StreamOf<RowType>(row_range)) {
if (!row) {
// Handle error;
}
std::int64_t x = std::get<0>(*row);
...
}
Note
The term "stream" in this name refers to the general nature of the the data source, and is not intended to suggest any similarity to C++'s I/O streams library. Syntactically, this class is a "range" defined by two "iterator" objects of type TupleStreamIterator<Tuple>.
Template Parameters
Tuplethe std::tuple<...> to parse each Row into.

Definition at line 402 of file row.h.

Member Typedef Documentation

◆ iterator

template<typename Tuple>
using google::cloud::spanner::v1::TupleStream< Tuple >::iterator = TupleStreamIterator<Tuple>

Definition at line 404 of file row.h.

Member Function Documentation

◆ begin()

template<typename Tuple>
iterator google::cloud::spanner::v1::TupleStream< Tuple >::begin ( ) const
inline

Definition at line 408 of file row.h.

◆ end()

template<typename Tuple>
iterator google::cloud::spanner::v1::TupleStream< Tuple >::end ( ) const
inline

Definition at line 409 of file row.h.

Friends And Related Function Documentation

◆ StreamOf

template<typename Tuple>
template<typename T , typename RowRange >
TupleStream<T> StreamOf ( RowRange &&  range)
friend

A factory that creates a TupleStream<Tuple> by wrapping the given range.

The RowRange must be a range defined by RowStreamIterator objects.

void StreamOf(google::cloud::spanner::Client client) {
namespace spanner = ::google::cloud::spanner;
std::cout << "Querying the Singers table:\n";
auto query = client.ExecuteQuery(spanner::SqlStatement(
"SELECT SingerId, FirstName, LastName FROM Singers"));
using RowType = std::tuple<std::int64_t, std::string, std::string>;
for (auto& row : spanner::StreamOf<RowType>(query)) {
if (!row) throw std::runtime_error(row.status().message());
std::cout << " FirstName: " << std::get<0>(*row)
<< "\n LastName: " << std::get<1>(*row) << "\n";
}
std::cout << "end of results\n";
}
Note
ownership of the range is not transferred, so it must outlive the returned TupleStream.
Template Parameters
RowRangemust be a range defined by RowStreamIterators.

Definition at line 436 of file row.h.