Class SchemaManager
- Direct Known Subclasses:
DynamicSchemaManager
Purpose: Define all user level protocol for development time database manipulation.
Responsibilities:
- Define protocol for schema creation.
- Define any useful testing specific protocol.
-
Field Summary
Modifier and TypeFieldDescriptionprotected boolean
Flag to determine if database schemas should be created during DDL generationprotected Writer
protected boolean
protected TableCreator
protected HashMap
<String, DatabaseObjectDefinition> protected Writer
static boolean
Allow table creator to occur "fast" by just deleting all the rows.static boolean
Allow replacing of table to force the drop, this may require several passes.protected DatabaseSessionImpl
-
Constructor Summary
ConstructorDescriptionSchemaManager
(DatabaseSessionImpl session) SchemaManager
(DatabaseSession session) -
Method Summary
Modifier and TypeMethodDescriptionvoid
alterSequence
(SequenceDefinition sequenceDefinition) Use the definition to alter sequence.void
appendToDDLWriter
(Writer schemaWriter, String stringToWrite) void
appendToDDLWriter
(String stringToWrite) PUBLIC: If the schema manager is writing to a writer, append this string to that writer.void
buildFieldTypes
(TableDefinition tableDef) INTERNAL: builds the field names based on the type read in from the builderprotected SequenceDefinition
buildSequenceDefinition
(Sequence sequence) protected Set
<SequenceDefinition> INTERNAL: Build the sequence definitions.boolean
checkTableExists
(TableDefinition table) Check if the table exists by issuing a query.boolean
checkTableExists
(TableDefinition table, boolean suppressLogging) Check if the table exists by issuing a query.void
PUBLIC: Close the schema writer.void
closeDDLWriter
(Writer schemaWriter) protected void
collectDatabaseSchemasForDrop
(DatabaseObjectDefinition databaseObjectDefinition) INTERNAL: Called when dropping tables.void
createConstraints
(TableDefinition tableDefinition) Use the table definition to add the constraints to the database, this is normally done in two steps to avoid dependencies.void
createDefaultTables
(boolean generateFKConstraints) Create the default table schema for the project this session associated with.void
createObject
(DatabaseObjectDefinition databaseObjectDefinition) Use the definition object to create the schema entity on the database.protected void
createOrReplaceSequences
(boolean create) Common implementor for createSequence and replaceSequenceprotected void
createOrReplaceSequences
(boolean createSequenceTables, boolean createSequences) Common implementor for createSequence and replaceSequence, distinguishes between sequence tables and sequence objectsvoid
Create all the receiver's sequences on the database for all of the loaded descriptors.void
dropConstraints
(TableDefinition tableDefinition) Use the table definition to drop the constraints from the table, this is normally done in two steps to avoid dependencies.void
INTERNAL: Iterate over the schemas that need to be dropped.void
Create the default table schema for the project this session associated with.void
dropObject
(DatabaseObjectDefinition databaseObjectDefinition) Use the definition object to drop the schema entity from the database.protected void
This will drop the database schemas if managing the database schemas.void
Drop (delete) the table named tableName from the database.void
extendDefaultTables
(boolean generateFKConstraints) Create or extend the default table schema for the project this session associated with.void
finalize()
INTERNAL: Close the schema writer when the schema manger is garbage collectedvoid
PUBLIC: Use this method to generate stored procedures based on the dynamic SQL generated for your mappings and descriptors.void
generateStoredProcedures
(Writer writer) PUBLIC: Use this method to generate stored procedures based on the dynamic SQL generated for your mappings and descriptors.void
generateStoredProceduresAndAmendmentClass
(Writer writer, String fullyQualifiedClassName) PUBLIC: Use this method to generate stored procedures based on the dynamic SQL generated for your mappings and descriptors.void
generateStoredProceduresAndAmendmentClass
(String path, String fullyQualifiedClassName) PUBLIC: Use this method to generate stored procedures based on the dynamic SQL generated for your mappings and descriptors.protected DatabaseAccessor
Return the appropriate accessor.getAllColumnNames
(String tableName) Get a description of table columns available in a catalog.getAllColumnNames
(String creatorName, String tableName) Get a description of table columns available in a catalog.Get a description of tables available in a catalog.getAllTableNames
(String creatorName) Get a description of table columns available in a catalog.getColumnInfo
(String tableName, String columnName) getColumnInfo
(String catalog, String schema, String tableName, String columnName) Get a description of table columns available in a catalog.protected TableCreator
getDefaultTableCreator
(boolean generateFKConstraints) Construct the default TableCreator.protected Writer
getTableInfo
(String catalog, String schema, String tableName, String[] types) Get a description of tables available in a catalog.protected Writer
void
outputCreateDDLToFile
(String fileName) void
outputCreateDDLToWriter
(Writer createWriter) void
PUBLIC: Output all DDL statements directly to the database.void
outputDDLToFile
(String fileName) PUBLIC: Output all DDL statements to a file writer specified by the name in the parameter.void
outputDDLToWriter
(Writer schemaWriter) PUBLIC: Output all DDL statements to a writer specified in the parameter.void
outputDropDDLToFile
(String fileName) void
outputDropDDLToWriter
(Writer dropWriter) protected void
processSequenceDefinition
(SequenceDefinition definition, boolean createTables, boolean createSequences, boolean replace, Set<String> createdTableNames, Set<String> droppedTableNames) Method creates database tables/objects.protected void
processSequenceDefinitions
(boolean createSequenceTables, boolean createSequences, boolean replaceSequences) Common implementor for createSequence and replaceSequence, distinguishes between sequence tables and sequence objectsvoid
Drop and recreate the default table schema for the project this session associated with.void
replaceDefaultTables
(boolean createSequenceTables, boolean generateFKConstraints) Drop and recreate the default table schema for the project this session associated with.void
replaceDefaultTables
(boolean createSequenceTables, boolean createSequences, boolean generateFKConstraints) Drop and recreate the default table schema for the project this session associated with.void
replaceObject
(DatabaseObjectDefinition databaseDefinition) Use the definition object to drop and recreate the schema entity on the database.void
Drop and recreate all the receiver's sequences on the database for all of the loaded descriptors.void
setCreateDatabaseSchemas
(boolean createDatabaseSchemas) INTERNAL: Set to true if database schemas should be built during the DDL generation.void
setCreateSQLFiles
(boolean genFlag) void
setSession
(DatabaseSessionImpl session) protected boolean
shouldCreateDatabaseSchema
(DatabaseObjectDefinition databaseObjectDefinition, Set<String> createdDatabaseSchemas) INTERNAL: Returns true if a database schema should be created during ddl generation for the given databaseObjectDefinition.boolean
PUBLIC: Return true if this SchemaManager should write to the database directly
-
Field Details
-
session
-
createSchemaWriter
-
dropSchemaWriter
-
createSQLFiles
protected boolean createSQLFiles -
defaultTableCreator
-
FAST_TABLE_CREATOR
public static boolean FAST_TABLE_CREATORAllow table creator to occur "fast" by just deleting all the rows. -
FORCE_DROP
public static boolean FORCE_DROPAllow replacing of table to force the drop, this may require several passes. -
createDatabaseSchemas
protected boolean createDatabaseSchemasFlag to determine if database schemas should be created during DDL generation -
createdDatabaseSchemas
-
createdDatabaseSchemasOnDatabase
-
dropDatabaseSchemas
-
-
Constructor Details
-
SchemaManager
-
SchemaManager
-
-
Method Details
-
getDropSchemaWriter
-
appendToDDLWriter
PUBLIC: If the schema manager is writing to a writer, append this string to that writer. -
appendToDDLWriter
-
buildFieldTypes
INTERNAL: builds the field names based on the type read in from the builder -
closeDDLWriter
public void closeDDLWriter()PUBLIC: Close the schema writer. -
closeDDLWriter
-
collectDatabaseSchemasForDrop
INTERNAL: Called when dropping tables. Will build a map of those schemas (and a table that references it) that should be dropped. -
createConstraints
Use the table definition to add the constraints to the database, this is normally done in two steps to avoid dependencies.- Throws:
EclipseLinkException
-
createObject
public void createObject(DatabaseObjectDefinition databaseObjectDefinition) throws EclipseLinkException Use the definition object to create the schema entity on the database. This is used for creating tables, views, procedures ... etc ...- Throws:
EclipseLinkException
-
createSequences
Create all the receiver's sequences on the database for all of the loaded descriptors.- Throws:
EclipseLinkException
-
setCreateDatabaseSchemas
public void setCreateDatabaseSchemas(boolean createDatabaseSchemas) INTERNAL: Set to true if database schemas should be built during the DDL generation. -
setCreateSQLFiles
public void setCreateSQLFiles(boolean genFlag) -
replaceSequences
Drop and recreate all the receiver's sequences on the database for all of the loaded descriptors.- Throws:
EclipseLinkException
-
createOrReplaceSequences
Common implementor for createSequence and replaceSequence- Parameters:
create
- - true to create the sequences, false to replace them (dropped then create)- Throws:
EclipseLinkException
-
createOrReplaceSequences
protected void createOrReplaceSequences(boolean createSequenceTables, boolean createSequences) throws EclipseLinkException Common implementor for createSequence and replaceSequence, distinguishes between sequence tables and sequence objects- Parameters:
createSequenceTables
- - true to create the sequences tables, false to replace them (dropped then create)createSequences
- - true to create the sequences objects, false to replace them (dropped then create)- Throws:
EclipseLinkException
-
dropSequences
protected void dropSequences()This will drop the database schemas if managing the database schemas. -
processSequenceDefinition
protected void processSequenceDefinition(SequenceDefinition definition, boolean createTables, boolean createSequences, boolean replace, Set<String> createdTableNames, Set<String> droppedTableNames) throws EclipseLinkException Method creates database tables/objects. If create is true, it will attempt to create the object and silently ignore exceptions. If create is false, it will drop the object ignoring any exceptions, then create it if the replace flag is true (otherwise a drop only).- Parameters:
definition
- - the sequence definitioncreateTables
- - true if table sequence table definitions should be created.createSequences
- - true if the sequence definition should be created, false if it should be dropped.replace
- - true if table definitions and sequence definitions should be replaced.- Throws:
EclipseLinkException
-
processSequenceDefinitions
protected void processSequenceDefinitions(boolean createSequenceTables, boolean createSequences, boolean replaceSequences) throws EclipseLinkException Common implementor for createSequence and replaceSequence, distinguishes between sequence tables and sequence objects- Parameters:
createSequenceTables
- - true to create the sequences tables, false to replace them (dropped then create)createSequences
- - true to create the sequences objects, false to replace them (dropped then create)replaceSequences
- - true to actually replace, false to drop only.- Throws:
EclipseLinkException
-
buildSequenceDefinitions
INTERNAL: Build the sequence definitions. -
checkTableExists
Check if the table exists by issuing a query.- Parameters:
table
- database table meta-datasuppressLogging
- whether to suppress logging during query execution- Returns:
- value of
true
if given table exists orfalse
otherwise
-
checkTableExists
Check if the table exists by issuing a query. Logging is suppressed during query execution.- Parameters:
table
- database table meta-data- Returns:
- value of
true
if given table exists orfalse
otherwise
-
buildSequenceDefinition
-
dropConstraints
Use the table definition to drop the constraints from the table, this is normally done in two steps to avoid dependencies.- Throws:
EclipseLinkException
-
dropObject
public void dropObject(DatabaseObjectDefinition databaseObjectDefinition) throws EclipseLinkException Use the definition object to drop the schema entity from the database. This is used for dropping tables, views, procedures ... etc ...- Throws:
EclipseLinkException
-
dropTable
Drop (delete) the table named tableName from the database.- Throws:
EclipseLinkException
-
finalize
public void finalize()INTERNAL: Close the schema writer when the schema manger is garbage collected -
generateStoredProcedures
PUBLIC: Use this method to generate stored procedures based on the dynamic SQL generated for your mappings and descriptors. This should be used with caution as it maintenance will be high. Stored procedures may be generated either directly on the database or to a file.- Throws:
EclipseLinkException
-
generateStoredProcedures
PUBLIC: Use this method to generate stored procedures based on the dynamic SQL generated for your mappings and descriptors. This should be used with caution as it maintenance will be high. Stored procedures may be generated either directly on the database or to a file.- Throws:
EclipseLinkException
-
generateStoredProceduresAndAmendmentClass
public void generateStoredProceduresAndAmendmentClass(Writer writer, String fullyQualifiedClassName) throws EclipseLinkException PUBLIC: Use this method to generate stored procedures based on the dynamic SQL generated for your mappings and descriptors. This should be used with caution as it maintenance will be high. Stored procedures may be generated either directly on the database or to a file.- Throws:
EclipseLinkException
-
generateStoredProceduresAndAmendmentClass
public void generateStoredProceduresAndAmendmentClass(String path, String fullyQualifiedClassName) throws EclipseLinkException PUBLIC: Use this method to generate stored procedures based on the dynamic SQL generated for your mappings and descriptors. This should be used with caution as it maintenance will be high. Stored procedures may be generated either directly on the database or to a file.- Throws:
EclipseLinkException
-
getAccessor
Return the appropriate accessor. Assume we are dealing with a JDBC accessor. -
getAllColumnNames
Get a description of table columns available in a catalog.Each column description has the following columns:
- TABLE_CAT String => table catalog (may be null)
- TABLE_SCHEM String => table schema (may be null)
- TABLE_NAME String => table name
- COLUMN_NAME String => column name
- DATA_TYPE short => SQL type from java.sql.Types
- TYPE_NAME String => Data source dependent type name
- COLUMN_SIZE int => column size. For char or date types this is the maximum number of characters, for numeric or decimal types this is precision.
- BUFFER_LENGTH is not used.
- DECIMAL_DIGITS int => the number of fractional digits
- NUM_PREC_RADIX int => Radix (typically either 10 or 2)
- NULLABLE int => is NULL allowed?
- columnNoNulls - might not allow NULL values
- columnNullable - definitely allows NULL values
- columnNullableUnknown - nullability unknown
- REMARKS String => comment describing column (may be null)
- COLUMN_DEF String => default value (may be null)
- SQL_DATA_TYPE int => unused
- SQL_DATETIME_SUB int => unused
- CHAR_OCTET_LENGTH int => for char types the maximum number of bytes in the column
- ORDINAL_POSITION int => index of column in table (starting at 1)
- IS_NULLABLE String => "NO" means column definitely does not allow NULL values; "YES" means the column might allow NULL values. An empty string means nobody knows.
- Parameters:
tableName
- a table name pattern- Returns:
- a Vector of Records.
- Throws:
DatabaseException
-
getAllColumnNames
public Vector<AbstractRecord> getAllColumnNames(String creatorName, String tableName) throws DatabaseException Get a description of table columns available in a catalog.Each column description has the following columns:
- TABLE_CAT String => table catalog (may be null)
- TABLE_SCHEM String => table schema (may be null)
- TABLE_NAME String => table name
- COLUMN_NAME String => column name
- DATA_TYPE short => SQL type from java.sql.Types
- TYPE_NAME String => Data source dependent type name
- COLUMN_SIZE int => column size. For char or date types this is the maximum number of characters, for numeric or decimal types this is precision.
- BUFFER_LENGTH is not used.
- DECIMAL_DIGITS int => the number of fractional digits
- NUM_PREC_RADIX int => Radix (typically either 10 or 2)
- NULLABLE int => is NULL allowed?
- columnNoNulls - might not allow NULL values
- columnNullable - definitely allows NULL values
- columnNullableUnknown - nullability unknown
- REMARKS String => comment describing column (may be null)
- COLUMN_DEF String => default value (may be null)
- SQL_DATA_TYPE int => unused
- SQL_DATETIME_SUB int => unused
- CHAR_OCTET_LENGTH int => for char types the maximum number of bytes in the column
- ORDINAL_POSITION int => index of column in table (starting at 1)
- IS_NULLABLE String => "NO" means column definitely does not allow NULL values; "YES" means the column might allow NULL values. An empty string means nobody knows.
- Parameters:
creatorName
- a schema name pattern; "" retrieves those without a schematableName
- a table name pattern- Returns:
- a Vector of Records.
- Throws:
DatabaseException
-
getAllTableNames
Get a description of tables available in a catalog.Each table description has the following columns:
- TABLE_CAT String => table catalog (may be null)
- TABLE_SCHEM String => table schema (may be null)
- TABLE_NAME String => table name
- TABLE_TYPE String => table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
- REMARKS String => explanatory comment on the table
Note: Some databases may not return information for all tables.
- Returns:
- a Vector of Records.
- Throws:
DatabaseException
-
getAllTableNames
Get a description of table columns available in a catalog.Each column description has the following columns:
- TABLE_CAT String => table catalog (may be null)
- TABLE_SCHEM String => table schema (may be null)
- TABLE_NAME String => table name
- COLUMN_NAME String => column name
- DATA_TYPE short => SQL type from java.sql.Types
- TYPE_NAME String => Data source dependent type name
- COLUMN_SIZE int => column size. For char or date types this is the maximum number of characters, for numeric or decimal types this is precision.
- BUFFER_LENGTH is not used.
- DECIMAL_DIGITS int => the number of fractional digits
- NUM_PREC_RADIX int => Radix (typically either 10 or 2)
- NULLABLE int => is NULL allowed?
- columnNoNulls - might not allow NULL values
- columnNullable - definitely allows NULL values
- columnNullableUnknown - nullability unknown
- REMARKS String => comment describing column (may be null)
- COLUMN_DEF String => default value (may be null)
- SQL_DATA_TYPE int => unused
- SQL_DATETIME_SUB int => unused
- CHAR_OCTET_LENGTH int => for char types the maximum number of bytes in the column
- ORDINAL_POSITION int => index of column in table (starting at 1)
- IS_NULLABLE String => "NO" means column definitely does not allow NULL values; "YES" means the column might allow NULL values. An empty string means nobody knows.
- Parameters:
creatorName
- a schema name pattern; "" retrieves those without a schema- Returns:
- a Vector of Records.
- Throws:
DatabaseException
-
getColumnInfo
public Vector<AbstractRecord> getColumnInfo(String catalog, String schema, String tableName, String columnName) throws DatabaseException Get a description of table columns available in a catalog.Only column descriptions matching the catalog, schema, table and column name criteria are returned. They are ordered by TABLE_SCHEM, TABLE_NAME and ORDINAL_POSITION.
Each column description has the following columns:
- TABLE_CAT String => table catalog (may be null)
- TABLE_SCHEM String => table schema (may be null)
- TABLE_NAME String => table name
- COLUMN_NAME String => column name
- DATA_TYPE short => SQL type from java.sql.Types
- TYPE_NAME String => Data source dependent type name
- COLUMN_SIZE int => column size. For char or date types this is the maximum number of characters, for numeric or decimal types this is precision.
- BUFFER_LENGTH is not used.
- DECIMAL_DIGITS int => the number of fractional digits
- NUM_PREC_RADIX int => Radix (typically either 10 or 2)
- NULLABLE int => is NULL allowed?
- columnNoNulls - might not allow NULL values
- columnNullable - definitely allows NULL values
- columnNullableUnknown - nullability unknown
- REMARKS String => comment describing column (may be null)
- COLUMN_DEF String => default value (may be null)
- SQL_DATA_TYPE int => unused
- SQL_DATETIME_SUB int => unused
- CHAR_OCTET_LENGTH int => for char types the maximum number of bytes in the column
- ORDINAL_POSITION int => index of column in table (starting at 1)
- IS_NULLABLE String => "NO" means column definitely does not allow NULL values; "YES" means the column might allow NULL values. An empty string means nobody knows.
- Parameters:
catalog
- a catalog name; "" retrieves those without a catalog; null means drop catalog name from the selection criteriaschema
- a schema name pattern; "" retrieves those without a schematableName
- a table name patterncolumnName
- a column name pattern- Returns:
- a Vector of Records.
- Throws:
DatabaseException
-
getColumnInfo
public Vector<AbstractRecord> getColumnInfo(String tableName, String columnName) throws DatabaseException - Throws:
DatabaseException
-
getSession
-
getTableInfo
public Vector<AbstractRecord> getTableInfo(String catalog, String schema, String tableName, String[] types) throws DatabaseException Get a description of tables available in a catalog.Only table descriptions matching the catalog, schema, table name and type criteria are returned. They are ordered by TABLE_TYPE, TABLE_SCHEM and TABLE_NAME.
Each table description has the following columns:
- TABLE_CAT String => table catalog (may be null)
- TABLE_SCHEM String => table schema (may be null)
- TABLE_NAME String => table name
- TABLE_TYPE String => table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
- REMARKS String => explanatory comment on the table
Note: Some databases may not return information for all tables.
- Parameters:
catalog
- a catalog name; "" retrieves those without a catalog; null means drop catalog name from the selection criteriaschema
- a schema name pattern; "" retrieves those without a schematableName
- a table name patterntypes
- a list of table types to include; null returns all types- Returns:
- a Vector of Records.
- Throws:
DatabaseException
-
outputDDLToDatabase
public void outputDDLToDatabase()PUBLIC: Output all DDL statements directly to the database. -
outputDDLToFile
PUBLIC: Output all DDL statements to a file writer specified by the name in the parameter. -
outputCreateDDLToFile
-
outputDropDDLToFile
-
getWriter
-
outputDDLToWriter
PUBLIC: Output all DDL statements to a writer specified in the parameter. -
outputCreateDDLToWriter
-
outputDropDDLToWriter
-
replaceObject
Use the definition object to drop and recreate the schema entity on the database. This is used for dropping tables, views, procedures ... etc ... This handles and ignore any database error while dropping in case the object did not previously exist.- Throws:
EclipseLinkException
-
getDefaultTableCreator
Construct the default TableCreator. If the default TableCreator is already created, just returns it. -
createDefaultTables
public void createDefaultTables(boolean generateFKConstraints) Create the default table schema for the project this session associated with. -
dropDatabaseSchemas
public void dropDatabaseSchemas()INTERNAL: Iterate over the schemas that need to be dropped. -
dropDefaultTables
public void dropDefaultTables()Create the default table schema for the project this session associated with. -
replaceDefaultTables
Drop and recreate the default table schema for the project this session associated with.- Throws:
EclipseLinkException
-
replaceDefaultTables
public void replaceDefaultTables(boolean createSequenceTables, boolean generateFKConstraints) throws EclipseLinkException Drop and recreate the default table schema for the project this session associated with.- Throws:
EclipseLinkException
-
replaceDefaultTables
public void replaceDefaultTables(boolean createSequenceTables, boolean createSequences, boolean generateFKConstraints) throws EclipseLinkException Drop and recreate the default table schema for the project this session associated with.- Throws:
EclipseLinkException
-
setSession
-
shouldCreateDatabaseSchema
protected boolean shouldCreateDatabaseSchema(DatabaseObjectDefinition databaseObjectDefinition, Set<String> createdDatabaseSchemas) INTERNAL: Returns true if a database schema should be created during ddl generation for the given databaseObjectDefinition. -
shouldWriteToDatabase
public boolean shouldWriteToDatabase()PUBLIC: Return true if this SchemaManager should write to the database directly -
alterSequence
Use the definition to alter sequence.- Throws:
EclipseLinkException
-
extendDefaultTables
Create or extend the default table schema for the project this session associated with.- Throws:
EclipseLinkException
-