Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.

Commit 9caca67

Browse files
committed
feat: Add Builder class for DataFormatOptions
1 parent 7c8c47f commit 9caca67

2 files changed

Lines changed: 75 additions & 15 deletions

File tree

google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryOptions.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.google.cloud.bigquery;
1818

1919
import com.google.api.core.BetaApi;
20+
import com.google.api.core.ObsoleteApi;
2021
import com.google.api.gax.retrying.ResultRetryAlgorithm;
2122
import com.google.cloud.ServiceDefaults;
2223
import com.google.cloud.ServiceOptions;
@@ -41,6 +42,7 @@ public class BigQueryOptions extends ServiceOptions<BigQuery, BigQueryOptions> {
4142
// set the option ThrowNotFound when you want to throw the exception when the value not found
4243
private boolean setThrowNotFound;
4344
private boolean useInt64Timestamps;
45+
private final DataFormatOptions dataFormatOptions;
4446
private JobCreationMode defaultJobCreationMode = JobCreationMode.JOB_CREATION_MODE_UNSPECIFIED;
4547
private boolean enableOpenTelemetryTracing;
4648
private Tracer openTelemetryTracer;
@@ -70,6 +72,7 @@ public static class Builder extends ServiceOptions.Builder<BigQuery, BigQueryOpt
7072

7173
private String location;
7274
private boolean useInt64Timestamps;
75+
private DataFormatOptions dataFormatOptions = DataFormatOptions.newBuilder().build();
7376
private boolean enableOpenTelemetryTracing;
7477
private Tracer openTelemetryTracer;
7578
private ResultRetryAlgorithm<?> resultRetryAlgorithm;
@@ -94,11 +97,31 @@ public Builder setLocation(String location) {
9497
return this;
9598
}
9699

100+
/**
101+
* This setter is marked as Obsolete. Prefer {@link #setDataFormatOptions(DataFormatOptions)} to
102+
* set the int64timestamp configuration instead.
103+
*
104+
* <p>If useInt64Timestamps value is set in here and via DataFormatOptions, the
105+
* DataFormatOptions configuration value is used.
106+
*
107+
* <p>{@code DataFormatOptions.newBuilder().setUseInt64Timestamp(...).build()}
108+
*/
109+
@ObsoleteApi("Use setDataFormatOptions(DataFormatOptions) instead")
97110
public Builder setUseInt64Timestamps(boolean useInt64Timestamps) {
98111
this.useInt64Timestamps = useInt64Timestamps;
99112
return this;
100113
}
101114

115+
/**
116+
* Set the format options for the BigQuery data types
117+
*
118+
* @param dataFormatOptions Configuration of the formatting options
119+
*/
120+
public Builder setDataFormatOptions(DataFormatOptions dataFormatOptions) {
121+
this.dataFormatOptions = dataFormatOptions;
122+
return this;
123+
}
124+
102125
/**
103126
* Enables OpenTelemetry tracing functionality for this BigQuery instance
104127
*
@@ -136,6 +159,7 @@ private BigQueryOptions(Builder builder) {
136159
super(BigQueryFactory.class, BigQueryRpcFactory.class, builder, new BigQueryDefaults());
137160
this.location = builder.location;
138161
this.useInt64Timestamps = builder.useInt64Timestamps;
162+
this.dataFormatOptions = builder.dataFormatOptions;
139163
this.enableOpenTelemetryTracing = builder.enableOpenTelemetryTracing;
140164
this.openTelemetryTracer = builder.openTelemetryTracer;
141165
if (builder.resultRetryAlgorithm != null) {
@@ -210,6 +234,10 @@ public boolean getUseInt64Timestamps() {
210234
return useInt64Timestamps;
211235
}
212236

237+
public DataFormatOptions getDataFormatOptions() {
238+
return dataFormatOptions;
239+
}
240+
213241
public JobCreationMode getDefaultJobCreationMode() {
214242
return defaultJobCreationMode;
215243
}

google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/DataFormatOptions.java

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,29 +23,59 @@ public String toString() {
2323
}
2424
}
2525

26-
private boolean useInt64Timestamp;
27-
private TimestampFormatOptions timestampFormatOptions;
26+
private final boolean useInt64Timestamp;
27+
private final TimestampFormatOptions timestampFormatOptions;
2828

29-
public DataFormatOptions(
30-
boolean useInt64Timestamp, TimestampFormatOptions timestampFormatOptions) {
31-
this.useInt64Timestamp = useInt64Timestamp;
32-
this.timestampFormatOptions = timestampFormatOptions;
29+
DataFormatOptions() {
30+
this(new Builder());
3331
}
3432

35-
public boolean isUseInt64Timestamp() {
36-
return useInt64Timestamp;
33+
DataFormatOptions(Builder builder) {
34+
this.useInt64Timestamp = builder.useInt64Timestamp;
35+
this.timestampFormatOptions = builder.timestampFormatOptions;
3736
}
3837

39-
public void setUseInt64Timestamp(boolean useInt64Timestamp) {
40-
this.useInt64Timestamp = useInt64Timestamp;
38+
public boolean isUseInt64Timestamp() {
39+
return useInt64Timestamp;
4140
}
4241

4342
public TimestampFormatOptions getTimestampFormatOptions() {
4443
return timestampFormatOptions;
4544
}
4645

47-
public void setTimestampFormatOptions(TimestampFormatOptions timestampFormatOptions) {
48-
this.timestampFormatOptions = timestampFormatOptions;
46+
public static Builder newBuilder() {
47+
return new Builder();
48+
}
49+
50+
public Builder toBuilder() {
51+
return new Builder(this);
52+
}
53+
54+
public static class Builder {
55+
private boolean useInt64Timestamp;
56+
private TimestampFormatOptions timestampFormatOptions =
57+
TimestampFormatOptions.TIMESTAMP_OUTPUT_FORMAT_UNSPECIFIED;
58+
59+
public Builder() {}
60+
61+
public Builder(DataFormatOptions dataFormatOptions) {
62+
this.useInt64Timestamp = dataFormatOptions.useInt64Timestamp;
63+
this.timestampFormatOptions = dataFormatOptions.timestampFormatOptions;
64+
}
65+
66+
public Builder setUseInt64Timestamp(boolean useInt64Timestamp) {
67+
this.useInt64Timestamp = useInt64Timestamp;
68+
return this;
69+
}
70+
71+
public Builder setTimestampFormatOptions(TimestampFormatOptions timestampFormatOptions) {
72+
this.timestampFormatOptions = timestampFormatOptions;
73+
return this;
74+
}
75+
76+
public DataFormatOptions build() {
77+
return new DataFormatOptions(this);
78+
}
4979
}
5080

5181
com.google.api.services.bigquery.model.DataFormatOptions toPb() {
@@ -59,8 +89,10 @@ com.google.api.services.bigquery.model.DataFormatOptions toPb() {
5989
}
6090

6191
DataFormatOptions fromPb(com.google.api.services.bigquery.model.DataFormatOptions request) {
62-
return new DataFormatOptions(
63-
request.getUseInt64Timestamp(),
64-
TimestampFormatOptions.valueOf(request.getTimestampOutputFormat()));
92+
return new Builder()
93+
.setUseInt64Timestamp(request.getUseInt64Timestamp())
94+
.setTimestampFormatOptions(
95+
TimestampFormatOptions.valueOf(request.getTimestampOutputFormat()))
96+
.build();
6597
}
6698
}

0 commit comments

Comments
 (0)