From 88c02d320e28ce76d8d733fea6ecc996a563d692 Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Fri, 13 Nov 2026 21:36:04 +0000 Subject: [PATCH] refactor(bigquery): simplify FieldValue.getBooleanValue() to avoid duplicate check --- .../com/google/cloud/bigquery/FieldValue.java | 15 ++++++++++----- .../com/google/cloud/bigquery/FieldValueTest.java | 12 ++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/FieldValue.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/FieldValue.java index d11df4b956af..b19514d106a0 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/FieldValue.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/FieldValue.java @@ -17,7 +17,6 @@ package com.google.cloud.bigquery; import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; import static java.time.temporal.ChronoUnit.MICROS; import com.google.api.client.util.Data; @@ -201,10 +200,16 @@ public double getDoubleValue() { @SuppressWarnings("unchecked") public boolean getBooleanValue() { String stringValue = getStringValue(); - checkState( - stringValue.equalsIgnoreCase("true") || stringValue.equalsIgnoreCase("false"), - "Field value is not of boolean type"); - return Boolean.parseBoolean(stringValue); + // Validate both literals explicitly rather than delegating directly to Boolean.parseBoolean, + // which silently returns false for non-boolean strings instead of throwing + // IllegalStateException. + if ("true".equalsIgnoreCase(stringValue)) { + return true; + } + if ("false".equalsIgnoreCase(stringValue)) { + return false; + } + throw new IllegalStateException("Field value is not of boolean type"); } /** diff --git a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/FieldValueTest.java b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/FieldValueTest.java index e6b08ec6b8a3..31a90f303995 100644 --- a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/FieldValueTest.java +++ b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/FieldValueTest.java @@ -20,6 +20,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import com.google.api.client.util.Data; @@ -234,4 +235,15 @@ public void testParseCanonicalInterval() { System.out.println(FieldValue.parseCanonicalInterval(entry.getKey())); } } + + @Test + public void testGetBooleanValue() { + assertTrue(FieldValue.of(FieldValue.Attribute.PRIMITIVE, "true").getBooleanValue()); + assertTrue(FieldValue.of(FieldValue.Attribute.PRIMITIVE, "TRUE").getBooleanValue()); + assertFalse(FieldValue.of(FieldValue.Attribute.PRIMITIVE, "false").getBooleanValue()); + assertFalse(FieldValue.of(FieldValue.Attribute.PRIMITIVE, "False").getBooleanValue()); + assertThrows( + IllegalStateException.class, + () -> FieldValue.of(FieldValue.Attribute.PRIMITIVE, "not-a-bool").getBooleanValue()); + } }