001 /*
002 * JBoss DNA (http://www.jboss.org/dna)
003 * See the COPYRIGHT.txt file distributed with this work for information
004 * regarding copyright ownership. Some portions may be licensed
005 * to Red Hat, Inc. under one or more contributor license agreements.
006 * See the AUTHORS.txt file in the distribution for a full listing of
007 * individual contributors.
008 *
009 * JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA
010 * is licensed to you under the terms of the GNU Lesser General Public License as
011 * published by the Free Software Foundation; either version 2.1 of
012 * the License, or (at your option) any later version.
013 *
014 * JBoss DNA is distributed in the hope that it will be useful,
015 * but WITHOUT ANY WARRANTY; without even the implied warranty of
016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
017 * Lesser General Public License for more details.
018 *
019 * You should have received a copy of the GNU Lesser General Public
020 * License along with this software; if not, write to the Free
021 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
022 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
023 */
024 package org.jboss.dna.common.jdbc.model.api;
025
026 import java.util.Set;
027
028 /**
029 * Provides all core database table specific metadata.
030 *
031 * @author <a href="mailto:litsenko_sergey@yahoo.com">Sergiy Litsenko</a>
032 */
033 public interface Table extends SchemaObject {
034
035 /**
036 * Returns type of table such as: "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
037 *
038 * @return type of table.
039 */
040 TableType getTableType();
041
042 /**
043 * Sets type of table such as: "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
044 *
045 * @param tableType the type of table.
046 */
047 void setTableType( TableType tableType );
048
049 /**
050 * Gets type catalog
051 *
052 * @return types catalog (may be <code>null</code>)
053 */
054 Catalog getTypeCatalog();
055
056 /**
057 * Sets type catalog
058 *
059 * @param typeCatalog the types catalog (may be <code>null</code>)
060 */
061 void setTypeCatalog( Catalog typeCatalog );
062
063 /**
064 * Gets type schema
065 *
066 * @return types schema (may be <code>null</code>)
067 */
068 Schema getTypeSchema();
069
070 /**
071 * Sets type schema
072 *
073 * @param typeSchema the types schema (may be <code>null</code>)
074 */
075 void setTypeSchema( Schema typeSchema );
076
077 /**
078 * Gets type name
079 *
080 * @return types name (may be <code>null</code>)
081 */
082 String getTypeName();
083
084 /**
085 * Sets type name
086 *
087 * @param typeName types name (may be <code>null</code>)
088 */
089 void setTypeName( String typeName );
090
091 /**
092 * Gets name of the designated "identifier" column of a typed table (may be <code>null</code>)
093 *
094 * @return name of the designated "identifier" column of a typed table (may be <code>null</code>)
095 */
096 String getSelfReferencingColumnName();
097
098 /**
099 * Sets name of the designated "identifier" column of a typed table (may be <code>null</code>)
100 *
101 * @param selfReferencingColumnName the name of the designated "identifier" column of a typed table (may be <code>null</code>)
102 */
103 void setSelfReferencingColumnName( String selfReferencingColumnName );
104
105 /**
106 * specifies how values in getSelfReferencingColumnName () are created. Values are "SYSTEM", "USER", "DERIVED". (may be
107 * <code>null</code>)
108 *
109 * @return how values in getSelfReferencingColumnName () are created.
110 */
111 String getReferenceGeneration();
112
113 /**
114 * specifies how values in getSelfReferencingColumnName () are created. Values are "SYSTEM", "USER", "DERIVED". (may be
115 * <code>null</code>)
116 *
117 * @param referenceGeneration how values in getSelfReferencingColumnName () are created.
118 */
119 void setReferenceGeneration( String referenceGeneration );
120
121 /**
122 * Gets a set of table columns
123 *
124 * @return a set of table columns.
125 */
126 Set<TableColumn> getColumns();
127
128 /**
129 * Adds TableColumn
130 *
131 * @param column the TableColumn
132 */
133 void addColumn( TableColumn column );
134
135 /**
136 * deletes TableColumn
137 *
138 * @param column the TableColumn
139 */
140 void deleteColumn( TableColumn column );
141
142 /**
143 * Returns table column for specified column name or null
144 *
145 * @param columnName the name of column
146 * @return table column for specified column name or null.
147 */
148 TableColumn findColumnByName( String columnName );
149
150 /**
151 * Gets a table primary key
152 *
153 * @return a table primary key.
154 */
155 PrimaryKey getPrimaryKey();
156
157 /**
158 * Sets a table primary key
159 *
160 * @param primaryKey the table primary key.
161 */
162 void setPrimaryKey( PrimaryKey primaryKey );
163
164 /**
165 * Gets a set of table foreign key columns
166 *
167 * @return a set of table foreign keys.
168 */
169 Set<ForeignKey> getForeignKeys();
170
171 /**
172 * adds ForeignKey
173 *
174 * @param foreignKey the ForeignKey
175 */
176 void addForeignKey( ForeignKey foreignKey );
177
178 /**
179 * deletes ForeignKey
180 *
181 * @param foreignKey the ForeignKey
182 */
183 void deleteForeignKey( ForeignKey foreignKey );
184
185 /**
186 * Returns table foreign key for specified name or null
187 *
188 * @param fkName the name of foreign key
189 * @return table foreign key for specified name or null.
190 */
191 ForeignKey findForeignKeyByName( String fkName );
192
193 /**
194 * Gets a set of table indexes
195 *
196 * @return a set of table indexes.
197 */
198 Set<Index> getIndexes();
199
200 /**
201 * adds Index
202 *
203 * @param index the Index
204 */
205 void addIndex( Index index );
206
207 /**
208 * deletes Index
209 *
210 * @param index the Index
211 */
212 void deleteIndex( Index index );
213
214 /**
215 * Returns table index for specified name or null
216 *
217 * @param indexName the name of index
218 * @return table index for specified name or null.
219 */
220 Index findIndexByName( String indexName );
221
222 /**
223 * Gets a set of table version columns
224 *
225 * @return a set of table version columns.
226 */
227 Set<TableColumn> getVersionColumns();
228
229 /**
230 * adds version column
231 *
232 * @param tableColumn the TableColumn
233 */
234 void addVersionColumn( TableColumn tableColumn );
235
236 /**
237 * deletes version column
238 *
239 * @param tableColumn the version column
240 */
241 void deleteVersionColumn( TableColumn tableColumn );
242
243 /**
244 * Returns table version column for specified name or null
245 *
246 * @param columnName the name of Version Column
247 * @return table Version Column for specified name or null.
248 */
249 TableColumn findVersionColumnByName( String columnName );
250
251 /**
252 * Gets table privileges.
253 *
254 * @return set of table privileges
255 */
256 Set<Privilege> getPrivileges();
257
258 /**
259 * Adds table priviledge
260 *
261 * @param privilege the table priviledge
262 */
263 void addPrivilege( Privilege privilege );
264
265 /**
266 * Deletes table priviledge
267 *
268 * @param privilege the table priviledge
269 */
270 void deletePrivilege( Privilege privilege );
271
272 /**
273 * Searches priviledge by name
274 *
275 * @param priviledgeName the priviledge name to search
276 * @return priviledge if found, otherwise return null
277 */
278 Privilege findPriviledgeByName( String priviledgeName );
279
280 /**
281 * Retrieves a set of descriptions of a table's optimal set of columns that uniquely identifies a row in temporary scopes.
282 *
283 * @return BestRowIdentifier set that uniquely identifies a row in scopes.
284 */
285 Set<BestRowIdentifier> getBestRowIdentifiers();
286
287 /**
288 * Adds BestRowIdentifier
289 *
290 * @param bestRowIdentifier the BestRowIdentifier
291 */
292 void addBestRowIdentifier( BestRowIdentifier bestRowIdentifier );
293
294 /**
295 * deletes BestRowIdentifier
296 *
297 * @param bestRowIdentifier the BestRowIdentifier
298 */
299 void deleteBestRowIdentifier( BestRowIdentifier bestRowIdentifier );
300
301 /**
302 * Searches the BestRowIdentifier by scope
303 *
304 * @param scopeType the scope of best row identifier
305 * @return BestRowIdentifier if any
306 */
307 BestRowIdentifier findBestRowIdentifierByScopeType( BestRowIdentifierScopeType scopeType );
308
309 // ===============================================================
310 // ------------------- JDBC 3.0 ---------------------------------
311 // ===============================================================
312
313 /**
314 * Retrieves a description of the table hierarchies defined in a particular schema in this database. Only the immediate super
315 * type/ sub type relationship is modeled.
316 *
317 * @return super table for this table
318 * @since 1.4 (JDBC 3.0)
319 */
320 Table getSuperTable();
321
322 /**
323 * Sets a description of the table hierarchies defined in a particular schema in this database. Only the immediate super type/
324 * sub type relationship is modeled.
325 *
326 * @param superTable the super table for this table
327 * @since 1.4 (JDBC 3.0)
328 */
329 void setSuperTable( Table superTable );
330 }