示例#1
0
  /** 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());
    }
  }
示例#2
0
  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();
  }