/** 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); } } } }