Skip to content

Commit 56ac119

Browse files
avibhstarburstRandgalt
authored andcommitted
Handle AWS SdkBytes de/serialization
1 parent 2b5f030 commit 56ac119

File tree

4 files changed

+47
-1
lines changed

4 files changed

+47
-1
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.fasterxml.jackson.databind.JsonDeserializer;
2020
import com.fasterxml.jackson.databind.JsonNode;
2121
import com.fasterxml.jackson.databind.ObjectMapper;
22+
import software.amazon.awssdk.core.SdkBytes;
2223
import software.amazon.awssdk.core.SdkField;
2324

2425
import java.io.IOException;
@@ -69,6 +70,9 @@ public T deserialize(JsonParser parser, DeserializationContext context)
6970
if (type == null) {
7071
return (T) context.handleUnexpectedToken(context.getContextualType(), parser);
7172
}
73+
if (type == SdkBytes.class) {
74+
sdkField.set(builder, SdkBytes.fromByteArray(fieldValue.binaryValue()));
75+
}
7276
else {
7377
JavaType javaType = context.getTypeFactory().constructType(type);
7478
sdkField.set(builder, mapper.convertValue(fieldValue, javaType));

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.fasterxml.jackson.core.JsonGenerator;
1717
import com.fasterxml.jackson.databind.JsonSerializer;
1818
import com.fasterxml.jackson.databind.SerializerProvider;
19+
import software.amazon.awssdk.core.SdkBytes;
1920
import software.amazon.awssdk.core.SdkField;
2021

2122
import java.io.IOException;
@@ -43,6 +44,7 @@ public void serialize(T value, JsonGenerator generator, SerializerProvider seria
4344
Object fieldValue = sdkField.getValueOrDefault(value);
4445
switch (fieldValue) {
4546
case Instant instant -> generator.writePOJOField(sdkField.memberName(), formatUnixTimestampInstant(instant)); // per AWS spec
47+
case SdkBytes sdkBytes -> generator.writePOJOField(sdkField.memberName(), sdkBytes.asByteArray()); // per AWS spec
4648
case null -> {} // do nothing
4749
default -> generator.writePOJOField(sdkField.memberName(), fieldValue);
4850
}

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,20 @@
2121
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
2222
import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration;
2323
import software.amazon.awssdk.core.CompressionConfiguration;
24+
import software.amazon.awssdk.core.SdkBytes;
2425
import software.amazon.awssdk.regions.Region;
2526
import software.amazon.awssdk.services.glue.GlueClient;
2627
import software.amazon.awssdk.services.glue.model.Column;
28+
import software.amazon.awssdk.services.glue.model.ColumnStatistics;
29+
import software.amazon.awssdk.services.glue.model.ColumnStatisticsData;
30+
import software.amazon.awssdk.services.glue.model.ColumnStatisticsType;
2731
import software.amazon.awssdk.services.glue.model.CreateDatabaseRequest;
2832
import software.amazon.awssdk.services.glue.model.CreateTableRequest;
2933
import software.amazon.awssdk.services.glue.model.Database;
3034
import software.amazon.awssdk.services.glue.model.DatabaseIdentifier;
3135
import software.amazon.awssdk.services.glue.model.DatabaseInput;
36+
import software.amazon.awssdk.services.glue.model.DecimalColumnStatisticsData;
37+
import software.amazon.awssdk.services.glue.model.DecimalNumber;
3238
import software.amazon.awssdk.services.glue.model.EntityNotFoundException;
3339
import software.amazon.awssdk.services.glue.model.FederatedDatabase;
3440
import software.amazon.awssdk.services.glue.model.GetDatabaseRequest;
@@ -44,9 +50,11 @@
4450
import software.amazon.awssdk.services.glue.model.StorageDescriptor;
4551
import software.amazon.awssdk.services.glue.model.TableIdentifier;
4652
import software.amazon.awssdk.services.glue.model.TableInput;
53+
import software.amazon.awssdk.services.glue.model.UpdateColumnStatisticsForTableRequest;
4754

4855
import java.net.URI;
4956
import java.time.temporal.ChronoUnit;
57+
import java.util.List;
5058
import java.util.Map;
5159

5260
import static io.trino.aws.proxy.glue.TestingGlueRequestHandler.DATABASE_1;
@@ -159,6 +167,27 @@ public void testComplexSerialization()
159167
.partitionIndexes(PartitionIndex.builder().indexName("i1").keys("k1").build())
160168
.transactionId("t1")
161169
.build());
170+
171+
glueClient.updateColumnStatisticsForTable(
172+
UpdateColumnStatisticsForTableRequest.builder()
173+
.catalogId(catalogId)
174+
.databaseName(databaseName)
175+
.tableName("table1")
176+
.columnStatisticsList(
177+
List.of(ColumnStatistics.builder()
178+
.columnName("a")
179+
.columnType("b")
180+
.statisticsData(ColumnStatisticsData.builder()
181+
.type(ColumnStatisticsType.DECIMAL)
182+
.decimalColumnStatisticsData(DecimalColumnStatisticsData.builder()
183+
.maximumValue(DecimalNumber.builder()
184+
.scale(1)
185+
.unscaledValue(SdkBytes.fromUtf8String("MDk="))
186+
.build())
187+
.build())
188+
.build())
189+
.build()))
190+
.build());
162191
}
163192

164193
@Test

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import software.amazon.awssdk.services.glue.model.CreateDatabaseRequest;
2323
import software.amazon.awssdk.services.glue.model.CreateDatabaseResponse;
2424
import software.amazon.awssdk.services.glue.model.CreateTableRequest;
25+
import software.amazon.awssdk.services.glue.model.CreateTableResponse;
2526
import software.amazon.awssdk.services.glue.model.Database;
2627
import software.amazon.awssdk.services.glue.model.EntityNotFoundException;
2728
import software.amazon.awssdk.services.glue.model.GetDatabaseRequest;
@@ -31,6 +32,8 @@
3132
import software.amazon.awssdk.services.glue.model.GetResourcePoliciesResponse;
3233
import software.amazon.awssdk.services.glue.model.GluePolicy;
3334
import software.amazon.awssdk.services.glue.model.GlueResponse;
35+
import software.amazon.awssdk.services.glue.model.UpdateColumnStatisticsForTableRequest;
36+
import software.amazon.awssdk.services.glue.model.UpdateColumnStatisticsForTableResponse;
3437

3538
import java.time.Instant;
3639
import java.util.Collection;
@@ -113,7 +116,15 @@ public GlueResponse handleRequest(ParsedGlueRequest request, SigningMetadata sig
113116
assertThat(tableRequest.tableInput().description()).isEqualTo("desc1");
114117
assertThat(tableRequest.tableInput().name()).isEqualTo("tableName");
115118
assertThat(tableRequest.tableInput().parameters()).isEqualTo(Map.of("k1", "v1"));
116-
yield CreateDatabaseResponse.builder().build();
119+
yield CreateTableResponse.builder().build();
120+
}
121+
122+
case UpdateColumnStatisticsForTableRequest columnStatisticsForTableRequest -> {
123+
assertThat(columnStatisticsForTableRequest.catalogId()).isEqualTo("1");
124+
assertThat(columnStatisticsForTableRequest.databaseName()).isEqualTo("database1");
125+
assertThat(columnStatisticsForTableRequest.columnStatisticsList()).hasSize(1);
126+
assertThat(columnStatisticsForTableRequest.columnStatisticsList().getFirst().statisticsData()).isNotNull();
127+
yield UpdateColumnStatisticsForTableResponse.builder().build();
117128
}
118129

119130
default -> throw new WebApplicationException(NOT_FOUND);

0 commit comments

Comments
 (0)