Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 6315842

Browse files
author
Praful Makani
authoredMay 1, 2020
fix: null type in timepartitioning frompb (#305)
1 parent 050e708 commit 6315842

File tree

4 files changed

+32
-41
lines changed

4 files changed

+32
-41
lines changed
 

‎google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/StandardTableDefinition.java

-11
Original file line numberDiff line numberDiff line change
@@ -285,17 +285,6 @@ static StandardTableDefinition fromPb(Table tablePb) {
285285
+ " in table "
286286
+ tablePb.getTableReference().getTableId(),
287287
e);
288-
} catch (NullPointerException e) {
289-
throw new NullPointerException(
290-
"Null pointer - Got unexpected time partitioning "
291-
+ tablePb.getTimePartitioning().toString()
292-
+ " in project "
293-
+ tablePb.getTableReference().getProjectId()
294-
+ " in dataset "
295-
+ tablePb.getTableReference().getDatasetId()
296-
+ " in table "
297-
+ tablePb.getTableReference().getTableId()
298-
+ e.toString());
299288
}
300289
}
301290
if (tablePb.getRangePartitioning() != null) {

‎google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TimePartitioning.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ static TimePartitioning fromPb(
142142
if (Data.isNull(expirationMs)) {
143143
expirationMs = null;
144144
}
145-
return newBuilder(Type.valueOf(partitioningPb.getType()))
145+
return newBuilder(Type.valueOf(firstNonNull(partitioningPb.getType(), Type.DAY.name())))
146146
.setExpirationMs(expirationMs)
147147
.setField(partitioningPb.getField())
148148
.setRequirePartitionFilter(partitioningPb.getRequirePartitionFilter())

‎google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/BigQueryImplTest.java

+31-1
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,22 @@ public class BigQueryImplTest {
116116
private static final Long TABLE_CREATION_TIME = 1546275600000L;
117117
private static final TimePartitioning TIME_PARTITIONING =
118118
TimePartitioning.of(TimePartitioning.Type.DAY, EXPIRATION_MS);
119+
private static final com.google.api.services.bigquery.model.TimePartitioning PB_TIMEPARTITIONING =
120+
new com.google.api.services.bigquery.model.TimePartitioning()
121+
.setType(null)
122+
.setField("timestampField");
123+
private static final TimePartitioning TIME_PARTITIONING_NULL_TYPE =
124+
TimePartitioning.fromPb(PB_TIMEPARTITIONING);
119125
private static final StandardTableDefinition TABLE_DEFINITION_WITH_PARTITIONING =
120126
StandardTableDefinition.newBuilder()
121127
.setSchema(TABLE_SCHEMA)
122128
.setTimePartitioning(TIME_PARTITIONING)
123129
.build();
130+
private static final StandardTableDefinition TABLE_DEFINITION_WITH_PARTITIONING_NULL_TYPE =
131+
StandardTableDefinition.newBuilder()
132+
.setSchema(TABLE_SCHEMA)
133+
.setTimePartitioning(TIME_PARTITIONING_NULL_TYPE)
134+
.build();
124135
private static final RangePartitioning.Range RANGE =
125136
RangePartitioning.Range.newBuilder().setStart(1L).setInterval(2L).setEnd(10L).build();
126137
private static final RangePartitioning RANGE_PARTITIONING =
@@ -142,7 +153,10 @@ public class BigQueryImplTest {
142153
TableInfo.newBuilder(TABLE_ID, TABLE_DEFINITION_WITH_PARTITIONING)
143154
.setCreationTime(TABLE_CREATION_TIME)
144155
.build();
145-
156+
private static final TableInfo TABLE_INFO_WITH_PARTITIONS_NULL_TYPE =
157+
TableInfo.newBuilder(TABLE_ID, TABLE_DEFINITION_WITH_PARTITIONING_NULL_TYPE)
158+
.setCreationTime(TABLE_CREATION_TIME)
159+
.build();
146160
private static final ModelId OTHER_MODEL_ID = ModelId.of(DATASET, OTHER_MODEL);
147161
private static final ModelId MODEL_ID_WITH_PROJECT = ModelId.of(PROJECT, DATASET, MODEL);
148162

@@ -912,6 +926,22 @@ public void testListTablesReturnedParameters() {
912926
assertArrayEquals(tableList.toArray(), Iterables.toArray(page.getValues(), Table.class));
913927
}
914928

929+
@Test
930+
public void testListTablesReturnedParametersNullType() {
931+
bigquery = options.getService();
932+
ImmutableList<Table> tableList =
933+
ImmutableList.of(
934+
new Table(bigquery, new TableInfo.BuilderImpl(TABLE_INFO_WITH_PARTITIONS_NULL_TYPE)));
935+
Tuple<String, Iterable<com.google.api.services.bigquery.model.Table>> result =
936+
Tuple.of(CURSOR, Iterables.transform(tableList, TableInfo.TO_PB_FUNCTION));
937+
EasyMock.expect(bigqueryRpcMock.listTables(PROJECT, DATASET, TABLE_LIST_OPTIONS))
938+
.andReturn(result);
939+
EasyMock.replay(bigqueryRpcMock);
940+
Page<Table> page = bigquery.listTables(DATASET, TABLE_LIST_PAGE_SIZE, TABLE_LIST_PAGE_TOKEN);
941+
assertEquals(CURSOR, page.getNextPageToken());
942+
assertArrayEquals(tableList.toArray(), Iterables.toArray(page.getValues(), Table.class));
943+
}
944+
915945
@Test
916946
public void testListTablesWithRangePartitioning() {
917947
bigquery = options.getService();

‎google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/StandardTableDefinitionTest.java

-28
Original file line numberDiff line numberDiff line change
@@ -152,34 +152,6 @@ public void testFromPbWithUnexpectedTimePartitioningTypeRaisesInvalidArgumentExc
152152
fail("testFromPb illegal argument exception did not throw!");
153153
}
154154

155-
@Test
156-
public void testFromPbWithNullTimePartitioningTypeRaisesNullPointerException() {
157-
Table invalidTable =
158-
new Table()
159-
.setType("TABLE")
160-
.setTableReference(
161-
new TableReference()
162-
.setProjectId("NULL_PTR_TEST_PROJECT")
163-
.setDatasetId("NULL_PTR_TEST_DATASET")
164-
.setTableId("NULL_PTR_TEST_TABLE"))
165-
.setTimePartitioning(
166-
new com.google.api.services.bigquery.model.TimePartitioning().setType(null));
167-
try {
168-
StandardTableDefinition.fromPb(invalidTable);
169-
} catch (NullPointerException ne) {
170-
assertThat(
171-
ne.getMessage(),
172-
allOf(
173-
containsString("Null pointer - Got unexpected time partitioning"),
174-
containsString("null"),
175-
containsString("NULL_PTR_TEST_PROJECT"),
176-
containsString("NULL_PTR_TEST_DATASET"),
177-
containsString("NULL_PTR_TEST_TABLE")));
178-
return;
179-
}
180-
fail("testFromPb null pointer exception did not throw!");
181-
}
182-
183155
@Test
184156
public void testFromPbWithNullEstimatedRowsAndBytes() {
185157
StandardTableDefinition.fromPb(

0 commit comments

Comments
 (0)
Failed to load comments.