You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by vi...@apache.org on 2018/12/20 20:38:24 UTC
[drill] 01/04: DRILL-6913: Fix multiple error output in the console
This is an automated email from the ASF dual-hosted git repository.
vitalii pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/drill.git
commit 1df935f8f4ed0635ceb38f42fc5b5387c49bdf73
Author: Arina Ielchiieva <ar...@gmail.com>
AuthorDate: Wed Dec 19 15:01:59 2018 +0200
DRILL-6913: Fix multiple error output in the console
1. Bump up Calcite version to 1.17.0-drill-r2 (includes CALCITE-2463).
2. Optimized exception handling in DrillSqlWorker getPlan method.
closes #1578
---
.../drill/exec/planner/sql/DrillSqlWorker.java | 107 ++++++++++++---------
pom.xml | 2 +-
2 files changed, 61 insertions(+), 48 deletions(-)
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java
index 7a4fcdf..c7963a5 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java
@@ -64,6 +64,34 @@ public class DrillSqlWorker {
/**
* Converts sql query string into query physical plan.
+ * Catches various exceptions and converts them into user exception when possible.
+ *
+ * @param context query context
+ * @param sql sql query
+ * @param textPlan text plan
+ * @return query physical plan
+ */
+ public static PhysicalPlan getPlan(QueryContext context, String sql, Pointer<String> textPlan) throws ForemanSetupException {
+ try {
+ return convertPlan(context, sql, textPlan);
+ } catch (ValidationException e) {
+ String errorMessage = e.getCause() != null ? e.getCause().getMessage() : e.getMessage();
+ throw UserException.validationError(e)
+ .message(errorMessage)
+ .build(logger);
+ } catch (AccessControlException e) {
+ throw UserException.permissionError(e)
+ .build(logger);
+ } catch (SqlUnsupportedException e) {
+ throw UserException.unsupportedError(e)
+ .build(logger);
+ } catch (IOException | RelConversionException e) {
+ throw new QueryInputException("Failure handling SQL.", e);
+ }
+ }
+
+ /**
+ * Converts sql query string into query physical plan.
* In case of any errors (that might occur due to missing function implementation),
* checks if local function registry should be synchronized with remote function registry.
* If sync took place, reloads drill operator table
@@ -75,7 +103,8 @@ public class DrillSqlWorker {
* @param textPlan text plan
* @return query physical plan
*/
- public static PhysicalPlan getPlan(QueryContext context, String sql, Pointer<String> textPlan) throws ForemanSetupException {
+ private static PhysicalPlan convertPlan(QueryContext context, String sql, Pointer<String> textPlan)
+ throws ForemanSetupException, RelConversionException, IOException, ValidationException {
Pointer<String> textPlanCopy = textPlan == null ? null : new Pointer<>(textPlan.value);
try {
return getQueryPlan(context, sql, textPlan);
@@ -102,47 +131,46 @@ public class DrillSqlWorker {
* @return query physical plan
*/
private static PhysicalPlan getQueryPlan(QueryContext context, String sql, Pointer<String> textPlan)
- throws ForemanSetupException {
+ throws ForemanSetupException, RelConversionException, IOException, ValidationException {
final SqlConverter parser = new SqlConverter(context);
-
injector.injectChecked(context.getExecutionControls(), "sql-parsing", ForemanSetupException.class);
final SqlNode sqlNode = parser.parse(sql);
final AbstractSqlHandler handler;
final SqlHandlerConfig config = new SqlHandlerConfig(context, parser);
switch(sqlNode.getKind()) {
- case EXPLAIN:
- handler = new ExplainHandler(config, textPlan);
- break;
- case SET_OPTION:
- handler = new SetOptionHandler(context);
- break;
- case DESCRIBE_TABLE:
- if (sqlNode instanceof DrillSqlDescribeTable) {
- handler = new DescribeTableHandler(config);
+ case EXPLAIN:
+ handler = new ExplainHandler(config, textPlan);
break;
- }
- case DESCRIBE_SCHEMA:
- if (sqlNode instanceof SqlDescribeSchema) {
- handler = new DescribeSchemaHandler(config);
+ case SET_OPTION:
+ handler = new SetOptionHandler(context);
break;
- }
- case CREATE_TABLE:
- handler = ((DrillSqlCall) sqlNode).getSqlHandler(config, textPlan);
- break;
- case DROP_TABLE:
- case CREATE_VIEW:
- case DROP_VIEW:
- case OTHER_DDL:
- case OTHER:
- if (sqlNode instanceof DrillSqlCall) {
- handler = ((DrillSqlCall) sqlNode).getSqlHandler(config);
+ case DESCRIBE_TABLE:
+ if (sqlNode instanceof DrillSqlDescribeTable) {
+ handler = new DescribeTableHandler(config);
+ break;
+ }
+ case DESCRIBE_SCHEMA:
+ if (sqlNode instanceof SqlDescribeSchema) {
+ handler = new DescribeSchemaHandler(config);
+ break;
+ }
+ case CREATE_TABLE:
+ handler = ((DrillSqlCall) sqlNode).getSqlHandler(config, textPlan);
break;
- }
- // fallthrough
- default:
- handler = new DefaultSqlHandler(config, textPlan);
+ case DROP_TABLE:
+ case CREATE_VIEW:
+ case DROP_VIEW:
+ case OTHER_DDL:
+ case OTHER:
+ if (sqlNode instanceof DrillSqlCall) {
+ handler = ((DrillSqlCall) sqlNode).getSqlHandler(config);
+ break;
+ }
+ // fallthrough
+ default:
+ handler = new DefaultSqlHandler(config, textPlan);
}
boolean returnResultSet = context.getOptions().getBoolean(ExecConstants.RETURN_RESULT_SET_FOR_DDL);
@@ -151,21 +179,6 @@ public class DrillSqlWorker {
context.getOptions().setLocalOption(ExecConstants.RETURN_RESULT_SET_FOR_DDL,
returnResultSet || !SqlKind.DDL.contains(sqlNode.getKind()));
- try {
- return handler.getPlan(sqlNode);
- } catch(ValidationException e) {
- String errorMessage = e.getCause() != null ? e.getCause().getMessage() : e.getMessage();
- throw UserException.validationError(e)
- .message(errorMessage)
- .build(logger);
- } catch (AccessControlException e) {
- throw UserException.permissionError(e)
- .build(logger);
- } catch(SqlUnsupportedException e) {
- throw UserException.unsupportedError(e)
- .build(logger);
- } catch (IOException | RelConversionException e) {
- throw new QueryInputException("Failure handling SQL.", e);
- }
+ return handler.getPlan(sqlNode);
}
}
diff --git a/pom.xml b/pom.xml
index 01ca3e3..1d9b29b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,7 +50,7 @@
<guava.version>19.0</guava.version>
<forkCount>2</forkCount>
<parquet.version>1.10.0</parquet.version>
- <calcite.version>1.17.0-drill-r1</calcite.version>
+ <calcite.version>1.17.0-drill-r2</calcite.version>
<avatica.version>1.12.0</avatica.version>
<janino.version>3.0.11</janino.version>
<sqlline.version>1.6.0</sqlline.version>