2222import org .pgcodekeeper .core .database .api .schema .IStatement ;
2323import org .pgcodekeeper .core .database .api .schema .ITable ;
2424import org .pgcodekeeper .core .database .base .schema .StatementUtils ;
25+ import org .pgcodekeeper .core .dependencieslist .Dependency ;
2526import org .pgcodekeeper .core .utils .Utils ;
2627
2728import 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 }
0 commit comments