diff --git a/google-cloud-spanner/lib/google/cloud/spanner/client.rb b/google-cloud-spanner/lib/google/cloud/spanner/client.rb index 72e00ae4..d83b83ab 100644 --- a/google-cloud-spanner/lib/google/cloud/spanner/client.rb +++ b/google-cloud-spanner/lib/google/cloud/spanner/client.rb @@ -484,7 +484,7 @@ def execute_query sql, params: nil, types: nil, single_use: nil, request_options = Convert.to_request_options request_options, tag_type: :request_tag single_use_tx = single_use_transaction single_use - route_to_leader = LARHeaders.execute_query true + route_to_leader = LARHeaders.execute_query !single_use_tx results = nil @pool.with_session do |session| results = session.execute_query \ diff --git a/google-cloud-spanner/test/google/cloud/spanner/leader_aware_routing/client/execute_query_test.rb b/google-cloud-spanner/test/google/cloud/spanner/leader_aware_routing/client/execute_query_test.rb index d9580e1b..747babd4 100644 --- a/google-cloud-spanner/test/google/cloud/spanner/leader_aware_routing/client/execute_query_test.rb +++ b/google-cloud-spanner/test/google/cloud/spanner/leader_aware_routing/client/execute_query_test.rb @@ -60,7 +60,7 @@ mock.verify end - it "sends header x-goog-spanner-route-to-leader when LAR is enabled" do + it "sends header x-goog-spanner-route-to-leader with true for queries without single_use when LAR is enabled" do mock = Minitest::Mock.new mock.expect :create_session, session_grpc do |request, gapic_options| gapic_options.metadata["x-goog-spanner-route-to-leader"] == 'true' @@ -75,4 +75,53 @@ mock.verify end + + it "sends header x-goog-spanner-route-to-leader with false for queries with single_use strong option when LAR is enabled" do + mock = Minitest::Mock.new + mock.expect :create_session, session_grpc do |request, gapic_options| + gapic_options.metadata["x-goog-spanner-route-to-leader"] == 'true' + end + mock.expect :execute_streaming_sql, results_enum do |request, gapic_options| + gapic_options.metadata["x-goog-spanner-route-to-leader"] == 'false' + end + spanner.service.mocked_service = mock + + spanner.service.enable_leader_aware_routing = true + results = client.execute_query "SELECT 1", single_use: { strong: true } + + mock.verify + end + + it "sends header x-goog-spanner-route-to-leader with false for queries with single_use staleness option when LAR is enabled" do + mock = Minitest::Mock.new + mock.expect :create_session, session_grpc do |request, gapic_options| + gapic_options.metadata["x-goog-spanner-route-to-leader"] == 'true' + end + mock.expect :execute_streaming_sql, results_enum do |request, gapic_options| + gapic_options.metadata["x-goog-spanner-route-to-leader"] == 'false' + end + spanner.service.mocked_service = mock + + spanner.service.enable_leader_aware_routing = true + results = client.execute_query "SELECT 1", single_use: { staleness: 60 } + + mock.verify + end + + it "sends header x-goog-spanner-route-to-leader with false for queries with single_use timestamp option when LAR is enabled" do + mock = Minitest::Mock.new + mock.expect :create_session, session_grpc do |request, gapic_options| + gapic_options.metadata["x-goog-spanner-route-to-leader"] == 'true' + end + mock.expect :execute_streaming_sql, results_enum do |request, gapic_options| + gapic_options.metadata["x-goog-spanner-route-to-leader"] == 'false' + end + spanner.service.mocked_service = mock + + spanner.service.enable_leader_aware_routing = true + timestamp = Time.now - 60 + results = client.execute_query "SELECT 1", single_use: { timestamp: timestamp } + + mock.verify + end end