Class TableDefinition

java.lang.Object
org.eclipse.persistence.tools.schemaframework.DatabaseObjectDefinition
org.eclipse.persistence.tools.schemaframework.TableDefinition
All Implemented Interfaces:
Serializable, Cloneable
Direct Known Subclasses:
TypeTableDefinition

public class TableDefinition extends DatabaseObjectDefinition

Purpose: Allow a generic way of creating tables on the different platforms.

See Also:
  • Field Details

  • Constructor Details

    • TableDefinition

      public TableDefinition()
  • Method Details

    • addField

      public void addField(String fieldName, Class type)
      PUBLIC: Add the field to the table, default sizes are used.
      Parameters:
      type - is the Java class type corresponding to the database type.
    • addField

      public void addField(String fieldName, Class type, int fieldSize)
      PUBLIC: Add the field to the table.
      Parameters:
      type - is the Java class type corresponding to the database type.
    • addField

      public void addField(String fieldName, Class type, int fieldSize, int fieldSubSize)
      PUBLIC: Add the field to the table.
      Parameters:
      type - is the Java class type corresponding to the database type.
    • addField

      public void addField(String fieldName, String typeName)
      PUBLIC: Add the field to the type to a nested type.
      Parameters:
      typeName - is the name of the nested type.
    • addField

      public void addField(FieldDefinition field)
      PUBLIC: Add the field to the table.
    • addFieldOnDatabase

      public void addFieldOnDatabase(org.eclipse.persistence.internal.sessions.AbstractSession session, FieldDefinition field)
      INTERNAL: Execute the SQL alter table to add the field to the table.
    • buildAddFieldWriter

      public Writer buildAddFieldWriter(org.eclipse.persistence.internal.sessions.AbstractSession session, FieldDefinition field, Writer writer) throws ValidationException
      INTERNAL: Return the alter table statement to add a field to the table.
      Throws:
      ValidationException
    • addForeignKeyConstraint

      public void addForeignKeyConstraint(String name, String sourceField, String targetField, String targetTable)
      PUBLIC: Add a foreign key constraint to the table. If there is a same name foreign key constraint already, nothing will happen.
    • addUniqueKeyConstraint

      public void addUniqueKeyConstraint(String name, String sourceField)
      PUBLIC: Add a unique key constraint to the table.
    • addUniqueKeyConstraint

      public void addUniqueKeyConstraint(String name, String[] sourceFields)
      PUBLIC: Add a unique key constraint to the table.
    • addForeignKeyConstraint

      public void addForeignKeyConstraint(ForeignKeyConstraint foreignKey)
      PUBLIC: Add a foreign key constraint to the table. If there is a same name foreign key constraint already, nothing will happen.
    • addUniqueKeyConstraint

      public void addUniqueKeyConstraint(UniqueKeyConstraint uniqueKey)
      PUBLIC: Add a unique key constraint to the table.
    • addIndex

      public void addIndex(IndexDefinition index)
      PUBLIC: Add an index to the table.
    • addIdentityField

      public void addIdentityField(String fieldName, Class type)
      PUBLIC: Add the field to the table, default sizes are used. Identity fields are used on Sybase for native sequencing, The field must be of number type and cannot have a subsize.
      Parameters:
      type - is the Java class type corresponding to the database type.
    • addIdentityField

      public void addIdentityField(String fieldName, Class type, int fieldSize)
      PUBLIC: Add the field to the table, default sizes are used. Identity fields are used on Sybase for native sequencing, The field must be of number type and cannot have a subsize.
      Parameters:
      type - is the Java class type corresponding to the database type.
    • addPrimaryKeyField

      public void addPrimaryKeyField(String fieldName, Class type)
      PUBLIC: Add the field to the table, default sizes are used. This field is set as part of the primary key.
      Parameters:
      type - is the Java class type corresponding to the database type.
    • addPrimaryKeyField

      public void addPrimaryKeyField(String fieldName, Class type, int fieldSize)
      PUBLIC: Add the field to the table, default sizes are used. This field is set as part of the primary key.
      Parameters:
      type - is the Java class type corresponding to the database type.
    • buildConstraintCreationWriter

      public Writer buildConstraintCreationWriter(org.eclipse.persistence.internal.sessions.AbstractSession session, ForeignKeyConstraint foreignKey, Writer writer) throws ValidationException
      INTERNAL: Return the alter table statement to add the constraints. This is done separately from the create because of dependencies.
      Throws:
      ValidationException
    • buildConstraintDeletionWriter

      public Writer buildConstraintDeletionWriter(org.eclipse.persistence.internal.sessions.AbstractSession session, ForeignKeyConstraint foreignKey, Writer writer) throws ValidationException
      INTERNAL: Return the alter table statement to drop the constraints. This is done separately to allow constraints to be dropped before the tables.
      Throws:
      ValidationException
    • buildUniqueConstraintCreationWriter

      public Writer buildUniqueConstraintCreationWriter(org.eclipse.persistence.internal.sessions.AbstractSession session, UniqueKeyConstraint uniqueKey, Writer writer) throws ValidationException
      INTERNAL: Return the alter table statement to add the constraints. This is done separately from the create because of dependencies.
      Throws:
      ValidationException
    • buildUniqueConstraintDeletionWriter

      public Writer buildUniqueConstraintDeletionWriter(org.eclipse.persistence.internal.sessions.AbstractSession session, UniqueKeyConstraint uniqueKey, Writer writer) throws ValidationException
      INTERNAL: Return the alter table statement to drop the constraints. This is done separately to allow constraints to be dropped before the tables.
      Throws:
      ValidationException
    • buildIndex

      public IndexDefinition buildIndex(org.eclipse.persistence.internal.sessions.AbstractSession session, String key, List<String> columnNames, boolean isUniqueSetOnField)
      INTERNAL: Return the index creation statement.
    • buildIndexDeletionWriter

      public Writer buildIndexDeletionWriter(org.eclipse.persistence.internal.sessions.AbstractSession session, String key, Writer writer, boolean isUniqueSetOnField)
      INTERNAL: Return the index drop statement.
    • getCreationPrefix

      public String getCreationPrefix()
      INTERNAL: Return the beginning of the sql create statement - the part before the name. Unless temp table is created should be "CREATE TABLE "
    • setCreationPrefix

      public void setCreationPrefix(String creationPrefix)
      INTERNAL: Set the beginning of the sql create statement - the part before the name. Use to create temp. table.
    • getCreationSuffix

      public String getCreationSuffix()
      INTERNAL: Return the end of the sql create statement - the part after the field list. Unless temp table is created should be empty.
    • getDatabaseSchema

      public String getDatabaseSchema()
      PUBLIC: Return the schema associated with this table.
      Overrides:
      getDatabaseSchema in class DatabaseObjectDefinition
      See Also:
    • setCreationSuffix

      public void setCreationSuffix(String creationSuffix)
      INTERNAL: Set the end of the sql create statement - the part after the field list.
    • buildCreationWriter

      public Writer buildCreationWriter(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer writer) throws ValidationException
      INTERNAL: Return the create table statement.
      Specified by:
      buildCreationWriter in class DatabaseObjectDefinition
      Throws:
      ValidationException
    • buildDeletionWriter

      public Writer buildDeletionWriter(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer writer) throws ValidationException
      INTERNAL: Return the drop table statement.
      Specified by:
      buildDeletionWriter in class DatabaseObjectDefinition
      Throws:
      ValidationException
    • buildVPDCreationPolicyWriter

      public Writer buildVPDCreationPolicyWriter(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer writer)
      INTERNAL:
      Overrides:
      buildVPDCreationPolicyWriter in class DatabaseObjectDefinition
    • buildVPDCreationFunctionWriter

      public Writer buildVPDCreationFunctionWriter(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer writer)
      INTERNAL:
      Overrides:
      buildVPDCreationFunctionWriter in class DatabaseObjectDefinition
    • buildDatabaseSchemaCreationWriter

      protected Writer buildDatabaseSchemaCreationWriter(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer writer, Set<String> createdDatabaseSchemas)
      INTERNAL: Build the create schema DDL.
    • buildDatabaseSchemaDeletionWriter

      protected Writer buildDatabaseSchemaDeletionWriter(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer writer)
      INTERNAL: Build the drop schema DDL.
    • buildVPDDeletionWriter

      public Writer buildVPDDeletionWriter(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer writer)
      INTERNAL:
      Overrides:
      buildVPDDeletionWriter in class DatabaseObjectDefinition
    • buildFieldTypes

      protected void buildFieldTypes(org.eclipse.persistence.internal.sessions.AbstractSession session)
      INTERNAL: Build the foreign key constraints.
    • buildForeignKeyConstraint

      protected ForeignKeyConstraint buildForeignKeyConstraint(FieldDefinition field, org.eclipse.persistence.internal.databaseaccess.DatabasePlatform platform)
      Build a foreign key constraint using FieldDefinition.getForeignKeyFieldName().
    • buildForeignKeyConstraint

      protected ForeignKeyConstraint buildForeignKeyConstraint(List<String> fkFieldNames, List<String> pkFieldNames, TableDefinition targetTable, org.eclipse.persistence.internal.databaseaccess.DatabasePlatform platform)
      Build a foreign key constraint.
    • buildForeignKeyConstraintName

      protected String buildForeignKeyConstraintName(String tableName, String fieldName, int maximumNameLength, org.eclipse.persistence.internal.databaseaccess.DatabasePlatform platform)
      Return foreign key constraint name built from the table and field name with the specified maximum length. To make the name short enough we 1. Drop the "FK_" prefix. 2. Drop the underscore characters if any. 3. Drop the vowels from the table and field name. 4. Truncate the table name to zero length if necessary.
    • buildUniqueKeyConstraint

      protected UniqueKeyConstraint buildUniqueKeyConstraint(String name, List<String> fieldNames, int serialNumber, org.eclipse.persistence.internal.databaseaccess.DatabasePlatform platform)
    • buildUniqueKeyConstraintName

      protected String buildUniqueKeyConstraintName(String tableName, int serialNumber, int maximumNameLength)
      Return unique key constraint name built from the table name and sequence number with the specified maximum length. To make the name short enough we 1. Drop the "UNQ_" prefix. 2. Drop the underscore characters if any. 3. Drop the vowels from the table name. 4. Truncate the table name to zero length if necessary.
    • buildIndexName

      protected String buildIndexName(String tableName, String key, String indexPrefix, int maximumNameLength, org.eclipse.persistence.internal.databaseaccess.DatabasePlatform platform)
      Return key constraint name built from the table and key name with the specified maximum length and index prefix. If indexPrefix is null, "IX_" is used for prefix. To make the name short enough we:
       1. Drop the prefix.
       2. Drop the underscore characters if any.
       3. Drop the vowels from the table and key name.
       4. Truncate the table name to zero length if necessary.
       
    • clone

      public Object clone()
      PUBLIC: Performs a deep copy of this table definition.
      Overrides:
      clone in class DatabaseObjectDefinition
    • createConstraints

      public void createConstraints(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer schemaWriter) throws EclipseLinkException
      INTERNAL: Execute the SQL alter table constraint creation string.
      Throws:
      EclipseLinkException
    • createConstraintsOnDatabase

      public void createConstraintsOnDatabase(org.eclipse.persistence.internal.sessions.AbstractSession session) throws EclipseLinkException
      INTERNAL: Execute the SQL alter table constraint creation string.
      Throws:
      EclipseLinkException
    • createDatabaseSchema

      public void createDatabaseSchema(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer writer, Set<String> createdDatabaseSchemas) throws EclipseLinkException
      INTERNAL: Execute the DDL to create the database schema for this object.
      Overrides:
      createDatabaseSchema in class DatabaseObjectDefinition
      Throws:
      EclipseLinkException
      See Also:
    • createDatabaseSchemaOnDatabase

      public void createDatabaseSchemaOnDatabase(org.eclipse.persistence.internal.sessions.AbstractSession session, Set<String> createdDatabaseSchemas) throws EclipseLinkException
      INTERNAL: Execute the DDL to create the database schema for this object.
      Overrides:
      createDatabaseSchemaOnDatabase in class DatabaseObjectDefinition
      Throws:
      EclipseLinkException
      See Also:
    • createIndexes

      public void createIndexes(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer writer)
      INTERNAL:
      Write the SQL create index string to create index if passed a writer, else delegate to a method that executes the string on the database.
      Throws:
      ValidationException - wraps any IOException from the writer
    • writeLineSeperator

      public void writeLineSeperator(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer writer)
    • deletionStringFor

      public String deletionStringFor(org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor accessor)
      INTERNAL: Return the delete SQL string.
    • dropDatabaseSchema

      public void dropDatabaseSchema(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer writer) throws EclipseLinkException
      INTERNAL: Execute the DDL to drop the database schema for this object.
      Overrides:
      dropDatabaseSchema in class DatabaseObjectDefinition
      Throws:
      EclipseLinkException
      See Also:
    • dropDatabaseSchemaOnDatabase

      public void dropDatabaseSchemaOnDatabase(org.eclipse.persistence.internal.sessions.AbstractSession session) throws EclipseLinkException
      INTERNAL: Execute the DDL to drop the database schema for this object.
      Overrides:
      dropDatabaseSchemaOnDatabase in class DatabaseObjectDefinition
      Throws:
      EclipseLinkException
      See Also:
    • dropConstraints

      public void dropConstraints(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer schemaWriter) throws EclipseLinkException
      INTERNAL: Execute the SQL alter table constraint creation string.
      Throws:
      EclipseLinkException
    • dropConstraintsOnDatabase

      public void dropConstraintsOnDatabase(org.eclipse.persistence.internal.sessions.AbstractSession session) throws EclipseLinkException
      INTERNAL: Execute the SQL alter table constraint creation string. Exceptions are caught and masked so that all the foreign keys are dropped (even if they don't exist).
      Throws:
      EclipseLinkException
    • dropIndexes

      public void dropIndexes(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer writer)
      INTERNAL:
      Write the SQL drop index string to drop indexes if passed a writer, else delegate to a method that executes the string on the database.
      Throws:
      ValidationException - wraps any IOException from the writer
    • getForeignKeyMap

      public Map<String,ForeignKeyConstraint> getForeignKeyMap()
      INTERNAL:
    • setForeignKeyMap

      public void setForeignKeyMap(Map<String,ForeignKeyConstraint> foreignKeyMap)
      INTERNAL:
    • getField

      public FieldDefinition getField(String fieldName)
      PUBLIC: Return the field the corresponds to the name.
    • getFields

      public List<FieldDefinition> getFields()
      PUBLIC:
    • getForeignKeys

      public Collection<ForeignKeyConstraint> getForeignKeys()
      PUBLIC: Returns the ForeignKeyConstraint list.
    • getUniqueKeys

      public List<UniqueKeyConstraint> getUniqueKeys()
      PUBLIC:
    • setIndexes

      public void setIndexes(List<IndexDefinition> indexes)
      PUBLIC:
    • setCreateVPDCalls

      public void setCreateVPDCalls(boolean createVPDCalls, String tenantFieldName)
      PUBLIC:
    • getIndexes

      public List<IndexDefinition> getIndexes()
      PUBLIC:
    • getPrimaryKeyFieldNames

      public List<String> getPrimaryKeyFieldNames()
      PUBLIC:
    • postCreateObject

      public void postCreateObject(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer createSchemaWriter, boolean createSQLFiles)
      Execute any statements required after the creation of the object
      Overrides:
      postCreateObject in class DatabaseObjectDefinition
      Parameters:
      session -
      createSchemaWriter -
    • preDropObject

      public void preDropObject(org.eclipse.persistence.internal.sessions.AbstractSession session, Writer dropSchemaWriter, boolean createSQLFiles)
      Execute any statements required before the deletion of the object
      Overrides:
      preDropObject in class DatabaseObjectDefinition
      Parameters:
      session -
      dropSchemaWriter -
    • setFields

      public void setFields(List<FieldDefinition> fields)
      PUBLIC:
    • setForeignKeys

      public void setForeignKeys(List<ForeignKeyConstraint> foreignKeys)
      PUBLIC: Set the ForeignKeyConstraint list. If the list contains the same name foreign key constraints, only the first one of that name will be added.
    • setUniqueKeys

      public void setUniqueKeys(List<UniqueKeyConstraint> uniqueKeys)
      PUBLIC:
    • setUserDefinedForeignKeyConstraints

      public void setUserDefinedForeignKeyConstraints(Map<String,ForeignKeyConstraint> foreignKeyConstraints)
      PUBLIC: Set the foreign key constraints for this table.
    • shouldCreateDatabaseSchema

      public boolean shouldCreateDatabaseSchema(Set<String> createdDatabaseSchemas)
      If this table has a schema (and catalog specified) make sure it is created.
      Overrides:
      shouldCreateDatabaseSchema in class DatabaseObjectDefinition
    • shouldCreateVPDCalls

      public boolean shouldCreateVPDCalls(org.eclipse.persistence.internal.sessions.AbstractSession session)
      INTERNAL: Subclasses who care should override this method.
      Overrides:
      shouldCreateVPDCalls in class DatabaseObjectDefinition
    • setCreateSQLFiles

      public void setCreateSQLFiles(boolean genFlag)
      PUBLIC:
    • getTable

      public org.eclipse.persistence.internal.helper.DatabaseTable getTable()
    • setTable

      public void setTable(org.eclipse.persistence.internal.helper.DatabaseTable table)