[ https://issues.apache.org/jira/browse/HIVE-5839?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Xuefu Zhang reassigned HIVE-5839: --------------------------------- Assignee: Xuefu Zhang > BytesRefArrayWritable compareTo violates contract > ------------------------------------------------- > > Key: HIVE-5839 > URL: https://issues.apache.org/jira/browse/HIVE-5839 > Project: Hive > Issue Type: Bug > Components: Serializers/Deserializers > Affects Versions: 0.11.0 > Reporter: Ian Robertson > Assignee: Xuefu Zhang > > BytesRefArrayWritable's compareTo violates the compareTo contract from > java.lang.Object. Specifically: > * The implementor must ensure sgn(x.compareTo( y )) == -sgn(y.compareTo( x )) > for all x and y. > The compareTo implementation on BytesRefArrayWritable does a proper > comparison of the sizes of the two instances. However, if the sizes are the > same, it proceeds to do a check if both array's have the same constant. If > not, it returns 1. This means that if x and y are two BytesRefArrayWritable > instances with the same size, but different contents, then x.compareTo( y ) > == 1 and y.compareTo( x ) == 1. > Additionally, the comparison of contents is order agnostic. This seems wrong, > since order of entries should matter. It is also very inefficient, running at > O(n^2), where n is the number of entries. -- This message was sent by Atlassian JIRA (v6.1#6144)