| Modifier and Type | Field and Description |
|---|---|
| public static final int | |
| public static final int | |
| public static final int |
| Modifier and Type | Method and Description |
|---|---|
| public void | addOrderedColumn(int
One of ASCENDING, DESCENDING, or DONTCARE.
DONTCARE can be used for things like columns
with constant value, and for one-row tables. direction, int The table the column is in. tableNumber, int The column number in the table (one-based) columnNumber)Add a column to this RowOrdering in the current order position. |
| public void | |
| public boolean | |
| public void | columnAlwaysOrdered(Optimizable
The table in question optimizable, int The number of the column in question. columnNumber)Tell this RowOrdering that it is always ordered on the given column of the given optimizable. |
| public void | |
| public boolean | Returns: true means this column is always orderedThe table in question tableNumber, int The number of the column in question. columnNumber)Return true if the column is always ordered. |
| public void | nextOrderPosition(int
One of ASCENDING, DESCENDING, or DONTCARE.
DONTCARE can be used for things like columns
with constant value, and for one-row tables. direction)Move to the next order position for adding ordered columns. |
| public void | optimizableAlwaysOrdered(Optimizable
The table in question 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. |
| public boolean | Returns: true means this ordering is ordered on the given column in the given position.One of ASCENDING, DESCENDING, or DONTCARE
depending on the requirements of the caller.
An ORDER BY clause cares about direction,
while DISTINCT and GROUP BY do not. direction, int 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 an
ordering, more than one column can be in a single
ordering position: for example, in the query
SELECT * FROM S, T WHERE S.A = T.B ORDER BY T.B
columns S.A and T.B will be in the same ordering
positions because they are equal. Also, constant
values are considered ordered in all positions
(consider SELECT A FROM T WHERE A = 1 ORDER BY A). orderPosition, int The table number of the Optimizable containing
the column in question tableNumber, int The column number in the table (one-based). columnNumber)Tell whether this ordering is ordered on the given column in the given position |
| public boolean | Returns: true means this ordering is ordered on the given column in the given position.One of ASCENDING, DESCENDING, or DONTCARE
depending on the requirements of the caller.
An ORDER BY clause cares about direction,
while DISTINCT and GROUP BY do not. direction, int The table number of the Optimizable containing
the column in question tableNumber, int The column number in the table (one-based). columnNumber)Tell whether this ordering is ordered on the given column. |
| public void | removeOptimizable(int
The number of the table to remove from
this RowOrdering. tableNumber)Tell this row ordering that it is no longer ordered on the given table. |
| ASCENDING | back to summary |
|---|---|
| public static final int ASCENDING | |
| DESCENDING | back to summary |
|---|---|
| public static final int DESCENDING | |
| DONTCARE | back to summary |
|---|---|
| public static final int DONTCARE | |
| addOrderedColumn | back to summary |
|---|---|
| public void addOrderedColumn(int direction, int tableNumber, int columnNumber) 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).
| |
| addUnorderedOptimizable | back to summary |
|---|---|
| public void addUnorderedOptimizable(Optimizable optimizable) 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 | back to summary |
|---|---|
| public boolean alwaysOrdered(int tableNumber) Ask whether the given table is always ordered. | |
| columnAlwaysOrdered | back to summary |
|---|---|
| public void columnAlwaysOrdered(Optimizable optimizable, int columnNumber) 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 or it is involved in a equijoin with an optimizable which is always ordered on the column on which the equijoin is happening. This is reset when the optimizable is removed from this RowOrdering.
| |
| copy | back to summary |
|---|---|
| public void copy(RowOrdering copyTo) Copy the contents of this RowOrdering to the given RowOrdering. | |
| isColumnAlwaysOrdered | back to summary |
|---|---|
| public boolean isColumnAlwaysOrdered(int tableNumber, int columnNumber) Return true if the column is always ordered. That will be true if the column has a constant comparison predicate on it or it is involved in a equijoin with an optimizable which is always ordered on the column on which the equijoin is happening.
| |
| nextOrderPosition | back to summary |
|---|---|
| public void nextOrderPosition(int direction) 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).
| |
| optimizableAlwaysOrdered | back to summary |
|---|---|
| public 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.
| |
| orderedOnColumn | back to summary |
|---|---|
| public boolean orderedOnColumn(int direction, int orderPosition, int tableNumber, int columnNumber) throws StandardException Tell whether this ordering is ordered on the given column in the given position
| |
| orderedOnColumn | back to summary |
|---|---|
| public boolean orderedOnColumn(int direction, int tableNumber, int columnNumber) throws StandardException 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.
| |
| removeOptimizable | back to summary |
|---|---|
| public void removeOptimizable(int tableNumber) 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.
| |