This is an automated email from the ASF dual-hosted git repository. machristie pushed a commit to branch calcite in repository https://gitbox.apache.org/repos/asf/airavata-data-catalog.git
commit ac7d4acb1ba9eb6d8d937cbf7af47140b40e92ca Author: Marcus Christie <[email protected]> AuthorDate: Tue Mar 21 14:44:15 2023 -0400 Error reporting added when sql fails to parse or validate --- .../exception/MetadataSchemaSqlParseException.java | 25 ++++++++++++++++++++++ .../MetadataSchemaSqlValidateException.java | 25 ++++++++++++++++++++++ .../api/query/MetadataSchemaQueryExecutor.java | 6 +++++- .../impl/MetadataSchemaQueryExecutorImpl.java | 15 +++++++------ .../api/service/DataCatalogAPIService.java | 20 +++++++++++++---- .../api/service/DataCatalogService.java | 5 ++++- .../api/service/impl/DataCatalogServiceImpl.java | 5 ++++- 7 files changed, 87 insertions(+), 14 deletions(-) diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/exception/MetadataSchemaSqlParseException.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/exception/MetadataSchemaSqlParseException.java new file mode 100644 index 0000000..1717e5d --- /dev/null +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/exception/MetadataSchemaSqlParseException.java @@ -0,0 +1,25 @@ +package org.apache.airavata.datacatalog.api.exception; + +public class MetadataSchemaSqlParseException extends Exception { + + public MetadataSchemaSqlParseException() { + } + + public MetadataSchemaSqlParseException(String message) { + super(message); + } + + public MetadataSchemaSqlParseException(Throwable cause) { + super(cause); + } + + public MetadataSchemaSqlParseException(String message, Throwable cause) { + super(message, cause); + } + + public MetadataSchemaSqlParseException(String message, Throwable cause, boolean enableSuppression, + boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } + +} diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/exception/MetadataSchemaSqlValidateException.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/exception/MetadataSchemaSqlValidateException.java new file mode 100644 index 0000000..ec7ea17 --- /dev/null +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/exception/MetadataSchemaSqlValidateException.java @@ -0,0 +1,25 @@ +package org.apache.airavata.datacatalog.api.exception; + +public class MetadataSchemaSqlValidateException extends Exception { + + public MetadataSchemaSqlValidateException() { + } + + public MetadataSchemaSqlValidateException(String message) { + super(message); + } + + public MetadataSchemaSqlValidateException(Throwable cause) { + super(cause); + } + + public MetadataSchemaSqlValidateException(String message, Throwable cause) { + super(message, cause); + } + + public MetadataSchemaSqlValidateException(String message, Throwable cause, boolean enableSuppression, + boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } + +} diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/query/MetadataSchemaQueryExecutor.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/query/MetadataSchemaQueryExecutor.java index 6871553..dcf6a35 100644 --- a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/query/MetadataSchemaQueryExecutor.java +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/query/MetadataSchemaQueryExecutor.java @@ -1,6 +1,10 @@ package org.apache.airavata.datacatalog.api.query; +import org.apache.airavata.datacatalog.api.exception.MetadataSchemaSqlParseException; +import org.apache.airavata.datacatalog.api.exception.MetadataSchemaSqlValidateException; + public interface MetadataSchemaQueryExecutor { - MetadataSchemaQueryResult execute(String sql); + MetadataSchemaQueryResult execute(String sql) + throws MetadataSchemaSqlParseException, MetadataSchemaSqlValidateException; } diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/query/impl/MetadataSchemaQueryExecutorImpl.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/query/impl/MetadataSchemaQueryExecutorImpl.java index ab1202d..7643a50 100644 --- a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/query/impl/MetadataSchemaQueryExecutorImpl.java +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/query/impl/MetadataSchemaQueryExecutorImpl.java @@ -8,6 +8,8 @@ import java.util.Map; import org.apache.airavata.datacatalog.api.DataProduct; import org.apache.airavata.datacatalog.api.FieldValueType; +import org.apache.airavata.datacatalog.api.exception.MetadataSchemaSqlParseException; +import org.apache.airavata.datacatalog.api.exception.MetadataSchemaSqlValidateException; import org.apache.airavata.datacatalog.api.mapper.DataProductMapper; import org.apache.airavata.datacatalog.api.model.DataProductEntity; import org.apache.airavata.datacatalog.api.model.MetadataSchemaEntity; @@ -66,7 +68,8 @@ public class MetadataSchemaQueryExecutorImpl implements MetadataSchemaQueryExecu DataProductMapper dataProductMapper; @Override - public MetadataSchemaQueryResult execute(String sql) { + public MetadataSchemaQueryResult execute(String sql) + throws MetadataSchemaSqlParseException, MetadataSchemaSqlValidateException { // Create a schema that contains the data_product table and all of the metadata // schemas @@ -174,21 +177,19 @@ public class MetadataSchemaQueryExecutorImpl implements MetadataSchemaQueryExecu return validator; } - SqlNode parse(Planner planner, String sql) { + SqlNode parse(Planner planner, String sql) throws MetadataSchemaSqlParseException { try { return planner.parse(sql); } catch (SqlParseException e) { - // TODO: convert to a checked exception and add to interface - throw new RuntimeException(e); + throw new MetadataSchemaSqlParseException(e); } } - SqlNode validate(SqlValidator validator, SqlNode sqlNode) { + SqlNode validate(SqlValidator validator, SqlNode sqlNode) throws MetadataSchemaSqlValidateException { try { return validator.validate(sqlNode); } catch (CalciteContextException e) { - // TODO: convert to a checked exception and add to interface - throw new RuntimeException(e); + throw new MetadataSchemaSqlValidateException(e); } } diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogAPIService.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogAPIService.java index 1e87293..4b7b383 100644 --- a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogAPIService.java +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogAPIService.java @@ -37,6 +37,8 @@ import org.apache.airavata.datacatalog.api.MetadataSchemaFieldUpdateResponse; import org.apache.airavata.datacatalog.api.MetadataSchemaGetRequest; import org.apache.airavata.datacatalog.api.MetadataSchemaGetResponse; import org.apache.airavata.datacatalog.api.exception.EntityNotFoundException; +import org.apache.airavata.datacatalog.api.exception.MetadataSchemaSqlParseException; +import org.apache.airavata.datacatalog.api.exception.MetadataSchemaSqlValidateException; import org.apache.airavata.datacatalog.api.query.MetadataSchemaQueryResult; import org.lognet.springboot.grpc.GRpcService; import org.slf4j.Logger; @@ -125,10 +127,20 @@ public class DataCatalogAPIService extends DataCatalogAPIServiceGrpc.DataCatalog public void searchDataProducts(DataProductSearchRequest request, StreamObserver<DataProductSearchResponse> responseObserver) { - MetadataSchemaQueryResult searchResult = dataCatalogService.searchDataProducts(request.getSql()); - List<DataProduct> dataProducts = searchResult.dataProducts(); - responseObserver.onNext(DataProductSearchResponse.newBuilder().addAllDataProducts(dataProducts).build()); - responseObserver.onCompleted(); + try { + MetadataSchemaQueryResult searchResult = dataCatalogService.searchDataProducts(request.getSql()); + List<DataProduct> dataProducts = searchResult.dataProducts(); + responseObserver.onNext(DataProductSearchResponse.newBuilder().addAllDataProducts(dataProducts).build()); + responseObserver.onCompleted(); + } catch (MetadataSchemaSqlParseException e) { + responseObserver + .onError(Status.INVALID_ARGUMENT.withDescription("Failed to parse SQL query.").asException()); + responseObserver.onCompleted(); + } catch (MetadataSchemaSqlValidateException e) { + responseObserver + .onError(Status.INVALID_ARGUMENT.withDescription("Failed to validate SQL query.").asException()); + responseObserver.onCompleted(); + } } @Override diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogService.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogService.java index 093263a..0b6220d 100644 --- a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogService.java +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/DataCatalogService.java @@ -5,6 +5,8 @@ import java.util.List; import org.apache.airavata.datacatalog.api.DataProduct; import org.apache.airavata.datacatalog.api.MetadataSchema; import org.apache.airavata.datacatalog.api.MetadataSchemaField; +import org.apache.airavata.datacatalog.api.exception.MetadataSchemaSqlParseException; +import org.apache.airavata.datacatalog.api.exception.MetadataSchemaSqlValidateException; import org.apache.airavata.datacatalog.api.query.MetadataSchemaQueryResult; /** @@ -40,5 +42,6 @@ public interface DataCatalogService { MetadataSchemaField updateMetadataSchemaField(MetadataSchemaField metadataSchemaField); - MetadataSchemaQueryResult searchDataProducts(String sql); + MetadataSchemaQueryResult searchDataProducts(String sql) + throws MetadataSchemaSqlParseException, MetadataSchemaSqlValidateException; } diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/impl/DataCatalogServiceImpl.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/impl/DataCatalogServiceImpl.java index 59d1d94..dbce8bb 100644 --- a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/impl/DataCatalogServiceImpl.java +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/service/impl/DataCatalogServiceImpl.java @@ -9,6 +9,8 @@ import org.apache.airavata.datacatalog.api.MetadataSchema; import org.apache.airavata.datacatalog.api.MetadataSchemaField; import org.apache.airavata.datacatalog.api.MetadataSchemaFieldListResponse; import org.apache.airavata.datacatalog.api.exception.EntityNotFoundException; +import org.apache.airavata.datacatalog.api.exception.MetadataSchemaSqlParseException; +import org.apache.airavata.datacatalog.api.exception.MetadataSchemaSqlValidateException; import org.apache.airavata.datacatalog.api.mapper.DataProductMapper; import org.apache.airavata.datacatalog.api.mapper.MetadataSchemaFieldMapper; import org.apache.airavata.datacatalog.api.mapper.MetadataSchemaMapper; @@ -115,7 +117,8 @@ public class DataCatalogServiceImpl implements DataCatalogService { } @Override - public MetadataSchemaQueryResult searchDataProducts(String sql) { + public MetadataSchemaQueryResult searchDataProducts(String sql) + throws MetadataSchemaSqlParseException, MetadataSchemaSqlValidateException { return metadataSchemaQueryExecutor.execute(sql); }
