Skip to content
This repository was archived by the owner on Mar 6, 2026. It is now read-only.

Commit ad9d3de

Browse files
authored
Harden 'ArrayQueryParameter.from_api_repr' against missing 'parameterValue'. (#7311)
Closes #7309.
1 parent 6d48b25 commit ad9d3de

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

google/cloud/bigquery/query.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,9 @@ def _from_api_repr_struct(cls, resource):
230230
def _from_api_repr_scalar(cls, resource):
231231
name = resource.get("name")
232232
array_type = resource["parameterType"]["arrayType"]["type"]
233-
values = [value["value"] for value in resource["parameterValue"]["arrayValues"]]
233+
parameter_value = resource.get("parameterValue", {})
234+
array_values = parameter_value.get("arrayValues", ())
235+
values = [value["value"] for value in array_values]
234236
converted = [
235237
_QUERY_PARAMS_FROM_JSON[array_type](value, None) for value in values
236238
]

tests/unit/test_query.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,18 @@ def test_from_api_repr_wo_name(self):
362362
self.assertEqual(param.array_type, "INT64")
363363
self.assertEqual(param.values, [1, 2])
364364

365+
def test_from_api_repr_wo_values(self):
366+
# Back-end may not send back values for empty array params. See #7309
367+
RESOURCE = {
368+
"name": "foo",
369+
"parameterType": {"type": "ARRAY", "arrayType": {"type": "INT64"}},
370+
}
371+
klass = self._get_target_class()
372+
param = klass.from_api_repr(RESOURCE)
373+
self.assertEqual(param.name, "foo")
374+
self.assertEqual(param.array_type, "INT64")
375+
self.assertEqual(param.values, [])
376+
365377
def test_from_api_repr_w_struct_type(self):
366378
from google.cloud.bigquery.query import StructQueryParameter
367379

0 commit comments

Comments
 (0)