Skip to content

Commit a302818

Browse files
committed
Merge branch 'DBTOOLS-2138_fix_overrides_problem' into 'master'
DBTOOLS-2138 fixed overrides problem See merge request codekeeper/pgcodekeeper-core!300
2 parents 7c91963 + fcce206 commit a302818

3 files changed

Lines changed: 16 additions & 10 deletions

File tree

src/main/java/org/pgcodekeeper/core/database/base/loader/AbstractProjectLoader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ private void loadFileOverrides(List<Path> overrideFiles, T db) throws Interrupte
129129
IMonitor.checkCancelled(getMonitor());
130130
AbstractDumpLoader<T> loader = createDumpLoader(file);
131131
loader.setOverridesMap(overrides);
132-
loader.setMode(ParserListenerMode.SINGLE);
132+
loader.setMode(ParserListenerMode.REF);
133133
loader.loadWithoutAnalyze(db, antlrTasks);
134134
dumpLoaders.add(loader);
135135
}

src/main/java/org/pgcodekeeper/core/database/pg/parser/PgOverridesListener.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@ private void createSchema(Create_schema_statementContext ctx) {
128128
}
129129

130130
PgSchema st = (PgSchema) getSafe(IDatabase::getSchema, db, ctx.name);
131+
if (st == null) {
132+
return;
133+
}
131134
if (PgConsts.DEFAULT_SCHEMA.equals(st.getName()) && "postgres".equals(owner.getText())) {
132135
return;
133136
}
@@ -148,14 +151,19 @@ private void alterTable(Alter_table_statementContext ctx) {
148151
IdentifierContext name;
149152
if (owner != null && (name = owner.user_name().identifier()) != null) {
150153
IRelation st = getSafe(ISchema::getRelation, schema, nameCtx);
151-
overrides.computeIfAbsent((AbstractStatement) st,
152-
k -> new StatementOverride()).setOwner(name.getText());
154+
if (st != null) {
155+
overrides.computeIfAbsent((AbstractStatement) st,
156+
k -> new StatementOverride()).setOwner(name.getText());
157+
}
153158
}
154159
}
155160
}
156161

157162
private <T extends IStatement, R extends IStatement> R getSafe(
158163
BiFunction<T, String, R> getter, T container, ParserRuleContext ctx) {
164+
if (ParserListenerMode.REF == mode) {
165+
return null;
166+
}
159167
String name = ctx.getText();
160168
R statement = getter.apply(container, name);
161169
if (statement == null) {

src/test/java/org/pgcodekeeper/core/it/loader/pg/PgProjectLoaderTest.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ void testLoadFilesBatch(@TempDir Path dir) throws IOException, InterruptedExcept
367367
}
368368

369369
@Test
370-
void testLoadFilesAppliesOverrides(@TempDir Path dir) throws IOException, InterruptedException {
370+
void testLoadFilesCollectsOverrideReferences(@TempDir Path dir) throws IOException, InterruptedException {
371371
Path projectDir = dir.resolve("project");
372372
createProject(projectDir, new CoreSettings());
373373
Path overrideDir = projectDir.resolve("OVERRIDES/SCHEMA/public/TABLE");
@@ -381,14 +381,12 @@ void testLoadFilesAppliesOverrides(@TempDir Path dir) throws IOException, Interr
381381

382382
var emp = db.getStatement(new ObjectReference("public", "emp", DbObjType.TABLE));
383383
assertNotNull(emp);
384-
Assertions.assertEquals("override_user", emp.getOwner());
385-
assertTrue(emp.getPrivileges().stream().anyMatch(
386-
p -> !p.isRevoke() && "SELECT".equals(p.getPermission()) && "override_user".equals(p.getRole())));
384+
Assertions.assertNotEquals("override_user", emp.getOwner());
387385

388-
// an override file without the referenced object reports an error instead of being skipped
389386
var isolatedLoader = databaseProvider.getProjectLoader(projectDir, new CoreSettings());
390-
isolatedLoader.loadFiles(List.of(overrideFile));
391-
assertFalse(isolatedLoader.getErrors().isEmpty());
387+
IDatabase isolatedDb = isolatedLoader.loadFiles(List.of(overrideFile));
388+
assertTrue(isolatedLoader.getErrors().isEmpty(), isolatedLoader.getErrors().toString());
389+
assertFalse(isolatedDb.getObjReferences().isEmpty());
392390
}
393391

394392
@Test

0 commit comments

Comments
 (0)