Skip to content

Commit

Permalink
feat: add collation for Case sensitive string column (#2490)
Browse files Browse the repository at this point in the history
* feat: add collation for Case sensitive string column

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* chore: fix typo

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
  • Loading branch information
Neenu1995 and gcf-owl-bot[bot] authored Jan 26, 2023
1 parent cd8b3ae commit 3257737
Show file tree
Hide file tree
Showing 8 changed files with 198 additions and 3 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,13 @@ implementation 'com.google.cloud:google-cloud-bigquery'
If you are using Gradle without BOM, add this to your dependencies:

```Groovy
implementation 'com.google.cloud:google-cloud-bigquery:2.20.2'
implementation 'com.google.cloud:google-cloud-bigquery:2.21.0'
```

If you are using SBT, add this to your dependencies:

```Scala
libraryDependencies += "com.google.cloud" % "google-cloud-bigquery" % "2.20.2"
libraryDependencies += "com.google.cloud" % "google-cloud-bigquery" % "2.21.0"
```

## Authentication
Expand Down
10 changes: 10 additions & 0 deletions google-cloud-bigquery/clirr-ignored-differences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,14 @@
<className>com/google/cloud/bigquery/Connection</className>
<method>com.google.common.util.concurrent.ListenableFuture executeSelectAsync(java.lang.String, java.util.List, java.util.Map[])</method>
</difference>
<difference>
<differenceType>7013</differenceType>
<className>com/google/cloud/bigquery/DatasetInfo*</className>
<method>*DefaultCollation(*)</method>
</difference>
<difference>
<differenceType>7013</differenceType>
<className>com/google/cloud/bigquery/TableInfo*</className>
<method>*DefaultCollation(*)</method>
</difference>
</differences>
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,12 @@ public Builder setDefaultPartitionExpirationMs(Long defaultPartitionExpirationMs
return this;
}

@Override
public Builder setDefaultCollation(String defaultCollation) {
infoBuilder.setDefaultCollation(defaultCollation);
return this;
}

@Override
public Dataset build() {
return new Dataset(bigquery, infoBuilder);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ public Dataset apply(DatasetInfo datasetInfo) {
private final Labels labels;
private final EncryptionConfiguration defaultEncryptionConfiguration;
private final Long defaultPartitionExpirationMs;
private final String defaultCollation;

/** A builder for {@code DatasetInfo} objects. */
public abstract static class Builder {
Expand Down Expand Up @@ -148,6 +149,19 @@ public abstract Builder setDefaultEncryptionConfiguration(
*/
public abstract Builder setDefaultPartitionExpirationMs(Long defaultPartitionExpirationMs);

/**
* Optional. Defines the default collation specification of future tables created in the
* dataset. If a table is created in this dataset without table-level default collation, then
* the table inherits the dataset default collation, which is applied to the string fields that
* do not have explicit collation specified. A change to this field affects only tables created
* afterwards, and does not alter the existing tables. The following values are supported:
*
* <p>* 'und:ci': undetermined locale, case insensitive. * '': empty string. Default to
* case-sensitive behavior. (-- A wrapper is used here because it is possible to set the value
* to the empty string. --) (-- api-linter: standard-fields=disabled --)
*/
public abstract Builder setDefaultCollation(String defaultCollation);

/** Creates a {@code DatasetInfo} object. */
public abstract DatasetInfo build();
}
Expand All @@ -168,6 +182,7 @@ static final class BuilderImpl extends Builder {
private Labels labels = Labels.ZERO;
private EncryptionConfiguration defaultEncryptionConfiguration;
private Long defaultPartitionExpirationMs;
private String defaultCollation;

BuilderImpl() {}

Expand All @@ -186,6 +201,7 @@ static final class BuilderImpl extends Builder {
this.labels = datasetInfo.labels;
this.defaultEncryptionConfiguration = datasetInfo.defaultEncryptionConfiguration;
this.defaultPartitionExpirationMs = datasetInfo.defaultPartitionExpirationMs;
this.defaultCollation = datasetInfo.defaultCollation;
}

BuilderImpl(com.google.api.services.bigquery.model.Dataset datasetPb) {
Expand Down Expand Up @@ -219,6 +235,7 @@ public Acl apply(Dataset.Access accessPb) {
.build();
}
this.defaultPartitionExpirationMs = datasetPb.getDefaultPartitionExpirationMs();
this.defaultCollation = datasetPb.getDefaultCollation();
}

@Override
Expand Down Expand Up @@ -313,6 +330,12 @@ public Builder setDefaultPartitionExpirationMs(Long defaultPartitionExpirationMs
return this;
}

@Override
public Builder setDefaultCollation(String defaultCollation) {
this.defaultCollation = defaultCollation;
return this;
}

@Override
public DatasetInfo build() {
return new DatasetInfo(this);
Expand All @@ -334,6 +357,7 @@ public DatasetInfo build() {
labels = builder.labels;
defaultEncryptionConfiguration = builder.defaultEncryptionConfiguration;
defaultPartitionExpirationMs = builder.defaultPartitionExpirationMs;
defaultCollation = builder.defaultCollation;
}

/** Returns the dataset identity. */
Expand Down Expand Up @@ -459,6 +483,10 @@ public Long getDefaultPartitionExpirationMs() {
return defaultPartitionExpirationMs;
}

public String getDefaultCollation() {
return defaultCollation;
}

/** Returns a builder for the dataset object. */
public Builder toBuilder() {
return new BuilderImpl(this);
Expand All @@ -481,6 +509,7 @@ public String toString() {
.add("labels", labels)
.add("defaultEncryptionConfiguration", defaultEncryptionConfiguration)
.add("defaultPartitionExpirationMs", defaultPartitionExpirationMs)
.add("defaultCollation", defaultCollation)
.toString();
}

Expand Down Expand Up @@ -556,6 +585,9 @@ public Dataset.Access apply(Acl acl) {
if (defaultPartitionExpirationMs != null) {
datasetPb.setDefaultPartitionExpirationMs(defaultPartitionExpirationMs);
}
if (defaultCollation != null) {
datasetPb.setDefaultCollation(defaultCollation);
}
return datasetPb;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public TableFieldSchema apply(Field field) {
private final Long scale;
private final Long precision;
private final String defaultValueExpression;
private final String collation;

/**
* Mode for a BigQuery Table field. {@link Mode#NULLABLE} fields can be set to {@code null},
Expand All @@ -87,6 +88,7 @@ public static final class Builder {
private Long scale;
private Long precision;
private String defaultValueExpression;
private String collation;

private Builder() {}

Expand All @@ -101,6 +103,7 @@ private Builder(Field field) {
this.scale = field.scale;
this.precision = field.precision;
this.defaultValueExpression = field.defaultValueExpression;
this.collation = field.collation;
}

/**
Expand Down Expand Up @@ -285,6 +288,19 @@ public Builder setDefaultValueExpression(String defaultValueExpression) {
return this;
}

/**
* Optional. Field collation can be set only when the type of field is STRING. The following
* values are supported:
*
* <p>* 'und:ci': undetermined locale, case insensitive. * '': empty string. Default to
* case-sensitive behavior. (-- A wrapper is used here because it is possible to set the value
* to the empty string. --)
*/
public Builder setCollation(String collation) {
this.collation = collation;
return this;
}

/** Creates a {@code Field} object. */
public Field build() {
return new Field(this);
Expand All @@ -302,6 +318,7 @@ private Field(Builder builder) {
this.scale = builder.scale;
this.precision = builder.precision;
this.defaultValueExpression = builder.defaultValueExpression;
this.collation = builder.collation;
}

/** Returns the field name. */
Expand Down Expand Up @@ -357,6 +374,10 @@ public String getDefaultValueExpression() {
return defaultValueExpression;
}

public String getCollation() {
return collation;
}

/**
* Returns the list of sub-fields if {@link #getType()} is a {@link LegacySQLTypeName#RECORD}.
* Returns {@code null} otherwise.
Expand All @@ -382,6 +403,7 @@ public String toString() {
.add("scale", scale)
.add("precision", precision)
.add("defaultValueExpression", defaultValueExpression)
.add("collation", collation)
.toString();
}

Expand Down Expand Up @@ -468,6 +490,9 @@ TableFieldSchema toPb() {
List<TableFieldSchema> fieldsPb = Lists.transform(getSubFields(), TO_PB_FUNCTION);
fieldSchemaPb.setFields(fieldsPb);
}
if (collation != null) {
fieldSchemaPb.setCollation(collation);
}
return fieldSchemaPb;
}

Expand Down Expand Up @@ -500,6 +525,9 @@ static Field fromPb(TableFieldSchema fieldSchemaPb) {
? FieldList.of(Lists.transform(fieldSchemaPb.getFields(), FROM_PB_FUNCTION))
: null;
fieldBuilder.setType(LegacySQLTypeName.valueOf(fieldSchemaPb.getType()), subFields);
if (fieldSchemaPb.getCollation() != null) {
fieldBuilder.setCollation(fieldSchemaPb.getCollation());
}
return fieldBuilder.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,12 @@ public Builder setRequirePartitionFilter(Boolean requirePartitionFilter) {
return this;
}

@Override
public Builder setDefaultCollation(String defaultCollation) {
infoBuilder.setDefaultCollation(defaultCollation);
return this;
}

@Override
public Table build() {
return new Table(bigquery, infoBuilder);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ public Table apply(TableInfo tableInfo) {
private final EncryptionConfiguration encryptionConfiguration;
private final Labels labels;
private final Boolean requirePartitionFilter;
private final String defaultCollation;

/** A builder for {@code TableInfo} objects. */
public abstract static class Builder {
Expand Down Expand Up @@ -135,6 +136,8 @@ public abstract static class Builder {
public Builder setRequirePartitionFilter(Boolean requirePartitionFilter) {
return this;
}

public abstract Builder setDefaultCollation(String defaultCollation);
}

static class BuilderImpl extends Builder {
Expand All @@ -155,6 +158,7 @@ static class BuilderImpl extends Builder {
private EncryptionConfiguration encryptionConfiguration;
private Labels labels = Labels.ZERO;
private Boolean requirePartitionFilter;
private String defaultCollation;

BuilderImpl() {}

Expand All @@ -175,6 +179,7 @@ static class BuilderImpl extends Builder {
this.encryptionConfiguration = tableInfo.encryptionConfiguration;
this.labels = tableInfo.labels;
this.requirePartitionFilter = tableInfo.requirePartitionFilter;
this.defaultCollation = tableInfo.defaultCollation;
}

BuilderImpl(Table tablePb) {
Expand All @@ -199,6 +204,7 @@ static class BuilderImpl extends Builder {
}
this.labels = Labels.fromPb(tablePb.getLabels());
this.requirePartitionFilter = tablePb.getRequirePartitionFilter();
this.defaultCollation = tablePb.getDefaultCollation();
}

@Override
Expand Down Expand Up @@ -297,6 +303,12 @@ public Builder setRequirePartitionFilter(Boolean requirePartitionFilter) {
return this;
}

@Override
public Builder setDefaultCollation(String defaultCollation) {
this.defaultCollation = defaultCollation;
return this;
}

@Override
public TableInfo build() {
return new TableInfo(this);
Expand All @@ -318,8 +330,9 @@ public TableInfo build() {
this.numRows = builder.numRows;
this.definition = builder.definition;
this.encryptionConfiguration = builder.encryptionConfiguration;
labels = builder.labels;
this.labels = builder.labels;
this.requirePartitionFilter = builder.requirePartitionFilter;
this.defaultCollation = builder.defaultCollation;
}

/** Returns the hash of the table resource. */
Expand Down Expand Up @@ -422,6 +435,10 @@ public Boolean getRequirePartitionFilter() {
return requirePartitionFilter;
}

public String getDefaultCollation() {
return defaultCollation;
}

/** Returns a builder for the table object. */
public Builder toBuilder() {
return new BuilderImpl(this);
Expand All @@ -446,6 +463,7 @@ public String toString() {
.add("encryptionConfiguration", encryptionConfiguration)
.add("labels", labels)
.add("requirePartitionFilter", requirePartitionFilter)
.add("defaultCollation", defaultCollation)
.toString();
}

Expand Down Expand Up @@ -507,6 +525,9 @@ Table toPb() {
}
tablePb.setLabels(labels.toPb());
tablePb.setRequirePartitionFilter(requirePartitionFilter);
if (defaultCollation != null) {
tablePb.setDefaultCollation(defaultCollation);
}
return tablePb;
}

Expand Down
Loading

0 comments on commit 3257737

Please sign in to comment.