01: //$Id: UniqueKey.java 10660 2006-10-31 02:18:40Z epbernard $
02: package org.hibernate.mapping;
03:
04: import java.util.Iterator;
05:
06: import org.hibernate.dialect.Dialect;
07: import org.hibernate.engine.Mapping;
08: import org.hibernate.util.StringHelper;
09:
10: /**
11: * A relational unique key constraint
12: *
13: * @author Gavin King
14: */
15: public class UniqueKey extends Constraint {
16:
17: public String sqlConstraintString(Dialect dialect) {
18: StringBuffer buf = new StringBuffer("unique (");
19: Iterator iter = getColumnIterator();
20: boolean nullable = false;
21: while (iter.hasNext()) {
22: Column column = (Column) iter.next();
23: if (!nullable && column.isNullable())
24: nullable = true;
25: buf.append(column.getQuotedName(dialect));
26: if (iter.hasNext())
27: buf.append(", ");
28: }
29: //do not add unique constraint on DB not supporting unique and nullable columns
30: return !nullable || dialect.supportsNotNullUnique() ? buf
31: .append(')').toString() : null;
32: }
33:
34: public String sqlConstraintString(Dialect dialect,
35: String constraintName, String defaultCatalog,
36: String defaultSchema) {
37: StringBuffer buf = new StringBuffer(dialect
38: .getAddPrimaryKeyConstraintString(constraintName))
39: .append('(');
40: Iterator iter = getColumnIterator();
41: boolean nullable = false;
42: while (iter.hasNext()) {
43: Column column = (Column) iter.next();
44: if (!nullable && column.isNullable())
45: nullable = true;
46: buf.append(column.getQuotedName(dialect));
47: if (iter.hasNext())
48: buf.append(", ");
49: }
50: return !nullable || dialect.supportsNotNullUnique() ? StringHelper
51: .replace(buf.append(')').toString(), "primary key",
52: "unique")
53: :
54: //TODO: improve this hack!
55: null;
56: }
57:
58: public String sqlCreateString(Dialect dialect, Mapping p,
59: String defaultCatalog, String defaultSchema) {
60: if (dialect.supportsUniqueConstraintInCreateAlterTable()) {
61: return super .sqlCreateString(dialect, p, defaultCatalog,
62: defaultSchema);
63: } else {
64: return Index.buildSqlCreateIndexString(dialect, getName(),
65: getTable(), getColumnIterator(), true,
66: defaultCatalog, defaultSchema);
67: }
68: }
69:
70: public String sqlDropString(Dialect dialect, String defaultCatalog,
71: String defaultSchema) {
72: if (dialect.supportsUniqueConstraintInCreateAlterTable()) {
73: return super .sqlDropString(dialect, defaultCatalog,
74: defaultSchema);
75: } else {
76: return Index.buildSqlDropIndexString(dialect, getTable(),
77: getName(), defaultCatalog, defaultSchema);
78: }
79: }
80:
81: public boolean isGenerated(Dialect dialect) {
82: if (dialect.supportsNotNullUnique())
83: return true;
84: Iterator iter = getColumnIterator();
85: while (iter.hasNext()) {
86: if (((Column) iter.next()).isNullable()) {
87: return false;
88: }
89: }
90: return true;
91: }
92:
93: }
|