001: /*
002:
003: Derby - Class org.apache.derby.iapi.sql.compile.CostEstimate
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to you under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derby.iapi.sql.compile;
023:
024: import org.apache.derby.iapi.store.access.StoreCostResult;
025:
026: /**
027: * A CostEstimate represents the cost of getting a ResultSet, along with the
028: * ordering of rows in the ResultSet, and the estimated number of rows in
029: * this ResultSet.
030: *
031: * @author Jeff Lichtman
032: */
033:
034: public interface CostEstimate extends StoreCostResult {
035: /**
036: * Set the cost for this cost estimate.
037: */
038: void setCost(double cost, double rowCount, double singleScanRowCount);
039:
040: /**
041: * Copy the values from the given cost estimate into this one.
042: */
043: void setCost(CostEstimate other);
044:
045: /**
046: * Set the single scan row count.
047: */
048: void setSingleScanRowCount(double singleRowScanCount);
049:
050: /**
051: * Compare this cost estimate with the given cost estimate.
052: *
053: * @param other The cost estimate to compare this one with
054: *
055: * @return < 0 if this < other, 0 if this == other, > 0 if this > other
056: */
057: double compare(CostEstimate other);
058:
059: /**
060: * Add this cost estimate to another one. This presumes that any row
061: * ordering is destroyed.
062: *
063: * @param addend This cost estimate to add this one to.
064: * @param retval If non-null, put the result here.
065: *
066: * @return this + other.
067: */
068: CostEstimate add(CostEstimate addend, CostEstimate retval);
069:
070: /**
071: * Multiply this cost estimate by a scalar, non-dimensional number. This
072: * presumes that any row ordering is destroyed.
073: *
074: * @param multiplicand The value to multiply this CostEstimate by.
075: * @param retval If non-null, put the result here.
076: *
077: * @return this * multiplicand
078: */
079: CostEstimate multiply(double multiplicand, CostEstimate retval);
080:
081: /**
082: * Divide this cost estimate by a scalar, non-dimensional number.
083: *
084: * @param divisor The value to divide this CostEstimate by.
085: * @param retval If non-null, put the result here.
086: *
087: * @return this / divisor
088: */
089: CostEstimate divide(double divisor, CostEstimate retval);
090:
091: /**
092: * Get the estimated number of rows returned by the ResultSet that this
093: * CostEstimate models.
094: */
095: double rowCount();
096:
097: /**
098: * Get the estimated number of rows returned by a single scan of
099: * the ResultSet that this CostEstimate models.
100: */
101: double singleScanRowCount();
102:
103: /** Get a copy of this CostEstimate */
104: CostEstimate cloneMe();
105:
106: /**
107: * Return whether or not this CostEstimate is uninitialized.
108: *
109: * @return Whether or not this CostEstimate is uninitialized.
110: */
111: public boolean isUninitialized();
112: }
|