[
https://issues.apache.org/jira/browse/DRILL-4726?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15481731#comment-15481731
]
ASF GitHub Bot commented on DRILL-4726:
---------------------------------------
Github user arina-ielchiieva commented on a diff in the pull request:
https://github.com/apache/drill/pull/574#discussion_r78294837
--- Diff:
exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java
---
@@ -69,29 +72,43 @@ public static PhysicalPlan getPlan(QueryContext
context, String sql, Pointer<Str
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 OTHER:
- if(sqlNode instanceof SqlCreateTable) {
- handler = ((DrillSqlCall)sqlNode).getSqlHandler(config, textPlan);
+ case EXPLAIN:
+ handler = new ExplainHandler(config, textPlan);
break;
- }
-
- if (sqlNode instanceof DrillSqlCall) {
- handler = ((DrillSqlCall)sqlNode).getSqlHandler(config);
+ case SET_OPTION:
+ handler = new SetOptionHandler(context);
break;
- }
- // fallthrough
- default:
- handler = new DefaultSqlHandler(config, textPlan);
+ case OTHER:
+ if(sqlNode instanceof SqlCreateTable) {
+ handler = ((DrillSqlCall)sqlNode).getSqlHandler(config,
textPlan);
+ break;
+ }
+
+ if (sqlNode instanceof DrillSqlCall) {
+ handler = ((DrillSqlCall)sqlNode).getSqlHandler(config);
+ break;
+ }
+ // fallthrough
+ default:
+ handler = new DefaultSqlHandler(config, textPlan);
}
try {
- return handler.getPlan(sqlNode);
+ try {
+ return handler.getPlan(sqlNode);
+ } catch (UserException e) {
+ if
(context.getOption(ExecConstants.DYNAMIC_UDF_SUPPORT_ENABLED).bool_val) {
+ final Throwable rootCause = ExceptionUtils.getRootCause(e);
+ if (rootCause instanceof SqlValidatorException
+ && StringUtils.contains(rootCause.getMessage(), "No match
found for function signature")) {
--- End diff --
I totally agree with you but unfortunately we don't have any other choice.
Validation is done on Calcite side.
And Calcite returns SqlValidatorException for all validation exceptions.
The only way to catch why query validation has failed is to parse root cause
message.
[1]
https://github.com/apache/calcite/blob/d9eb4383290e6ec7a5bca8d23fa3e03167c699fe/core/src/main/resources/org/apache/calcite/runtime/CalciteResource.properties#L41
[2]
https://github.com/apache/calcite/blob/71df67c97f7b9a9d3fc6b92eec8ebdd1b7becfd1/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java#L1575
> Dynamic UDFs support
> --------------------
>
> Key: DRILL-4726
> URL: https://issues.apache.org/jira/browse/DRILL-4726
> Project: Apache Drill
> Issue Type: New Feature
> Affects Versions: 1.6.0
> Reporter: Arina Ielchiieva
> Assignee: Arina Ielchiieva
> Fix For: Future
>
>
> Allow register UDFs without restart of Drillbits.
> Design is described in document below:
> https://docs.google.com/document/d/1FfyJtWae5TLuyheHCfldYUpCdeIezR2RlNsrOTYyAB4/edit?usp=sharing
>
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)