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

Julian Hyde resolved CALCITE-1071.
----------------------------------
       Resolution: Fixed
    Fix Version/s: 1.7.0

Fixed in http://git-wip-us.apache.org/repos/asf/calcite/commit/ecf4d6dc.

Summary of changes:
* Deprecate all {{Util.hashXxx}} functions;
* Add a few hash functions to {{Utilities}};
* Change as many implementations of hashCode as I could to use 
java.util.Objects.hash (we prefer it over Guava's Objects.hashCode);
* Change code to use java.util.Objects.equals (we prefer it over Guava's 
Objects.equal);
* Make sure that classes that implement Map.Entry have a hashCode that complies 
with the contract;
* Change hash functions in {{Utilities}} to use 31 as their prime, to be 
consistent with {{Objects.hash}}.

> Improve hash functions
> ----------------------
>
>                 Key: CALCITE-1071
>                 URL: https://issues.apache.org/jira/browse/CALCITE-1071
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Julian Hyde
>            Assignee: Julian Hyde
>             Fix For: 1.7.0
>
>
> There are hash functions in Utilities.hash and Util.hash and spread 
> throughout the code, e.g. in ColumnMetaData and ClassDeclaration (search for 
> uses of Object.hashCode).
> Suggested improvements:
> * Some multiply by 37; I'm not sure that all CPUs can multiply by 37 in one 
> instruction; switch to a mersenne prime (2 ^ n - 1).
> * Util.hash uses shift and xor. Change that to multiply by a prime.
> * Lists should continue to multiply by 31 to be consistent with 
> java.util.List.
> * Deprecate Util.hash methods and use Utilities.hash instead.
> Changing hash functions may cause some test output to change; be prepared for 
> that.



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

Reply via email to