001: /*
002:
003: Derby - Class org.apache.derby.iapi.sql.compile.OptimizableList
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.error.StandardException;
025:
026: import org.apache.derby.iapi.sql.dictionary.DataDictionary;
027:
028: /**
029: * OptimizableList provides services for optimizing a list of
030: * Optimizables (tables) in a query.
031: */
032:
033: public interface OptimizableList {
034:
035: /**
036: * Return the number of Optimizables in the list.
037: *
038: * @return integer The number of Optimizables in the list.
039: */
040: public int size();
041:
042: /**
043: * Return the nth Optimizable in the list.
044: *
045: * @param n "index" (0 based) into the list.
046: *
047: * @return Optimizable The nth Optimizables in the list.
048: */
049: public Optimizable getOptimizable(int n);
050:
051: /**
052: * Set the nth Optimizable to the specified Optimizable.
053: *
054: * @param n "index" (0 based) into the list.
055: * @param optimizable New nth Optimizable.
056: */
057: public void setOptimizable(int n, Optimizable optimizable);
058:
059: /**
060: * Verify that the Properties list with optimizer overrides, if specified, is valid
061: *
062: * @param dDictionary The DataDictionary to use.
063: *
064: * @exception StandardException Thrown on error
065: */
066: public void verifyProperties(DataDictionary dDictionary)
067: throws StandardException;
068:
069: /**
070: * Set the join order for this list of optimizables. The join order is
071: * represented as an array of integers - each entry in the array stands
072: * for the order of the corresponding element in the list. For example,
073: * a joinOrder of {2, 0, 1} means that the 3rd Optimizable in the list
074: * (element 2, since we are zero-based) is the first one in the join
075: * order, followed by the 1st element in the list, and finally by the
076: * 2nd element in the list.
077: *
078: * This method shuffles this OptimizableList to match the join order.
079: *
080: * Obviously, the size of the array must equal the number of elements in
081: * the array, and the values in the array must be between 0 and the
082: * number of elements in the array minus 1, and the values in the array
083: * must be unique.
084: */
085: public void reOrder(int[] joinOrder);
086:
087: /**
088: * user can specify that s/he doesn't want statistics to be considered when
089: * optimizing the query.
090: */
091: public boolean useStatistics();
092:
093: /**
094: * Tell whether the join order should be optimized.
095: */
096: public boolean optimizeJoinOrder();
097:
098: /**
099: * Tell whether the join order is legal.
100: */
101: public boolean legalJoinOrder(int numTablesInQuery);
102:
103: /**
104: * Init the access paths for these optimizables.
105: *
106: * @param optimizer The optimizer being used.
107: */
108: public void initAccessPaths(Optimizer optimizer);
109: }
|