From d00fa51c4c02c5d03d9689f079109dde8ec79f7f Mon Sep 17 00:00:00 2001 From: Ivan Vakhrushev Date: Sat, 30 Sep 2023 21:58:40 +0400 Subject: [PATCH] Breaking change! Changed DbMigrationGenerator: now generate() method returns a list of strings. --- build.gradle.kts | 2 +- .../AbstractDbMigrationGenerator.java | 18 ++++++------- ...olumnWithSerialTypeMigrationGenerator.java | 9 ++++--- .../pg/generator/DbMigrationGenerator.java | 7 ++--- .../ForeignKeyMigrationGenerator.java | 5 ++-- ...nWithSerialTypeMigrationGeneratorTest.java | 15 ++++++----- .../ForeignKeyMigrationGeneratorTest.java | 26 +++++++++---------- 7 files changed, 41 insertions(+), 41 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index f6b1e1a8..ad1ec063 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -26,7 +26,7 @@ description = "pg-index-health build" allprojects { group = "io.github.mfvanek" - version = "0.9.6" + version = "0.10.0" repositories { mavenLocal() diff --git a/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/AbstractDbMigrationGenerator.java b/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/AbstractDbMigrationGenerator.java index e7ce6d35..f5d824ac 100644 --- a/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/AbstractDbMigrationGenerator.java +++ b/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/AbstractDbMigrationGenerator.java @@ -12,6 +12,7 @@ import io.github.mfvanek.pg.model.table.TableNameAware; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import javax.annotation.Nonnull; @@ -33,19 +34,16 @@ abstract class AbstractDbMigrationGenerator implements */ @Nonnull @Override - public final String generate(@Nonnull final List rows) { + public final List generate(@Nonnull final List rows) { Objects.requireNonNull(rows, "rows cannot be null"); - final StringBuilder queryBuilder = new StringBuilder(); - for (int i = 0; i < rows.size(); ++i) { - if (i != 0) { - queryBuilder.append(System.lineSeparator()) - .append(System.lineSeparator()); - } - generate(queryBuilder, rows.get(i)); + final List migrations = new ArrayList<>(rows.size()); + for (final T row : rows) { + migrations.add(generate(row)); } - return queryBuilder.toString(); + return migrations; } - protected abstract void generate(@Nonnull StringBuilder queryBuilder, @Nonnull T row); + @Nonnull + protected abstract String generate(@Nonnull T row); } diff --git a/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/ColumnWithSerialTypeMigrationGenerator.java b/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/ColumnWithSerialTypeMigrationGenerator.java index 0b9a6751..afde4d02 100644 --- a/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/ColumnWithSerialTypeMigrationGenerator.java +++ b/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/ColumnWithSerialTypeMigrationGenerator.java @@ -31,9 +31,10 @@ public ColumnWithSerialTypeMigrationGenerator(@Nonnull final GeneratingOptions o } @Override - protected void generate(@Nonnull final StringBuilder queryBuilder, @Nonnull final ColumnWithSerialType column) { - queryBuilder.append(dropDefaultValueGenerator.generate(column)) - .append(System.lineSeparator()) - .append(dropSequenceGenerator.generate(column)); + @Nonnull + protected String generate(@Nonnull final ColumnWithSerialType column) { + return dropDefaultValueGenerator.generate(column) + + System.lineSeparator() + + dropSequenceGenerator.generate(column); } } diff --git a/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/DbMigrationGenerator.java b/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/DbMigrationGenerator.java index 21f1cbe5..2c572fae 100644 --- a/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/DbMigrationGenerator.java +++ b/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/DbMigrationGenerator.java @@ -26,11 +26,12 @@ public interface DbMigrationGenerator { /** - * Generates sql migration based on the specified rows. + * Generates sql migrations based on the specified rows. * * @param rows a set of data on the basis of which the sql migration will be generated - * @return generated sql migration + * @return a list of generated sql migrations + * @since 0.10.0 */ @Nonnull - String generate(@Nonnull List rows); + List generate(@Nonnull List rows); } diff --git a/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/ForeignKeyMigrationGenerator.java b/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/ForeignKeyMigrationGenerator.java index 40080c1a..b413a558 100644 --- a/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/ForeignKeyMigrationGenerator.java +++ b/pg-index-health-generator/src/main/java/io/github/mfvanek/pg/generator/ForeignKeyMigrationGenerator.java @@ -29,7 +29,8 @@ public ForeignKeyMigrationGenerator(@Nonnull final GeneratingOptions options) { } @Override - protected void generate(@Nonnull final StringBuilder queryBuilder, @Nonnull final ForeignKey foreignKey) { - queryBuilder.append(generator.generate(foreignKey)); + @Nonnull + protected String generate(@Nonnull final ForeignKey foreignKey) { + return generator.generate(foreignKey); } } diff --git a/pg-index-health-generator/src/test/java/io/github/mfvanek/pg/generator/ColumnWithSerialTypeMigrationGeneratorTest.java b/pg-index-health-generator/src/test/java/io/github/mfvanek/pg/generator/ColumnWithSerialTypeMigrationGeneratorTest.java index 23089e12..cdac7d81 100644 --- a/pg-index-health-generator/src/test/java/io/github/mfvanek/pg/generator/ColumnWithSerialTypeMigrationGeneratorTest.java +++ b/pg-index-health-generator/src/test/java/io/github/mfvanek/pg/generator/ColumnWithSerialTypeMigrationGeneratorTest.java @@ -35,7 +35,8 @@ void forSingleColumn() { final ColumnWithSerialTypeMigrationGenerator generator = new ColumnWithSerialTypeMigrationGenerator(GeneratingOptions.builder().build()); assertThat(generator.generate(List.of(column()))) - .isEqualTo("alter table if exists s1.t1" + System.lineSeparator() + + .hasSize(1) + .containsExactly("alter table if exists s1.t1" + System.lineSeparator() + " alter column col1 drop default;" + System.lineSeparator() + "drop sequence if exists s1.seq1;"); } @@ -46,13 +47,13 @@ void forSeveralColumns() { final ColumnWithSerialTypeMigrationGenerator generator = new ColumnWithSerialTypeMigrationGenerator(GeneratingOptions.builder().build()); assertThat(generator.generate(List.of(column(), secondColumn))) - .isEqualTo("alter table if exists s1.t1" + System.lineSeparator() + - " alter column col1 drop default;" + System.lineSeparator() + - "drop sequence if exists s1.seq1;" + System.lineSeparator() + - System.lineSeparator() + + .hasSize(2) + .containsExactly("alter table if exists s1.t1" + System.lineSeparator() + + " alter column col1 drop default;" + System.lineSeparator() + + "drop sequence if exists s1.seq1;", "alter table if exists s2.t2" + System.lineSeparator() + - " alter column col2 drop default;" + System.lineSeparator() + - "drop sequence if exists s2.seq2;"); + " alter column col2 drop default;" + System.lineSeparator() + + "drop sequence if exists s2.seq2;"); } @Nonnull diff --git a/pg-index-health-generator/src/test/java/io/github/mfvanek/pg/generator/ForeignKeyMigrationGeneratorTest.java b/pg-index-health-generator/src/test/java/io/github/mfvanek/pg/generator/ForeignKeyMigrationGeneratorTest.java index b8226cbb..e4c98af4 100644 --- a/pg-index-health-generator/src/test/java/io/github/mfvanek/pg/generator/ForeignKeyMigrationGeneratorTest.java +++ b/pg-index-health-generator/src/test/java/io/github/mfvanek/pg/generator/ForeignKeyMigrationGeneratorTest.java @@ -24,10 +24,10 @@ class ForeignKeyMigrationGeneratorTest { @Test void generateForSingleForeignKey() { final DbMigrationGenerator generator = new ForeignKeyMigrationGenerator(GeneratingOptions.builder().build()); - final String result = generator.generate(List.of(nullableColumnWithSchema())); + final var result = generator.generate(List.of(nullableColumnWithSchema())); assertThat(result) - .isNotBlank() - .isEqualTo("/* table_with_very_very_very_long_name_column_with_very_very_very_long_name_without_nulls_idx */" + System.lineSeparator() + + .hasSize(1) + .containsExactly("/* table_with_very_very_very_long_name_column_with_very_very_very_long_name_without_nulls_idx */" + System.lineSeparator() + "create index concurrently if not exists table_with_very_very_very_long_name_3202677_without_nulls_idx" + System.lineSeparator() + " on schema_name_that_should_be_omitted.table_with_very_very_very_long_name (column_with_very_very_very_long_name) " + "where column_with_very_very_very_long_name is not null;"); @@ -36,19 +36,17 @@ void generateForSingleForeignKey() { @Test void generateForSeveralForeignKeys() { final DbMigrationGenerator generator = new ForeignKeyMigrationGenerator(GeneratingOptions.builder().build()); - final String result = generator.generate( - List.of(severalColumnsWithNulls(), severalColumnsWithNulls(), nullableColumnWithSchema())); + final var result = generator.generate(List.of(severalColumnsWithNulls(), severalColumnsWithNulls(), nullableColumnWithSchema())); assertThat(result) - .isNotBlank() - .isEqualTo("create index concurrently if not exists custom_table_custom_column_1_custom_column_22_without_nulls_idx" + System.lineSeparator() + - " on custom_table (custom_column_1, custom_column_22) where custom_column_22 is not null;" + System.lineSeparator() + - System.lineSeparator() + + .hasSize(3) + .containsExactly( "create index concurrently if not exists custom_table_custom_column_1_custom_column_22_without_nulls_idx" + System.lineSeparator() + - " on custom_table (custom_column_1, custom_column_22) where custom_column_22 is not null;" + System.lineSeparator() + - System.lineSeparator() + + " on custom_table (custom_column_1, custom_column_22) where custom_column_22 is not null;", + "create index concurrently if not exists custom_table_custom_column_1_custom_column_22_without_nulls_idx" + System.lineSeparator() + + " on custom_table (custom_column_1, custom_column_22) where custom_column_22 is not null;", "/* table_with_very_very_very_long_name_column_with_very_very_very_long_name_without_nulls_idx */" + System.lineSeparator() + - "create index concurrently if not exists table_with_very_very_very_long_name_3202677_without_nulls_idx" + System.lineSeparator() + - " on schema_name_that_should_be_omitted.table_with_very_very_very_long_name (column_with_very_very_very_long_name) " + - "where column_with_very_very_very_long_name is not null;"); + "create index concurrently if not exists table_with_very_very_very_long_name_3202677_without_nulls_idx" + System.lineSeparator() + + " on schema_name_that_should_be_omitted.table_with_very_very_very_long_name (column_with_very_very_very_long_name) " + + "where column_with_very_very_very_long_name is not null;"); } }