Vladimir Sitnikov created CALCITE-4219:
------------------------------------------

             Summary: Clarify SqlCall#getOperandList() nullability
                 Key: CALCITE-4219
                 URL: https://issues.apache.org/jira/browse/CALCITE-4219
             Project: Calcite
          Issue Type: Sub-task
          Components: core
    Affects Versions: 1.25.0
            Reporter: Vladimir Sitnikov


{{getOperandList()}} is implemented by a number of different {{SqlCall}} 
sub-classes, and the list often includes null values.
The implementation is typically {{return ImmutableNullableList.of(...}}

However, {{getOperandList()}} is used a lot, and the code assumes that the 
resulting values are non-null. The same happens for {{SqlCall#operand(int)}}.

The workaround is to declare  {{getOperandList()}} and {{operand(int)}} to 
return non-nullable values (even though nulls are possible), and we could add 
suppressions at the side which returns {{ImmutableNullableList}}.

The solution might be behind the lines of adding 
{{nonNullableOperand(int)}}-like methods that would return non-nullable values 
and throw meaningful errors in case the value turns out to be null.

Another option might be to ensure all the fields are non-nullable (e.g. create 
dummy SqlNode for empty values).



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to