[ 
https://issues.apache.org/jira/browse/HIVE-10621?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexander Pivovarov updated HIVE-10621:
---------------------------------------
    Attachment: HIVE-10621.1.patch

reattaching patch #1

> serde typeinfo equals methods are not symmetric
> -----------------------------------------------
>
>                 Key: HIVE-10621
>                 URL: https://issues.apache.org/jira/browse/HIVE-10621
>             Project: Hive
>          Issue Type: Bug
>          Components: Serializers/Deserializers
>            Reporter: Alexander Pivovarov
>            Assignee: Alexander Pivovarov
>            Priority: Minor
>         Attachments: HIVE-10621.1.patch, rb33880.patch
>
>
> correct equals method implementation should start with
> {code}
>   if (this == other) {
>     return true;
>   }
>   if (other == null || getClass() != other.getClass()) {
>     return false;
>   }
> {code}
> DecimalTypeInfo, PrimitiveTypeInfo, VarcharTypeInfo, CharTypeInfo, 
> HiveDecimalWritable equals method implementation starts with
> {code}
>   if (other == null || !(other instanceof <class_name>)) {
>     return false
>   }
> {code}
> - first of all check for null is redundant
> - the second issue is that "other instanceof <class_name>" check is not 
> symmetric.
> contract of equals() implies that, a.equals(b) is true if and only if 
> b.equals(a) is true
> Current implementation violates this contract.
> e.g.
> DecimalTypeInfo instanceof PrimitiveTypeInfo is true
> but
> PrimitiveTypeInfo instanceof DecimalTypeInfo is false
> See more details here 
> http://stackoverflow.com/questions/6518534/equals-method-overrides-equals-in-superclass-and-may-not-be-symmetric



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to