diff --git a/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/QueryParameterValue.java b/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/QueryParameterValue.java index 5bf6b4e9f93a..64abfebfa328 100644 --- a/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/QueryParameterValue.java +++ b/google-cloud-clients/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/QueryParameterValue.java @@ -25,6 +25,7 @@ import java.io.Serializable; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Date; import java.util.List; import javax.annotation.Nullable; import org.threeten.bp.Instant; @@ -256,6 +257,8 @@ private static StandardSQLTypeName classToType(Class type) { return StandardSQLTypeName.FLOAT64; } else if (BigDecimal.class.isAssignableFrom(type)) { return StandardSQLTypeName.NUMERIC; + } else if (Date.class.isAssignableFrom(type)) { + return StandardSQLTypeName.DATE; } throw new IllegalArgumentException("Unsupported object type for QueryParameter: " + type); } @@ -310,6 +313,9 @@ private static String valueToStringOrNull(T value, StandardSQLTypeName type) // verify that the String is in the right format checkFormat(value, dateFormatter); return (String) value; + } else if (value instanceof Date) { + com.google.cloud.Date date = com.google.cloud.Date.fromJavaUtilDate((Date) value); + return date.toString(); } break; case TIME: diff --git a/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/QueryParameterValueTest.java b/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/QueryParameterValueTest.java index 485b81e5e497..8047bf33d0f4 100644 --- a/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/QueryParameterValueTest.java +++ b/google-cloud-clients/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/QueryParameterValueTest.java @@ -20,6 +20,8 @@ import com.google.api.services.bigquery.model.QueryParameterType; import java.math.BigDecimal; +import java.text.ParseException; +import java.util.Date; import java.util.List; import org.junit.Test; @@ -204,6 +206,17 @@ public void testDate() { assertThat(value.getArrayValues()).isNull(); } + @Test + public void testStandardDate() throws ParseException { + com.google.cloud.Date gcDate = com.google.cloud.Date.parseDate("2016-09-18"); + Date date = com.google.cloud.Date.toJavaUtilDate(gcDate); + QueryParameterValue value = QueryParameterValue.of(date, Date.class); + assertThat(value.getValue()).isEqualTo("2016-09-18"); + assertThat(value.getType()).isEqualTo(StandardSQLTypeName.DATE); + assertThat(value.getArrayType()).isNull(); + assertThat(value.getArrayValues()).isNull(); + } + @Test(expected = IllegalArgumentException.class) public void testInvalidDate() { // not supposed to have the time