Skip to content

Commit 69736d1

Browse files
committed
Merge branch 'DBTOOLS-1725_deps_2' into 'master'
DBTOOLS-1725 DepcyFinder: added support for additional dependencies See merge request codekeeper/pgcodekeeper-core!261
2 parents 794c4a0 + 75e043f commit 69736d1

5 files changed

Lines changed: 55 additions & 5 deletions

File tree

src/main/java/org/pgcodekeeper/core/api/PgCodeKeeperApi.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,9 @@ public static List<String> analyzeDependencies(ILoader loader,
273273
boolean invertFilter)
274274
throws IOException, InterruptedException {
275275
var db = loader.loadAndAnalyze();
276-
return DepcyFinder.byPatterns(depth, reverse, filterTypes, invertFilter, db, objectNames);
276+
var diffSettings = loader.getDiffSettings();
277+
return DepcyFinder.byPatterns(depth, reverse, filterTypes, invertFilter, db, objectNames,
278+
diffSettings.getAdditionalDependencies());
277279
}
278280

279281
/**

src/main/java/org/pgcodekeeper/core/database/api/loader/ILoader.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package org.pgcodekeeper.core.database.api.loader;
1717

1818
import org.pgcodekeeper.core.database.api.schema.IDatabase;
19+
import org.pgcodekeeper.core.settings.DiffSettings;
1920
import org.pgcodekeeper.core.settings.ISettings;
2021

2122
import java.io.IOException;
@@ -55,6 +56,11 @@ public interface ILoader {
5556
*/
5657
ISettings getSettings();
5758

59+
/**
60+
* @return diff settings
61+
*/
62+
DiffSettings getDiffSettings();
63+
5864
/**
5965
* @return unmodifiable list of errors during loading
6066
*/

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,11 @@ public ISettings getSettings() {
125125
return diffSettings.getSettings();
126126
}
127127

128+
@Override
129+
public DiffSettings getDiffSettings() {
130+
return diffSettings;
131+
}
132+
128133
public IMonitor getMonitor() {
129134
return diffSettings.getMonitor();
130135
}

src/main/java/org/pgcodekeeper/core/model/graph/DepcyFinder.java

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.pgcodekeeper.core.database.api.schema.IStatement;
2323
import org.pgcodekeeper.core.database.api.schema.ITable;
2424
import org.pgcodekeeper.core.database.base.schema.StatementUtils;
25+
import org.pgcodekeeper.core.dependencieslist.Dependency;
2526
import org.pgcodekeeper.core.utils.Utils;
2627

2728
import java.util.*;
@@ -44,9 +45,11 @@ public class DepcyFinder {
4445
private final List<PrintObj> printObjects = new ArrayList<>();
4546

4647
private DepcyFinder(IDatabase db, int depth, boolean isReverse,
47-
Collection<DbObjType> filterObjTypes, boolean isInvertFilter) {
48+
Collection<DbObjType> filterObjTypes, boolean isInvertFilter,
49+
Collection<Dependency> additionalDependencies) {
4850
this.db = db;
4951
DepcyGraph dg = new DepcyGraph(db);
52+
dg.addCustomDepcies(additionalDependencies);
5053
this.graph = isReverse ? dg.getGraph() : dg.getReversedGraph();
5154
this.depth = depth;
5255
if (filterObjTypes.isEmpty()) {
@@ -70,7 +73,25 @@ private DepcyFinder(IDatabase db, int depth, boolean isReverse,
7073
*/
7174
public static List<String> byPatterns(int depth, boolean isReverse, Collection<DbObjType> filterObjTypes,
7275
boolean isInvertFilter, IDatabase db, Collection<String> names) {
73-
DepcyFinder depcyFinder = new DepcyFinder(db, depth, isReverse, filterObjTypes, isInvertFilter);
76+
return byPatterns(depth, isReverse, filterObjTypes, isInvertFilter, db, names, Collections.emptyList());
77+
}
78+
79+
/**
80+
* Finds dependencies by matching object name patterns with additional dependencies.
81+
*
82+
* @param depth maximum depth to search
83+
* @param isReverse whether to search reverse dependencies
84+
* @param filterObjTypes object types to filter by
85+
* @param isInvertFilter whether to invert the filter
86+
* @param db the database to search in
87+
* @param names collection of name patterns to match
88+
* @param additionalDependencies collection of additional dependencies
89+
* @return list of formatted dependency strings
90+
*/
91+
public static List<String> byPatterns(int depth, boolean isReverse, Collection<DbObjType> filterObjTypes,
92+
boolean isInvertFilter, IDatabase db, Collection<String> names,
93+
Collection<Dependency> additionalDependencies) {
94+
var depcyFinder = new DepcyFinder(db, depth, isReverse, filterObjTypes, isInvertFilter, additionalDependencies);
7495
depcyFinder.searchDeps(names);
7596
return depcyFinder.getResult();
7697
}
@@ -86,7 +107,23 @@ public static List<String> byPatterns(int depth, boolean isReverse, Collection<D
86107
*/
87108
public static List<String> byStatement(int depth, boolean isReverse, Collection<DbObjType> filterObjTypes,
88109
IStatement st) {
89-
DepcyFinder depcyFinder = new DepcyFinder(st.getDatabase(), depth, isReverse, filterObjTypes, false);
110+
return byStatement(depth, isReverse, filterObjTypes, st, Collections.emptyList());
111+
}
112+
113+
/**
114+
* Finds dependencies for a specific database statement with additional dependencies.
115+
*
116+
* @param depth maximum depth to search
117+
* @param isReverse whether to search reverse dependencies
118+
* @param filterObjTypes object types to filter by
119+
* @param st the statement to find dependencies for
120+
* @param additionalDependencies collection of additional dependencies
121+
* @return list of formatted dependency strings
122+
*/
123+
public static List<String> byStatement(int depth, boolean isReverse, Collection<DbObjType> filterObjTypes,
124+
IStatement st, Collection<Dependency> additionalDependencies) {
125+
var depcyFinder = new DepcyFinder(st.getDatabase(), depth, isReverse, filterObjTypes, false,
126+
additionalDependencies);
90127
depcyFinder.fillTree(st, START_LEVEL, new HashSet<>(), null, 0);
91128
return depcyFinder.getResult();
92129
}

src/main/java/org/pgcodekeeper/core/model/graph/DepcyGraph.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ private void createChildColToPartTblCol(PgPartitionTable tbl, PgColumn col) {
261261
*
262262
* @param dependencies list of custom dependency pairs to add
263263
*/
264-
public void addCustomDepcies(List<Dependency> dependencies) {
264+
public void addCustomDepcies(Collection<Dependency> dependencies) {
265265
if (dependencies == null) {
266266
return;
267267
}

0 commit comments

Comments
 (0)