예제 #1
0
  /*
   * Tries to determine whether the given column is an identity column.
   *
   * @param table The table
   *
   * @param column The column
   *
   * @return <code>true</code> if the column is an identity column
   */
  protected boolean isAutoIncrement(Connection connection, Table table, Column column)
      throws SQLException {
    // TODO: For now, we only check whether there is a sequence & trigger as
    // generated by DdlUtils
    // But once sequence/trigger support is in place, it might be possible
    // to 'parse' the
    // trigger body (via SELECT trigger_name, trigger_body FROM
    // user_triggers) in order to
    // determine whether it fits our auto-increment definition
    PreparedStatement prepStmt = null;
    IDdlBuilder builder = getPlatform().getDdlBuilder();
    String triggerName =
        builder.getConstraintName(OracleDdlBuilder.PREFIX_TRIGGER, table, column.getName(), null);
    String seqName =
        builder.getConstraintName(OracleDdlBuilder.PREFIX_SEQUENCE, table, column.getName(), null);

    if (!getPlatform().getDdlBuilder().isDelimitedIdentifierModeOn()) {
      triggerName = triggerName.toUpperCase();
      seqName = seqName.toUpperCase();
    }
    try {
      prepStmt = connection.prepareStatement("SELECT * FROM user_triggers WHERE trigger_name = ?");
      prepStmt.setString(1, triggerName);

      ResultSet resultSet = prepStmt.executeQuery();

      if (!resultSet.next()) {
        resultSet.close();
        return false;
      }
      // we have a trigger, so lets check the sequence
      prepStmt.close();

      prepStmt =
          connection.prepareStatement("SELECT * FROM user_sequences WHERE sequence_name = ?");
      prepStmt.setString(1, seqName);

      resultSet = prepStmt.executeQuery();
      boolean resultFound = resultSet.next();
      resultSet.close();
      return resultFound;
    } finally {
      if (prepStmt != null) {
        prepStmt.close();
      }
    }
  }
예제 #2
0
파일: DataDiff.java 프로젝트: digoal/metl
  private void alterCaseToMatchLogicalCase(Table table) {
    table.setName(table.getName().toUpperCase());

    Column[] columns = table.getColumns();
    for (Column column : columns) {
      column.setName(column.getName().toUpperCase());
    }

    IIndex[] indexes = table.getIndices();
    for (IIndex index : indexes) {
      index.setName(index.getName().toUpperCase());

      IndexColumn[] indexColumns = index.getColumns();
      for (IndexColumn indexColumn : indexColumns) {
        indexColumn.setName(indexColumn.getName().toUpperCase());
      }
    }
  }
  public static void write(Table table, Writer output) {

    try {
      output.write("\t<table name=\"" + StringEscapeUtils.escapeXml(table.getName()) + "\">\n");

      for (Column column : table.getColumns()) {
        output.write("\t\t<column name=\"" + StringEscapeUtils.escapeXml(column.getName()) + "\"");
        if (column.isPrimaryKey()) {
          output.write(" primaryKey=\"" + column.isPrimaryKey() + "\"");
        }
        if (column.isRequired()) {
          output.write(" required=\"" + column.isRequired() + "\"");
        }
        if (column.getMappedType() != null) {
          output.write(" type=\"" + column.getMappedType() + "\"");
        }
        if (column.getSize() != null) {
          output.write(" size=\"" + column.getSize() + "\"");
        }
        if (column.getDefaultValue() != null) {
          output.write(
              " default=\"" + StringEscapeUtils.escapeXml(column.getDefaultValue()) + "\"");
        }
        if (column.isAutoIncrement()) {
          output.write(" autoIncrement=\"" + column.isAutoIncrement() + "\"");
        }
        if (column.getJavaName() != null) {
          output.write(" javaName=\"" + column.getJavaName() + "\"");
        }

        if (column.getPlatformColumns() != null && column.getPlatformColumns().size() > 0) {
          Collection<PlatformColumn> platformColumns = column.getPlatformColumns().values();
          output.write(">\n");
          for (PlatformColumn platformColumn : platformColumns) {
            output.write("\t\t\t<platform-column name=\"" + platformColumn.getName() + "\"");
            output.write(" type=\"" + platformColumn.getType() + "\"");
            if (platformColumn.getSize() > 0) {
              output.write(" size=\"" + platformColumn.getSize() + "\"");
            }
            if (platformColumn.getDecimalDigits() > 0) {
              output.write(" decimalDigits=\"" + platformColumn.getDecimalDigits() + "\"");
            }

            if (platformColumn.getDefaultValue() != null) {
              output.write(
                  " default=\""
                      + StringEscapeUtils.escapeXml(platformColumn.getDefaultValue())
                      + "\"");
            }

            output.write("/>\n");
          }
          output.write("\t\t</column>\n");
        } else {
          output.write("/>\n");
        }
      }

      for (ForeignKey fk : table.getForeignKeys()) {
        output.write(
            "\t\t<foreign-key name=\""
                + StringEscapeUtils.escapeXml(fk.getName())
                + "\" foreignTable=\""
                + StringEscapeUtils.escapeXml(fk.getForeignTableName())
                + "\">\n");
        for (Reference ref : fk.getReferences()) {
          output.write(
              "\t\t\t<reference local=\""
                  + StringEscapeUtils.escapeXml(ref.getLocalColumnName())
                  + "\" foreign=\""
                  + StringEscapeUtils.escapeXml(ref.getForeignColumnName())
                  + "\"/>\n");
        }
        output.write("\t\t</foreign-key>\n");
      }

      for (IIndex index : table.getIndices()) {
        if (index.isUnique()) {
          output.write(
              "\t\t<unique name=\"" + StringEscapeUtils.escapeXml(index.getName()) + "\">\n");
          for (IndexColumn column : index.getColumns()) {
            output.write(
                "\t\t\t<unique-column name=\""
                    + StringEscapeUtils.escapeXml(column.getName())
                    + "\"/>\n");
          }
          output.write("\t\t</unique>\n");
        } else {
          output.write(
              "\t\t<index name=\"" + StringEscapeUtils.escapeXml(index.getName()) + "\">\n");
          for (IndexColumn column : index.getColumns()) {
            output.write(
                "\t\t\t<index-column name=\""
                    + StringEscapeUtils.escapeXml(column.getName())
                    + "\"");
            if (column.getSize() != null) {
              output.write(" size=\"" + column.getSize() + "\"");
            }
            output.write("/>\n");
          }
          output.write("\t\t</index>\n");
        }
      }

      output.write("\t</table>\n");
    } catch (IOException e) {
      throw new IoException(e);
    }
  }