Skip to content

Commit aeabee3

Browse files
authored
Merge pull request #17179 from hvitved/shared/pretty-print-models
Go/Java: Share more `PrettyPrintModels.ql` logic
2 parents 51077ce + d5a0df3 commit aeabee3

File tree

3 files changed

+49
-55
lines changed

3 files changed

+49
-55
lines changed

go/ql/test/TestUtilities/PrettyPrintModels.ql

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,9 @@
22
* @kind test-postprocess
33
*/
44

5-
import codeql.dataflow.test.ProvenancePathGraph
65
import semmle.go.dataflow.ExternalFlow
7-
8-
external predicate queryResults(string relation, int row, int column, string data);
9-
10-
external predicate queryRelations(string relation);
11-
12-
query predicate resultRelations(string relation) { queryRelations(relation) }
13-
14-
module Res = TranslateProvenanceResults<interpretModelForTest/2, queryResults/4>;
6+
import codeql.dataflow.test.ProvenancePathGraph::TestPostProcessing::TranslateProvenanceResults<interpretModelForTest/2>
157

168
from string relation, int row, int column, string data
17-
where Res::results(relation, row, column, data)
9+
where results(relation, row, column, data)
1810
select relation, row, column, data

java/ql/test/TestUtilities/PrettyPrintModels.ql

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,9 @@
22
* @kind test-postprocess
33
*/
44

5-
import codeql.dataflow.test.ProvenancePathGraph
65
import semmle.code.java.dataflow.ExternalFlow
7-
8-
external predicate queryResults(string relation, int row, int column, string data);
9-
10-
external predicate queryRelations(string relation);
11-
12-
query predicate resultRelations(string relation) { queryRelations(relation) }
13-
14-
module Res = TranslateProvenanceResults<interpretModelForTest/2, queryResults/4>;
6+
import codeql.dataflow.test.ProvenancePathGraph::TestPostProcessing::TranslateProvenanceResults<interpretModelForTest/2>
157

168
from string relation, int row, int column, string data
17-
where Res::results(relation, row, column, data)
9+
where results(relation, row, column, data)
1810
select relation, row, column, data

shared/dataflow/codeql/dataflow/test/ProvenancePathGraph.qll

Lines changed: 45 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ private import codeql.dataflow.DataFlow as DF
1010

1111
signature predicate interpretModelForTestSig(QlBuiltins::ExtensionId madId, string model);
1212

13-
signature predicate queryResultsSig(string relation, int row, int column, string data);
14-
1513
signature class PathNodeSig {
1614
string toString();
1715
}
@@ -85,45 +83,57 @@ module ShowProvenance<
8583
query predicate subpaths = PathGraph::subpaths/4;
8684
}
8785

88-
/** Transforms a `PathGraph` by printing the provenance information. */
89-
module TranslateProvenanceResults<
90-
interpretModelForTestSig/2 interpretModelForTest, queryResultsSig/4 queryResults>
91-
{
92-
private int provenanceColumn() { result = 5 }
86+
/**
87+
* Provides logic for creating a `@kind test-postprocess` query that prints
88+
* the provenance information.
89+
*/
90+
module TestPostProcessing {
91+
external predicate queryResults(string relation, int row, int column, string data);
9392

94-
private predicate provenance(string model) { queryResults("edges", _, provenanceColumn(), model) }
93+
external predicate queryRelations(string relation);
9594

96-
private module Models = TranslateModels<interpretModelForTest/2, provenance/1>;
95+
/** Transforms a `PathGraph` by printing the provenance information. */
96+
module TranslateProvenanceResults<interpretModelForTestSig/2 interpretModelForTest> {
97+
private int provenanceColumn() { result = 5 }
98+
99+
private predicate provenance(string model) {
100+
queryResults("edges", _, provenanceColumn(), model)
101+
}
102+
103+
private module Models = TranslateModels<interpretModelForTest/2, provenance/1>;
104+
105+
private newtype TModelRow = TMkModelRow(int r, string model) { Models::models(r, model) }
97106

98-
private newtype TModelRow = TMkModelRow(int r, string model) { Models::models(r, model) }
107+
private predicate rankedModels(int i, int r, string model) {
108+
TMkModelRow(r, model) =
109+
rank[i](TModelRow row, int r0, string model0 |
110+
row = TMkModelRow(r0, model0)
111+
|
112+
row order by r0, model0
113+
)
114+
}
99115

100-
private predicate rankedModels(int i, int r, string model) {
101-
TMkModelRow(r, model) =
102-
rank[i](TModelRow row, int r0, string model0 |
103-
row = TMkModelRow(r0, model0)
116+
predicate results(string relation, int row, int column, string data) {
117+
queryResults(relation, row, column, data) and
118+
(relation != "edges" or column != provenanceColumn())
119+
or
120+
exists(string model |
121+
relation = "edges" and
122+
column = provenanceColumn() and
123+
queryResults(relation, row, column, model) and
124+
Models::translateModels(model, data)
125+
)
126+
or
127+
exists(int r, string model |
128+
relation = "models" and
129+
rankedModels(row, r, model)
104130
|
105-
row order by r0, model0
131+
column = 0 and data = r.toString()
132+
or
133+
column = 1 and data = model
106134
)
107-
}
135+
}
108136

109-
predicate results(string relation, int row, int column, string data) {
110-
queryResults(relation, row, column, data) and
111-
(relation != "edges" or column != provenanceColumn())
112-
or
113-
exists(string model |
114-
relation = "edges" and
115-
column = provenanceColumn() and
116-
queryResults(relation, row, column, model) and
117-
Models::translateModels(model, data)
118-
)
119-
or
120-
exists(int r, string model |
121-
relation = "models" and
122-
rankedModels(row, r, model)
123-
|
124-
column = 0 and data = r.toString()
125-
or
126-
column = 1 and data = model
127-
)
137+
query predicate resultRelations(string relation) { queryRelations(relation) }
128138
}
129139
}

0 commit comments

Comments
 (0)