Paul Rogers created DRILL-5330:
----------------------------------

             Summary: NPE in 
FunctionImplementationRegistry.functionReplacement()
                 Key: DRILL-5330
                 URL: https://issues.apache.org/jira/browse/DRILL-5330
             Project: Apache Drill
          Issue Type: Bug
    Affects Versions: 1.10.0
            Reporter: Paul Rogers
            Assignee: Paul Rogers
             Fix For: 1.11.0


The code in {{FunctionImplementationRegistry.functionReplacement()}} will 
produce an NPE if ever it is called:

{code}
          if (optionManager != null
              && optionManager.getOption(
                   ExecConstants.CAST_TO_NULLABLE_NUMERIC).bool_val
              ...
{code}

If an option manager is provided, then get the specified option. The option 
manager will contain a value for that option only if the user has explicitly 
set that option. Suppose the user had not set the option. Then the return from 
{{getOption()}} will be null.

The next thing we do is *assume* that the option exists and is a boolean by 
dereferencing the option. This will trigger an NPE. This NPE was seen in 
detail-level unit tests.

The proper way to handle such options is to use an option validator. Strangely, 
one actually exists in {{ExecConstants}}:

{code}
  String CAST_TO_NULLABLE_NUMERIC = 
"drill.exec.functions.cast_empty_string_to_null";
  OptionValidator CAST_TO_NULLABLE_NUMERIC_OPTION = new 
BooleanValidator(CAST_TO_NULLABLE_NUMERIC, false);
{code}

Then do:

{code}
optionManager.getOption(
         ExecConstants.CAST_TO_NULLABLE_NUMERIC_OPTION)
{code}




--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to