diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/ExternalTableDefinition.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/ExternalTableDefinition.java index c1859c3f9fdc..6ed45a06535f 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/ExternalTableDefinition.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/ExternalTableDefinition.java @@ -42,33 +42,16 @@ public abstract class ExternalTableDefinition extends TableDefinition { static final Function - FROM_EXTERNAL_DATA_FUNCTION = - new Function() { - @Override - public ExternalTableDefinition apply(ExternalDataConfiguration pb) { - return ExternalTableDefinition.fromExternalDataConfiguration(pb); - } - }; + FROM_EXTERNAL_DATA_FUNCTION = ExternalTableDefinition::fromExternalDataConfiguration; static final Function - TO_EXTERNAL_DATA_FUNCTION = - new Function() { - @Override - public ExternalDataConfiguration apply(ExternalTableDefinition tableInfo) { - return tableInfo.toExternalDataConfigurationPb(); - } - }; + TO_EXTERNAL_DATA_FUNCTION = ExternalTableDefinition::toExternalDataConfigurationPb; private static final long serialVersionUID = -5951580238459622025L; public static final class SourceColumnMatch extends StringEnumValue { private static final long serialVersionUID = 818920627219751207L; private static final ApiFunction CONSTRUCTOR = - new ApiFunction() { - @Override - public SourceColumnMatch apply(String constant) { - return new SourceColumnMatch(constant); - } - }; + SourceColumnMatch::new; private static final StringEnumType type = new StringEnumType(SourceColumnMatch.class, CONSTRUCTOR); @@ -898,7 +881,7 @@ static ExternalTableDefinition fromExternalDataConfiguration( builder.setTimeFormat(externalDataConfiguration.getTimeFormat()); } if (externalDataConfiguration.getTimestampFormat() != null) { - builder.setTimestampFormat(externalDataConfiguration.getTimeFormat()); + builder.setTimestampFormat(externalDataConfiguration.getTimestampFormat()); } if (externalDataConfiguration.getCsvOptions() != null) { if (externalDataConfiguration.getCsvOptions().getSourceColumnMatch() != null) { diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/IndexUnusedReason.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/IndexUnusedReason.java index bb4f0c3c32ee..311a668e1306 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/IndexUnusedReason.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/IndexUnusedReason.java @@ -101,13 +101,13 @@ com.google.api.services.bigquery.model.IndexUnusedReason toPb() { com.google.api.services.bigquery.model.IndexUnusedReason indexUnusedReason = new com.google.api.services.bigquery.model.IndexUnusedReason(); if (getIndexName() != null) { - indexUnusedReason.setIndexName(indexUnusedReason.getIndexName()); + indexUnusedReason.setIndexName(getIndexName()); } if (getCode() != null) { - indexUnusedReason.setCode(indexUnusedReason.getCode()); + indexUnusedReason.setCode(getCode()); } if (getMessage() != null) { - indexUnusedReason.setMessage(indexUnusedReason.getMessage()); + indexUnusedReason.setMessage(getMessage()); } if (getBaseTableId() != null) { indexUnusedReason.setBaseTable(getBaseTableId().toPb()); diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/JobStatistics.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/JobStatistics.java index 1fb776a46560..47ff140faf09 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/JobStatistics.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/JobStatistics.java @@ -1650,7 +1650,7 @@ protected Builder(com.google.api.services.bigquery.model.JobStatistics statistic if (statisticsPb.getScriptStatistics() != null) { this.scriptStatistics = ScriptStatistics.fromPb(statisticsPb.getScriptStatistics()); } - if (reservationUsage != null) { + if (statisticsPb.getReservationUsage() != null) { this.reservationUsage = Lists.transform(statisticsPb.getReservationUsage(), ReservationUsage.FROM_PB_FUNCTION); } @@ -1692,6 +1692,11 @@ B setSessionInfo(SessionInfo sessionInfo) { return self(); } + B setReservationUsage(List reservationUsage) { + this.reservationUsage = reservationUsage; + return self(); + } + abstract T build(); } diff --git a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/QueryParameterValue.java b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/QueryParameterValue.java index 89e7ae85bfa1..f847c1d6adfc 100644 --- a/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/QueryParameterValue.java +++ b/java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/QueryParameterValue.java @@ -65,9 +65,8 @@ *
  • Double: StandardSQLTypeName.FLOAT64 *
  • Float: StandardSQLTypeName.FLOAT64 *
  • BigDecimal: StandardSQLTypeName.NUMERIC - *
  • BigNumeric: StandardSQLTypeName.BIGNUMERIC - *
  • JSON: StandardSQLTypeName.JSON - *
  • INTERVAL: StandardSQLTypeName.INTERVAL + *
  • Date: StandardSQLTypeName.DATE + *
  • JsonObject: StandardSQLTypeName.JSON * * *

    No other types are supported through that entry point. The other types can be created by @@ -424,13 +423,27 @@ public static QueryParameterValue struct(Map struct .build(); } + /** + * Default instances created automatically by the static {@link #of(Object, Class)} method. + * Contains these mappings ONLY for natively supported types. + * + *

      + *
    • Boolean: StandardSQLTypeName.BOOL + *
    • String: StandardSQLTypeName.STRING + *
    • Integer: StandardSQLTypeName.INT64 + *
    • Long: StandardSQLTypeName.INT64 + *
    • Double: StandardSQLTypeName.FLOAT64 + *
    • Float: StandardSQLTypeName.FLOAT64 + *
    • BigDecimal: StandardSQLTypeName.NUMERIC + *
    • Date: StandardSQLTypeName.DATE + *
    • JsonObject: StandardSQLTypeName.JSON + *
    + */ private static StandardSQLTypeName classToType(Class type) { if (Boolean.class.isAssignableFrom(type)) { return StandardSQLTypeName.BOOL; } else if (String.class.isAssignableFrom(type)) { return StandardSQLTypeName.STRING; - } else if (String.class.isAssignableFrom(type)) { - return StandardSQLTypeName.GEOGRAPHY; } else if (Integer.class.isAssignableFrom(type)) { return StandardSQLTypeName.INT64; } else if (Long.class.isAssignableFrom(type)) { @@ -443,8 +456,6 @@ private static StandardSQLTypeName classToType(Class type) { return StandardSQLTypeName.NUMERIC; } else if (Date.class.isAssignableFrom(type)) { return StandardSQLTypeName.DATE; - } else if (String.class.isAssignableFrom(type)) { - return StandardSQLTypeName.JSON; } else if (JsonObject.class.isAssignableFrom(type)) { return StandardSQLTypeName.JSON; } @@ -487,9 +498,14 @@ private static String valueToStringOrNull(T value, StandardSQLTypeName type) case GEOGRAPHY: return value.toString(); case JSON: - if (value instanceof String || value instanceof JsonObject) return value.toString(); + if (value instanceof String || value instanceof JsonObject) { + return value.toString(); + } + break; case INTERVAL: - if (value instanceof String || value instanceof PeriodDuration) return value.toString(); + if (value instanceof String || value instanceof PeriodDuration) { + return value.toString(); + } break; case STRUCT: throw new IllegalArgumentException("Cannot convert STRUCT to String value"); diff --git a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/ExternalTableDefinitionTest.java b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/ExternalTableDefinitionTest.java index 480b8a497213..339c54586d08 100644 --- a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/ExternalTableDefinitionTest.java +++ b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/ExternalTableDefinitionTest.java @@ -162,6 +162,10 @@ void testToAndFromPb() { ExternalTableDefinition.newBuilder(SOURCE_URIS, TABLE_SCHEMA, CSV_OPTIONS).build(); compareExternalTableDefinition( externalTableDefinition, ExternalTableDefinition.fromPb(externalTableDefinition.toPb())); + compareExternalTableDefinition( + EXTERNAL_TABLE_DEFINITION.toBuilder().setMaxStaleness(null).build(), + ExternalTableDefinition.fromExternalDataConfiguration( + EXTERNAL_TABLE_DEFINITION.toExternalDataConfigurationPb())); } @Test diff --git a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/JobStatisticsTest.java b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/JobStatisticsTest.java index 289548113b34..1c8a819775f0 100644 --- a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/JobStatisticsTest.java +++ b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/JobStatisticsTest.java @@ -177,8 +177,18 @@ public class JobStatisticsTest { private static final List QUERY_PLAN = ImmutableList.of(QUERY_STAGE); private static final Schema SCHEMA = Schema.of(Field.of("column", LegacySQLTypeName.DATETIME)); private static final String UNUSED_INDEX_USAGE_MODE = "UNUSED"; + private static final IndexUnusedReason INDEX_UNUSED_REASON = + IndexUnusedReason.newBuilder() + .setIndexName("idx_search") + .setCode("BASE_TABLE_TOO_SMALL") + .setMessage("Base table is too small to use search index") + .setBaseTableId(DDL_TARGET_TABLE) + .build(); private static final SearchStats SEARCH_STATS = - SearchStats.newBuilder().setIndexUsageMode(UNUSED_INDEX_USAGE_MODE).build(); + SearchStats.newBuilder() + .setIndexUsageMode(UNUSED_INDEX_USAGE_MODE) + .setIndexUnusedReasons(ImmutableList.of(INDEX_UNUSED_REASON)) + .build(); private static final MetadataCacheStats METADATA_CACHE_STATS = MetadataCacheStats.newBuilder() @@ -186,6 +196,8 @@ public class JobStatisticsTest { ImmutableList.of( TableMetadataCacheUsage.newBuilder().setExplanation("test explanation").build())) .build(); + private static final ReservationUsage RESERVATION_USAGE = + ReservationUsage.newBuilder().setName(NAME).setSlotMs(SLOTMS).build(); private static final QueryStatistics QUERY_STATISTICS = QueryStatistics.newBuilder() @@ -213,6 +225,7 @@ public class JobStatisticsTest { .setSchema(SCHEMA) .setSearchStats(SEARCH_STATS) .setMetadataCacheStats(METADATA_CACHE_STATS) + .setReservationUsage(ImmutableList.of(RESERVATION_USAGE)) .build(); private static final QueryStatistics QUERY_STATISTICS_INCOMPLETE = QueryStatistics.newBuilder() @@ -262,8 +275,6 @@ public class JobStatisticsTest { .setEvaluationKind(EVALUATIONKIND_TYPE_EXPRESSION) .setStackFrames(ImmutableList.of(EXPRESSION_STACK_FRAME)) .build(); - private static final ReservationUsage RESERVATION_USAGE = - ReservationUsage.newBuilder().setName(NAME).setSlotMs(SLOTMS).build(); private static final TransactionInfo TRANSACTION_INFO = TransactionInfo.newbuilder().setTransactionId(TRANSACTION_ID).build(); @@ -460,8 +471,7 @@ private void compareQueryStatistics(QueryStatistics expected, QueryStatistics va assertEquals(expected.getQueryPlan(), value.getQueryPlan()); assertEquals(expected.getReferencedTables(), value.getReferencedTables()); assertEquals(expected.getSchema(), value.getSchema()); - assertEquals( - expected.getSearchStats().getIndexUsageMode(), value.getSearchStats().getIndexUsageMode()); + assertEquals(expected.getSearchStats(), value.getSearchStats()); assertEquals(expected.getMetadataCacheStats(), value.getMetadataCacheStats()); assertEquals(expected.getStatementType(), value.getStatementType()); assertEquals(expected.getTimeline(), value.getTimeline()); @@ -479,6 +489,7 @@ private void compareStatistics(JobStatistics expected, JobStatistics value) { assertEquals(expected.getNumChildJobs(), value.getNumChildJobs()); assertEquals(expected.getParentJobId(), value.getParentJobId()); assertEquals(expected.getScriptStatistics(), value.getScriptStatistics()); + assertEquals(expected.getReservationUsage(), value.getReservationUsage()); assertEquals(expected.getTotalSlotMs(), value.getTotalSlotMs()); } diff --git a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/QueryParameterValueTest.java b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/QueryParameterValueTest.java index 276234246e8a..8c080ad77be4 100644 --- a/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/QueryParameterValueTest.java +++ b/java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/QueryParameterValueTest.java @@ -195,6 +195,9 @@ public void testJson() { assertThat(value1.getArrayType()).isNull(); assertThat(value.getArrayValues()).isNull(); assertThat(value1.getArrayType()).isNull(); + assertThrows( + IllegalArgumentException.class, + () -> QueryParameterValue.of(123, StandardSQLTypeName.JSON)); } @Test @@ -213,6 +216,9 @@ public void testInterval() { assertThat(value.getArrayType()).isNull(); assertThat(value1.getArrayType()).isNull(); assertThat(value2.getArrayType()).isNull(); + assertThrows( + IllegalArgumentException.class, + () -> QueryParameterValue.of(123, StandardSQLTypeName.INTERVAL)); } @Test