/** Generates the foreign key declaration for a given Constraint object. */ private void getFKStatement(StringBuffer a) { if (!getName().isReservedName()) { a.append(Tokens.T_CONSTRAINT).append(' '); a.append(getName().statementName); a.append(' '); } a.append(Tokens.T_FOREIGN).append(' ').append(Tokens.T_KEY); int[] col = getRefColumns(); getColumnList(getRef(), col, col.length, a); a.append(' ').append(Tokens.T_REFERENCES).append(' '); a.append(getMain().getName().getSchemaQualifiedStatementName()); col = getMainColumns(); getColumnList(getMain(), col, col.length, a); if (getDeleteAction() != Constraint.NO_ACTION) { a.append(' ').append(Tokens.T_ON).append(' ').append(Tokens.T_DELETE).append(' '); a.append(getDeleteActionString()); } if (getUpdateAction() != Constraint.NO_ACTION) { a.append(' ').append(Tokens.T_ON).append(' ').append(Tokens.T_UPDATE).append(' '); a.append(getUpdateActionString()); } }
public String getSQL() { StringBuffer sb = new StringBuffer(); switch (getConstraintType()) { case Constraint.PRIMARY_KEY: if (getMainColumns().length > 1 || (getMainColumns().length == 1 && !getName().isReservedName())) { if (!getName().isReservedName()) { sb.append(Tokens.T_CONSTRAINT).append(' '); sb.append(getName().statementName).append(' '); } sb.append(Tokens.T_PRIMARY).append(' ').append(Tokens.T_KEY); getColumnList(getMain(), getMainColumns(), getMainColumns().length, sb); } break; case Constraint.UNIQUE: if (!getName().isReservedName()) { sb.append(Tokens.T_CONSTRAINT).append(' '); sb.append(getName().statementName); sb.append(' '); } sb.append(Tokens.T_UNIQUE); int[] col = getMainColumns(); getColumnList(getMain(), col, col.length, sb); break; case Constraint.FOREIGN_KEY: if (isForward) { sb.append(Tokens.T_ALTER).append(' ').append(Tokens.T_TABLE).append(' '); sb.append(getRef().getName().getSchemaQualifiedStatementName()); sb.append(' ').append(Tokens.T_ADD).append(' '); getFKStatement(sb); } else { getFKStatement(sb); } break; case Constraint.CHECK: if (isNotNull()) { break; } if (!getName().isReservedName()) { sb.append(Tokens.T_CONSTRAINT).append(' '); sb.append(getName().statementName).append(' '); } sb.append(Tokens.T_CHECK).append('('); sb.append(check.getSQL()); sb.append(')'); // should not throw as it is already tested OK break; } return sb.toString(); }