001: /*
002:
003: Derby - Class org.apache.derby.iapi.sql.compile.AccessPath
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.sql.dictionary.ConglomerateDescriptor;
025: import org.apache.derby.iapi.sql.dictionary.TableDescriptor;
026: import org.apache.derby.iapi.sql.dictionary.DataDictionary;
027: import org.apache.derby.iapi.error.StandardException;
028:
029: /**
030: * AccessPath represents a proposed access path for an Optimizable.
031: * An Optimizable may have more than one proposed AccessPath.
032: */
033:
034: public interface AccessPath {
035: /**
036: * Set the conglomerate descriptor for this access path.
037: *
038: * @param cd A ConglomerateDescriptor
039: */
040: void setConglomerateDescriptor(ConglomerateDescriptor cd);
041:
042: /**
043: * Get whatever was last set as the conglomerate descriptor.
044: * Returns null if nothing was set since the last call to startOptimizing()
045: */
046: ConglomerateDescriptor getConglomerateDescriptor();
047:
048: /**
049: * Set the given cost estimate in this AccessPath. Generally, this will
050: * be the CostEstimate for the plan currently under consideration.
051: */
052: public void setCostEstimate(CostEstimate costEstimate);
053:
054: /**
055: * Get the cost estimate for this AccessPath. This is the last one
056: * set by setCostEstimate.
057: */
058: public CostEstimate getCostEstimate();
059:
060: /**
061: * Set whether or not to consider a covering index scan on the optimizable.
062: */
063: public void setCoveringIndexScan(boolean coveringIndexScan);
064:
065: /**
066: * Return whether or not the optimizer is considering a covering index
067: * scan on this AccessPath.
068: *
069: * @return boolean Whether or not the optimizer chose a covering
070: * index scan.
071: */
072: public boolean getCoveringIndexScan();
073:
074: /**
075: * Set whether or not to consider a non-matching index scan on this
076: * AccessPath.
077: */
078: public void setNonMatchingIndexScan(boolean nonMatchingIndexScan);
079:
080: /**
081: * Return whether or not the optimizer is considering a non-matching
082: * index scan on this AccessPath. We expect to call this during
083: * generation, after access path selection is complete.
084: *
085: * @return boolean Whether or not the optimizer is considering
086: * a non-matching index scan.
087: */
088: public boolean getNonMatchingIndexScan();
089:
090: /**
091: * Remember the given join strategy
092: *
093: * @param joinStrategy The best join strategy
094: */
095: public void setJoinStrategy(JoinStrategy joinStrategy);
096:
097: /**
098: * Get the join strategy, as set by setJoinStrategy().
099: */
100: public JoinStrategy getJoinStrategy();
101:
102: /**
103: * Set the lock mode
104: */
105: public void setLockMode(int lockMode);
106:
107: /**
108: * Get the lock mode, as last set in setLockMode().
109: */
110: public int getLockMode();
111:
112: /**
113: * Copy all information from the given AccessPath to this one.
114: */
115: public void copy(AccessPath copyFrom);
116:
117: /**
118: * Get the optimizer associated with this access path.
119: *
120: * @return The optimizer associated with this access path.
121: */
122: public Optimizer getOptimizer();
123:
124: /**
125: * Sets the "name" of the access path. if the access path represents an
126: * index then set the name to the name of the index. if it is an index
127: * created for a constraint, use the constraint name. This is called only
128: * for base tables.
129: *
130: * @param td TableDescriptor of the base table.
131: * @param dd Datadictionary.
132: *
133: * @exception StandardException on error.
134: */
135: public void initializeAccessPathName(DataDictionary dd,
136: TableDescriptor td) throws StandardException;
137: }
|