From 3e51ea02bb9a40c4d20b31a5435954c4d087f26d Mon Sep 17 00:00:00 2001 From: Praful Makani Date: Fri, 28 Feb 2020 00:10:34 +0530 Subject: [PATCH] feat: expose requirepartitionfilter field in table (#158) * feat: expose requirepartitionfilter field in table * feat: modified java doc * feat: ignore differences * remove clirr-ignored-differences file this will no longer be needed * add TableInfo outer-class back * remove abstract implementation of setRequirePartitionFilter add empty default implementation instead in the public class * remove extraneous words * remove whitespaces * feat: update javadoc * feat: lint Co-authored-by: Stephanie Wang --- .../java/com/google/cloud/bigquery/Table.java | 6 +++++ .../com/google/cloud/bigquery/TableInfo.java | 25 +++++++++++++++++++ .../google/cloud/bigquery/TableInfoTest.java | 16 ++++++++++++ 3 files changed, 47 insertions(+) diff --git a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Table.java b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Table.java index ab341c62c..5e1f1a2c0 100644 --- a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Table.java +++ b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Table.java @@ -150,6 +150,12 @@ public Builder setLabels(Map labels) { return this; } + @Override + public Builder setRequirePartitionFilter(Boolean requirePartitionFilter) { + infoBuilder.setRequirePartitionFilter(requirePartitionFilter); + return this; + } + @Override public Table build() { return new Table(bigquery, infoBuilder); diff --git a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableInfo.java b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableInfo.java index e64e85eba..d3e58f980 100644 --- a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableInfo.java +++ b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/TableInfo.java @@ -71,6 +71,7 @@ public Table apply(TableInfo tableInfo) { private final TableDefinition definition; private final EncryptionConfiguration encryptionConfiguration; private final Labels labels; + private final Boolean requirePartitionFilter; /** A builder for {@code TableInfo} objects. */ public abstract static class Builder { @@ -130,6 +131,10 @@ public abstract static class Builder { public abstract TableInfo build(); public abstract Builder setEncryptionConfiguration(EncryptionConfiguration configuration); + + public Builder setRequirePartitionFilter(Boolean requirePartitionFilter) { + return this; + } } static class BuilderImpl extends Builder { @@ -149,6 +154,7 @@ static class BuilderImpl extends Builder { private TableDefinition definition; private EncryptionConfiguration encryptionConfiguration; private Labels labels = Labels.ZERO; + private Boolean requirePartitionFilter; BuilderImpl() {} @@ -168,6 +174,7 @@ static class BuilderImpl extends Builder { this.definition = tableInfo.definition; this.encryptionConfiguration = tableInfo.encryptionConfiguration; this.labels = tableInfo.labels; + this.requirePartitionFilter = tableInfo.requirePartitionFilter; } BuilderImpl(Table tablePb) { @@ -191,6 +198,7 @@ static class BuilderImpl extends Builder { new EncryptionConfiguration.Builder(tablePb.getEncryptionConfiguration()).build(); } this.labels = Labels.fromPb(tablePb.getLabels()); + this.requirePartitionFilter = tablePb.getRequirePartitionFilter(); } @Override @@ -283,6 +291,12 @@ public Builder setLabels(Map labels) { return this; } + @Override + public Builder setRequirePartitionFilter(Boolean requirePartitionFilter) { + this.requirePartitionFilter = requirePartitionFilter; + return this; + } + @Override public TableInfo build() { return new TableInfo(this); @@ -305,6 +319,7 @@ public TableInfo build() { this.definition = builder.definition; this.encryptionConfiguration = builder.encryptionConfiguration; labels = builder.labels; + this.requirePartitionFilter = builder.requirePartitionFilter; } /** Returns the hash of the table resource. */ @@ -399,6 +414,14 @@ public Map getLabels() { return labels.userMap(); } + /** + * Returns true if a partition filter (that can be used for partition elimination) is required for + * queries over this table. + */ + public Boolean getRequirePartitionFilter() { + return requirePartitionFilter; + } + /** Returns a builder for the table object. */ public Builder toBuilder() { return new BuilderImpl(this); @@ -422,6 +445,7 @@ public String toString() { .add("definition", definition) .add("encryptionConfiguration", encryptionConfiguration) .add("labels", labels) + .add("requirePartitionFilter", requirePartitionFilter) .toString(); } @@ -482,6 +506,7 @@ Table toPb() { tablePb.setEncryptionConfiguration(encryptionConfiguration.toPb()); } tablePb.setLabels(labels.toPb()); + tablePb.setRequirePartitionFilter(requirePartitionFilter); return tablePb; } diff --git a/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/TableInfoTest.java b/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/TableInfoTest.java index 324f562cd..a44f70039 100644 --- a/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/TableInfoTest.java +++ b/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/TableInfoTest.java @@ -36,6 +36,9 @@ public class TableInfoTest { private static final Long CREATION_TIME = 10L; private static final Long EXPIRATION_TIME = 100L; private static final Long LAST_MODIFIED_TIME = 20L; + private static final Boolean REQUIRE_PARTITION_FILTER = true; + private static final EncryptionConfiguration ENCRYPTION_CONFIGURATION = + EncryptionConfiguration.newBuilder().setKmsKeyName("KMS_KEY_1").build(); private static final Field FIELD_SCHEMA1 = Field.newBuilder("StringField", LegacySQLTypeName.STRING) @@ -91,6 +94,7 @@ public class TableInfoTest { TableInfo.newBuilder(TABLE_ID, TABLE_DEFINITION) .setCreationTime(CREATION_TIME) .setDescription(DESCRIPTION) + .setEncryptionConfiguration(ENCRYPTION_CONFIGURATION) .setEtag(ETAG) .setExpirationTime(EXPIRATION_TIME) .setFriendlyName(FRIENDLY_NAME) @@ -101,6 +105,7 @@ public class TableInfoTest { .setNumRows(BigInteger.valueOf(NUM_ROWS)) .setSelfLink(SELF_LINK) .setLabels(Collections.singletonMap("a", "b")) + .setRequirePartitionFilter(REQUIRE_PARTITION_FILTER) .build(); private static final TableInfo VIEW_INFO = TableInfo.newBuilder(TABLE_ID, VIEW_DEFINITION) @@ -151,6 +156,7 @@ public void testBuilder() { assertEquals(TABLE_ID, TABLE_INFO.getTableId()); assertEquals(CREATION_TIME, TABLE_INFO.getCreationTime()); assertEquals(DESCRIPTION, TABLE_INFO.getDescription()); + assertEquals(ENCRYPTION_CONFIGURATION, TABLE_INFO.getEncryptionConfiguration()); assertEquals(ETAG, TABLE_INFO.getEtag()); assertEquals(EXPIRATION_TIME, TABLE_INFO.getExpirationTime()); assertEquals(FRIENDLY_NAME, TABLE_INFO.getFriendlyName()); @@ -161,6 +167,7 @@ public void testBuilder() { assertEquals(NUM_BYTES, TABLE_INFO.getNumBytes()); assertEquals(NUM_LONG_TERM_BYTES, TABLE_INFO.getNumLongTermBytes()); assertEquals(BigInteger.valueOf(NUM_ROWS), TABLE_INFO.getNumRows()); + assertEquals(REQUIRE_PARTITION_FILTER, TABLE_INFO.getRequirePartitionFilter()); assertEquals(TABLE_ID, VIEW_INFO.getTableId()); assertEquals(VIEW_DEFINITION, VIEW_INFO.getDefinition()); @@ -192,33 +199,39 @@ public void testOf() { assertEquals(TABLE_ID, tableInfo.getTableId()); assertNull(tableInfo.getCreationTime()); assertNull(tableInfo.getDescription()); + assertNull(tableInfo.getEncryptionConfiguration()); assertNull(tableInfo.getEtag()); assertNull(tableInfo.getExpirationTime()); assertNull(tableInfo.getFriendlyName()); assertNull(tableInfo.getGeneratedId()); assertNull(tableInfo.getLastModifiedTime()); + assertNull(tableInfo.getRequirePartitionFilter()); assertEquals(TABLE_DEFINITION, tableInfo.getDefinition()); assertNull(tableInfo.getSelfLink()); tableInfo = TableInfo.of(TABLE_ID, VIEW_DEFINITION); assertEquals(TABLE_ID, tableInfo.getTableId()); assertNull(tableInfo.getCreationTime()); assertNull(tableInfo.getDescription()); + assertNull(tableInfo.getEncryptionConfiguration()); assertNull(tableInfo.getEtag()); assertNull(tableInfo.getExpirationTime()); assertNull(tableInfo.getFriendlyName()); assertNull(tableInfo.getGeneratedId()); assertNull(tableInfo.getLastModifiedTime()); + assertNull(tableInfo.getRequirePartitionFilter()); assertEquals(VIEW_DEFINITION, tableInfo.getDefinition()); assertNull(tableInfo.getSelfLink()); tableInfo = TableInfo.of(TABLE_ID, EXTERNAL_TABLE_DEFINITION); assertEquals(TABLE_ID, tableInfo.getTableId()); assertNull(tableInfo.getCreationTime()); assertNull(tableInfo.getDescription()); + assertNull(tableInfo.getEncryptionConfiguration()); assertNull(tableInfo.getEtag()); assertNull(tableInfo.getExpirationTime()); assertNull(tableInfo.getFriendlyName()); assertNull(tableInfo.getGeneratedId()); assertNull(tableInfo.getLastModifiedTime()); + assertNull(tableInfo.getRequirePartitionFilter()); assertEquals(EXTERNAL_TABLE_DEFINITION, tableInfo.getDefinition()); assertNull(tableInfo.getSelfLink()); } @@ -250,6 +263,7 @@ private void compareTableInfo(TableInfo expected, TableInfo value) { assertEquals(expected.getDefinition(), value.getDefinition()); assertEquals(expected.getCreationTime(), value.getCreationTime()); assertEquals(expected.getDescription(), value.getDescription()); + assertEquals(expected.getEncryptionConfiguration(), value.getEncryptionConfiguration()); assertEquals(expected.getEtag(), value.getEtag()); assertEquals(expected.getExpirationTime(), value.getExpirationTime()); assertEquals(expected.getFriendlyName(), value.getFriendlyName()); @@ -260,6 +274,8 @@ private void compareTableInfo(TableInfo expected, TableInfo value) { assertEquals(expected.getNumRows(), value.getNumRows()); assertEquals(expected.getSelfLink(), value.getSelfLink()); assertEquals(expected.getLabels(), value.getLabels()); + assertEquals(expected.getRequirePartitionFilter(), value.getRequirePartitionFilter()); + assertEquals(expected.toString(), value.toString()); assertEquals(expected.hashCode(), value.hashCode()); } }