From d292af02146ca471d1b46ef062af711c52a560eb Mon Sep 17 00:00:00 2001 From: Jeff Ching Date: Mon, 14 Jan 2019 10:43:07 -0800 Subject: [PATCH 1/2] Add failing test for empty table schema --- .../java/com/google/cloud/bigquery/SchemaTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/SchemaTest.java b/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/SchemaTest.java index 4e8fedc5d4a4..f0a468d9cf9c 100644 --- a/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/SchemaTest.java +++ b/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/SchemaTest.java @@ -18,7 +18,10 @@ import static org.junit.Assert.assertEquals; +import com.google.api.services.bigquery.model.TableFieldSchema; +import com.google.api.services.bigquery.model.TableSchema; import com.google.common.collect.ImmutableList; +import java.util.ArrayList; import java.util.List; import org.junit.Test; @@ -57,4 +60,11 @@ private void compareTableSchema(Schema expected, Schema value) { assertEquals(expected, value); assertEquals(expected.getFields(), value.getFields()); } + + @Test + public void testEmptySchema() { + TableSchema tableSchema = new TableSchema(); + Schema schema = Schema.fromPb(tableSchema); + assertEquals(0, schema.getFields().size()); + } } From 73663a5baa9a81cfbda1637023ea1f2f779e3c57 Mon Sep 17 00:00:00 2001 From: Jeff Ching Date: Mon, 14 Jan 2019 10:47:42 -0800 Subject: [PATCH 2/2] Fix NPE if table schema returns null for fields --- .../src/main/java/com/google/cloud/bigquery/Schema.java | 9 ++++++++- .../test/java/com/google/cloud/bigquery/SchemaTest.java | 2 -- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Schema.java b/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Schema.java index 81c8cd279694..c2061c6777d9 100644 --- a/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Schema.java +++ b/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Schema.java @@ -18,10 +18,13 @@ import static com.google.common.base.Preconditions.checkNotNull; +import com.google.api.services.bigquery.model.TableFieldSchema; import com.google.api.services.bigquery.model.TableSchema; import com.google.common.base.Function; import com.google.common.base.MoreObjects; import java.io.Serializable; +import java.util.Collections; +import java.util.List; import java.util.Objects; /** This class represents the schema for a Google BigQuery Table or data source. */ @@ -90,6 +93,10 @@ TableSchema toPb() { } static Schema fromPb(com.google.api.services.bigquery.model.TableSchema tableSchemaPb) { - return Schema.of(FieldList.fromPb(tableSchemaPb.getFields())); + List fields = tableSchemaPb.getFields(); + if (fields == null) { + fields = Collections.emptyList(); + } + return Schema.of(FieldList.fromPb(fields)); } } diff --git a/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/SchemaTest.java b/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/SchemaTest.java index f0a468d9cf9c..090bb8a27a03 100644 --- a/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/SchemaTest.java +++ b/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/SchemaTest.java @@ -18,10 +18,8 @@ import static org.junit.Assert.assertEquals; -import com.google.api.services.bigquery.model.TableFieldSchema; import com.google.api.services.bigquery.model.TableSchema; import com.google.common.collect.ImmutableList; -import java.util.ArrayList; import java.util.List; import org.junit.Test;