Open Source Repository

Home /hibernate/hibernate-3.2.4.ga | Repository Home


org/hibernate/mapping/UniqueKey.java
//$Id: UniqueKey.java 10660 2006-10-31 02:18:40Z epbernard $
package org.hibernate.mapping;

import java.util.Iterator;

import org.hibernate.dialect.Dialect;
import org.hibernate.engine.Mapping;
import org.hibernate.util.StringHelper;

/**
 * A relational unique key constraint
 *
 @author Gavin King
 */
public class UniqueKey extends Constraint {

  public String sqlConstraintString(Dialect dialect) {
    StringBuffer buf = new StringBuffer"unique (" );
    Iterator iter = getColumnIterator();
    boolean nullable = false;
    while iter.hasNext() ) {
      Column column = (Columniter.next();
      if !nullable && column.isNullable() ) nullable = true;
      buf.appendcolumn.getQuotedNamedialect ) );
      if iter.hasNext() ) buf.append", " );
    }
    //do not add unique constraint on DB not supporting unique and nullable columns
    return !nullable || dialect.supportsNotNullUnique() ?
        buf.append')' ).toString() :
        null;
  }

  public String sqlConstraintString(Dialect dialect, String constraintName, String defaultCatalog,
                    String defaultSchema) {
    StringBuffer buf = new StringBuffer(
        dialect.getAddPrimaryKeyConstraintStringconstraintName )
    ).append'(' );
    Iterator iter = getColumnIterator();
    boolean nullable = false;
    while iter.hasNext() ) {
      Column column = (Columniter.next();
      if !nullable && column.isNullable() ) nullable = true;
      buf.appendcolumn.getQuotedNamedialect ) );
      if iter.hasNext() ) buf.append", " );
    }
    return !nullable || dialect.supportsNotNullUnique() ?
        StringHelper.replacebuf.append')' ).toString()"primary key""unique" :
        //TODO: improve this hack!
        null;
  }

  public String sqlCreateString(Dialect dialect, Mapping p, String defaultCatalog, String defaultSchema) {
    if dialect.supportsUniqueConstraintInCreateAlterTable() ) {
      return super.sqlCreateStringdialect, p, defaultCatalog, defaultSchema );
    }
    else {
      return Index.buildSqlCreateIndexStringdialect, getName(), getTable(), getColumnIterator(), true,
          defaultCatalog, defaultSchema );
    }
  }

  public String sqlDropString(Dialect dialect, String defaultCatalog, String defaultSchema) {
    if dialect.supportsUniqueConstraintInCreateAlterTable() ) {
      return super.sqlDropStringdialect, defaultCatalog, defaultSchema );
    }
    else {
      return Index.buildSqlDropIndexStringdialect, getTable(), getName(), defaultCatalog, defaultSchema );
    }
  }

  public boolean isGenerated(Dialect dialect) {
    if dialect.supportsNotNullUnique() ) return true;
    Iterator iter = getColumnIterator();
    while iter.hasNext() ) {
      if ( ( (Columniter.next() ).isNullable() ) {
        return false;
      }
    }
    return true;
  }

}