[Spanner] v2: client-level queryOptions passed to SpannerClient are silently ignored
メンテナーはふだん 2 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 84/100
調査の方向性
Spanner/src/Operation.phpの103~109行付近から始め、そのファイル内のvalidateOptions()の呼び出しを比較してください。Issueでは、分割代入の変更と影響を受けるオプションが示されています。クライアントレベルのオプションに関する既存のSpannerテストを確認し、returnInt64AsObjectとdefaultQueryOptionsのテストを追加してください。コンストラクターのオプションが反映され、関連するテストが通れば完了です。
索引モデルが issue の本文から書いたものです。
説明
In v2, queryOptions and returnInt64AsObject passed to SpannerClient have no effect, even though both are documented constructor options. Query-level queryOptions and the SPANNER_OPTIMIZER_* environment variables still work.
The options do reach Operation, but its constructor doesn't destructure the result of validateOptions() (Operation.php#L103-L109):
$options = $this->validateOptions(
$options,
['returnInt64AsObject', 'routeToLeader', 'defaultQueryOptions']
);
// $options is [[...]] here, so all three fall back to their defaults
$this->mapper = new ValueMapper($options['returnInt64AsObject'] ?? false);
$this->routeToLeader = $options['routeToLeader'] ?? true;
$this->defaultQueryOptions = $options['defaultQueryOptions'] ?? [];
Changing this to [$options] = $this->validateOptions(...), matching the other calls in Operation.php, fixes the issue.
This looks like a regression from the v2 rewrite (#7841). In v1, client-level query options were applied in Connection\Grpc and tested in GrpcTest. Both were removed with the Connection layer.
Environment details
- OS: Alpine Linux (Docker) + Spanner emulator
- PHP version: 8.4.16
- Package name and version: google/cloud-spanner v2.11.3
Steps to reproduce
- Create a
SpannerClientwithreturnInt64AsObject => true. - Run a query that returns an INT64.
Code example
<?php
// SPANNER_EMULATOR_HOST=localhost:9010 php repro.php
require 'vendor/autoload.php';
use Google\Cloud\Spanner\SpannerClient;
$client = new SpannerClient([
'projectId' => 'emulator-project',
'returnInt64AsObject' => true,
]);
$database = $client->connect('test-instance', 'test-database');
var_dump($database->execute('SELECT 1 AS x')->rows()->current()['x']);
// Expected: object(Google\Cloud\Core\Int64)
// Actual: int(1)
- 主要言語
- PHP
- スター
- 1.2k
- フォーク
- 466
- 平均マージ
- 3日 3時間
- マージ済み PR(30日)
- 49
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
googleapis/google-cloud-php のほかの issue
-
[Gax] RetryMiddleware keeps a reference to itself since v1.43.1, leaking the handler chain and its sockets in long-running processes対応中かも @Hectorhammett が 2 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
googleapis/google-cloud-php#9813 · コメント 1 件 · 担当者 1 名 ·
メンテナーはふだん 2 日以内に返信
-
type: feature request
難易度 1/5 1時間未満 初心者へのやさしさ 75/100
googleapis/google-cloud-php#9716 · リアクション 11 件 ·
メンテナーはふだん 2 日以内に返信
-
[firebase/php-jwt] Support ML-DSA signing algorithms対応中かも @bshaffer が 17 日前に担当しました。 オープン
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
googleapis/google-cloud-php#9777 · コメント 3 件 · リアクション 1 件 · 担当者 1 名 ·
メンテナーはふだん 2 日以内に返信
-
難易度 3/5 1〜2日 初心者へのやさしさ 65/100
googleapis/google-cloud-php#9725 ·
メンテナーはふだん 2 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
googleapis/google-cloud-php#9675 · コメント 1 件 ·
メンテナーはふだん 2 日以内に返信
googleapis/google-cloud-php の issue をすべて見る
似ている issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 82/100
octobercms/october#6150 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
-
type/bug
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
flarum/framework#5301 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Add TuneIn-DirMon in the bot list対応中かも @liviuconcioiu が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
matomo-org/device-detector#8424 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 63/100
メンテナーはふだん 1 日以内に返信