Skip to content

Commit cc17bfb

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

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

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

Lines changed: 10 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,18 @@ 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+
System.out.println("$$$");
80+
StringColumnStatisticsData stringColumnStatisticsData = mapper.convertValue(fieldValue, StringColumnStatisticsData.class);
81+
if (stringColumnStatisticsData.averageLength() == null) {
82+
stringColumnStatisticsData = stringColumnStatisticsData.toBuilder().averageLength(0D).build();
83+
}
84+
sdkField.set(builder, stringColumnStatisticsData);
85+
}
7686
else {
7787
JavaType javaType = context.getTypeFactory().constructType(type);
7888
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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ 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();
127127
yield UpdateColumnStatisticsForTableResponse.builder().build();
128128
}

0 commit comments

Comments
 (0)