diff --git a/jOOQ/src/main/java/org/jooq/MigrationConfiguration.java b/jOOQ/src/main/java/org/jooq/MigrationConfiguration.java index 2ade8581ec..62cfa888da 100644 --- a/jOOQ/src/main/java/org/jooq/MigrationConfiguration.java +++ b/jOOQ/src/main/java/org/jooq/MigrationConfiguration.java @@ -57,6 +57,7 @@ public final class MigrationConfiguration { private final boolean dropTableCascade; private final boolean alterTableDropCascade; private final boolean createOrReplaceView; + private final boolean createOrReplaceMaterializedView; private final boolean respectColumnOrder; /** @@ -70,6 +71,7 @@ public final class MigrationConfiguration { false, false, false, + false, false ); } @@ -81,6 +83,7 @@ public final class MigrationConfiguration { boolean dropTableCascade, boolean alterTableDropCascade, boolean createOrReplaceView, + boolean createOrReplaceMaterializedView, boolean respectColumnOrder ) { this.alterTableAddMultiple = alterTableAddMultiple; @@ -89,6 +92,7 @@ public final class MigrationConfiguration { this.dropTableCascade = dropTableCascade; this.alterTableDropCascade = alterTableDropCascade; this.createOrReplaceView = createOrReplaceView; + this.createOrReplaceMaterializedView = createOrReplaceMaterializedView; this.respectColumnOrder = respectColumnOrder; } @@ -112,6 +116,7 @@ public final class MigrationConfiguration { dropTableCascade, alterTableDropCascade, createOrReplaceView, + createOrReplaceMaterializedView, respectColumnOrder ); } @@ -136,6 +141,7 @@ public final class MigrationConfiguration { dropTableCascade, alterTableDropCascade, createOrReplaceView, + createOrReplaceMaterializedView, respectColumnOrder ); } @@ -160,6 +166,7 @@ public final class MigrationConfiguration { dropTableCascade, alterTableDropCascade, createOrReplaceView, + createOrReplaceMaterializedView, respectColumnOrder ); } @@ -184,6 +191,7 @@ public final class MigrationConfiguration { newDropTableCascade, alterTableDropCascade, createOrReplaceView, + createOrReplaceMaterializedView, respectColumnOrder ); } @@ -208,6 +216,7 @@ public final class MigrationConfiguration { dropTableCascade, newAlterTableDropCascade, createOrReplaceView, + createOrReplaceMaterializedView, respectColumnOrder ); } @@ -230,6 +239,30 @@ public final class MigrationConfiguration { dropTableCascade, alterTableDropCascade, newCreateOrReplaceView, + createOrReplaceMaterializedView, + respectColumnOrder + ); + } + + /** + * Whether the materialized views should be (create-or-)replaced or dropped and re-created. + */ + public final boolean createOrReplaceMaterializedView() { + return createOrReplaceMaterializedView; + } + + /** + * Whether the materialized views should be (create-or-)replaced or dropped and re-created. + */ + public final MigrationConfiguration createOrReplaceMaterializedView(boolean newCreateOrReplaceMaterializedView) { + return new MigrationConfiguration( + alterTableAddMultiple, + alterTableDropMultiple, + dropSchemaCascade, + dropTableCascade, + alterTableDropCascade, + createOrReplaceView, + newCreateOrReplaceMaterializedView, respectColumnOrder ); } @@ -252,6 +285,7 @@ public final class MigrationConfiguration { dropTableCascade, alterTableDropCascade, createOrReplaceView, + createOrReplaceMaterializedView, newRespectColumnOrder ); } diff --git a/jOOQ/src/main/java/org/jooq/impl/Diff.java b/jOOQ/src/main/java/org/jooq/impl/Diff.java index a151461cd1..de7e48a24d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Diff.java +++ b/jOOQ/src/main/java/org/jooq/impl/Diff.java @@ -44,6 +44,8 @@ import static org.jooq.SQLDialect.IGNITE; import static org.jooq.SQLDialect.MARIADB; // ... import static org.jooq.SQLDialect.MYSQL; +import static org.jooq.TableOptions.TableType.MATERIALIZED_VIEW; +import static org.jooq.TableOptions.TableType.VIEW; import static org.jooq.impl.Comparators.CHECK_COMP; import static org.jooq.impl.Comparators.FOREIGN_KEY_COMP; import static org.jooq.impl.Comparators.INDEX_COMP; @@ -114,7 +116,10 @@ final class Diff { Diff(Configuration configuration, MigrationConfiguration migrateConf, Meta meta1, Meta meta2) { this.migrateConf = migrateConf; - this.exportConf = new DDLExportConfiguration().createOrReplaceView(migrateConf.createOrReplaceView()); + this.exportConf = new DDLExportConfiguration() + .createOrReplaceView(migrateConf.createOrReplaceView()) + .createOrReplaceMaterializedView(migrateConf.createOrReplaceMaterializedView()); + this.ctx = configuration.dsl(); this.meta1 = meta1; this.meta2 = meta2; @@ -255,8 +260,10 @@ final class Diff { if (r.droppedFks.add(fk) && !migrateConf.dropTableCascade()) r.queries.add(ctx.alterTable(fk.getTable()).dropForeignKey(fk.constraint())); - if (t.getTableType().isView()) + if (t.getTableType() == VIEW) r.queries.add(ctx.dropView(t)); + else if (t.getTableType() == MATERIALIZED_VIEW) + r.queries.add(ctx.dropMaterializedView(t)); else if (t.getTableType() == TableType.TEMPORARY) r.queries.add(ctx.dropTemporaryTable(t)); else @@ -269,19 +276,21 @@ final class Diff { private final Merge