예제 #1
0
 /**
  * Set the primary key
  *
  * @param name
  * @param columns
  * @return
  */
 public CreateTableClause primaryKey(String name, String... columns) {
   for (int i = 0; i < columns.length; i++) {
     columns[i] = templates.quoteIdentifier(columns[i]);
   }
   primaryKey = new PrimaryKeyData(templates.quoteIdentifier(name), columns);
   return this;
 }
예제 #2
0
 /**
  * Add a new column definition
  *
  * @param name
  * @param type
  * @return
  */
 public CreateTableClause column(String name, Class<?> type) {
   columns.add(new ColumnData(templates.quoteIdentifier(name), templates.getTypeForClass(type)));
   return this;
 }
예제 #3
0
 public CreateTableClause(Connection conn, SQLTemplates templates, String table) {
   this.connection = conn;
   this.templates = templates;
   this.table = templates.quoteIdentifier(table);
 }
예제 #4
0
  /** Execute the clause */
  @SuppressWarnings("SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE")
  public void execute() {
    StringBuilder builder = new StringBuilder();
    builder.append(templates.getCreateTable() + table + " (\n");
    List<String> lines = new ArrayList<String>(columns.size() + foreignKeys.size() + 1);
    // columns
    for (ColumnData column : columns) {
      StringBuilder line = new StringBuilder();
      line.append(column.getName() + " " + column.getType().toUpperCase());
      if (column.getSize() != null) {
        line.append("(" + column.getSize() + ")");
      }
      if (!column.isNullAllowed()) {
        line.append(templates.getNotNull().toUpperCase());
      }
      if (column.isAutoIncrement()) {
        line.append(templates.getAutoIncrement().toUpperCase());
      }
      lines.add(line.toString());
    }

    // primary key
    if (primaryKey != null) {
      StringBuilder line = new StringBuilder();
      line.append("CONSTRAINT " + primaryKey.getName() + " ");
      line.append("PRIMARY KEY(" + COMMA_JOINER.join(primaryKey.getColumns()) + ")");
      lines.add(line.toString());
    }

    // foreign keys
    for (ForeignKeyData foreignKey : foreignKeys) {
      StringBuilder line = new StringBuilder();
      line.append("CONSTRAINT " + foreignKey.getName() + " ");
      line.append("FOREIGN KEY(" + COMMA_JOINER.join(foreignKey.getForeignColumns()) + ") ");
      line.append(
          "REFERENCES "
              + foreignKey.getTable()
              + "("
              + COMMA_JOINER.join(foreignKey.getParentColumns())
              + ")");
      lines.add(line.toString());
    }
    builder.append("  " + Joiner.on(",\n  ").join(lines));
    builder.append("\n)\n");
    logger.info(builder.toString());

    Statement stmt = null;
    try {
      stmt = connection.createStatement();
      stmt.execute(builder.toString());

      // indexes
      for (IndexData index : indexes) {
        String indexColumns = COMMA_JOINER.join(index.getColumns());
        String prefix = templates.getCreateIndex();
        if (index.isUnique()) {
          prefix = templates.getCreateUniqueIndex();
        }
        String sql =
            prefix + index.getName() + templates.getOn() + table + "(" + indexColumns + ")";
        logger.info(sql);
        stmt.execute(sql);
      }
    } catch (SQLException e) {
      throw new QueryException(e.getMessage(), e);
    } finally {
      if (stmt != null) {
        try {
          stmt.close();
        } catch (SQLException e) {
          throw new QueryException(e);
        }
      }
    }
  }
예제 #5
0
 /**
  * Add a foreign key
  *
  * @param name
  * @param columns
  * @return
  */
 public ForeignKeyBuilder foreignKey(String name, String... columns) {
   return new ForeignKeyBuilder(
       this, templates, foreignKeys, templates.quoteIdentifier(name), columns);
 }