Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[Spanner] v2: client-level queryOptions passed to SpannerClient are silently ignored

Abierto Apto para principiantes
#9,811 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 2 días

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
84/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
php

Línea de trabajo

Empieza por Spanner/src/Operation.php, alrededor de las líneas 103–109, y compara las llamadas a validateOptions() en ese archivo. El issue identifica el cambio en la desestructuración y las opciones afectadas; revisa las pruebas existentes de Spanner para las opciones a nivel de cliente y añade cobertura para returnInt64AsObject y defaultQueryOptions. El trabajo estará terminado cuando las opciones del constructor surtan efecto y pasen las pruebas pertinentes.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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
  1. Create a SpannerClient with returnInt64AsObject => true.
  2. 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)
Lenguaje dominante
PHP
Estrellas
1.2k
Forks
466
Merge medio
3 d 3 h
PR fusionados (30 d)
49

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de googleapis/google-cloud-php

Todos los issues de googleapis/google-cloud-php

Issues similares

Más issues de PHP

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.