Skip to content

Commit eda7a7d

Browse files
committed
Substitution in SQL
1 parent a1a75b8 commit eda7a7d

File tree

28 files changed

+293
-196
lines changed

28 files changed

+293
-196
lines changed

development.md

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,3 @@
1-
# Reset & open PostgreSQL logs
2-
```
3-
cd ./docker
4-
docker-compose down -v; docker-compose up -d; docker-compose logs -f postgresql
5-
```
6-
7-
# Open MS SQL shell
8-
```bash
9-
docker-compose exec mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'yourStrong(!)Password'
10-
```
11-
12-
# Open PostgreSQL shell
13-
```
14-
docker-compose exec postgresql psql -U r2dbc
15-
```
16-
17-
# Open MySQL shell
18-
```
19-
docker-compose exec mysql mysql -umysql-user -pmysql-password -Dr2dbc
20-
```
21-
221
# Making a release
232
```bash
243
export JAVA_HOME=/usr/lib/jvm/java-17

pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<groupId>name.nkonev.r2dbc-migrate</groupId>
66
<artifactId>r2dbc-migrate-parent</artifactId>
7-
<version>3.1.3-SNAPSHOT</version>
7+
<version>3.2.0-SNAPSHOT</version>
88
<name>r2dbc-migrate parent project</name>
99
<description>R2DBC migration tool and library</description>
1010
<packaging>pom</packaging>
@@ -51,6 +51,7 @@
5151
<maven.gpg.plugin>3.0.1</maven.gpg.plugin>
5252
<reflections.version>0.10.2</reflections.version>
5353
<logcaptor.version>2.9.0</logcaptor.version>
54+
<commons.text.version>1.12.0</commons.text.version>
5455
</properties>
5556

5657
<modules>

r2dbc-migrate-core/pom.xml

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
<parent>
99
<artifactId>r2dbc-migrate-parent</artifactId>
1010
<groupId>name.nkonev.r2dbc-migrate</groupId>
11-
<version>3.1.3-SNAPSHOT</version>
11+
<version>3.2.0-SNAPSHOT</version>
1212
</parent>
1313

1414
<dependencies>
1515
<dependency>
1616
<artifactId>r2dbc-migrate-resource-reader-api</artifactId>
1717
<groupId>name.nkonev.r2dbc-migrate</groupId>
18-
<version>3.1.3-SNAPSHOT</version>
18+
<version>3.2.0-SNAPSHOT</version>
1919
</dependency>
2020
<dependency>
2121
<groupId>io.r2dbc</groupId>
@@ -25,6 +25,12 @@
2525
<groupId>io.projectreactor</groupId>
2626
<artifactId>reactor-core</artifactId>
2727
</dependency>
28+
<dependency>
29+
<groupId>org.apache.commons</groupId>
30+
<artifactId>commons-text</artifactId>
31+
<version>${commons.text.version}</version>
32+
</dependency>
33+
2834
<dependency>
2935
<groupId>org.testcontainers</groupId>
3036
<artifactId>testcontainers</artifactId>
@@ -84,13 +90,13 @@
8490
<dependency>
8591
<artifactId>r2dbc-migrate-resource-reader-reflections</artifactId>
8692
<groupId>name.nkonev.r2dbc-migrate</groupId>
87-
<version>3.1.3-SNAPSHOT</version>
93+
<version>3.2.0-SNAPSHOT</version>
8894
<scope>test</scope>
8995
</dependency>
9096
<dependency>
9197
<artifactId>r2dbc-migrate-resource-reader-spring</artifactId>
9298
<groupId>name.nkonev.r2dbc-migrate</groupId>
93-
<version>3.1.3-SNAPSHOT</version>
99+
<version>3.2.0-SNAPSHOT</version>
94100
<scope>test</scope>
95101
</dependency>
96102

r2dbc-migrate-core/src/main/java/name/nkonev/r2dbc/migrate/core/BunchOfResourcesEntry.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class BunchOfResourcesEntry {
1616
private Boolean splitByLine; // only for JUST_FILE
1717
private Boolean transactional; // only for JUST_FILE
1818
private Boolean premigration; // only for JUST_FILE
19-
19+
private Boolean substitute; // only for JUST_FILE
2020

2121
public BunchOfResourcesEntry() {
2222
}
@@ -47,6 +47,15 @@ public void setType(BunchOfResourcesType type) {
4747
this.type = type;
4848
}
4949

50+
// only for JUST_FILE
51+
public Boolean getSubstitute() {
52+
return substitute;
53+
}
54+
55+
public void setSubstitute(Boolean substitute) {
56+
this.substitute = substitute;
57+
}
58+
5059
@Override
5160
public String toString() {
5261
return "BunchOfResourcesEntry{" +
@@ -103,12 +112,13 @@ public static BunchOfResourcesEntry ofConventionallyNamedFiles(String... resourc
103112
return e;
104113
}
105114

106-
public static BunchOfResourcesEntry ofJustFile(long version, String description, String resourcePath) {
115+
public static BunchOfResourcesEntry ofJustFile(long version, String description, String resourcePath, boolean substitute) {
107116
var e = new BunchOfResourcesEntry();
108117
e.setVersion(version);
109118
// e.setType(BunchOfResourcesType.JUST_FILE); set in setVersion()
110119
e.setResourcePath(resourcePath);
111120
e.setDescription(description);
121+
e.setSubstitute(substitute);
112122
return e;
113123
}
114124
}

r2dbc-migrate-core/src/main/java/name/nkonev/r2dbc/migrate/core/FilenameParser.java

Lines changed: 0 additions & 98 deletions
This file was deleted.

r2dbc-migrate-core/src/main/java/name/nkonev/r2dbc/migrate/core/H2Queries.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public String insertMigration() {
4848
}
4949

5050
@Override
51-
public Statement createInsertMigrationStatement(Connection connection, FilenameParser.MigrationInfo migrationInfo) {
51+
public Statement createInsertMigrationStatement(Connection connection, MigrationMetadata migrationInfo) {
5252
return connection
5353
.createStatement(insertMigration())
5454
.bind("$1", migrationInfo.getVersion())

r2dbc-migrate-core/src/main/java/name/nkonev/r2dbc/migrate/core/MSSqlQueries.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public String insertMigration() {
6262
}
6363

6464
@Override
65-
public Statement createInsertMigrationStatement(Connection connection, FilenameParser.MigrationInfo migrationInfo) {
65+
public Statement createInsertMigrationStatement(Connection connection, MigrationMetadata migrationInfo) {
6666
return connection
6767
.createStatement(insertMigration())
6868
.bind("@id", migrationInfo.getVersion())

r2dbc-migrate-core/src/main/java/name/nkonev/r2dbc/migrate/core/MariadbQueries.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public String insertMigration() {
4848
}
4949

5050
@Override
51-
public Statement createInsertMigrationStatement(Connection connection, FilenameParser.MigrationInfo migrationInfo) {
51+
public Statement createInsertMigrationStatement(Connection connection, MigrationMetadata migrationInfo) {
5252
return connection
5353
.createStatement(insertMigration())
5454
.bind(0, migrationInfo.getVersion())
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package name.nkonev.r2dbc.migrate.core;
2+
3+
public class MigrationMetadata {
4+
private final long version;
5+
private final String description;
6+
private final boolean splitByLine;
7+
private final boolean transactional;
8+
private final boolean premigration;
9+
private final boolean substitute;
10+
11+
public MigrationMetadata(long version, String description, boolean splitByLine, boolean transactional, boolean premigration, boolean substitute) {
12+
this.version = version;
13+
this.description = description;
14+
this.splitByLine = splitByLine;
15+
this.transactional = transactional;
16+
this.premigration = premigration;
17+
this.substitute = substitute;
18+
}
19+
20+
public String getDescription() {
21+
return description;
22+
}
23+
24+
public long getVersion() {
25+
return version;
26+
}
27+
28+
public boolean isSplitByLine() {
29+
return splitByLine;
30+
}
31+
32+
public boolean isTransactional() {
33+
return transactional;
34+
}
35+
36+
public boolean isPremigration() {
37+
return premigration;
38+
}
39+
40+
public boolean isSubstitute() {
41+
return substitute;
42+
}
43+
44+
@Override
45+
public String toString() {
46+
return "MigrationMetadata{" +
47+
"version=" + version +
48+
", description='" + description + '\'' +
49+
", splitByLine=" + splitByLine +
50+
", transactional=" + transactional +
51+
", premigration=" + premigration +
52+
", substitute=" + substitute +
53+
'}';
54+
}
55+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package name.nkonev.r2dbc.migrate.core;
2+
3+
import java.util.Arrays;
4+
import java.util.List;
5+
import java.util.Optional;
6+
7+
public abstract class MigrationMetadataFactory {
8+
9+
public static MigrationMetadata getMigrationMetadata(String filename) {
10+
final String sql = ".sql";
11+
if (filename == null || !filename.endsWith(sql)) {
12+
throw new RuntimeException("File name should ends with " + sql);
13+
}
14+
String substring = filename.substring(0, filename.length() - sql.length());
15+
String[] array = substring.split("__");
16+
if (array.length == 3) {
17+
String modifiersRaw = array[2];
18+
List<String> modifiers = Arrays.asList(modifiersRaw.split(","));
19+
boolean nonTransactional = modifiers.contains("nontransactional");
20+
boolean premigration = modifiers.contains("premigration");
21+
boolean split = modifiers.contains("split");
22+
boolean substitute = modifiers.contains("substitute");
23+
return new MigrationMetadata(getVersion(array[0]), getDescription(array[1]), split, !nonTransactional, premigration, substitute);
24+
} else if (array.length == 2) {
25+
// no split
26+
return new MigrationMetadata(getVersion(array[0]), getDescription(array[1]), false, true, false, false);
27+
} else {
28+
throw new RuntimeException("Invalid file name '" + filename + "'");
29+
}
30+
}
31+
32+
public static MigrationMetadata getMigrationMetadata(long version, String description, Boolean splitByLine, Boolean transactional, Boolean premigration, Boolean substitute) {
33+
return new MigrationMetadata(
34+
version,
35+
description,
36+
Optional.ofNullable(splitByLine).orElse(false),
37+
Optional.ofNullable(transactional).orElse(false),
38+
Optional.ofNullable(premigration).orElse(false),
39+
Optional.ofNullable(substitute).orElse(false)
40+
);
41+
}
42+
43+
private static long getVersion(String vPart) {
44+
String v = vPart.replace("V", "");
45+
return Long.parseLong(v);
46+
}
47+
48+
private static String getDescription(String descriptionPart) {
49+
return descriptionPart.replace("_", " ");
50+
}
51+
}

r2dbc-migrate-core/src/main/java/name/nkonev/r2dbc/migrate/core/MySqlQueries.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public String insertMigration() {
4848
}
4949

5050
@Override
51-
public Statement createInsertMigrationStatement(Connection connection, FilenameParser.MigrationInfo migrationInfo) {
51+
public Statement createInsertMigrationStatement(Connection connection, MigrationMetadata migrationInfo) {
5252
return connection
5353
.createStatement(insertMigration())
5454
.bind("id", migrationInfo.getVersion())

r2dbc-migrate-core/src/main/java/name/nkonev/r2dbc/migrate/core/PostgreSqlQueries.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public String insertMigration() {
4848
}
4949

5050
@Override
51-
public Statement createInsertMigrationStatement(Connection connection, FilenameParser.MigrationInfo migrationInfo) {
51+
public Statement createInsertMigrationStatement(Connection connection, MigrationMetadata migrationInfo) {
5252
return connection
5353
.createStatement(insertMigration())
5454
.bind("$1", migrationInfo.getVersion())

0 commit comments

Comments
 (0)