Skip to content

Commit 8333b90

Browse files
committed
fix: use new PreparedQuery constructor
1 parent 320bd49 commit 8333b90

File tree

7 files changed

+71
-53
lines changed

7 files changed

+71
-53
lines changed

google/cloud/bigtable/bound_query.cc

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@ namespace cloud {
1919
namespace bigtable {
2020
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN
2121

22-
StatusOr<std::string> BoundQuery::prepared_query() const {
23-
return query_plan_->prepared_query();
24-
}
22+
std::string BoundQuery::prepared_query() const { return sql_statement_->sql(); }
2523

2624
StatusOr<google::bigtable::v2::ResultSetMetadata> BoundQuery::metadata() const {
27-
return query_plan_->metadata();
25+
auto response = query_plan_->response();
26+
if (response.ok()) {
27+
return response->metadata();
28+
}
29+
return response.status();
2830
}
2931

3032
std::unordered_map<std::string, Value> const& BoundQuery::parameters() const {
@@ -36,9 +38,9 @@ InstanceResource const& BoundQuery::instance() const { return instance_; }
3638
google::bigtable::v2::ExecuteQueryRequest BoundQuery::ToRequestProto() const {
3739
google::bigtable::v2::ExecuteQueryRequest result;
3840
*result.mutable_instance_name() = instance_.FullName();
39-
auto prepared_query = query_plan_->prepared_query();
40-
if (prepared_query.ok()) {
41-
*result.mutable_prepared_query() = query_plan_->prepared_query().value();
41+
auto response = query_plan_->response();
42+
if (response.ok()) {
43+
*result.mutable_prepared_query() = sql_statement_->sql();
4244
}
4345

4446
google::protobuf::Map<std::string, google::bigtable::v2::Value> parameters;

google/cloud/bigtable/bound_query.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include "google/cloud/bigtable/instance_resource.h"
1919
#include "google/cloud/bigtable/internal/query_plan.h"
20+
#include "google/cloud/bigtable/sql_statement.h"
2021
#include "google/cloud/bigtable/value.h"
2122
#include "google/cloud/bigtable/version.h"
2223
#include "google/cloud/completion_queue.h"
@@ -42,7 +43,7 @@ class BoundQuery {
4243
BoundQuery& operator=(BoundQuery&&) = default;
4344

4445
// Accessors
45-
StatusOr<std::string> prepared_query() const;
46+
std::string prepared_query() const;
4647
StatusOr<google::bigtable::v2::ResultSetMetadata> metadata() const;
4748
std::unordered_map<std::string, Value> const& parameters() const;
4849
InstanceResource const& instance() const;
@@ -53,16 +54,19 @@ class BoundQuery {
5354
friend class PreparedQuery;
5455
BoundQuery(InstanceResource instance,
5556
std::shared_ptr<bigtable_internal::QueryPlan> query_plan,
56-
std::unordered_map<std::string, Value> parameters)
57+
std::unordered_map<std::string, Value> parameters,
58+
std::shared_ptr<SqlStatement> sql_statement)
5759
: instance_(std::move(instance)),
5860
query_plan_(std::move(query_plan)),
59-
parameters_(std::move(parameters)) {}
61+
parameters_(std::move(parameters)),
62+
sql_statement_(std::move(sql_statement)) {}
6063

6164
InstanceResource instance_;
6265
// Copy of the query_plan_ contained by the PreparedQuery that created
6366
// this BoundQuery.
6467
std::shared_ptr<bigtable_internal::QueryPlan> query_plan_;
6568
std::unordered_map<std::string, Value> parameters_;
69+
std::shared_ptr<SqlStatement> sql_statement_;
6670
};
6771

6872
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END

google/cloud/bigtable/bound_query_test.cc

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@ TEST(BoundQuery, FromPreparedQuery) {
3535
"SELECT * FROM my_table WHERE col1 = @val1 and col2 = @val2;");
3636
SqlStatement sql_statement(statement_contents);
3737
PrepareQueryResponse response;
38-
std::unordered_map<std::string, Value> parameters = {{"val1", Value(true)},
39-
{"val2", Value(2.0)}};
40-
4138
// The following variables are only meant to confirm the metadata is correctly
4239
// passed down to the BoundQuery.
4340
auto metadata = std::make_unique<google::bigtable::v2::ResultSetMetadata>();
@@ -47,13 +44,19 @@ TEST(BoundQuery, FromPreparedQuery) {
4744
schema->mutable_columns()->Add(std::move(column));
4845
metadata->set_allocated_proto_schema(schema.release());
4946
response.set_allocated_metadata(metadata.release());
47+
auto refresh_fn = [&response]() {
48+
return make_ready_future(StatusOr<PrepareQueryResponse>(response));
49+
};
50+
auto query_plan = bigtable_internal::QueryPlan::Create(
51+
CompletionQueue(fake_cq_impl), std::move(response),
52+
std::move(refresh_fn));
53+
std::unordered_map<std::string, Value> parameters = {{"val1", Value(true)},
54+
{"val2", Value(2.0)}};
5055

51-
PreparedQuery pq(CompletionQueue(fake_cq_impl), instance, sql_statement,
52-
response);
56+
PreparedQuery pq(instance, sql_statement, query_plan);
5357
auto bq = pq.BindParameters(parameters);
5458
EXPECT_EQ(instance.FullName(), bq.instance().FullName());
55-
EXPECT_STATUS_OK(bq.prepared_query());
56-
EXPECT_EQ(statement_contents, bq.prepared_query().value());
59+
EXPECT_EQ(statement_contents, bq.prepared_query());
5760
EXPECT_EQ(parameters, bq.parameters());
5861
EXPECT_STATUS_OK(bq.metadata());
5962
EXPECT_TRUE(bq.metadata().value().has_proto_schema());
@@ -72,11 +75,15 @@ TEST(BoundQuery, ToRequestProto) {
7275
"SELECT * FROM my_table WHERE col1 = @val1 and col2 = @val2;");
7376
SqlStatement sql_statement(statement_contents);
7477
PrepareQueryResponse response;
78+
auto refresh_fn = []() {
79+
return make_ready_future(StatusOr<PrepareQueryResponse>{});
80+
};
81+
auto query_plan = bigtable_internal::QueryPlan::Create(
82+
CompletionQueue(fake_cq_impl), response, std::move(refresh_fn));
7583
std::unordered_map<std::string, Value> parameters = {{"val1", Value(true)},
7684
{"val2", Value(2.0)}};
7785

78-
PreparedQuery pq(CompletionQueue(fake_cq_impl), instance, sql_statement,
79-
response);
86+
PreparedQuery pq(instance, sql_statement, query_plan);
8087
auto bq = pq.BindParameters(parameters);
8188
google::bigtable::v2::ExecuteQueryRequest proto = bq.ToRequestProto();
8289
EXPECT_EQ(instance.FullName(), proto.instance_name());

google/cloud/bigtable/client_test.cc

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
// limitations under the License.
1414

1515
#include "google/cloud/bigtable/client.h"
16+
#include "google/cloud/bigtable/internal/query_plan.h"
1617
#include "google/cloud/bigtable/mocks/mock_data_connection.h"
1718
#include "google/cloud/bigtable/mocks/mock_query_row.h"
1819
#include "google/cloud/bigtable/mocks/mock_row_reader.h"
@@ -44,9 +45,18 @@ TEST(Client, PrepareQuery) {
4445
EXPECT_EQ("projects/the-project/instances/the-instance",
4546
params.instance.FullName());
4647
EXPECT_EQ("SELECT * FROM the-table", params.sql_statement.sql());
47-
PreparedQuery q(CompletionQueue{fake_cq_impl}, params.instance,
48-
params.sql_statement, PrepareQueryResponse{});
49-
return q;
48+
49+
std::unordered_map<std::string, bigtable::Value> parameters;
50+
google::bigtable::v2::PrepareQueryResponse pq_response;
51+
auto refresh_fn = [&pq_response]() {
52+
return make_ready_future(
53+
StatusOr<google::bigtable::v2::PrepareQueryResponse>(
54+
pq_response));
55+
};
56+
auto query_plan = bigtable_internal::QueryPlan::Create(
57+
CompletionQueue(fake_cq_impl), std::move(pq_response),
58+
std::move(refresh_fn));
59+
return bigtable::PreparedQuery(instance, sql, std::move(query_plan));
5060
});
5161

5262
Client client(std::move(conn_mock));
@@ -62,14 +72,23 @@ TEST(Client, AsyncPrepareQuery) {
6272
auto conn_mock = std::make_shared<bigtable_mocks::MockDataConnection>();
6373
InstanceResource instance(Project("the-project"), "the-instance");
6474
SqlStatement sql("SELECT * FROM the-table");
65-
EXPECT_CALL(*conn_mock, AsyncPrepareQuery)
75+
EXPECT_CALL(*conn_mock, PrepareQuery)
6676
.WillOnce([&](PrepareQueryParams const& params) {
6777
EXPECT_EQ("projects/the-project/instances/the-instance",
6878
params.instance.FullName());
6979
EXPECT_EQ("SELECT * FROM the-table", params.sql_statement.sql());
70-
PreparedQuery q(CompletionQueue{fake_cq_impl}, params.instance,
71-
params.sql_statement, PrepareQueryResponse{});
72-
return make_ready_future(make_status_or(std::move(q)));
80+
81+
std::unordered_map<std::string, bigtable::Value> parameters;
82+
google::bigtable::v2::PrepareQueryResponse pq_response;
83+
auto refresh_fn = [&pq_response]() {
84+
return make_ready_future(
85+
StatusOr<google::bigtable::v2::PrepareQueryResponse>(
86+
pq_response));
87+
};
88+
auto query_plan = bigtable_internal::QueryPlan::Create(
89+
CompletionQueue(fake_cq_impl), std::move(pq_response),
90+
std::move(refresh_fn));
91+
return bigtable::PreparedQuery(instance, sql, std::move(query_plan));
7392
});
7493
Client client(std::move(conn_mock));
7594
auto prepared_query = client.AsyncPrepareQuery(instance, sql);

google/cloud/bigtable/prepared_query.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN
2222

2323
BoundQuery PreparedQuery::BindParameters(
2424
std::unordered_map<std::string, Value> params) const {
25-
return BoundQuery(instance_, query_plan_, std::move(params));
25+
return BoundQuery(instance_, query_plan_, std::move(params), sql_statement_);
2626
}
2727

2828
InstanceResource const& PreparedQuery::instance() const { return instance_; }
2929
SqlStatement const& PreparedQuery::sql_statement() const {
30-
return sql_statement_;
30+
return *sql_statement_;
3131
}
3232

3333
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END

google/cloud/bigtable/prepared_query.h

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -44,36 +44,16 @@ class PreparedQuery {
4444
InstanceResource const& instance() const;
4545
SqlStatement const& sql_statement() const;
4646

47-
// While we work on the Bigtable GoogleSQL functionality, we will keep this
48-
// constructor as public, but this will be converted to private as
49-
// originally intended once other classes that orchestrate PreparedQuery
50-
// are implemented.
51-
GOOGLE_CLOUD_CPP_DEPRECATED("use the other constructor")
52-
PreparedQuery(CompletionQueue cq, InstanceResource instance,
53-
SqlStatement sql_statement,
54-
google::bigtable::v2::PrepareQueryResponse response)
55-
: instance_(std::move(instance)),
56-
sql_statement_(std::move(sql_statement)) {
57-
*response.mutable_prepared_query() = sql_statement_.sql();
58-
59-
// For now, the refresh function has no effect, and we simply return a new
60-
// prepared query response.
61-
query_plan_ = bigtable_internal::QueryPlan::Create(
62-
std::move(cq), std::move(response), [] {
63-
return make_ready_future(
64-
StatusOr<google::bigtable::v2::PrepareQueryResponse>{});
65-
});
66-
}
67-
6847
PreparedQuery(InstanceResource instance, SqlStatement sql_statement,
6948
std::shared_ptr<bigtable_internal::QueryPlan> query_plan)
7049
: instance_(std::move(instance)),
71-
sql_statement_(std::move(sql_statement)),
50+
sql_statement_(
51+
std::make_shared<SqlStatement>(std::move(sql_statement))),
7252
query_plan_(std::move(query_plan)) {}
7353

7454
private:
7555
InstanceResource instance_;
76-
SqlStatement sql_statement_;
56+
std::shared_ptr<SqlStatement> sql_statement_;
7757
std::shared_ptr<bigtable_internal::QueryPlan> query_plan_;
7858
};
7959

google/cloud/bigtable/prepared_query_test.cc

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,14 @@ TEST(PreparedQuery, DefaultConstructor) {
3333
"SELECT * FROM my_table WHERE col1 = @val1 and col2 = @val2;");
3434
SqlStatement sql_statement(statement_contents);
3535
PrepareQueryResponse response;
36-
PreparedQuery q(CompletionQueue(fake_cq_impl), instance, sql_statement,
37-
response);
36+
auto refresh_fn = [&response]() {
37+
return make_ready_future(
38+
StatusOr<google::bigtable::v2::PrepareQueryResponse>(response));
39+
};
40+
auto query_plan = bigtable_internal::QueryPlan::Create(
41+
CompletionQueue(fake_cq_impl), std::move(response),
42+
std::move(refresh_fn));
43+
PreparedQuery q(instance, sql_statement, query_plan);
3844
EXPECT_EQ(instance.FullName(), q.instance().FullName());
3945
EXPECT_EQ(statement_contents, q.sql_statement().sql());
4046

0 commit comments

Comments
 (0)