You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Julian Hyde (JIRA)" <ji...@apache.org> on 2016/02/03 06:11:39 UTC

[jira] [Resolved] (CALCITE-1071) Improve hash functions

     [ 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)