diff --git a/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Field.java b/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Field.java index 72b84a93ae31..ba0e45e5f358 100644 --- a/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Field.java +++ b/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Field.java @@ -125,7 +125,8 @@ public Builder setType(LegacySQLTypeName type, Field... subFields) { * Types */ public Builder setType(LegacySQLTypeName type, FieldList subFields) { - if (type == LegacySQLTypeName.RECORD) { + // LegacySQLTypeName is not an enum, cannot use reference equal. + if (LegacySQLTypeName.RECORD.equals(type)) { if (subFields == null || subFields.isEmpty()) { throw new IllegalArgumentException( "The " + type + " field must have at least one sub-field"); diff --git a/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Job.java b/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Job.java index 0643c268b7e0..9a61192c4045 100644 --- a/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Job.java +++ b/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/Job.java @@ -189,7 +189,7 @@ public boolean exists() { public boolean isDone() { checkNotDryRun("isDone"); Job job = bigquery.getJob(getJobId(), JobOption.fields(BigQuery.JobField.STATUS)); - return job == null || job.getStatus().getState() == JobStatus.State.DONE; + return job == null || JobStatus.State.DONE.equals(job.getStatus().getState()); } /** * Blocks until this job completes its execution, either failing or succeeding. This method @@ -293,7 +293,7 @@ public TableResult getQueryResults(QueryResultsOption... options) // Get the job resource to determine if it has errored. Job job = this; - if (job.getStatus() == null || job.getStatus().getState() != JobStatus.State.DONE) { + if (job.getStatus() == null || !JobStatus.State.DONE.equals(job.getStatus().getState())) { job = reload(); } if (job.getStatus() != null && job.getStatus().getError() != null) { @@ -362,7 +362,7 @@ public TimedAttemptSettings createNextAttempt( @Override public boolean shouldRetry(Throwable prevThrowable, Job prevResponse) { return prevResponse != null - && prevResponse.getStatus().getState() != JobStatus.State.DONE; + && !JobStatus.State.DONE.equals(prevResponse.getStatus().getState()); } }, options.getClock()); @@ -377,7 +377,7 @@ public boolean shouldRetry(Throwable prevThrowable, Job prevResponse) { *

Example of reloading all fields until job status is DONE. * *

{@code
-   * while (job.getStatus().getState() != JobStatus.State.DONE) {
+   * while (!JobStatus.State.DONE.equals(job.getStatus().getState())) {
    *   Thread.sleep(1000L);
    *   job = job.reload();
    * }
@@ -386,7 +386,7 @@ public boolean shouldRetry(Throwable prevThrowable, Job prevResponse) {
    * 

Example of reloading status field until job status is DONE. * *

{@code
-   * while (job.getStatus().getState() != JobStatus.State.DONE) {
+   * while (!JobStatus.State.DONE.equals(job.getStatus().getState())) {
    *   Thread.sleep(1000L);
    *   job = job.reload(BigQuery.JobOption.fields(BigQuery.JobField.STATUS));
    * }
diff --git a/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/FieldTest.java b/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/FieldTest.java
index ffa545cf91f6..4ba5ad0929a0 100644
--- a/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/FieldTest.java
+++ b/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/FieldTest.java
@@ -18,6 +18,11 @@
 
 import static org.junit.Assert.assertEquals;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
 import org.junit.Test;
 
 public class FieldTest {
@@ -92,6 +97,22 @@ public void testToAndFromPb() {
     compareFieldSchemas(field, Field.fromPb(field.toPb()));
   }
 
+  @Test
+  public void testSubFieldWithClonedType() throws Exception {
+    LegacySQLTypeName record = LegacySQLTypeName.RECORD;
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    ObjectOutputStream oos = new ObjectOutputStream(baos);
+    oos.writeObject(record);
+    oos.flush();
+    oos.close();
+    InputStream is = new ByteArrayInputStream(baos.toByteArray());
+    ObjectInputStream ois = new ObjectInputStream(is);
+    LegacySQLTypeName clonedRecord = (LegacySQLTypeName) ois.readObject();
+    ois.close();
+
+    Field.of("field", clonedRecord, Field.of("subfield", LegacySQLTypeName.BOOLEAN));
+  }
+
   private void compareFieldSchemas(Field expected, Field value) {
     assertEquals(expected, value);
     assertEquals(expected.getName(), value.getName());
diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/JobSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/JobSnippets.java
index 11729dd81db1..f9fb7b5fe376 100644
--- a/google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/JobSnippets.java
+++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/bigquery/snippets/JobSnippets.java
@@ -113,7 +113,7 @@ public boolean waitForWithOptions() throws InterruptedException {
   // [TARGET reload(JobOption...)]
   public JobStatus.State reload() throws InterruptedException {
     // [START ]
-    while (job.getStatus().getState() != JobStatus.State.DONE) {
+    while (!JobStatus.State.DONE.equals(job.getStatus().getState())) {
       Thread.sleep(1000L);
       job = job.reload();
     }
@@ -125,7 +125,7 @@ public JobStatus.State reload() throws InterruptedException {
   // [TARGET reload(JobOption...)]
   public JobStatus.State reloadStatus() throws InterruptedException {
     // [START ]
-    while (job.getStatus().getState() != JobStatus.State.DONE) {
+    while (!JobStatus.State.DONE.equals(job.getStatus().getState())) {
       Thread.sleep(1000L);
       job = job.reload(BigQuery.JobOption.fields(BigQuery.JobField.STATUS));
     }