package org.hibernate.dialect.unique;
import java.util.Iterator;
import org.hibernate.dialect.Dialect;
import org.hibernate.metamodel.relational.Column;
import org.hibernate.metamodel.relational.Table;
import org.hibernate.metamodel.relational.UniqueKey;
public class DefaultUniqueDelegate implements UniqueDelegate {
protected final Dialect dialect;
public DefaultUniqueDelegate( Dialect dialect ) {
this.dialect = dialect;
}
@Override
public String getColumnDefinitionUniquenessFragment(org.hibernate.mapping.Column column) {
return "";
}
@Override
public String getTableCreationUniqueConstraintsFragment(org.hibernate.mapping.Table table) {
return "";
}
@Override
public String getAlterTableToAddUniqueKeyCommand(
org.hibernate.mapping.UniqueKey uniqueKey,
String defaultCatalog,
String defaultSchema) {
final String tableName = uniqueKey.getTable().getQualifiedName( dialect, defaultCatalog, defaultSchema );
final String constraintName = dialect.quote( uniqueKey.getName() );
return "alter table " + tableName + " add constraint " + constraintName + " " + uniqueConstraintSql( uniqueKey );
}
protected String uniqueConstraintSql( org.hibernate.mapping.UniqueKey uniqueKey ) {
final StringBuilder sb = new StringBuilder();
sb.append( "unique (" );
final Iterator<org.hibernate.mapping.Column> columnIterator = uniqueKey.columnIterator();
while ( columnIterator.hasNext() ) {
final org.hibernate.mapping.Column column = columnIterator.next();
sb.append( column.getQuotedName( dialect ) );
if ( uniqueKey.getColumnOrderMap().containsKey( column ) ) {
sb.append( " " ).append( uniqueKey.getColumnOrderMap().get( column ) );
}
if ( columnIterator.hasNext() ) {
sb.append( ", " );
}
}
return sb.append( ')' ).toString();
}
@Override
public String getAlterTableToDropUniqueKeyCommand(
org.hibernate.mapping.UniqueKey uniqueKey,
String defaultCatalog,
String defaultSchema) {
final StringBuilder buf = new StringBuilder( "alter table " );
buf.append( uniqueKey.getTable().getQualifiedName( dialect, defaultCatalog, defaultSchema ) );
buf.append(" drop constraint " );
if ( dialect.supportsIfExistsBeforeConstraintName() ) {
buf.append( "if exists " );
}
buf.append( dialect.quote( uniqueKey.getName() ) );
if ( dialect.supportsIfExistsAfterConstraintName() ) {
buf.append( " if exists" );
}
return buf.toString();
}
@Override
public String getColumnDefinitionUniquenessFragment(Column column) {
return "";
}
@Override
public String getTableCreationUniqueConstraintsFragment(Table table) {
return "";
}
@Override
public String getAlterTableToAddUniqueKeyCommand(UniqueKey uniqueKey) {
final String tableName = uniqueKey.getTable().getQualifiedName( dialect );
final String constraintName = dialect.quote( uniqueKey.getName() );
return "alter table " + tableName + " add constraint " + constraintName + uniqueConstraintSql( uniqueKey );
}
protected String uniqueConstraintSql( UniqueKey uniqueKey ) {
final StringBuilder sb = new StringBuilder( " unique (" );
final Iterator columnIterator = uniqueKey.getColumns().iterator();
while ( columnIterator.hasNext() ) {
final org.hibernate.mapping.Column column = (org.hibernate.mapping.Column) columnIterator.next();
sb.append( column.getQuotedName( dialect ) );
if ( columnIterator.hasNext() ) {
sb.append( ", " );
}
}
return sb.append( ')' ).toString();
}
@Override
public String getAlterTableToDropUniqueKeyCommand(UniqueKey uniqueKey) {
final String tableName = uniqueKey.getTable().getQualifiedName( dialect );
final String constraintName = dialect.quote( uniqueKey.getName() );
return "alter table " + tableName + " drop constraint " + constraintName;
}
}