liyafan82 opened a new pull request #1944:
URL: https://github.com/apache/calcite/pull/1944


   Currently, comparisons between RelOptCost objects are based on 3 methods:
   1. ``boolean isLe(RelOptCost cost)``
   2. ``boolean isLt(RelOptCost cost)``
   3. ``boolean equals(RelOptCost cost)``
   
   The 3 methods used in combination determine the relation between RelOptCost 
objects.
   
   There are some problems with this implementation:
   1. Some logic is duplicate in the above methods, making it difficult to 
maintain.
   2. To determine the relation between RelOptCost objects, we often need to 
call more than one comparison methods, leading to performance overhead.
   3. Since the logic is spread in multiple methods, it is easy to end up with 
contradictive comparison logic, which will suprise the users. For example, the 
following assertion should hold according to common sense:
   
   ``if a >=b, then we have a > b or a == b``
   
   However, with the current implementation of VolcanoCost, we can easily 
create instances that violate the above assertion.
   
   To solve the problems, we want to make RelOptCost extends the 
Comparable<RelOptCost>, so the comparison logic is unified in the compareTo 
method, which solves the above problems.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to