17 #include <google/spanner/v1/result_set.pb.h> 20 #include <unordered_map> 28 optional<Timestamp> GetReadTimestamp(
29 std::unique_ptr<internal::ResultSourceInterface>
const& source) {
30 auto metadata = source->Metadata();
31 if (metadata.has_value() && metadata->has_transaction() &&
32 metadata->transaction().has_read_timestamp()) {
33 return internal::TimestampFromProto(
34 metadata->transaction().read_timestamp());
36 return optional<Timestamp>();
39 std::int64_t GetRowsModified(
40 std::unique_ptr<internal::ResultSourceInterface>
const& source) {
41 return source->Stats()->row_count_exact();
44 optional<std::unordered_map<std::string, std::string>> GetExecutionStats(
45 std::unique_ptr<internal::ResultSourceInterface>
const& source) {
46 auto stats = source->Stats();
47 if (stats && stats->has_query_stats()) {
48 std::unordered_map<std::string, std::string> execution_stats;
49 for (
auto const& entry : stats->query_stats().fields()) {
50 execution_stats.insert(
51 std::make_pair(entry.first, entry.second.string_value()));
53 return execution_stats;
58 optional<spanner::ExecutionPlan> GetExecutionPlan(
59 std::unique_ptr<internal::ResultSourceInterface>
const& source) {
60 auto stats = source->Stats();
61 if (stats && stats->has_query_plan()) {
62 return source->Stats()->query_plan();
68 optional<Timestamp> RowStream::ReadTimestamp()
const {
69 return GetReadTimestamp(source_);
72 optional<Timestamp> ProfileQueryResult::ReadTimestamp()
const {
73 return GetReadTimestamp(source_);
76 std::int64_t DmlResult::RowsModified()
const {
77 return GetRowsModified(source_);
80 std::int64_t ProfileDmlResult::RowsModified()
const {
81 return GetRowsModified(source_);
84 optional<std::unordered_map<std::string, std::string>>
85 ProfileQueryResult::ExecutionStats()
const {
86 return GetExecutionStats(source_);
90 return GetExecutionPlan(source_);
93 optional<std::unordered_map<std::string, std::string>>
94 ProfileDmlResult::ExecutionStats()
const {
95 return GetExecutionStats(source_);
99 return GetExecutionPlan(source_);
::google::spanner::v1::QueryPlan ExecutionPlan
Contains a hierarchical representation of the operations the database server performs in order to exe...
Contains all the Cloud Spanner C++ client types and functions.
#define SPANNER_CLIENT_NS