Skip to content
This repository was archived by the owner on Dec 8, 2021. It is now read-only.

Commit e90e64e

Browse files
authored
refactor!: expand SqlParams members into PartitionQueryParams (#1263)
PartitionQueryParams corresponds to PartitionQueryRequest (https://github.com/googleapis/googleapis/blob/2c17ac33b226194041155bb5340c3f34733f1b3a/google/spanner/v1/spanner.proto#L672), and SqlParams corresponds to ExecuteSqlRequest (https://github.com/googleapis/googleapis/blob/2c17ac33b226194041155bb5340c3f34733f1b3a/google/spanner/v1/spanner.proto#L439). The former does not "include" the latter, so there may be options or fields in SqlParams that don't belong in PartitionQueryParams. Therefore, we should break this relationship now, while we can.
1 parent 44d687f commit e90e64e

6 files changed

Lines changed: 17 additions & 22 deletions

File tree

278 Bytes
Binary file not shown.

google/cloud/spanner/client.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ StatusOr<std::vector<QueryPartition>> Client::PartitionQuery(
132132
Transaction transaction, SqlStatement statement,
133133
PartitionOptions const& partition_options) {
134134
return conn_->PartitionQuery(
135-
{{std::move(transaction), std::move(statement), {}}, partition_options});
135+
{std::move(transaction), std::move(statement), partition_options});
136136
}
137137

138138
StatusOr<DmlResult> Client::ExecuteDml(Transaction transaction,

google/cloud/spanner/connection.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ class Connection {
9797

9898
/// Wrap the arguments to `PartitionQuery()`.
9999
struct PartitionQueryParams {
100-
SqlParams sql_params;
100+
Transaction transaction;
101+
SqlStatement statement;
101102
PartitionOptions partition_options;
102103
};
103104

google/cloud/spanner/internal/connection_impl.cc

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -187,11 +187,10 @@ StatusOr<PartitionedDmlResult> ConnectionImpl::ExecutePartitionedDml(
187187
StatusOr<std::vector<QueryPartition>> ConnectionImpl::PartitionQuery(
188188
PartitionQueryParams params) {
189189
return internal::Visit(
190-
std::move(params.sql_params.transaction),
190+
std::move(params.transaction),
191191
[this, &params](SessionHolder& session,
192192
spanner_proto::TransactionSelector& s, std::int64_t) {
193-
return PartitionQueryImpl(session, s, params.sql_params,
194-
params.partition_options);
193+
return PartitionQueryImpl(session, s, std::move(params));
195194
});
196195
}
197196

@@ -582,7 +581,8 @@ StatusOr<ExecutionPlan> ConnectionImpl::AnalyzeSqlImpl(
582581

583582
StatusOr<std::vector<QueryPartition>> ConnectionImpl::PartitionQueryImpl(
584583
SessionHolder& session, spanner_proto::TransactionSelector& s,
585-
SqlParams const& params, PartitionOptions const& partition_options) {
584+
PartitionQueryParams
585+
params) { // NOLINT(performance-unnecessary-value-param)
586586
// Since the session may be sent to other machines, it should not be returned
587587
// to the pool when the Transaction is destroyed.
588588
auto prepare_status = PrepareSession(session, /*dissociate_from_pool=*/true);
@@ -598,7 +598,8 @@ StatusOr<std::vector<QueryPartition>> ConnectionImpl::PartitionQueryImpl(
598598
*request.mutable_params() = std::move(*sql_statement.mutable_params());
599599
*request.mutable_param_types() =
600600
std::move(*sql_statement.mutable_param_types());
601-
*request.mutable_partition_options() = internal::ToProto(partition_options);
601+
*request.mutable_partition_options() =
602+
internal::ToProto(std::move(params.partition_options));
602603

603604
auto stub = session_pool_->GetStub(*session);
604605
auto response = internal::RetryLoop(
@@ -623,7 +624,7 @@ StatusOr<std::vector<QueryPartition>> ConnectionImpl::PartitionQueryImpl(
623624
for (auto& partition : response->partitions()) {
624625
query_partitions.push_back(internal::MakeQueryPartition(
625626
response->transaction().id(), session->session_name(),
626-
partition.partition_token(), params.statement));
627+
partition.partition_token(), std::move(params.statement)));
627628
}
628629

629630
return query_partitions;

google/cloud/spanner/internal/connection_impl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ class ConnectionImpl : public Connection {
131131

132132
StatusOr<std::vector<QueryPartition>> PartitionQueryImpl(
133133
SessionHolder& session, google::spanner::v1::TransactionSelector& s,
134-
SqlParams const& params, PartitionOptions const& partition_options);
134+
PartitionQueryParams params);
135135

136136
StatusOr<BatchDmlResult> ExecuteBatchDmlImpl(
137137
SessionHolder& session, google::spanner::v1::TransactionSelector& s,

google/cloud/spanner/internal/connection_impl_test.cc

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1850,9 +1850,7 @@ TEST(ConnectionImplTest, PartitionQuerySuccess) {
18501850

18511851
SqlStatement sql_statement("select * from table");
18521852
StatusOr<std::vector<QueryPartition>> result = conn->PartitionQuery(
1853-
{{MakeReadOnlyTransaction(Transaction::ReadOnlyOptions()),
1854-
sql_statement,
1855-
{}},
1853+
{MakeReadOnlyTransaction(Transaction::ReadOnlyOptions()), sql_statement,
18561854
PartitionOptions()});
18571855
ASSERT_STATUS_OK(result);
18581856

@@ -1883,10 +1881,8 @@ TEST(ConnectionImplTest, PartitionQueryPermanentFailure) {
18831881
.WillOnce(Return(failed_status));
18841882

18851883
StatusOr<std::vector<QueryPartition>> result = conn->PartitionQuery(
1886-
{{MakeReadOnlyTransaction(Transaction::ReadOnlyOptions()),
1887-
SqlStatement("select * from table"),
1888-
{}},
1889-
PartitionOptions()});
1884+
{MakeReadOnlyTransaction(Transaction::ReadOnlyOptions()),
1885+
SqlStatement("select * from table"), PartitionOptions()});
18901886
EXPECT_EQ(StatusCode::kPermissionDenied, result.status().code());
18911887
EXPECT_THAT(result.status().message(), HasSubstr(failed_status.message()));
18921888
}
@@ -1910,10 +1906,8 @@ TEST(ConnectionImplTest, PartitionQueryTooManyTransientFailures) {
19101906
.WillRepeatedly(Return(failed_status));
19111907

19121908
StatusOr<std::vector<QueryPartition>> result = conn->PartitionQuery(
1913-
{{MakeReadOnlyTransaction(Transaction::ReadOnlyOptions()),
1914-
SqlStatement("select * from table"),
1915-
{}},
1916-
PartitionOptions()});
1909+
{MakeReadOnlyTransaction(Transaction::ReadOnlyOptions()),
1910+
SqlStatement("select * from table"), PartitionOptions()});
19171911
EXPECT_EQ(StatusCode::kUnavailable, result.status().code());
19181912
EXPECT_THAT(result.status().message(), HasSubstr(failed_status.message()));
19191913
}
@@ -2316,8 +2310,7 @@ TEST(ConnectionImplTest, PartitionQuerySessionNotFound) {
23162310
auto conn = MakeLimitedRetryConnection(db, mock);
23172311
auto txn = MakeReadWriteTransaction();
23182312
SetTransactionId(txn, "test-txn-id");
2319-
auto sql_params = Connection::SqlParams{txn, SqlStatement(), {}};
2320-
auto response = conn->PartitionQuery({sql_params, {}});
2313+
auto response = conn->PartitionQuery({txn, {}, {}});
23212314
EXPECT_FALSE(response.ok());
23222315
auto status = response.status();
23232316
EXPECT_TRUE(IsSessionNotFound(status)) << status;

0 commit comments

Comments
 (0)