001: /*
002:
003: Derby - Class org.apache.derby.impl.store.access.conglomerate.GenericCostController
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.impl.store.access.conglomerate;
023:
024: import org.apache.derby.iapi.error.StandardException;
025:
026: import org.apache.derby.iapi.reference.SQLState;
027:
028: import org.apache.derby.iapi.store.access.StoreCostController;
029: import org.apache.derby.iapi.store.access.StoreCostResult;
030:
031: import org.apache.derby.iapi.types.DataValueDescriptor;
032:
033: import org.apache.derby.impl.sql.execute.RowUtil;
034:
035: import org.apache.derby.iapi.services.io.FormatableBitSet;
036:
037: /**
038:
039: A Generic class which implements the basic functionality needed for a cost
040: controller.
041:
042: **/
043:
044: public abstract class GenericCostController extends GenericController
045: implements StoreCostController {
046:
047: /**************************************************************************
048: * Fields of the class
049: **************************************************************************
050: */
051:
052: /**************************************************************************
053: * Constructors for This class:
054: **************************************************************************
055: */
056:
057: /**************************************************************************
058: * Private/Protected methods of This class:
059: **************************************************************************
060: */
061:
062: /**************************************************************************
063: * Public Methods of This class:
064: **************************************************************************
065: */
066:
067: /**************************************************************************
068: * Public Methods implementing StoreCostController class:
069: **************************************************************************
070: */
071:
072: /**************************************************************************
073: * Public Methods implementing StoreCostController class, default impl
074: * just throws exception:
075: **************************************************************************
076: */
077:
078: /**
079: * Return the cost of exact key lookup.
080: * <p>
081: * Return the estimated cost of calling ScanController.fetch()
082: * on the current conglomerate, with start and stop positions set such
083: * that an exact match is expected.
084: * <p>
085: * This call returns the cost of a fetchNext() performed on a scan which
086: * has been positioned with a start position which specifies exact match
087: * on all keys in the row.
088: * <p>
089: * Example:
090: * <p>
091: * In the case of a btree this call can be used to determine the cost of
092: * doing an exact probe into btree, giving all key columns. This cost
093: * can be used if the client knows it will be doing an exact key probe
094: * but does not have the key's at optimize time to use to make a call to
095: * getScanCost()
096: * <p>
097: *
098: * @param validColumns A description of which columns to return from
099: * row on the page into "templateRow." templateRow,
100: * and validColumns work together to
101: * describe the row to be returned by the fetch -
102: * see RowUtil for description of how these three
103: * parameters work together to describe a fetched
104: * "row".
105: *
106: * @param access_type Describe the type of access the query will be
107: * performing to the ScanController.
108: *
109: * STORECOST_CLUSTERED - The location of one scan
110: * is likely clustered "close" to the previous
111: * scan. For instance if the query plan were
112: * to used repeated "reopenScan()'s" to probe
113: * for the next key in an index, then this flag
114: * should be be specified. If this flag is not
115: * set then each scan will be costed independant
116: * of any other predicted scan access.
117: *
118: * @return The cost of the fetch.
119: *
120: * @exception StandardException Standard exception policy.
121: *
122: * @see RowUtil
123: **/
124: public double getFetchFromFullKeyCost(
125: FormatableBitSet validColumns, int access_type)
126: throws StandardException {
127: // Not implemented in default conglomerate, needs to be overridden.
128: throw StandardException
129: .newException(SQLState.HEAP_UNIMPLEMENTED_FEATURE);
130: }
131:
132: }
|