diff --git a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/StandardTableDefinition.java b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/StandardTableDefinition.java index 1c465343a..4e26f831f 100644 --- a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/StandardTableDefinition.java +++ b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/StandardTableDefinition.java @@ -285,17 +285,6 @@ static StandardTableDefinition fromPb(Table tablePb) { + " in table " + tablePb.getTableReference().getTableId(), e); - } catch (NullPointerException e) { - throw new NullPointerException( - "Null pointer - Got unexpected time partitioning " - + tablePb.getTimePartitioning().toString() - + " in project " - + tablePb.getTableReference().getProjectId() - + " in dataset " - + tablePb.getTableReference().getDatasetId() - + " in table " - + tablePb.getTableReference().getTableId() - + e.toString()); } } if (tablePb.getRangePartitioning() != null) { diff --git a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TimePartitioning.java b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TimePartitioning.java index dd9d4a73c..43f342129 100644 --- a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TimePartitioning.java +++ b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TimePartitioning.java @@ -142,7 +142,7 @@ static TimePartitioning fromPb( if (Data.isNull(expirationMs)) { expirationMs = null; } - return newBuilder(Type.valueOf(partitioningPb.getType())) + return newBuilder(Type.valueOf(firstNonNull(partitioningPb.getType(), Type.DAY.name()))) .setExpirationMs(expirationMs) .setField(partitioningPb.getField()) .setRequirePartitionFilter(partitioningPb.getRequirePartitionFilter()) diff --git a/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/BigQueryImplTest.java b/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/BigQueryImplTest.java index 7ab3e8ef2..999ea9a03 100644 --- a/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/BigQueryImplTest.java +++ b/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/BigQueryImplTest.java @@ -116,11 +116,22 @@ public class BigQueryImplTest { private static final Long TABLE_CREATION_TIME = 1546275600000L; private static final TimePartitioning TIME_PARTITIONING = TimePartitioning.of(TimePartitioning.Type.DAY, EXPIRATION_MS); + private static final com.google.api.services.bigquery.model.TimePartitioning PB_TIMEPARTITIONING = + new com.google.api.services.bigquery.model.TimePartitioning() + .setType(null) + .setField("timestampField"); + private static final TimePartitioning TIME_PARTITIONING_NULL_TYPE = + TimePartitioning.fromPb(PB_TIMEPARTITIONING); private static final StandardTableDefinition TABLE_DEFINITION_WITH_PARTITIONING = StandardTableDefinition.newBuilder() .setSchema(TABLE_SCHEMA) .setTimePartitioning(TIME_PARTITIONING) .build(); + private static final StandardTableDefinition TABLE_DEFINITION_WITH_PARTITIONING_NULL_TYPE = + StandardTableDefinition.newBuilder() + .setSchema(TABLE_SCHEMA) + .setTimePartitioning(TIME_PARTITIONING_NULL_TYPE) + .build(); private static final RangePartitioning.Range RANGE = RangePartitioning.Range.newBuilder().setStart(1L).setInterval(2L).setEnd(10L).build(); private static final RangePartitioning RANGE_PARTITIONING = @@ -142,7 +153,10 @@ public class BigQueryImplTest { TableInfo.newBuilder(TABLE_ID, TABLE_DEFINITION_WITH_PARTITIONING) .setCreationTime(TABLE_CREATION_TIME) .build(); - + private static final TableInfo TABLE_INFO_WITH_PARTITIONS_NULL_TYPE = + TableInfo.newBuilder(TABLE_ID, TABLE_DEFINITION_WITH_PARTITIONING_NULL_TYPE) + .setCreationTime(TABLE_CREATION_TIME) + .build(); private static final ModelId OTHER_MODEL_ID = ModelId.of(DATASET, OTHER_MODEL); private static final ModelId MODEL_ID_WITH_PROJECT = ModelId.of(PROJECT, DATASET, MODEL); @@ -912,6 +926,22 @@ public void testListTablesReturnedParameters() { assertArrayEquals(tableList.toArray(), Iterables.toArray(page.getValues(), Table.class)); } + @Test + public void testListTablesReturnedParametersNullType() { + bigquery = options.getService(); + ImmutableList