blob: e94380b5336cba826f781b5cc8bf33327a86de37 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2011 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0, which accompanies this distribution
* and is available at http://www.eclipse.org/legal/epl-v10.html.
*
* Contributors:
* Oracle - initial API and implementation
******************************************************************************/
package org.eclipse.jpt.jpa.db.internal.driver;
import java.util.List;
import org.eclipse.jpt.jpa.db.Catalog;
import org.eclipse.jpt.jpa.db.Column;
import org.eclipse.jpt.jpa.db.Schema;
import org.eclipse.jpt.jpa.db.Sequence;
import org.eclipse.jpt.jpa.db.Table;
/**
* Delegate DTP driver-specific behavior to implementations of this
* interface:<ul>
* <li>catalogs/schemas
* <li>names/identifiers
* <li>database object selection
* </ul>
* <strong>NB:</strong><br>
* We use <em>name</em> when dealing with the unmodified name of a database
* object as supplied by the database itself (i.e. it is not delimited and it is
* always case-sensitive).
* <br>
* We use <em>identifier</em> when dealing with a string representation of a
* database object name (i.e. it may be delimited and, depending on the database,
* it may be case-insensitive).
*/
public interface DTPDriverAdapter {
// ********** catalogs **********
/**
* Return whether the DTP driver supports "real" catalogs (e.g. Sybase).
* If it does, use {@link #getDTPCatalogs()} to retrieve them;
* otherwise, use {@link #getDTPSchemas()} to retrieve the schemas directly.
*/
boolean supportsCatalogs();
/**
* Return the DTP database's catalogs.
* This will be empty if the database does not support catalogs.
* @see #supportsCatalogs()
*/
List<org.eclipse.datatools.modelbase.sql.schema.Catalog> getDTPCatalogs();
/**
* Return the DTP database's default catalog names.
* The first name in the list that identifies an existing catalog
* is <em>the</em> default.
* This will be empty if the database does not support catalogs.
*/
Iterable<String> getDefaultCatalogNames();
// ********** schemas **********
/**
* Return the DTP database's schemas.
* This will be empty if the database supports catalogs.
* @see #supportsCatalogs()
*/
List<org.eclipse.datatools.modelbase.sql.schema.Schema> getDTPSchemas();
/**
* Return the DTP database's default schema names.
* The first name in the list that identifies an existing schema
* is <em>the</em> default.
*/
Iterable<String> getDefaultSchemaNames();
// ********** names/identifiers **********
/**
* Convert the specified database object name to a database-specific
* identifier (i.e. delimit the name as appropriate).
*/
String convertNameToIdentifier(String name);
/**
* Convert the specified database object name to a database-specific
* identifier (i.e. delimit the name as appropriate).
* Return <code>null</code> if the resulting identifier matches the
* specified default name.
* <p>
* This is used by entity generation code to determine whether
* a generated annotation must explicitly identify a database object
* (e.g. a table) or the specified default adequately identifies the
* specified database object (taking into consideration case-sensitivity,
* special characters, etc.).
*/
String convertNameToIdentifier(String name, String defaultName);
/**
* Convert the specified database object identifier to a database-specific
* name (i.e. stripping delimiters from and folding the identifier as
* appropriate).
*/
String convertIdentifierToName(String identifier);
// ********** selecting database objects **********
/**
* Select from the specified collection the catalog for the specified
* identifier.
*/
Catalog selectCatalogForIdentifier(Iterable<Catalog> catalogs, String identifier);
/**
* Select from the specified collection the schema for the specified
* identifier.
*/
Schema selectSchemaForIdentifier(Iterable<Schema> schemata, String identifier);
/**
* Select from the specified collection the table for the specified
* identifier.
*/
Table selectTableForIdentifier(Iterable<Table> tables, String identifier);
/**
* Select from the specified collection the sequence for the specified
* identifier.
*/
Sequence selectSequenceForIdentifier(Iterable<Sequence> sequences, String identifier);
/**
* Select from the specified collection the column for the specified
* identifier.
*/
Column selectColumnForIdentifier(Iterable<Column> columns, String identifier);
}