[ https://issues.apache.org/jira/browse/CALCITE-4392?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17229943#comment-17229943 ]
Liya Fan commented on CALCITE-4392: ----------------------------------- Sounds reasonable. Thanks for your feedback. > The operation of checking types equal ignoring null can be more efficient > ------------------------------------------------------------------------- > > Key: CALCITE-4392 > URL: https://issues.apache.org/jira/browse/CALCITE-4392 > Project: Calcite > Issue Type: Improvement > Components: core > Reporter: Liya Fan > Assignee: Liya Fan > Priority: Major > > Method {{SqlTypeUtil#equalSansNullability(RelDataTypeFactory, RelDataType, > RelDataType) is on the hot path for many scenarios, as it compare types with > nullability ignored. > In the implementation, the expensive operations are > {{RelDataType#equals(Object)}} and > {{RelDataTypeFactory#createTypeWithNullability}}, especially for types with > multiple sub-fields. > For the current implementation, the {{RelDataType#equals(Object)}} is called > at least once, and {{RelDataTypeFactory#createTypeWithNullability}} is called > whenever the nullability values are different. > We can improve the implementation so that {{RelDataType#equals(Object)}} is > called at most once, and the call to > {{RelDataTypeFactory#createTypeWithNullability}} can be avoided if the types > are totally different (with different type names, and nullability values) > {noformat} > if (type1.isNullable() == type2.isNullable()) { > return type1.equals(type2); > } else { > return type1.equals( > factory.createTypeWithNullability(type2, type1.isNullable())); > } > {noformat} -- This message was sent by Atlassian Jira (v8.3.4#803005)