Skip to content

Commit e2a1095

Browse files
committed
Merge branch 'DBTOOLS-2044_add_setting_ignore_not_null_name' into 'master'
DBTOOLS-2044 added setting isDisableNameForNotNullConstraint See merge request codekeeper/pgcodekeeper-core!258
2 parents 69736d1 + 308b149 commit e2a1095

18 files changed

Lines changed: 205 additions & 34 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
/.classpath
33
/.idea
44
/.settings
5+
/.vscode
56
/gen
67
/target
78
/bin/

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1010
### Added
1111

1212
- Added automatic reading of the .pgcodekeeperdependencies file with additional dependencies when loading a project.
13+
- Added option to simplify reading of NOT NULL constraints via JDBC for PostgreSQL 18+.
1314

1415
### Changed
1516

CHANGELOG.ru.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
### Добавлено
1111

1212
- Добавлено автоматическое чтение файла .pgcodekeeperdependencies с дополнительными зависимостями при загрузке проекта.
13+
- Добавлена опция для упрощенного чтения ограничений NOT NULL через JDBC для PostgreSQL 18+.
1314

1415
### Изменено
1516

src/main/java/org/pgcodekeeper/core/database/pg/jdbc/PgConstraintsReader.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,15 @@ private void readNotNullConstraint(ResultSet res, PgAbstractTable table,
134134
}
135135
}
136136

137-
var notNullConstraint = new PgConstraintNotNull(constraintName);
138-
notNullConstraint.setNoInherit(res.getBoolean("connoinherit"));
139-
notNullConstraint.setNotValid(!res.getBoolean("convalidated"));
140-
loader.setComment(notNullConstraint, res);
137+
PgConstraintNotNull notNullConstraint;
138+
if (loader.getSettings().isSimplifyNotNull()) {
139+
notNullConstraint = new PgConstraintNotNull(table.getName(), columnName);
140+
} else {
141+
notNullConstraint = new PgConstraintNotNull(constraintName);
142+
notNullConstraint.setNoInherit(res.getBoolean("connoinherit"));
143+
notNullConstraint.setNotValid(!res.getBoolean("convalidated"));
144+
loader.setComment(notNullConstraint, res);
145+
}
141146

142147
column.setNotNullConstraint(notNullConstraint);
143148
notNullConstraint.setParent(column);

src/main/java/org/pgcodekeeper/core/settings/CoreSettings.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class CoreSettings implements ISettings {
3535
private boolean ignorePrivileges;
3636
private boolean keepNewlines;
3737
private boolean simplifyView;
38+
private boolean simplifyNotNull;
3839
private boolean addTransaction;
3940
private boolean disableCheckFunctionBodies;
4041
private boolean enableFunctionBodiesDependencies;
@@ -226,6 +227,15 @@ public void setSimplifyView(boolean simplifyView) {
226227
this.simplifyView = simplifyView;
227228
}
228229

230+
@Override
231+
public boolean isSimplifyNotNull() {
232+
return simplifyNotNull;
233+
}
234+
235+
public void setSimplifyNotNull(boolean simplifyNotNull) {
236+
this.simplifyNotNull = simplifyNotNull;
237+
}
238+
229239
@Override
230240
public boolean isDisableCheckFunctionBodies() {
231241
return disableCheckFunctionBodies;
@@ -348,6 +358,7 @@ public CoreSettings copy() {
348358
settings.preFilePath = preFilePath;
349359
settings.selectedOnly = selectedOnly;
350360
settings.simplifyView = simplifyView;
361+
settings.simplifyNotNull = simplifyNotNull;
351362
settings.stopNotAllowed = stopNotAllowed;
352363
settings.timeZone = timeZone;
353364
settings.printUsing = printUsing;

src/main/java/org/pgcodekeeper/core/settings/ISettings.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,13 @@ public interface ISettings {
153153
*/
154154
boolean isSimplifyView();
155155

156+
/**
157+
* Checks if not null CONSTRAINT should be simplified.
158+
*
159+
* @return true if not null CONSTRAINT simplification is enabled
160+
*/
161+
boolean isSimplifyNotNull();
162+
156163
/**
157164
* Checks if function body checking should be disabled.
158165
*

src/test/java/org/pgcodekeeper/core/it/jdbc/base/JdbcLoaderTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.pgcodekeeper.core.database.base.jdbc.JdbcRunner;
2424
import org.pgcodekeeper.core.database.base.parser.ScriptParser;
2525
import org.pgcodekeeper.core.monitor.NullMonitor;
26-
import org.pgcodekeeper.core.settings.CoreSettings;
2726
import org.pgcodekeeper.core.settings.DiffSettings;
2827
import org.pgcodekeeper.core.utils.InputStreamProvider;
2928

@@ -36,9 +35,8 @@ public abstract class JdbcLoaderTest {
3635

3736
public static final String CLEAN_DB_SCRIPT = "clean db script";
3837

39-
protected void clearDb(CoreSettings settings, IDatabase startConfDb,
40-
IJdbcConnector connector, String url, IDatabaseProvider databaseProvider,
41-
DiffSettings diffSettings)
38+
protected void clearDb(IDatabase startConfDb, IJdbcConnector connector, String url,
39+
IDatabaseProvider databaseProvider, DiffSettings diffSettings)
4240
throws IOException, InterruptedException, SQLException {
4341
var oldDb = databaseProvider.getJdbcLoader(url, diffSettings).loadAndAnalyze();
4442
var dropScript = PgCodeKeeperApi.diff(databaseProvider, oldDb, startConfDb, diffSettings);

src/test/java/org/pgcodekeeper/core/it/jdbc/ch/ChJdbcLoaderTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.pgcodekeeper.core.FILES_POSTFIX;
2222
import org.pgcodekeeper.core.TestUtils;
2323
import org.pgcodekeeper.core.api.PgCodeKeeperApi;
24-
import org.pgcodekeeper.core.database.api.IDatabaseProvider;
2524
import org.pgcodekeeper.core.database.api.jdbc.IJdbcConnector;
2625
import org.pgcodekeeper.core.database.base.jdbc.JdbcRunner;
2726
import org.pgcodekeeper.core.database.base.loader.AbstractDumpLoader;
@@ -33,7 +32,6 @@
3332
import org.pgcodekeeper.core.monitor.NullMonitor;
3433
import org.pgcodekeeper.core.settings.CoreSettings;
3534
import org.pgcodekeeper.core.settings.DiffSettings;
36-
import org.pgcodekeeper.core.settings.ISettings;
3735
import org.pgcodekeeper.core.utils.InputStreamProvider;
3836
import org.pgcodekeeper.core.utils.testcontainer.TestContainerType;
3937

@@ -86,7 +84,7 @@ void chJdbcLoaderTest(String fileName) throws Exception {
8684
var actual = PgCodeKeeperApi.diff(databaseProvider, dumpDb, remoteDb, diffSettings);
8785
Assertions.assertEquals("", actual, "Incorrect run dump %s on Database".formatted(dumpFileName));
8886
} finally {
89-
clearDb(settings, startConfDb, connector, url, databaseProvider, diffSettings);
87+
clearDb(startConfDb, connector, url, databaseProvider, diffSettings);
9088
}
9189
}
9290

src/test/java/org/pgcodekeeper/core/it/jdbc/ms/MsJdbcLoaderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ private void jdbcLoaderTest(String dumpFileName, String url, CoreSettings settin
107107
var actual = PgCodeKeeperApi.diff(databaseProvider, dumpDb, remoteDb, diffSettings);
108108
Assertions.assertEquals("", actual, "Incorrect run dump %s on Database".formatted(dumpFileName));
109109
} finally {
110-
clearDb(settings, startConfDb, connector, url, databaseProvider, diffSettings);
110+
clearDb(startConfDb, connector, url, databaseProvider, diffSettings);
111111
}
112112
}
113113

src/test/java/org/pgcodekeeper/core/it/jdbc/pg/PgGpJdbcLoaderTest.java

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,12 @@
2121
import org.pgcodekeeper.core.FILES_POSTFIX;
2222
import org.pgcodekeeper.core.TestUtils;
2323
import org.pgcodekeeper.core.api.PgCodeKeeperApi;
24-
import org.pgcodekeeper.core.database.api.IDatabaseProvider;
2524
import org.pgcodekeeper.core.database.api.jdbc.IJdbcConnector;
2625
import org.pgcodekeeper.core.database.base.jdbc.JdbcRunner;
2726
import org.pgcodekeeper.core.database.base.loader.AbstractDumpLoader;
2827
import org.pgcodekeeper.core.database.base.parser.ScriptParser;
2928
import org.pgcodekeeper.core.database.pg.PgDatabaseProvider;
3029
import org.pgcodekeeper.core.database.pg.jdbc.PgJdbcConnector;
31-
import org.pgcodekeeper.core.database.pg.jdbc.PgSupportedVersion;
3230
import org.pgcodekeeper.core.database.pg.loader.PgDumpLoader;
3331
import org.pgcodekeeper.core.it.jdbc.base.JdbcLoaderTest;
3432
import org.pgcodekeeper.core.monitor.NullMonitor;
@@ -55,6 +53,7 @@ class PgGpJdbcLoaderTest extends JdbcLoaderTest {
5553
"operator, PG_16",
5654
"statistics, PG_16",
5755
"view, PG_16",
56+
"not_null, PG_18",
5857
"dump_test, GP_6",
5958
"operator, GP_6",
6059
"view, GP_6",
@@ -63,17 +62,31 @@ class PgGpJdbcLoaderTest extends JdbcLoaderTest {
6362
"statistics, GP_7",
6463
"view, GP_7",
6564
})
66-
void pgGpJdbcLoaderTest(String fileName, String contTypeName) throws Exception {
67-
var contType = TestContainerType.valueOf(contTypeName);
68-
var lowerCaseTypeName = contTypeName.toLowerCase(Locale.ROOT);
69-
var url = contType.getUrl();
70-
jdbcLoaderTest(lowerCaseTypeName + "_" + fileName + FILES_POSTFIX.SQL,
71-
lowerCaseTypeName + ".pgcodekeeperignore", url, new CoreSettings());
65+
void jdbcLoaderTest(String fileName, String contTypeName) throws Exception {
66+
var settings = new CoreSettings();
67+
settings.setEnableFunctionBodiesDependencies(true);
68+
jdbcLoaderTest(false, fileName, contTypeName, settings);
7269
}
7370

74-
protected void jdbcLoaderTest(String dumpFileName, String ignoreListName, String url, CoreSettings settings) throws Exception {
75-
settings.setEnableFunctionBodiesDependencies(true);
71+
@ParameterizedTest
72+
@CsvSource({
73+
"view, PG_16",
74+
"not_null, PG_18"
75+
})
76+
void jdbcLoaderSpecialTest(String fileName, String contTypeName) throws Exception {
77+
var settings = new CoreSettings();
78+
settings.setSimplifyNotNull(true);
79+
settings.setSimplifyView(true);
80+
jdbcLoaderTest(true, fileName, contTypeName, settings);
81+
}
82+
83+
protected void jdbcLoaderTest(boolean hasDiff, String fileName, String contTypeName, ISettings settings)
84+
throws Exception {
85+
var url = TestContainerType.valueOf(contTypeName).getUrl();
86+
var lowerCaseTypeName = contTypeName.toLowerCase(Locale.ROOT);
87+
var ignoreListName = lowerCaseTypeName + ".pgcodekeeperignore";
7688
var diffSettings = new DiffSettings(settings);
89+
var dumpFileName = lowerCaseTypeName + "_" + fileName + FILES_POSTFIX.SQL;
7790
var path = TestUtils.getFilePath(dumpFileName, getClass());
7891
var dumpDb = databaseProvider.getDumpLoader(path, diffSettings).loadAndAnalyze();
7992
var script = Files.readString(TestUtils.getFilePath(dumpFileName, getClass()));
@@ -93,15 +106,24 @@ protected void jdbcLoaderTest(String dumpFileName, String ignoreListName, String
93106
diffSettings.addIgnoreList(ignoreList);
94107
}
95108
var actual = PgCodeKeeperApi.diff(databaseProvider, dumpDb, remoteDb, diffSettings);
96-
Assertions.assertEquals("", actual, "Incorrect run dump %s on Database".formatted(dumpFileName));
109+
110+
String expected;
111+
if (hasDiff) {
112+
expected = Files.readString(TestUtils.getFilePath(
113+
lowerCaseTypeName + "_" + fileName + FILES_POSTFIX.DIFF_SQL, getClass()));
114+
} else {
115+
expected = "";
116+
}
117+
118+
Assertions.assertEquals(expected, actual, "Incorrect run dump %s on Database".formatted(dumpFileName));
97119
} finally {
98-
clearDb(settings, startConfDb, connector, url, databaseProvider, diffSettings);
120+
clearDb(startConfDb, connector, url, databaseProvider, diffSettings);
99121
}
100122
}
101123

102124
@Override
103125
protected AbstractDumpLoader<?> createDumpLoader(InputStreamProvider input, String inputObjectName,
104-
DiffSettings diffSettings) {
126+
DiffSettings diffSettings) {
105127
return new PgDumpLoader(input, inputObjectName, diffSettings);
106128
}
107129
}

0 commit comments

Comments
 (0)