Struct types are always not nullable. This can lead to bugs in many parts of Calcite (e.g., expression simplification, optimization, code generation) that are considering the nullability of a RelDataType.
The method isNullable in the RelRecordType, which is used to represent a structured type, always returns false. The nullability of the RelRecordType should be a parameter in the constructor as it is the case for various other RelDataTypes.
Additionally, the data type cache should also take into account the nullability of the type in order to return a correct equivalent.