[ASTERIXDB-3046][COMP] Make ICost comparable
- user model changes: no
- storage format changes: no
- interface changes: no
Change-Id: I230d731d510c8da395539acab8901ee2a388c88c
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17233
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
Reviewed-by: Wail Alkowaileet <wael.y.k@gmail.com>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17332
Reviewed-by: Michael Blow <mblow@apache.org>
Tested-by: Michael Blow <mblow@apache.org>
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/Cost.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/Cost.java
index 7e74f91..5dda277 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/Cost.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/Cost.java
@@ -22,8 +22,6 @@
public class Cost implements ICost {
public static final double MAX_CARD = 1.0e200;
- protected static final int COST_GT = 1;
- protected static final int COST_LT = -1;
protected static final int COST_EQ = 0;
private final double cost;
@@ -37,63 +35,57 @@
}
@Override
- public Cost zeroCost() {
+ public ICost zeroCost() {
return new Cost();
}
@Override
- public Cost maxCost() {
+ public ICost maxCost() {
return new Cost(MAX_CARD);
}
@Override
- public Cost costAdd(ICost iCost2) {
- return new Cost(this.computeTotalCost() + iCost2.computeTotalCost());
+ public ICost costAdd(ICost cost) {
+ return new Cost(computeTotalCost() + cost.computeTotalCost());
}
@Override
- public Cost costAdd(ICost iCost2, ICost iCost3) {
- return this.costAdd(iCost2.costAdd(iCost3));
+ public boolean costEQ(ICost cost) {
+ return compareTo(cost) == COST_EQ;
}
@Override
- public int costCompare(ICost iCost2) {
- if (this.computeTotalCost() > iCost2.computeTotalCost()) {
- return COST_GT;
- } else if (this.computeTotalCost() < iCost2.computeTotalCost()) {
- return COST_LT;
- } else {
- return COST_EQ;
- }
+ public boolean costLT(ICost cost) {
+ return compareTo(cost) < COST_EQ;
}
@Override
- public boolean costEQ(ICost iCost2) {
- return this.costCompare(iCost2) == COST_EQ;
+ public boolean costGT(ICost cost) {
+ return compareTo(cost) > COST_EQ;
}
@Override
- public boolean costLT(ICost iCost2) {
- return this.costCompare(iCost2) == COST_LT;
+ public boolean costLE(ICost cost) {
+ return compareTo(cost) <= COST_EQ;
}
@Override
- public boolean costGT(ICost iCost2) {
- return this.costCompare(iCost2) == COST_GT;
- }
-
- @Override
- public boolean costLE(ICost iCost2) {
- return this.costLT(iCost2) || this.costEQ(iCost2);
- }
-
- @Override
- public boolean costGE(ICost iCost2) {
- return this.costGT(iCost2) || this.costEQ(iCost2);
+ public boolean costGE(ICost cost) {
+ return compareTo(cost) >= COST_EQ;
}
@Override
public double computeTotalCost() {
- return this.cost;
+ return cost;
+ }
+
+ @Override
+ public int compareTo(ICost cost) {
+ return Double.compare(computeTotalCost(), cost.computeTotalCost());
+ }
+
+ @Override
+ public String toString() {
+ return Double.toString(cost);
}
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/ICost.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/ICost.java
index 6f4c7d7..99c3362 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/ICost.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/cost/ICost.java
@@ -19,27 +19,24 @@
package org.apache.asterix.optimizer.cost;
-public interface ICost {
+public interface ICost extends Comparable<ICost> {
ICost zeroCost();
ICost maxCost();
- ICost costAdd(ICost cost2);
+ ICost costAdd(ICost cost);
- ICost costAdd(ICost cost2, ICost cost3);
+ boolean costEQ(ICost cost);
- int costCompare(ICost cost2);
+ boolean costLT(ICost cost);
- boolean costEQ(ICost cost2);
+ boolean costGT(ICost cost);
- boolean costLT(ICost cost2);
+ boolean costLE(ICost cost);
- boolean costGT(ICost cost2);
-
- boolean costLE(ICost cost2);
-
- boolean costGE(ICost cost2);
+ boolean costGE(ICost cost);
double computeTotalCost();
+
}