001: /*
002:
003: Derby - Class org.apache.derby.catalog.IndexDescriptor
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.catalog;
023:
024: /**
025: *
026: * This interface describes an index.
027: *
028: * It is used in the column SYS.SYSCONGLOMERATES.DESCRIPTOR
029: * and describes everything about an index except the index name and
030: * the table on which the index is defined.
031: * That information is available
032: * in the columns NAME and TABLEID of the table SYS.SYSCONGLOMERATES.
033: */
034: public interface IndexDescriptor {
035: /**
036: * Returns true if the index is unique.
037: */
038: boolean isUnique();
039:
040: /**
041: * Returns an array of column positions in the base table. Each index
042: * column corresponds to a column position in the base table, except
043: * the column representing the location of the row in the base table.
044: * The returned array holds the column positions in the
045: * base table, so, if entry 2 is the number 4, the second
046: * column in the index is the fourth column in the table.
047: */
048: public int[] baseColumnPositions();
049:
050: /**
051: * Returns the postion of a column.
052: * <p>
053: * Returns the position of a column within the key (1-based).
054: * 0 means that the column is not in the key.
055: */
056: public Integer getKeyColumnPosition(Integer heapColumnPosition);
057:
058: /**
059: * Returns the postion of a column.
060: * <p>
061: * Returns the position of a column within the key (1-based).
062: * 0 means that the column is not in the key. Same as the above
063: * method, but it uses int instead of Integer.
064: */
065: public int getKeyColumnPosition(int heapColumnPosition);
066:
067: /**
068: * Returns the number of ordered columns.
069: * <p>
070: * In the future, it will be
071: * possible to store non-ordered columns in an index. These will be
072: * useful for covered queries. The ordered columns will be at the
073: * beginning of the index row, and they will be followed by the
074: * non-ordered columns.
075: *
076: * For now, all columns in an index must be ordered.
077: */
078: int numberOfOrderedColumns();
079:
080: /**
081: * Returns the type of the index. For now, we only support B-Trees,
082: * so the value "BTREE" is returned.
083: */
084: String indexType();
085:
086: /**
087: * Returns array of boolean telling asc/desc info for each index
088: * key column for convenience of using together with baseColumnPositions
089: * method. Both methods return an array with subscript starting from 0.
090: */
091: public boolean[] isAscending();
092:
093: /**
094: * Returns true if the specified column is ascending in the index
095: * (1-based).
096: */
097: boolean isAscending(Integer keyColumnPosition);
098:
099: /**
100: * Returns true if the specified column is descending in the index
101: * (1-based). In the current release, only ascending columns are
102: * supported.
103: */
104: boolean isDescending(Integer keyColumnPosition);
105:
106: /**
107: * set the baseColumnPositions field of the index descriptor. This
108: * is for updating the field in operations such as "alter table drop
109: * column" where baseColumnPositions is changed.
110: */
111: public void setBaseColumnPositions(int[] baseColumnPositions);
112:
113: /**
114: * set the isAscending field of the index descriptor. This
115: * is for updating the field in operations such as "alter table drop
116: * column" where isAscending is changed.
117: */
118: public void setIsAscending(boolean[] isAscending);
119:
120: /**
121: * set the numberOfOrderedColumns field of the index descriptor. This
122: * is for updating the field in operations such as "alter table drop
123: * column" where numberOfOrderedColumns is changed.
124: */
125: public void setNumberOfOrderedColumns(int numberOfOrderedColumns);
126: }
|