Search in sources :

Example 11 with JdbcEnvironment

use of org.hibernate.engine.jdbc.env.spi.JdbcEnvironment in project hibernate-orm by hibernate.

the class StandardForeignKeyExporter method getSqlCreateStrings.

@Override
public String[] getSqlCreateStrings(ForeignKey foreignKey, Metadata metadata) {
    if (!dialect.hasAlterTable()) {
        return NO_COMMANDS;
    }
    if (!foreignKey.isCreationEnabled()) {
        return NO_COMMANDS;
    }
    if (!foreignKey.isPhysicalConstraint()) {
        return NO_COMMANDS;
    }
    final int numberOfColumns = foreignKey.getColumnSpan();
    final String[] columnNames = new String[numberOfColumns];
    final String[] targetColumnNames = new String[numberOfColumns];
    final Iterator targetItr;
    if (foreignKey.isReferenceToPrimaryKey()) {
        if (numberOfColumns != foreignKey.getReferencedTable().getPrimaryKey().getColumnSpan()) {
            throw new AssertionFailure(String.format(Locale.ENGLISH, COLUMN_MISMATCH_MSG, numberOfColumns, foreignKey.getReferencedTable().getPrimaryKey().getColumnSpan(), foreignKey.getName(), foreignKey.getTable().getName(), foreignKey.getReferencedTable().getName()));
        }
        targetItr = foreignKey.getReferencedTable().getPrimaryKey().getColumnIterator();
    } else {
        if (numberOfColumns != foreignKey.getReferencedColumns().size()) {
            throw new AssertionFailure(String.format(Locale.ENGLISH, COLUMN_MISMATCH_MSG, numberOfColumns, foreignKey.getReferencedColumns().size(), foreignKey.getName(), foreignKey.getTable().getName(), foreignKey.getReferencedTable().getName()));
        }
        targetItr = foreignKey.getReferencedColumns().iterator();
    }
    int i = 0;
    final Iterator itr = foreignKey.getColumnIterator();
    while (itr.hasNext()) {
        columnNames[i] = ((Column) itr.next()).getQuotedName(dialect);
        targetColumnNames[i] = ((Column) targetItr.next()).getQuotedName(dialect);
        i++;
    }
    final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment();
    final String sourceTableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format(foreignKey.getTable().getQualifiedTableName(), dialect);
    final String targetTableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format(foreignKey.getReferencedTable().getQualifiedTableName(), dialect);
    final StringBuilder buffer = new StringBuilder("alter table ").append(sourceTableName).append(foreignKey.getKeyDefinition() != null ? dialect.getAddForeignKeyConstraintString(foreignKey.getName(), foreignKey.getKeyDefinition()) : dialect.getAddForeignKeyConstraintString(foreignKey.getName(), columnNames, targetTableName, targetColumnNames, foreignKey.isReferenceToPrimaryKey()));
    if (dialect.supportsCascadeDelete()) {
        if (foreignKey.isCascadeDeleteEnabled()) {
            buffer.append(" on delete cascade");
        }
    }
    return new String[] { buffer.toString() };
}
Also used : AssertionFailure(org.hibernate.AssertionFailure) Iterator(java.util.Iterator) JdbcEnvironment(org.hibernate.engine.jdbc.env.spi.JdbcEnvironment)

Example 12 with JdbcEnvironment

use of org.hibernate.engine.jdbc.env.spi.JdbcEnvironment in project hibernate-orm by hibernate.

the class StandardIndexExporter method getSqlCreateStrings.

@Override
public String[] getSqlCreateStrings(Index index, Metadata metadata) {
    final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment();
    final String tableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format(index.getTable().getQualifiedTableName(), dialect);
    final String indexNameForCreation;
    if (dialect.qualifyIndexName()) {
        indexNameForCreation = jdbcEnvironment.getQualifiedObjectNameFormatter().format(new QualifiedNameImpl(index.getTable().getQualifiedTableName().getCatalogName(), index.getTable().getQualifiedTableName().getSchemaName(), jdbcEnvironment.getIdentifierHelper().toIdentifier(index.getQuotedName(dialect))), jdbcEnvironment.getDialect());
    } else {
        indexNameForCreation = index.getName();
    }
    final StringBuilder buf = new StringBuilder().append("create index ").append(indexNameForCreation).append(" on ").append(tableName).append(" (");
    boolean first = true;
    Iterator<Column> columnItr = index.getColumnIterator();
    while (columnItr.hasNext()) {
        final Column column = columnItr.next();
        if (first) {
            first = false;
        } else {
            buf.append(", ");
        }
        buf.append((column.getQuotedName(dialect)));
    }
    buf.append(")");
    return new String[] { buf.toString() };
}
Also used : Column(org.hibernate.mapping.Column) QualifiedNameImpl(org.hibernate.boot.model.relational.QualifiedNameImpl) JdbcEnvironment(org.hibernate.engine.jdbc.env.spi.JdbcEnvironment)

Example 13 with JdbcEnvironment

use of org.hibernate.engine.jdbc.env.spi.JdbcEnvironment in project hibernate-orm by hibernate.

the class StandardIndexExporter method getSqlDropStrings.

@Override
public String[] getSqlDropStrings(Index index, Metadata metadata) {
    if (!dialect.dropConstraints()) {
        return NO_COMMANDS;
    }
    final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment();
    final String tableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format(index.getTable().getQualifiedTableName(), dialect);
    final String indexNameForCreation;
    if (dialect.qualifyIndexName()) {
        indexNameForCreation = StringHelper.qualify(tableName, index.getName());
    } else {
        indexNameForCreation = index.getName();
    }
    return new String[] { "drop index " + indexNameForCreation };
}
Also used : JdbcEnvironment(org.hibernate.engine.jdbc.env.spi.JdbcEnvironment)

Example 14 with JdbcEnvironment

use of org.hibernate.engine.jdbc.env.spi.JdbcEnvironment in project hibernate-orm by hibernate.

the class StandardTableExporter method getSqlCreateStrings.

@Override
public String[] getSqlCreateStrings(Table table, Metadata metadata) {
    final QualifiedName tableName = new QualifiedNameParser.NameParts(Identifier.toIdentifier(table.getCatalog(), table.isCatalogQuoted()), Identifier.toIdentifier(table.getSchema(), table.isSchemaQuoted()), table.getNameIdentifier());
    final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment();
    StringBuilder buf = new StringBuilder(tableCreateString(table.hasPrimaryKey())).append(' ').append(jdbcEnvironment.getQualifiedObjectNameFormatter().format(tableName, jdbcEnvironment.getDialect())).append(" (");
    boolean isPrimaryKeyIdentity = table.hasPrimaryKey() && table.getIdentifierValue() != null && table.getIdentifierValue().isIdentityColumn(metadata.getIdentifierGeneratorFactory(), dialect);
    // this is the much better form moving forward as we move to metamodel
    //boolean isPrimaryKeyIdentity = hasPrimaryKey
    //				&& table.getPrimaryKey().getColumnSpan() == 1
    //				&& table.getPrimaryKey().getColumn( 0 ).isIdentity();
    // Try to find out the name of the primary key in case the dialect needs it to create an identity
    String pkColName = null;
    if (table.hasPrimaryKey()) {
        Column pkColumn = (Column) table.getPrimaryKey().getColumns().iterator().next();
        pkColName = pkColumn.getQuotedName(dialect);
    }
    final Iterator columnItr = table.getColumnIterator();
    boolean isFirst = true;
    while (columnItr.hasNext()) {
        final Column col = (Column) columnItr.next();
        if (isFirst) {
            isFirst = false;
        } else {
            buf.append(", ");
        }
        String colName = col.getQuotedName(dialect);
        buf.append(colName).append(' ');
        if (isPrimaryKeyIdentity && colName.equals(pkColName)) {
            // to support dialects that have their own identity data type
            if (dialect.getIdentityColumnSupport().hasDataTypeInIdentityColumn()) {
                buf.append(col.getSqlType(dialect, metadata));
            }
            buf.append(' ').append(dialect.getIdentityColumnSupport().getIdentityColumnString(col.getSqlTypeCode(metadata)));
        } else {
            buf.append(col.getSqlType(dialect, metadata));
            String defaultValue = col.getDefaultValue();
            if (defaultValue != null) {
                buf.append(" default ").append(defaultValue);
            }
            if (col.isNullable()) {
                buf.append(dialect.getNullColumnString());
            } else {
                buf.append(" not null");
            }
        }
        if (col.isUnique()) {
            String keyName = Constraint.generateName("UK_", table, col);
            UniqueKey uk = table.getOrCreateUniqueKey(keyName);
            uk.addColumn(col);
            buf.append(dialect.getUniqueDelegate().getColumnDefinitionUniquenessFragment(col));
        }
        if (col.getCheckConstraint() != null && dialect.supportsColumnCheck()) {
            buf.append(" check (").append(col.getCheckConstraint()).append(")");
        }
        String columnComment = col.getComment();
        if (columnComment != null) {
            buf.append(dialect.getColumnComment(columnComment));
        }
    }
    if (table.hasPrimaryKey()) {
        buf.append(", ").append(table.getPrimaryKey().sqlConstraintString(dialect));
    }
    buf.append(dialect.getUniqueDelegate().getTableCreationUniqueConstraintsFragment(table));
    applyTableCheck(table, buf);
    buf.append(')');
    if (table.getComment() != null) {
        buf.append(dialect.getTableComment(table.getComment()));
    }
    applyTableTypeString(buf);
    List<String> sqlStrings = new ArrayList<String>();
    sqlStrings.add(buf.toString());
    applyComments(table, tableName, sqlStrings);
    applyInitCommands(table, sqlStrings);
    return sqlStrings.toArray(new String[sqlStrings.size()]);
}
Also used : Column(org.hibernate.mapping.Column) UniqueKey(org.hibernate.mapping.UniqueKey) QualifiedName(org.hibernate.boot.model.relational.QualifiedName) Iterator(java.util.Iterator) ArrayList(java.util.ArrayList) JdbcEnvironment(org.hibernate.engine.jdbc.env.spi.JdbcEnvironment)

Example 15 with JdbcEnvironment

use of org.hibernate.engine.jdbc.env.spi.JdbcEnvironment in project hibernate-orm by hibernate.

the class StandardTableExporter method getSqlDropStrings.

@Override
public String[] getSqlDropStrings(Table table, Metadata metadata) {
    StringBuilder buf = new StringBuilder("drop table ");
    if (dialect.supportsIfExistsBeforeTableName()) {
        buf.append("if exists ");
    }
    final QualifiedName tableName = new QualifiedNameParser.NameParts(Identifier.toIdentifier(table.getCatalog(), table.isCatalogQuoted()), Identifier.toIdentifier(table.getSchema(), table.isSchemaQuoted()), table.getNameIdentifier());
    final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment();
    buf.append(jdbcEnvironment.getQualifiedObjectNameFormatter().format(tableName, jdbcEnvironment.getDialect())).append(dialect.getCascadeConstraintsString());
    if (dialect.supportsIfExistsAfterTableName()) {
        buf.append(" if exists");
    }
    return new String[] { buf.toString() };
}
Also used : QualifiedName(org.hibernate.boot.model.relational.QualifiedName) JdbcEnvironment(org.hibernate.engine.jdbc.env.spi.JdbcEnvironment)

Aggregations

JdbcEnvironment (org.hibernate.engine.jdbc.env.spi.JdbcEnvironment)29 Iterator (java.util.Iterator)6 Namespace (org.hibernate.boot.model.relational.Namespace)5 Dialect (org.hibernate.dialect.Dialect)5 Column (org.hibernate.mapping.Column)5 Table (org.hibernate.mapping.Table)5 Identifier (org.hibernate.boot.model.naming.Identifier)4 QualifiedName (org.hibernate.boot.model.relational.QualifiedName)3 Sequence (org.hibernate.boot.model.relational.Sequence)3 StandardServiceRegistry (org.hibernate.boot.registry.StandardServiceRegistry)3 ArrayList (java.util.ArrayList)2 HashSet (java.util.HashSet)2 EntityMode (org.hibernate.EntityMode)2 AuxiliaryDatabaseObject (org.hibernate.boot.model.relational.AuxiliaryDatabaseObject)2 Database (org.hibernate.boot.model.relational.Database)2 InitCommand (org.hibernate.boot.model.relational.InitCommand)2 StandardServiceRegistryBuilder (org.hibernate.boot.registry.StandardServiceRegistryBuilder)2 ClassLoadingException (org.hibernate.boot.registry.classloading.spi.ClassLoadingException)2 ExtractedDatabaseMetaData (org.hibernate.engine.jdbc.env.spi.ExtractedDatabaseMetaData)2 FilterDefinition (org.hibernate.engine.spi.FilterDefinition)2