From bc88aa57f55b2c3605cbb9c66f2e66daa695c20c Mon Sep 17 00:00:00 2001 From: Siddharth Agrawal Date: Mon, 30 Oct 2023 20:25:42 -0700 Subject: [PATCH] feat: add support for proto3 optional tag (#2295) --- .../bigquery/storage/v1/ProtoSchemaConverter.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/ProtoSchemaConverter.java b/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/ProtoSchemaConverter.java index c55d4181a5..16e8e3425d 100644 --- a/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/ProtoSchemaConverter.java +++ b/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/ProtoSchemaConverter.java @@ -102,6 +102,17 @@ private static ProtoSchema convertInternal( enumTypes.add(enumFullName); } } + // The protobuf payload will be decoded as proto2 on the server side. The schema is also + // specified as proto2. Hence we must clear proto3-only features. This works since proto2 and + // proto3 are binary-compatible. + if (resultField.hasProto3Optional()) { + // Clear proto3-only features + resultField.clearProto3Optional(); + } + if (resultField.hasOneofIndex()) { + // Clear proto3-only features + resultField.clearOneofIndex(); + } resultProto.addField(resultField); } structTypes.add(protoFullName);