[
https://issues.apache.org/jira/browse/DRILL-4726?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15471302#comment-15471302
]
ASF GitHub Bot commented on DRILL-4726:
---------------------------------------
Github user paul-rogers commented on a diff in the pull request:
https://github.com/apache/drill/pull/574#discussion_r77871026
--- 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 --
This is hugely fragile: if anyone changes the text message (to make it
clearer to the user, say), this code will break. Far better is to introduce a
new exception class specific to this case. For example, MissingUDFException.
Catch that in the catch clause. Be sure to document the new exception that it's
purpose is to trigger auto-reload of UDFs, and that it should be thrown ONLY
when that behavior is desired.
> 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)