From 2abb79cd5789176c3389fbd476e9c0f1622d0d46 Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 27 May 2021 16:48:38 +0000 Subject: [PATCH] Orphan fixes for aggregates --- ql/src/codeql_ql/ast/Ast.qll | 18 +++++++++++++++++- ql/src/codeql_ql/ast/internal/AstNodes.qll | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/ql/src/codeql_ql/ast/Ast.qll b/ql/src/codeql_ql/ast/Ast.qll index 78b1dd3fddf..88c7eb0676b 100644 --- a/ql/src/codeql_ql/ast/Ast.qll +++ b/ql/src/codeql_ql/ast/Ast.qll @@ -40,6 +40,16 @@ class Select extends TSelect, AstNode { Select() { this = TSelect(sel) } + VarDecl getVarDecl(int i) { toGenerated(result) = sel.getChild(i) } + + Formula getWhere() { toGenerated(result) = sel.getChild(_) } + + AsExpr getAsExpr(int i) { toGenerated(result) = sel.getChild(_).(Generated::AsExprs).getChild(i) } + + Expr getOrderBy(int i) { + toGenerated(result) = sel.getChild(_).(Generated::OrderBys).getChild(i).getChild(0) + } + override string getAPrimaryQlClass() { result = "Select" } // TODO: Getters for VarDecls, Where-clause, selects. } @@ -79,7 +89,9 @@ class PredicateExpr extends TPredicateExpr, AstNode { ) } - override ClasslessPredicate getParent() { result.getAlias() = this } + override AstNode getParent() { + this in [result.(ClasslessPredicate).getAlias(), result.(HigherOrderFormula).getInput(_)] + } override string getAPrimaryQlClass() { result = "PredicateExpr" } } @@ -886,6 +898,8 @@ class AsExpr extends TAsExpr, AstNode { result = super.getParent() or result.(Aggregate).getAsExpr(_) = this + or + result.(Select).getAsExpr(_) = this } } @@ -919,6 +933,8 @@ class Expr extends TExpr, AstNode { result.(Call).getArgument(_) = this or result.(Aggregate).getOrderBy(_) = this + or + result.(Select).getOrderBy(_) = this } } diff --git a/ql/src/codeql_ql/ast/internal/AstNodes.qll b/ql/src/codeql_ql/ast/internal/AstNodes.qll index 3daf9cabb21..f133dd123d8 100644 --- a/ql/src/codeql_ql/ast/internal/AstNodes.qll +++ b/ql/src/codeql_ql/ast/internal/AstNodes.qll @@ -150,4 +150,4 @@ Generated::AstNode toGenerated(AST::AstNode n) { class TPredicate = TCharPred or TClasslessPredicate or TClassPredicate; -class TModuleMember = TClasslessPredicate or TClass or TModule or TNewType or TImport; +class TModuleMember = TClasslessPredicate or TClass or TModule or TNewType or TImport or TSelect;