Skip to content

Commit 35fc77b

Browse files
Deserialize StringColumnStatisticsData, handle default value when averageLength is null
1 parent 56ac119 commit 35fc77b

File tree

3 files changed

+36
-5
lines changed

3 files changed

+36
-5
lines changed

trino-aws-proxy-glue/src/main/java/io/trino/aws/proxy/glue/rest/GlueDeserializer.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.fasterxml.jackson.databind.ObjectMapper;
2222
import software.amazon.awssdk.core.SdkBytes;
2323
import software.amazon.awssdk.core.SdkField;
24+
import software.amazon.awssdk.services.glue.model.StringColumnStatisticsData;
2425

2526
import java.io.IOException;
2627
import java.lang.reflect.Field;
@@ -70,9 +71,17 @@ public T deserialize(JsonParser parser, DeserializationContext context)
7071
if (type == null) {
7172
return (T) context.handleUnexpectedToken(context.getContextualType(), parser);
7273
}
74+
7375
if (type == SdkBytes.class) {
7476
sdkField.set(builder, SdkBytes.fromByteArray(fieldValue.binaryValue()));
7577
}
78+
else if (type == StringColumnStatisticsData.class) {
79+
StringColumnStatisticsData stringColumnStatisticsData = mapper.convertValue(fieldValue, StringColumnStatisticsData.class);
80+
if (stringColumnStatisticsData.averageLength() == null) {
81+
stringColumnStatisticsData = stringColumnStatisticsData.toBuilder().averageLength(0D).build();
82+
}
83+
sdkField.set(builder, stringColumnStatisticsData);
84+
}
7685
else {
7786
JavaType javaType = context.getTypeFactory().constructType(type);
7887
sdkField.set(builder, mapper.convertValue(fieldValue, javaType));

trino-aws-proxy-glue/src/test/java/io/trino/aws/proxy/glue/TestGlueBase.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@
4848
import software.amazon.awssdk.services.glue.model.OpenTableFormatInput;
4949
import software.amazon.awssdk.services.glue.model.PartitionIndex;
5050
import software.amazon.awssdk.services.glue.model.StorageDescriptor;
51+
import software.amazon.awssdk.services.glue.model.StringColumnStatisticsData;
5152
import software.amazon.awssdk.services.glue.model.TableIdentifier;
5253
import software.amazon.awssdk.services.glue.model.TableInput;
5354
import software.amazon.awssdk.services.glue.model.UpdateColumnStatisticsForTableRequest;
5455

5556
import java.net.URI;
5657
import java.time.temporal.ChronoUnit;
57-
import java.util.List;
5858
import java.util.Map;
5959

6060
import static io.trino.aws.proxy.glue.TestingGlueRequestHandler.DATABASE_1;
@@ -174,7 +174,7 @@ public void testComplexSerialization()
174174
.databaseName(databaseName)
175175
.tableName("table1")
176176
.columnStatisticsList(
177-
List.of(ColumnStatistics.builder()
177+
ColumnStatistics.builder()
178178
.columnName("a")
179179
.columnType("b")
180180
.statisticsData(ColumnStatisticsData.builder()
@@ -186,7 +186,20 @@ public void testComplexSerialization()
186186
.build())
187187
.build())
188188
.build())
189-
.build()))
189+
.build(),
190+
ColumnStatistics.builder()
191+
.columnName("a")
192+
.columnType("b")
193+
.statisticsData(ColumnStatisticsData.builder()
194+
.type(ColumnStatisticsType.STRING)
195+
.stringColumnStatisticsData(StringColumnStatisticsData.builder()
196+
.maximumLength(1L)
197+
// .averageLength(0D)
198+
.numberOfNulls(0L)
199+
.numberOfDistinctValues(1L)
200+
.build())
201+
.build())
202+
.build())
190203
.build());
191204
}
192205

trino-aws-proxy-glue/src/test/java/io/trino/aws/proxy/glue/TestingGlueRequestHandler.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,18 @@ public GlueResponse handleRequest(ParsedGlueRequest request, SigningMetadata sig
122122
case UpdateColumnStatisticsForTableRequest columnStatisticsForTableRequest -> {
123123
assertThat(columnStatisticsForTableRequest.catalogId()).isEqualTo("1");
124124
assertThat(columnStatisticsForTableRequest.databaseName()).isEqualTo("database1");
125-
assertThat(columnStatisticsForTableRequest.columnStatisticsList()).hasSize(1);
125+
assertThat(columnStatisticsForTableRequest.columnStatisticsList()).hasSize(2);
126126
assertThat(columnStatisticsForTableRequest.columnStatisticsList().getFirst().statisticsData()).isNotNull();
127-
yield UpdateColumnStatisticsForTableResponse.builder().build();
127+
assertThat(columnStatisticsForTableRequest.columnStatisticsList()
128+
.stream()
129+
.filter(columnStatistics -> columnStatistics.statisticsData().stringColumnStatisticsData() != null)
130+
.findFirst()
131+
.orElseThrow()
132+
.statisticsData()
133+
.stringColumnStatisticsData()
134+
.averageLength())
135+
.isNotNull();
136+
yield UpdateColumnStatisticsForTableResponse.builder().build();
128137
}
129138

130139
default -> throw new WebApplicationException(NOT_FOUND);

0 commit comments

Comments
 (0)