24 SqlStatementProto ToProto(SqlStatement s) {
25 SqlStatementProto statement_proto;
26 statement_proto.set_sql(std::move(s.statement_));
27 if (!s.params_.empty()) {
28 auto& values = *statement_proto.mutable_params()->mutable_fields();
29 auto& types = *statement_proto.mutable_param_types();
30 for (
auto& param : s.params_) {
31 auto type_and_value = internal::ToProto(std::move(param.second));
32 values[param.first] = std::move(type_and_value.second);
33 types[param.first] = std::move(type_and_value.first);
36 return statement_proto;
40 std::vector<std::string> SqlStatement::ParameterNames()
const {
41 std::vector<std::string> keys;
42 keys.reserve(params_.size());
43 for (
auto const& p : params_) {
44 keys.push_back(p.first);
49 google::cloud::StatusOr<Value> SqlStatement::GetParameter(
50 std::string
const& parameter_name)
const {
51 auto iter = params_.find(parameter_name);
52 if (iter != params_.end()) {
55 return Status(StatusCode::kNotFound,
"No such parameter: " + parameter_name);
59 os << stmt.statement_;
60 for (
auto const& param : stmt.params_) {
61 os <<
"\n[param]: {" << param.first <<
"=" << param.second <<
"}";
std::ostream & operator<<(std::ostream &os, SqlStatement const &stmt)
Contains all the Cloud Spanner C++ client types and functions.
#define SPANNER_CLIENT_NS
Represents a potentially parameterized SQL statement.