/** * 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; }
/** * 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; }
public CreateTableClause(Connection conn, SQLTemplates templates, String table) { this.connection = conn; this.templates = templates; this.table = templates.quoteIdentifier(table); }
/** 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); } } } }
/** * 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); }