You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2023/03/21 18:46:36 UTC
[airavata-data-catalog] 04/05: Error reporting added when sql fails to parse or validate
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 <ma...@apache.org>
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);
}