|
28 | 28 | import java.math.BigDecimal; |
29 | 29 | import java.text.ParseException; |
30 | 30 | import java.time.Period; |
| 31 | +import java.util.ArrayList; |
31 | 32 | import java.util.Date; |
32 | 33 | import java.util.HashMap; |
33 | 34 | import java.util.List; |
@@ -563,6 +564,48 @@ public void testNestedStruct() { |
563 | 564 | assertThat(nestedRecordField.getStructValues().size()).isEqualTo(structValue.size()); |
564 | 565 | } |
565 | 566 |
|
| 567 | + @Test |
| 568 | + public void testStructArray() { |
| 569 | + Boolean[] boolValues = new Boolean[] {true, false}; |
| 570 | + Integer[] intValues = new Integer[] {15, 20}; |
| 571 | + String[] stringValues = new String[] {"test-string", "test-string2"}; |
| 572 | + List<ImmutableMap<String, QueryParameterValue>> fieldMaps = new ArrayList<>(); |
| 573 | + List<QueryParameterValue> tuples = new ArrayList<>(); |
| 574 | + for (int i = 0; i < 2; i++) { |
| 575 | + QueryParameterValue booleanField = QueryParameterValue.bool(boolValues[i]); |
| 576 | + QueryParameterValue integerField = QueryParameterValue.int64(intValues[i]); |
| 577 | + QueryParameterValue stringField = QueryParameterValue.string(stringValues[i]); |
| 578 | + ImmutableMap<String, QueryParameterValue> fieldMap = |
| 579 | + ImmutableMap.of( |
| 580 | + "booleanField", |
| 581 | + booleanField, |
| 582 | + "integerField", |
| 583 | + integerField, |
| 584 | + "stringField", |
| 585 | + stringField); |
| 586 | + fieldMaps.add(fieldMap); |
| 587 | + QueryParameterValue recordField = QueryParameterValue.struct(fieldMap); |
| 588 | + tuples.add(recordField); |
| 589 | + } |
| 590 | + QueryParameterValue repeatedRecordField = |
| 591 | + QueryParameterValue.array(tuples.toArray(), StandardSQLTypeName.STRUCT); |
| 592 | + com.google.api.services.bigquery.model.QueryParameterValue parameterValue = |
| 593 | + repeatedRecordField.toValuePb(); |
| 594 | + QueryParameterType parameterType = repeatedRecordField.toTypePb(); |
| 595 | + QueryParameterValue queryParameterValue = |
| 596 | + QueryParameterValue.fromPb(parameterValue, parameterType); |
| 597 | + assertThat(queryParameterValue.getValue()).isNull(); |
| 598 | + assertThat(queryParameterValue.getType()).isEqualTo(StandardSQLTypeName.ARRAY); |
| 599 | + assertThat(queryParameterValue.getArrayType()).isEqualTo(StandardSQLTypeName.STRUCT); |
| 600 | + assertThat(queryParameterValue.getArrayValues().size()).isEqualTo(2); |
| 601 | + for (int i = 0; i < 2; i++) { |
| 602 | + QueryParameterValue record = queryParameterValue.getArrayValues().get(i); |
| 603 | + assertThat(record.getType()).isEqualTo(StandardSQLTypeName.STRUCT); |
| 604 | + assertThat(record.getStructTypes()).isNotNull(); |
| 605 | + assertThat(record.getStructValues()).isEqualTo(fieldMaps.get(i)); |
| 606 | + } |
| 607 | + } |
| 608 | + |
566 | 609 | private static void assertArrayDataEquals( |
567 | 610 | String[] expectedValues, |
568 | 611 | StandardSQLTypeName expectedType, |
|
0 commit comments