[ 
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)

Reply via email to