Skip to content

Commit 219b123

Browse files
authored
QL: Orphan fixes for aggregates
1 parent 625b956 commit 219b123

2 files changed

Lines changed: 18 additions & 2 deletions

File tree

ql/src/codeql_ql/ast/Ast.qll

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@ class Select extends TSelect, AstNode {
4040

4141
Select() { this = TSelect(sel) }
4242

43+
VarDecl getVarDecl(int i) { toGenerated(result) = sel.getChild(i) }
44+
45+
Formula getWhere() { toGenerated(result) = sel.getChild(_) }
46+
47+
AsExpr getAsExpr(int i) { toGenerated(result) = sel.getChild(_).(Generated::AsExprs).getChild(i) }
48+
49+
Expr getOrderBy(int i) {
50+
toGenerated(result) = sel.getChild(_).(Generated::OrderBys).getChild(i).getChild(0)
51+
}
52+
4353
override string getAPrimaryQlClass() { result = "Select" }
4454
// TODO: Getters for VarDecls, Where-clause, selects.
4555
}
@@ -79,7 +89,9 @@ class PredicateExpr extends TPredicateExpr, AstNode {
7989
)
8090
}
8191

82-
override ClasslessPredicate getParent() { result.getAlias() = this }
92+
override AstNode getParent() {
93+
this in [result.(ClasslessPredicate).getAlias(), result.(HigherOrderFormula).getInput(_)]
94+
}
8395

8496
override string getAPrimaryQlClass() { result = "PredicateExpr" }
8597
}
@@ -886,6 +898,8 @@ class AsExpr extends TAsExpr, AstNode {
886898
result = super.getParent()
887899
or
888900
result.(Aggregate).getAsExpr(_) = this
901+
or
902+
result.(Select).getAsExpr(_) = this
889903
}
890904
}
891905

@@ -919,6 +933,8 @@ class Expr extends TExpr, AstNode {
919933
result.(Call).getArgument(_) = this
920934
or
921935
result.(Aggregate).getOrderBy(_) = this
936+
or
937+
result.(Select).getOrderBy(_) = this
922938
}
923939
}
924940

ql/src/codeql_ql/ast/internal/AstNodes.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,4 +150,4 @@ Generated::AstNode toGenerated(AST::AstNode n) {
150150

151151
class TPredicate = TCharPred or TClasslessPredicate or TClassPredicate;
152152

153-
class TModuleMember = TClasslessPredicate or TClass or TModule or TNewType or TImport;
153+
class TModuleMember = TClasslessPredicate or TClass or TModule or TNewType or TImport or TSelect;

0 commit comments

Comments
 (0)