Skip to content

Commit 1148ff8

Browse files
feat(Spanner): Add directed read samples (#1939)
1 parent fd2b039 commit 1148ff8

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-0
lines changed

spanner/src/directed_read.php

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
<?php
2+
/**
3+
* Copyright 2024 Google LLC.
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
/**
19+
* For instructions on how to run the full sample:
20+
*
21+
* @see https://github.com/GoogleCloudPlatform/php-docs-samples/tree/main/spanner/README.md
22+
*/
23+
24+
namespace Google\Cloud\Samples\Spanner;
25+
26+
// [START spanner_directed_read]
27+
use Google\Cloud\Spanner\SpannerClient;
28+
use Google\Cloud\Spanner\V1\DirectedReadOptions\ReplicaSelection\Type as ReplicaType;
29+
30+
/**
31+
* Queries sample data from the database with directed read options.
32+
* Example:
33+
* ```
34+
* directed_read($instanceId, $databaseId);
35+
* ```
36+
*
37+
* @param string $instanceId The Spanner instance ID.
38+
* @param string $databaseId The Spanner database ID.
39+
*/
40+
function directed_read(string $instanceId, string $databaseId): void
41+
{
42+
$directedReadOptionsForClient = [
43+
'directedReadOptions' => [
44+
'excludeReplicas' => [
45+
'replicaSelections' => [
46+
[
47+
'location' => 'us-east4'
48+
]
49+
]
50+
]
51+
]
52+
];
53+
54+
$directedReadOptionsForRequest = [
55+
'directedReadOptions' => [
56+
'includeReplicas' => [
57+
'replicaSelections' => [
58+
[
59+
'type' => ReplicaType::READ_WRITE
60+
]
61+
],
62+
'autoFailoverDisabled' => true
63+
]
64+
]
65+
];
66+
67+
$spanner = new SpannerClient($directedReadOptionsForClient);
68+
$instance = $spanner->instance($instanceId);
69+
$database = $instance->database($databaseId);
70+
$snapshot = $database->snapshot();
71+
72+
// directedReadOptions at Request level will override the options set at
73+
// Client level
74+
$results = $snapshot->execute(
75+
'SELECT SingerId, AlbumId, AlbumTitle FROM Albums',
76+
$directedReadOptionsForRequest
77+
);
78+
79+
foreach ($results as $row) {
80+
printf('SingerId: %s, AlbumId: %s, AlbumTitle: %s' . PHP_EOL,
81+
$row['SingerId'], $row['AlbumId'], $row['AlbumTitle']);
82+
}
83+
}
84+
// [END spanner_directed_read]
85+
86+
// The following 2 lines are only needed to run the samples
87+
require_once __DIR__ . '/../../testing/sample_helpers.php';
88+
\Google\Cloud\Samples\execute_sample(__FILE__, __NAMESPACE__, $argv);

spanner/test/spannerTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1268,4 +1268,17 @@ public function testAlterTableAddForeignKeyDeleteCascade()
12681268
$output
12691269
);
12701270
}
1271+
1272+
/**
1273+
* @depends testInsertData
1274+
*/
1275+
public function testDirectedRead()
1276+
{
1277+
$output = $this->runFunctionSnippet('directed_read');
1278+
$this->assertStringContainsString('SingerId: 1, AlbumId: 1, AlbumTitle: Total Junk', $output);
1279+
$this->assertStringContainsString('SingerId: 1, AlbumId: 2, AlbumTitle: Go, Go, Go', $output);
1280+
$this->assertStringContainsString('SingerId: 2, AlbumId: 1, AlbumTitle: Green', $output);
1281+
$this->assertStringContainsString('SingerId: 2, AlbumId: 2, AlbumTitle: Forever Hold Your Peace', $output);
1282+
$this->assertStringContainsString('SingerId: 2, AlbumId: 3, AlbumTitle: Terrified', $output);
1283+
}
12711284
}

0 commit comments

Comments
 (0)