@Override protected NameSpaceTablesInformation performTablesMigration( Metadata metadata, DatabaseInformation existingDatabase, ExecutionOptions options, Dialect dialect, Formatter formatter, Set<String> exportIdentifiers, boolean tryToCreateCatalogs, boolean tryToCreateSchemas, Set<Identifier> exportedCatalogs, Namespace namespace, GenerationTarget[] targets) { final NameSpaceTablesInformation tablesInformation = new NameSpaceTablesInformation( metadata.getDatabase().getJdbcEnvironment().getIdentifierHelper()); if (schemaFilter.includeNamespace(namespace)) { createSchemaAndCatalog( existingDatabase, options, dialect, formatter, tryToCreateCatalogs, tryToCreateSchemas, exportedCatalogs, namespace, targets); final NameSpaceTablesInformation tables = existingDatabase.getTablesInformation(namespace); for (Table table : namespace.getTables()) { if (schemaFilter.includeTable(table) && table.isPhysicalTable()) { checkExportIdentifier(table, exportIdentifiers); final TableInformation tableInformation = tables.getTableInformation(table); if (tableInformation == null) { createTable(table, dialect, metadata, formatter, options, targets); } else if (tableInformation != null && tableInformation.isPhysicalTable()) { tablesInformation.addTableInformation(tableInformation); migrateTable(table, tableInformation, dialect, metadata, formatter, options, targets); } } } for (Table table : namespace.getTables()) { if (schemaFilter.includeTable(table) && table.isPhysicalTable()) { final TableInformation tableInformation = tablesInformation.getTableInformation(table); if (tableInformation == null || (tableInformation != null && tableInformation.isPhysicalTable())) { applyIndexes(table, tableInformation, dialect, metadata, formatter, options, targets); applyUniqueKeys( table, tableInformation, dialect, metadata, formatter, options, targets); } } } } return tablesInformation; }
public Iterator sqlAlterStrings( Dialect dialect, Mapping p, TableInformation tableInfo, String defaultCatalog, String defaultSchema) throws HibernateException { StringBuilder root = new StringBuilder("alter table ") .append(getQualifiedName(dialect, defaultCatalog, defaultSchema)) .append(' ') .append(dialect.getAddColumnString()); Iterator iter = getColumnIterator(); List results = new ArrayList(); while (iter.hasNext()) { final Column column = (Column) iter.next(); final ColumnInformation columnInfo = tableInfo.getColumn(Identifier.toIdentifier(column.getName(), column.isQuoted())); if (columnInfo == null) { // the column doesnt exist at all. StringBuilder alter = new StringBuilder(root.toString()) .append(' ') .append(column.getQuotedName(dialect)) .append(' ') .append(column.getSqlType(dialect, p)); String defaultValue = column.getDefaultValue(); if (defaultValue != null) { alter.append(" default ").append(defaultValue); } if (column.isNullable()) { alter.append(dialect.getNullColumnString()); } else { alter.append(" not null"); } if (column.isUnique()) { String keyName = Constraint.generateName("UK_", this, column); UniqueKey uk = getOrCreateUniqueKey(keyName); uk.addColumn(column); alter.append(dialect.getUniqueDelegate().getColumnDefinitionUniquenessFragment(column)); } if (column.hasCheckConstraint() && dialect.supportsColumnCheck()) { alter.append(" check(").append(column.getCheckConstraint()).append(")"); } String columnComment = column.getComment(); if (columnComment != null) { alter.append(dialect.getColumnComment(columnComment)); } alter.append(dialect.getAddColumnSuffixString()); results.add(alter.toString()); } } if (results.isEmpty()) { Logger.getLogger(SchemaUpdate.class) .debugf("No alter strings for table : %s", getQuotedName()); } return results.iterator(); }