[
https://issues.apache.org/jira/browse/CALCITE-4219?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17189643#comment-17189643
]
Vladimir Sitnikov edited comment on CALCITE-4219 at 9/2/20, 7:17 PM:
---------------------------------------------------------------------
{quote} The other option is to accept that the rules are different for
different operators{quote}
Which is "workaround" I mention: we could document that {{getOperandList()}}
could have null values in the list, we could document that {{operand(int)}}
could return {{null}} even though the methods look like non-nullable.
The methods are very popular, however, their documentation is empty (no javadoc
at all), and it is not obvious if nulls are possible there or not.
was (Author: vladimirsitnikov):
{quote} The other option is to accept that the rules are different for
different operators{quote}
Which is "workaround" I mention: we could document that {{getOperandList()}}
could have null values in the list, we could document that {{operand(int)}}
could return {{null}} even though the method.
The methods are very popular, however, their documentation is empty (no javadoc
at all), and it is not obvious if nulls are possible there or not.
> 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
> Priority: Major
>
> {{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)