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() };
}
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() };
}
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 };
}
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()]);
}
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() };
}
Aggregations