diff --git a/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/qpt/DDBQueryPassthrough.java b/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/qpt/DDBQueryPassthrough.java index 09a250a1fd..68a6d70403 100644 --- a/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/qpt/DDBQueryPassthrough.java +++ b/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/qpt/DDBQueryPassthrough.java @@ -21,11 +21,11 @@ import com.amazonaws.athena.connector.lambda.exceptions.AthenaConnectorException; import com.amazonaws.athena.connector.lambda.metadata.optimizations.querypassthrough.QueryPassthroughSignature; -import com.amazonaws.services.glue.model.ErrorDetails; -import com.amazonaws.services.glue.model.FederationSourceErrorCode; import com.google.common.collect.ImmutableSet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import software.amazon.awssdk.services.glue.model.ErrorDetails; +import software.amazon.awssdk.services.glue.model.FederationSourceErrorCode; import java.util.Arrays; import java.util.List; @@ -80,7 +80,7 @@ public void customConnectorVerifications(Map engineQptArguments) // Immediately check if the statement starts with "SELECT" if (!upperCaseStatement.startsWith("SELECT")) { - throw new AthenaConnectorException("Statement does not start with SELECT.", new ErrorDetails().withErrorCode(FederationSourceErrorCode.OperationNotSupportedException.toString())); + throw new AthenaConnectorException("Statement does not start with SELECT.", ErrorDetails.builder().errorCode(FederationSourceErrorCode.OPERATION_NOT_SUPPORTED_EXCEPTION.toString()).build()); } // List of disallowed keywords @@ -89,7 +89,7 @@ public void customConnectorVerifications(Map engineQptArguments) // Check if the statement contains any disallowed keywords for (String keyword : disallowedKeywords) { if (upperCaseStatement.contains(keyword)) { - throw new AthenaConnectorException("Unaccepted operation; only SELECT statements are allowed. Found: " + keyword, new ErrorDetails().withErrorCode(FederationSourceErrorCode.OperationNotSupportedException.toString())); + throw new AthenaConnectorException("Unaccepted operation; only SELECT statements are allowed. Found: " + keyword, ErrorDetails.builder().errorCode(FederationSourceErrorCode.OPERATION_NOT_SUPPORTED_EXCEPTION.toString()).build()); } } } diff --git a/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/resolver/DynamoDBFieldResolver.java b/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/resolver/DynamoDBFieldResolver.java index cebb175715..0a186d7763 100644 --- a/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/resolver/DynamoDBFieldResolver.java +++ b/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/resolver/DynamoDBFieldResolver.java @@ -23,12 +23,12 @@ import com.amazonaws.athena.connector.lambda.exceptions.AthenaConnectorException; import com.amazonaws.athena.connectors.dynamodb.util.DDBRecordMetadata; import com.amazonaws.athena.connectors.dynamodb.util.DDBTypeUtils; -import com.amazonaws.services.glue.model.ErrorDetails; -import com.amazonaws.services.glue.model.FederationSourceErrorCode; import org.apache.arrow.vector.types.Types; import org.apache.arrow.vector.types.pojo.Field; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import software.amazon.awssdk.services.glue.model.ErrorDetails; +import software.amazon.awssdk.services.glue.model.FederationSourceErrorCode; import java.util.Map; @@ -90,7 +90,7 @@ public Object getFieldValue(Field field, Object originalValue) } throw new AthenaConnectorException("Invalid field value encountered in DB record for field: " + field + - ",value: " + fieldValue, new ErrorDetails().withErrorCode(FederationSourceErrorCode.InvalidInputException.toString())); + ",value: " + fieldValue, ErrorDetails.builder().errorCode(FederationSourceErrorCode.INVALID_INPUT_EXCEPTION.toString()).build()); } // Return the field value of a map key diff --git a/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/resolver/DynamoDBTableResolver.java b/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/resolver/DynamoDBTableResolver.java index 290359507b..7ae1fd436e 100644 --- a/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/resolver/DynamoDBTableResolver.java +++ b/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/resolver/DynamoDBTableResolver.java @@ -24,8 +24,6 @@ import com.amazonaws.athena.connectors.dynamodb.model.DynamoDBPaginatedTables; import com.amazonaws.athena.connectors.dynamodb.model.DynamoDBTable; import com.amazonaws.athena.connectors.dynamodb.util.DDBTableUtils; -import com.amazonaws.services.glue.model.ErrorDetails; -import com.amazonaws.services.glue.model.FederationSourceErrorCode; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; import org.apache.arrow.vector.types.pojo.Schema; @@ -35,6 +33,8 @@ import software.amazon.awssdk.services.dynamodb.model.ListTablesRequest; import software.amazon.awssdk.services.dynamodb.model.ListTablesResponse; import software.amazon.awssdk.services.dynamodb.model.ResourceNotFoundException; +import software.amazon.awssdk.services.glue.model.ErrorDetails; +import software.amazon.awssdk.services.glue.model.FederationSourceErrorCode; import java.util.ArrayList; import java.util.Collection; @@ -121,7 +121,7 @@ public Schema getTableSchema(String tableName) return DDBTableUtils.peekTableForSchema(caseInsensitiveMatch.get(), invoker, ddbClient); } else { - throw new AthenaConnectorException(e.getMessage(), new ErrorDetails().withErrorCode(FederationSourceErrorCode.EntityNotFoundException.toString())); + throw new AthenaConnectorException(e.getMessage(), ErrorDetails.builder().errorCode(FederationSourceErrorCode.ENTITY_NOT_FOUND_EXCEPTION.toString()).build()); } } } diff --git a/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/util/DDBPredicateUtils.java b/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/util/DDBPredicateUtils.java index 3c38e4dec7..bf7aa0854f 100644 --- a/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/util/DDBPredicateUtils.java +++ b/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/util/DDBPredicateUtils.java @@ -27,12 +27,12 @@ import com.amazonaws.athena.connector.lambda.exceptions.AthenaConnectorException; import com.amazonaws.athena.connectors.dynamodb.model.DynamoDBIndex; import com.amazonaws.athena.connectors.dynamodb.model.DynamoDBTable; -import com.amazonaws.services.glue.model.ErrorDetails; -import com.amazonaws.services.glue.model.FederationSourceErrorCode; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.ProjectionType; +import software.amazon.awssdk.services.glue.model.ErrorDetails; +import software.amazon.awssdk.services.glue.model.FederationSourceErrorCode; import java.util.ArrayList; import java.util.HashSet; @@ -192,7 +192,7 @@ private static void validateColumnRange(Range range) case EXACTLY: break; case BELOW: - throw new AthenaConnectorException("Low marker should never use BELOW bound", new ErrorDetails().withErrorCode(FederationSourceErrorCode.InvalidInputException.toString())); + throw new AthenaConnectorException("Low marker should never use BELOW bound", ErrorDetails.builder().errorCode(FederationSourceErrorCode.INVALID_INPUT_EXCEPTION.toString()).build()); default: throw new AssertionError("Unhandled lower bound: " + range.getLow().getBound()); } @@ -200,7 +200,7 @@ private static void validateColumnRange(Range range) if (!range.getHigh().isUpperUnbounded()) { switch (range.getHigh().getBound()) { case ABOVE: - throw new AthenaConnectorException("High marker should never use ABOVE bound", new ErrorDetails().withErrorCode(FederationSourceErrorCode.InvalidInputException.toString())); + throw new AthenaConnectorException("High marker should never use ABOVE bound", ErrorDetails.builder().errorCode(FederationSourceErrorCode.INVALID_INPUT_EXCEPTION.toString()).build()); case EXACTLY: break; case BELOW: diff --git a/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/util/DDBTableUtils.java b/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/util/DDBTableUtils.java index 923d03ec48..98332f78c1 100644 --- a/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/util/DDBTableUtils.java +++ b/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/util/DDBTableUtils.java @@ -24,8 +24,6 @@ import com.amazonaws.athena.connector.lambda.exceptions.AthenaConnectorException; import com.amazonaws.athena.connectors.dynamodb.model.DynamoDBIndex; import com.amazonaws.athena.connectors.dynamodb.model.DynamoDBTable; -import com.amazonaws.services.glue.model.ErrorDetails; -import com.amazonaws.services.glue.model.FederationSourceErrorCode; import com.google.common.collect.ImmutableList; import org.apache.arrow.vector.types.pojo.Schema; import org.slf4j.Logger; @@ -44,6 +42,8 @@ import software.amazon.awssdk.services.dynamodb.model.ScanRequest; import software.amazon.awssdk.services.dynamodb.model.ScanResponse; import software.amazon.awssdk.services.dynamodb.model.TableDescription; +import software.amazon.awssdk.services.glue.model.ErrorDetails; +import software.amazon.awssdk.services.glue.model.FederationSourceErrorCode; import java.util.List; import java.util.Map; @@ -170,7 +170,7 @@ public static Schema peekTableForSchema(String tableName, ThrottlingInvoker invo logger.warn("Failed to retrieve table schema due to KMS issue, empty schema for table: {}. Error Message: {}", tableName, runtimeException.getMessage()); } else { - throw new AthenaConnectorException(runtimeException.getMessage(), new ErrorDetails().withErrorCode(FederationSourceErrorCode.OperationTimeoutException.toString())); + throw new AthenaConnectorException(runtimeException.getMessage(), ErrorDetails.builder().errorCode(FederationSourceErrorCode.OPERATION_TIMEOUT_EXCEPTION.toString()).build()); } } return schemaBuilder.build(); diff --git a/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/util/DDBTypeUtils.java b/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/util/DDBTypeUtils.java index b5f27a434a..d1abcdefaa 100644 --- a/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/util/DDBTypeUtils.java +++ b/athena-dynamodb/src/main/java/com/amazonaws/athena/connectors/dynamodb/util/DDBTypeUtils.java @@ -32,8 +32,6 @@ import com.amazonaws.athena.connector.lambda.domain.predicate.ConstraintProjector; import com.amazonaws.athena.connector.lambda.exceptions.AthenaConnectorException; import com.amazonaws.athena.connectors.dynamodb.resolver.DynamoDBFieldResolver; -import com.amazonaws.services.glue.model.ErrorDetails; -import com.amazonaws.services.glue.model.FederationSourceErrorCode; import org.apache.arrow.vector.FieldVector; import org.apache.arrow.vector.holders.NullableBitHolder; import org.apache.arrow.vector.types.Types; @@ -52,6 +50,8 @@ import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.EnhancedAttributeValue; import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.StringAttributeConverter; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; +import software.amazon.awssdk.services.glue.model.ErrorDetails; +import software.amazon.awssdk.services.glue.model.FederationSourceErrorCode; import software.amazon.awssdk.utils.ImmutableMap; import java.math.BigDecimal; @@ -191,7 +191,7 @@ else if (enhancedAttributeValue.isMap()) { } String attributeTypeName = (value == null || value.getClass() == null) ? "null" : enhancedAttributeValue.type().name(); - throw new AthenaConnectorException("Unknown Attribute Value Type[" + attributeTypeName + "] for field[" + key + "]", new ErrorDetails().withErrorCode(FederationSourceErrorCode.InvalidInputException.toString())); + throw new AthenaConnectorException("Unknown Attribute Value Type[" + attributeTypeName + "] for field[" + key + "]", ErrorDetails.builder().errorCode(FederationSourceErrorCode.INVALID_INPUT_EXCEPTION.toString()).build()); } /** @@ -265,7 +265,7 @@ public static Field getArrowFieldFromDDBType(String attributeName, String attrib case MAP: return new Field(attributeName, FieldType.nullable(Types.MinorType.STRUCT.getType()), null); default: - throw new AthenaConnectorException("Unknown type[" + attributeType + "] for field[" + attributeName + "]", new ErrorDetails().withErrorCode(FederationSourceErrorCode.InvalidInputException.toString())); + throw new AthenaConnectorException("Unknown type[" + attributeType + "] for field[" + attributeName + "]", ErrorDetails.builder().errorCode(FederationSourceErrorCode.INVALID_INPUT_EXCEPTION.toString()).build()); } } @@ -385,7 +385,7 @@ public static List coerceListToExpectedType(Object value, Field field, D if (!(value instanceof Collection)) { if (value instanceof Map) { - throw new AthenaConnectorException("Unexpected type (Map) encountered for: " + childField.getName(), new ErrorDetails().withErrorCode(FederationSourceErrorCode.InvalidInputException.toString())); + throw new AthenaConnectorException("Unexpected type (Map) encountered for: " + childField.getName(), ErrorDetails.builder().errorCode(FederationSourceErrorCode.INVALID_INPUT_EXCEPTION.toString()).build()); } return Collections.singletonList(coerceValueToExpectedType(value, childField, fieldType, recordMetadata)); } @@ -621,7 +621,7 @@ else if (value instanceof Map) { return handleMapType((Map) value); } else { - throw new AthenaConnectorException("Unsupported value type: " + value.getClass(), new ErrorDetails().withErrorCode(FederationSourceErrorCode.InvalidInputException.toString())); + throw new AthenaConnectorException("Unsupported value type: " + value.getClass(), ErrorDetails.builder().errorCode(FederationSourceErrorCode.INVALID_INPUT_EXCEPTION.toString()).build()); } } @@ -635,7 +635,7 @@ public static AttributeValue jsonToAttributeValue(String jsonString, String key) { EnhancedDocument enhancedDocument = EnhancedDocument.fromJson(jsonString); if (!enhancedDocument.isPresent(key)) { - throw new AthenaConnectorException("Unknown attribute Key", new ErrorDetails().withErrorCode(FederationSourceErrorCode.InvalidInputException.toString())); + throw new AthenaConnectorException("Unknown attribute Key", ErrorDetails.builder().errorCode(FederationSourceErrorCode.INVALID_INPUT_EXCEPTION.toString()).build()); } return enhancedDocument.toMap().get(key); } @@ -658,7 +658,7 @@ else if (firstElement instanceof Number) { } // Add other types if needed // Fallback for unsupported set types - throw new AthenaConnectorException("Unsupported Set element type: " + firstElement.getClass(), new ErrorDetails().withErrorCode(FederationSourceErrorCode.InvalidInputException.toString())); + throw new AthenaConnectorException("Unsupported Set element type: " + firstElement.getClass(), ErrorDetails.builder().errorCode(FederationSourceErrorCode.INVALID_INPUT_EXCEPTION.toString()).build()); } private static AttributeValue handleListType(List value)