[
https://issues.apache.org/jira/browse/CALCITE-3786?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Haisheng Yuan resolved CALCITE-3786.
------------------------------------
Resolution: Fixed
Dude, next time would you please refrain from reverting other member's commit
and honor the Apache community's [code of
conduct|https://www.apache.org/foundation/policies/conduct#:~:text=Be%20empathetic%2C%20welcoming%2C%20friendly%2C%20and%20patient.&text=A%20community%20where%20people%20feel,with%20people%20outside%20our%20community.]?
People will appreciate it, sincerely.
Cheers to our collaboration:
-
https://github.com/apache/calcite/commit/69f25863f5f4197c17927a39a82cbf1cffd12b80
-
https://github.com/apache/calcite/commit/b18470797eaec8c4e64382c0b742ae83f758275f
-
https://github.com/apache/calcite/commit/1736242612634359164be483334884cb9113f804
-
https://github.com/apache/calcite/commit/af3bca328a40d2d6515ea00e2094974cc725d4c3
> Add Digest interface to enable efficient hashCode(equals) for RexNode and
> RelNode
> ---------------------------------------------------------------------------------
>
> Key: CALCITE-3786
> URL: https://issues.apache.org/jira/browse/CALCITE-3786
> Project: Calcite
> Issue Type: New Feature
> Components: core
> Affects Versions: 1.21.0
> Reporter: Vladimir Sitnikov
> Assignee: Danny Chen
> Priority: Major
> Fix For: 1.24.0
>
> Attachments: image-2020-06-23-12-47-25-599.png, screenshot-1.png,
> screenshot-2.png, screenshot-3.png, screenshot-4.png, screenshot-5.png,
> screenshot-6.png
>
> Time Spent: 9h 10m
> Remaining Estimate: 0h
>
> Current digests for RexNode, RelNode, RelType, and similar cases use String
> concatenation.
> It is easy to implement, however, it has drawbacks:
> 1) String objects cannot be reused. For instance, RexCall has operands,
> however, the digest is duplicated. It causes extra memory use and extra CPU
> for string copying
> 2) There's no way to have multiple #toString() methods. RelType might need
> multiple digests: "including field names", "excluding field names".
> A suggested resolution might be behind the lines of
> {code:java}
> class Digest { // immutable
> final int hashCode; // speedup hashCode and equals
> final Object[] contents; // The values are either other Digest objects or
> Strings
> String toString(); // e.g. for debugging purposes
> int compareTo(Digest); // e.g. for debugging purposes.
> }
> {code}
> Note how fields in Kotlin are aligned much better, and it makes it easier to
> read:
> {code:java}
> class Digest { // immutable
> val hashCode: Int // speedup hashCode and equals
> val contents: Array<Any> // The values are either other Digest objects or
> Strings
> fun toString(): String // e.g. for debugging purposes
> fun compareTo(other: Digest): Int // e.g. for debugging purposes.
> }
> {code}
> Then the digest for RexCall could be the bits relevant to RexCall itself +
> digests of the operands (which can be reused as is)
--
This message was sent by Atlassian Jira
(v8.3.4#803005)