Skip to content

Commit 4899a1d

Browse files
committed
HHH-10066 - Drop and recreate AuxiliaryDatabaseObjects as part of schema update
(cherry picked from commit 59a8d31)
1 parent 398cec2 commit 4899a1d

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

hibernate-core/src/main/java/org/hibernate/tool/schema/internal/SchemaMigratorImpl.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import org.hibernate.boot.Metadata;
1515
import org.hibernate.boot.model.naming.Identifier;
16+
import org.hibernate.boot.model.relational.AuxiliaryDatabaseObject;
1617
import org.hibernate.boot.model.relational.Database;
1718
import org.hibernate.boot.model.relational.Exportable;
1819
import org.hibernate.boot.model.relational.Namespace;
@@ -72,6 +73,38 @@ protected void doMigrationToTargets(
7273
final Set<String> exportIdentifiers = new HashSet<String>( 50 );
7374

7475
final Database database = metadata.getDatabase();
76+
final JdbcEnvironment jdbcEnvironment = database.getJdbcEnvironment();
77+
final Dialect dialect = jdbcEnvironment.getDialect();
78+
79+
// Drop all AuxiliaryDatabaseObjects
80+
for ( AuxiliaryDatabaseObject auxiliaryDatabaseObject : database.getAuxiliaryDatabaseObjects() ) {
81+
if ( !auxiliaryDatabaseObject.appliesToDialect( dialect ) ) {
82+
continue;
83+
}
84+
85+
applySqlStrings(
86+
dialect.getAuxiliaryDatabaseObjectExporter().getSqlDropStrings( auxiliaryDatabaseObject, metadata ),
87+
targets,
88+
true
89+
);
90+
}
91+
92+
// Create before-table AuxiliaryDatabaseObjects
93+
for ( AuxiliaryDatabaseObject auxiliaryDatabaseObject : database.getAuxiliaryDatabaseObjects() ) {
94+
if ( auxiliaryDatabaseObject.beforeTablesOnCreation() ) {
95+
continue;
96+
}
97+
if ( !auxiliaryDatabaseObject.appliesToDialect( dialect ) ) {
98+
continue;
99+
}
100+
101+
applySqlStrings(
102+
auxiliaryDatabaseObject.sqlCreateStrings( jdbcEnvironment.getDialect() ),
103+
targets,
104+
true
105+
);
106+
}
107+
75108
boolean tryToCreateCatalogs = false;
76109
boolean tryToCreateSchemas = false;
77110

@@ -175,6 +208,22 @@ protected void doMigrationToTargets(
175208
);
176209
}
177210
}
211+
212+
// Create after-table AuxiliaryDatabaseObjects
213+
for ( AuxiliaryDatabaseObject auxiliaryDatabaseObject : database.getAuxiliaryDatabaseObjects() ) {
214+
if ( !auxiliaryDatabaseObject.beforeTablesOnCreation() ) {
215+
continue;
216+
}
217+
if ( !auxiliaryDatabaseObject.appliesToDialect( dialect ) ) {
218+
continue;
219+
}
220+
221+
applySqlStrings(
222+
auxiliaryDatabaseObject.sqlCreateStrings( jdbcEnvironment.getDialect() ),
223+
targets,
224+
true
225+
);
226+
}
178227
}
179228

180229
private void createTable(Table table, Metadata metadata, List<Target> targets) {

0 commit comments

Comments
 (0)