| org.apache.derby.iapi.sql.compile.RowOrdering
All known Subclasses: org.apache.derby.impl.sql.compile.RowOrderingImpl,
RowOrdering | public interface RowOrdering (Code) | | This interface provides a representation of the ordering of rows in a
ResultSet.
|
Method Summary | |
void | addOrderedColumn(int direction, int tableNumber, int columnNumber) Add a column to this RowOrdering in the current order position. | void | addUnorderedOptimizable(Optimizable optimizable) Add an unordered optimizable to this RowOrdering. | boolean | alwaysOrdered(int tableNumber) Ask whether the given table is always ordered. | void | columnAlwaysOrdered(Optimizable optimizable, int columnNumber) Tell this RowOrdering that it is always ordered on the given column
of the given optimizable. | void | copy(RowOrdering copyTo) Copy the contents of this RowOrdering to the given RowOrdering. | void | nextOrderPosition(int direction) Move to the next order position for adding ordered columns. | void | optimizableAlwaysOrdered(Optimizable optimizable) Tell this RowOrdering that it is always ordered on the given optimizable
This is useful when considering a unique index where there is an
equality match on the entire key - in this case, all the columns
are ordered, regardless of the direction or position,
or even whether the columns are in the index. | boolean | orderedOnColumn(int direction, int orderPosition, int tableNumber, int columnNumber) Tell whether this ordering is ordered on the given column in
the given position
Parameters: direction - One of ASCENDING, DESCENDING, or DONTCAREdepending on the requirements of the caller.An ORDER BY clause cares about direction,while DISTINCT and GROUP BY do not. Parameters: orderPosition - The position in the ordering list. | boolean | orderedOnColumn(int direction, int tableNumber, int columnNumber) Tell whether this ordering is ordered on the given column. | void | removeOptimizable(int tableNumber) Tell this row ordering that it is no longer ordered on the given
table. |
ASCENDING | final static int ASCENDING(Code) | | |
DESCENDING | final static int DESCENDING(Code) | | |
DONTCARE | final static int DONTCARE(Code) | | |
addOrderedColumn | void addOrderedColumn(int direction, int tableNumber, int columnNumber)(Code) | | Add a column to this RowOrdering in the current order position.
This is a no-op if there are any unordered optimizables in the
join order (see below).
Parameters: direction - One of ASCENDING, DESCENDING, or DONTCARE.DONTCARE can be used for things like columnswith constant value, and for one-row tables. Parameters: tableNumber - The table the column is in. Parameters: columnNumber - The column number in the table (one-based) |
addUnorderedOptimizable | void addUnorderedOptimizable(Optimizable optimizable)(Code) | | Add an unordered optimizable to this RowOrdering. This is to
solve the following problem:
Suppose we have the query:
select * from r, s, t order by r.a, t.b
Also suppose there are indexes on r.a and t.b. When the
optimizer considers the join order (r, s, t) using the index
on r.a, the heap on s, and the index on t.b, the rows from the
join order will *NOT* be ordered on t.b, because there is an
unordered result set between r and t. So, when s is added to
the partial join order, and we then add table t to the join order,
we want to ensure that we don't add column t.b to the RowOrdering.
|
alwaysOrdered | boolean alwaysOrdered(int tableNumber)(Code) | | Ask whether the given table is always ordered.
|
columnAlwaysOrdered | void columnAlwaysOrdered(Optimizable optimizable, int columnNumber)(Code) | | Tell this RowOrdering that it is always ordered on the given column
of the given optimizable. This is useful when a column in the
optimizable has an equals comparison with a constant expression.
This is reset when the optimizable is removed from this RowOrdering.
Parameters: optimizable - The table in question Parameters: columnNumber - The number of the column in question. |
copy | void copy(RowOrdering copyTo)(Code) | | Copy the contents of this RowOrdering to the given RowOrdering.
|
nextOrderPosition | void nextOrderPosition(int direction)(Code) | | Move to the next order position for adding ordered columns.
This is a no-op if there are any unordered optimizables in the
join order (see below).
Parameters: direction - One of ASCENDING, DESCENDING, or DONTCARE.DONTCARE can be used for things like columnswith constant value, and for one-row tables. |
optimizableAlwaysOrdered | void optimizableAlwaysOrdered(Optimizable optimizable)(Code) | | Tell this RowOrdering that it is always ordered on the given optimizable
This is useful when considering a unique index where there is an
equality match on the entire key - in this case, all the columns
are ordered, regardless of the direction or position,
or even whether the columns are in the index.
Parameters: optimizable - The table in question |
orderedOnColumn | boolean orderedOnColumn(int direction, int orderPosition, int tableNumber, int columnNumber) throws StandardException(Code) | | Tell whether this ordering is ordered on the given column in
the given position
Parameters: direction - One of ASCENDING, DESCENDING, or DONTCAREdepending on the requirements of the caller.An ORDER BY clause cares about direction,while DISTINCT and GROUP BY do not. Parameters: orderPosition - The position in the ordering list. For example,for ORDER BY A, B, position 0 has column A,and position 1 has column B. Note that for anordering, more than one column can be in a singleordering position: for example, in the querySELECT * FROM S, T WHERE S.A = T.B ORDER BY T.Bcolumns S.A and T.B will be in the same orderingpositions because they are equal. Also, constantvalues are considered ordered in all positions(consider SELECT A FROM T WHERE A = 1 ORDER BY A). Parameters: tableNumber - The table number of the Optimizable containingthe column in question Parameters: columnNumber - The column number in the table (one-based). true means this ordering is ordered on the given columnin the given position. exception: StandardException - Thrown on error |
orderedOnColumn | boolean orderedOnColumn(int direction, int tableNumber, int columnNumber) throws StandardException(Code) | | Tell whether this ordering is ordered on the given column.
This is similar to the method above, but it checks whether the
column is ordered in any position, rather than a specified position.
This is useful for operations like DISTINCT and GROUP BY.
Parameters: direction - One of ASCENDING, DESCENDING, or DONTCAREdepending on the requirements of the caller.An ORDER BY clause cares about direction,while DISTINCT and GROUP BY do not. Parameters: tableNumber - The table number of the Optimizable containingthe column in question Parameters: columnNumber - The column number in the table (one-based). true means this ordering is ordered on the given columnin the given position. exception: StandardException - Thrown on error |
removeOptimizable | void removeOptimizable(int tableNumber)(Code) | | Tell this row ordering that it is no longer ordered on the given
table. Also, adjust the current order position, if necessary.
This only works to remove ordered columns from the end of the
ordering.
Parameters: tableNumber - The number of the table to remove from this RowOrdering. |
|
|