Skip to content

Commit 5110b9b

Browse files
authored
perf: use protobuf for metadata to reduce type conversions (#325)
* perf: use protobuf for metadata to reduce type conversions * fix: ensure the metadata return type remains the same * fix: only wrap non-None metadata pbs Co-authored-by: larkee <larkee@users.noreply.github.com>
1 parent eccbd0d commit 5110b9b

File tree

3 files changed

+7
-4
lines changed

3 files changed

+7
-4
lines changed

google/cloud/spanner_v1/_helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ def _parse_value_pb(value_pb, field_type):
205205
_parse_value_pb(item_pb, field_type.struct_type.fields[i].type_)
206206
for (i, item_pb) in enumerate(value_pb.list_value.values)
207207
]
208-
elif field_type.code == TypeCode.NUMERIC:
208+
elif type_code == TypeCode.NUMERIC:
209209
return decimal.Decimal(value_pb.string_value)
210210
else:
211211
raise ValueError("Unknown type: %s" % (field_type,))

google/cloud/spanner_v1/streamed.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from google.protobuf.struct_pb2 import Value
1919
from google.cloud import exceptions
2020
from google.cloud.spanner_v1 import PartialResultSet
21+
from google.cloud.spanner_v1 import ResultSetMetadata
2122
from google.cloud.spanner_v1 import TypeCode
2223
import six
2324

@@ -65,7 +66,9 @@ def metadata(self):
6566
:rtype: :class:`~google.cloud.spanner_v1.types.ResultSetMetadata`
6667
:returns: structure describing the results
6768
"""
68-
return self._metadata
69+
if self._metadata:
70+
return ResultSetMetadata.wrap(self._metadata)
71+
return None
6972

7073
@property
7174
def stats(self):
@@ -119,7 +122,7 @@ def _consume_next(self):
119122
response_pb = PartialResultSet.pb(response)
120123

121124
if self._metadata is None: # first response
122-
metadata = self._metadata = response.metadata
125+
metadata = self._metadata = response_pb.metadata
123126

124127
source = self._source
125128
if source is not None and source._transaction_id is None:

tests/unit/test_streamed.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ def test_properties_set(self):
147147
metadata = streamed._metadata = self._make_result_set_metadata(FIELDS)
148148
stats = streamed._stats = self._make_result_set_stats()
149149
self.assertEqual(list(streamed.fields), FIELDS)
150-
self.assertIs(streamed.metadata, metadata)
150+
self.assertIs(streamed.metadata._pb, metadata)
151151
self.assertIs(streamed.stats, stats)
152152

153153
def test__merge_chunk_bool(self):

0 commit comments

Comments
 (0)