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