mirror of
https://github.com/github/codeql.git
synced 2026-04-22 23:35:14 +02:00
Merge pull request #17179 from hvitved/shared/pretty-print-models
Go/Java: Share more `PrettyPrintModels.ql` logic
This commit is contained in:
@@ -2,17 +2,9 @@
|
||||
* @kind test-postprocess
|
||||
*/
|
||||
|
||||
import codeql.dataflow.test.ProvenancePathGraph
|
||||
import semmle.go.dataflow.ExternalFlow
|
||||
|
||||
external predicate queryResults(string relation, int row, int column, string data);
|
||||
|
||||
external predicate queryRelations(string relation);
|
||||
|
||||
query predicate resultRelations(string relation) { queryRelations(relation) }
|
||||
|
||||
module Res = TranslateProvenanceResults<interpretModelForTest/2, queryResults/4>;
|
||||
import codeql.dataflow.test.ProvenancePathGraph::TestPostProcessing::TranslateProvenanceResults<interpretModelForTest/2>
|
||||
|
||||
from string relation, int row, int column, string data
|
||||
where Res::results(relation, row, column, data)
|
||||
where results(relation, row, column, data)
|
||||
select relation, row, column, data
|
||||
|
||||
@@ -2,17 +2,9 @@
|
||||
* @kind test-postprocess
|
||||
*/
|
||||
|
||||
import codeql.dataflow.test.ProvenancePathGraph
|
||||
import semmle.code.java.dataflow.ExternalFlow
|
||||
|
||||
external predicate queryResults(string relation, int row, int column, string data);
|
||||
|
||||
external predicate queryRelations(string relation);
|
||||
|
||||
query predicate resultRelations(string relation) { queryRelations(relation) }
|
||||
|
||||
module Res = TranslateProvenanceResults<interpretModelForTest/2, queryResults/4>;
|
||||
import codeql.dataflow.test.ProvenancePathGraph::TestPostProcessing::TranslateProvenanceResults<interpretModelForTest/2>
|
||||
|
||||
from string relation, int row, int column, string data
|
||||
where Res::results(relation, row, column, data)
|
||||
where results(relation, row, column, data)
|
||||
select relation, row, column, data
|
||||
|
||||
@@ -10,8 +10,6 @@ private import codeql.dataflow.DataFlow as DF
|
||||
|
||||
signature predicate interpretModelForTestSig(QlBuiltins::ExtensionId madId, string model);
|
||||
|
||||
signature predicate queryResultsSig(string relation, int row, int column, string data);
|
||||
|
||||
signature class PathNodeSig {
|
||||
string toString();
|
||||
}
|
||||
@@ -85,45 +83,57 @@ module ShowProvenance<
|
||||
query predicate subpaths = PathGraph::subpaths/4;
|
||||
}
|
||||
|
||||
/** Transforms a `PathGraph` by printing the provenance information. */
|
||||
module TranslateProvenanceResults<
|
||||
interpretModelForTestSig/2 interpretModelForTest, queryResultsSig/4 queryResults>
|
||||
{
|
||||
private int provenanceColumn() { result = 5 }
|
||||
/**
|
||||
* Provides logic for creating a `@kind test-postprocess` query that prints
|
||||
* the provenance information.
|
||||
*/
|
||||
module TestPostProcessing {
|
||||
external predicate queryResults(string relation, int row, int column, string data);
|
||||
|
||||
private predicate provenance(string model) { queryResults("edges", _, provenanceColumn(), model) }
|
||||
external predicate queryRelations(string relation);
|
||||
|
||||
private module Models = TranslateModels<interpretModelForTest/2, provenance/1>;
|
||||
/** Transforms a `PathGraph` by printing the provenance information. */
|
||||
module TranslateProvenanceResults<interpretModelForTestSig/2 interpretModelForTest> {
|
||||
private int provenanceColumn() { result = 5 }
|
||||
|
||||
private newtype TModelRow = TMkModelRow(int r, string model) { Models::models(r, model) }
|
||||
private predicate provenance(string model) {
|
||||
queryResults("edges", _, provenanceColumn(), model)
|
||||
}
|
||||
|
||||
private predicate rankedModels(int i, int r, string model) {
|
||||
TMkModelRow(r, model) =
|
||||
rank[i](TModelRow row, int r0, string model0 |
|
||||
row = TMkModelRow(r0, model0)
|
||||
|
|
||||
row order by r0, model0
|
||||
)
|
||||
}
|
||||
private module Models = TranslateModels<interpretModelForTest/2, provenance/1>;
|
||||
|
||||
predicate results(string relation, int row, int column, string data) {
|
||||
queryResults(relation, row, column, data) and
|
||||
(relation != "edges" or column != provenanceColumn())
|
||||
or
|
||||
exists(string model |
|
||||
relation = "edges" and
|
||||
column = provenanceColumn() and
|
||||
queryResults(relation, row, column, model) and
|
||||
Models::translateModels(model, data)
|
||||
)
|
||||
or
|
||||
exists(int r, string model |
|
||||
relation = "models" and
|
||||
rankedModels(row, r, model)
|
||||
|
|
||||
column = 0 and data = r.toString()
|
||||
private newtype TModelRow = TMkModelRow(int r, string model) { Models::models(r, model) }
|
||||
|
||||
private predicate rankedModels(int i, int r, string model) {
|
||||
TMkModelRow(r, model) =
|
||||
rank[i](TModelRow row, int r0, string model0 |
|
||||
row = TMkModelRow(r0, model0)
|
||||
|
|
||||
row order by r0, model0
|
||||
)
|
||||
}
|
||||
|
||||
predicate results(string relation, int row, int column, string data) {
|
||||
queryResults(relation, row, column, data) and
|
||||
(relation != "edges" or column != provenanceColumn())
|
||||
or
|
||||
column = 1 and data = model
|
||||
)
|
||||
exists(string model |
|
||||
relation = "edges" and
|
||||
column = provenanceColumn() and
|
||||
queryResults(relation, row, column, model) and
|
||||
Models::translateModels(model, data)
|
||||
)
|
||||
or
|
||||
exists(int r, string model |
|
||||
relation = "models" and
|
||||
rankedModels(row, r, model)
|
||||
|
|
||||
column = 0 and data = r.toString()
|
||||
or
|
||||
column = 1 and data = model
|
||||
)
|
||||
}
|
||||
|
||||
query predicate resultRelations(string relation) { queryRelations(relation) }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user