From a0da90e8de89c5b9ef77183fee86e1e1a7389e00 Mon Sep 17 00:00:00 2001 From: Stephen Judkins Date: Mon, 25 Oct 2021 11:52:24 -0700 Subject: [PATCH] fix: BQ/proto schema names should be compared lowercase (#1369) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: - [x] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/java-bigquerystorage/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea - [ ] Ensure the tests and linter pass - [ ] Code coverage does not decrease (if any source code was changed) - [ ] Appropriate docs were updated (if necessary) Fixes #1366☕️ --- .kokoro/dependencies.sh | 10 ++++------ .../storage/v1/JsonToProtoMessage.java | 2 +- .../storage/v1beta2/JsonToProtoMessage.java | 2 +- .../storage/v1/JsonToProtoMessageTest.java | 18 ++++++++++++++++++ .../v1beta2/JsonToProtoMessageTest.java | 19 +++++++++++++++++++ .../src/test/proto/jsonTest.proto | 4 ++++ 6 files changed, 47 insertions(+), 8 deletions(-) diff --git a/.kokoro/dependencies.sh b/.kokoro/dependencies.sh index 99bd46c76b..f20d192c3d 100755 --- a/.kokoro/dependencies.sh +++ b/.kokoro/dependencies.sh @@ -38,15 +38,13 @@ function determineMavenOpts() { | sed -E 's/^(1\.[0-9]\.0).*$/\1/g' ) - case $javaVersion in - "17") + if [[ $javaVersion == 17* ]] + then # MaxPermSize is no longer supported as of jdk 17 echo -n "-Xmx1024m" - ;; - *) + else echo -n "-Xmx1024m -XX:MaxPermSize=128m" - ;; - esac + fi } export MAVEN_OPTS=$(determineMavenOpts) diff --git a/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessage.java b/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessage.java index d891fbf972..91a432c258 100644 --- a/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessage.java +++ b/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessage.java @@ -124,7 +124,7 @@ private static DynamicMessage convertJsonToProtoMessageImpl( if (tableSchema != null) { // protoSchema is generated from tableSchema so their field ordering should match. fieldSchema = tableSchema.get(field.getIndex()); - if (!fieldSchema.getName().equals(field.getName())) { + if (!fieldSchema.getName().toLowerCase().equals(field.getName())) { throw new ValidationException( "Field at index " + field.getIndex() diff --git a/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1beta2/JsonToProtoMessage.java b/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1beta2/JsonToProtoMessage.java index 7a66927486..7d07130233 100644 --- a/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1beta2/JsonToProtoMessage.java +++ b/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1beta2/JsonToProtoMessage.java @@ -123,7 +123,7 @@ private static DynamicMessage convertJsonToProtoMessageImpl( if (tableSchema != null) { // protoSchema is generated from tableSchema so their field ordering should match. fieldSchema = tableSchema.get(field.getIndex()); - if (!fieldSchema.getName().equals(field.getName())) { + if (!fieldSchema.getName().toLowerCase().equals(field.getName())) { throw new ValidationException( "Field at index " + field.getIndex() diff --git a/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessageTest.java b/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessageTest.java index 2101e3077a..e71f927e6d 100644 --- a/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessageTest.java +++ b/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessageTest.java @@ -552,6 +552,24 @@ public void testNumericMismatch() throws Exception { } } + @Test + public void testMixedCaseFieldNames() throws Exception { + TableFieldSchema field = + TableFieldSchema.newBuilder() + .setName("fooBar") + .setType(TableFieldSchema.Type.STRING) + .setMode(TableFieldSchema.Mode.NULLABLE) + .build(); + TableSchema tableSchema = TableSchema.newBuilder().addFields(field).build(); + + JSONObject json = new JSONObject(); + json.put("fooBar", "hello"); + + DynamicMessage protoMsg = + JsonToProtoMessage.convertJsonToProtoMessage( + TestMixedCaseFieldNames.getDescriptor(), tableSchema, json); + } + @Test public void testBigNumericMismatch() throws Exception { TableFieldSchema field = diff --git a/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta2/JsonToProtoMessageTest.java b/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta2/JsonToProtoMessageTest.java index c01f5ecbd3..47064e2a50 100644 --- a/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta2/JsonToProtoMessageTest.java +++ b/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta2/JsonToProtoMessageTest.java @@ -574,6 +574,25 @@ public void testBigNumericMismatch() throws Exception { } } + @Test + public void testMixedCasedFieldNames() throws Exception { + com.google.cloud.bigquery.storage.v1.TableFieldSchema field = + com.google.cloud.bigquery.storage.v1.TableFieldSchema.newBuilder() + .setName("fooBar") + .setType(com.google.cloud.bigquery.storage.v1.TableFieldSchema.Type.STRING) + .setMode(com.google.cloud.bigquery.storage.v1.TableFieldSchema.Mode.NULLABLE) + .build(); + com.google.cloud.bigquery.storage.v1.TableSchema tableSchema = + com.google.cloud.bigquery.storage.v1.TableSchema.newBuilder().addFields(field).build(); + + JSONObject json = new JSONObject(); + json.put("fooBar", "hello"); + + DynamicMessage protoMsg = + com.google.cloud.bigquery.storage.v1.JsonToProtoMessage.convertJsonToProtoMessage( + TestMixedCaseFieldNames.getDescriptor(), tableSchema, json); + } + @Test public void testDouble() throws Exception { TestDouble expectedProto = TestDouble.newBuilder().setDouble(1.2).setFloat(3.4f).build(); diff --git a/google-cloud-bigquerystorage/src/test/proto/jsonTest.proto b/google-cloud-bigquerystorage/src/test/proto/jsonTest.proto index c08dd7648f..29efcdfb9c 100644 --- a/google-cloud-bigquerystorage/src/test/proto/jsonTest.proto +++ b/google-cloud-bigquerystorage/src/test/proto/jsonTest.proto @@ -156,3 +156,7 @@ message TestNumeric { message TestBignumeric { repeated bytes bignumeric = 1; } + +message TestMixedCaseFieldNames { + required string foobar = 1; +}