From a1d6ce0c67dd132f11a3e9f20dbae235d0b0d1d5 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 2 Nov 2026 09:51:40 +0100 Subject: [PATCH] Unified: Fix bad join Before ``` Evaluated relational algebra for predicate StaticNameBinding::unqualifiedMemberAccess/4#0730f1f3@db9ae7oh with tuple counts: 275976 ~4% {2} r1 = SCAN `StaticNameBinding::unqualifiedMemberAccessDepth/1#8b18133c` OUTPUT In.1, In.0 583240193 ~1% {2} | JOIN WITH `FacadeAst::Unified::AstNode.getDepth/0#e89ff1d9#bf_10#join_rhs` ON FIRST 1 OUTPUT Lhs.1, Rhs.1 276222 ~10% {4} | JOIN WITH `StaticNameBinding::unqualifiedMemberAccessCand/4#dd3e0587_0312#join_rhs` ON FIRST 2 OUTPUT Lhs.0, Rhs.2, Rhs.3, Lhs.1 return r1 ``` After ``` Evaluated relational algebra for predicate StaticNameBinding::unqualifiedMemberAccess/4#0730f1f3@6b447707 with tuple counts: 276222 ~0% {5} r1 = JOIN `StaticNameBinding::unqualifiedMemberAccessCand/4#dd3e0587` WITH `StaticNameBinding::unqualifiedMemberAccessDepth/1#8b18133c` ON FIRST 1 OUTPUT Lhs.3, Rhs.1, Lhs.1, Lhs.2, Lhs.0 276222 ~10% {4} | JOIN WITH `FacadeAst::Unified::AstNode.getDepth/0#e89ff1d9` ON FIRST 2 OUTPUT Lhs.4, Lhs.2, Lhs.3, Lhs.0 return r1 ``` --- unified/ql/lib/codeql/unified/internal/StaticNameBinding.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/unified/ql/lib/codeql/unified/internal/StaticNameBinding.qll b/unified/ql/lib/codeql/unified/internal/StaticNameBinding.qll index 199155913d8e..a559dab61029 100644 --- a/unified/ql/lib/codeql/unified/internal/StaticNameBinding.qll +++ b/unified/ql/lib/codeql/unified/internal/StaticNameBinding.qll @@ -750,7 +750,8 @@ predicate unqualifiedMemberAccess( ClassLikeDeclaration accessingClass ) { CachedStage::ref() and - unqualifiedMemberAccessCand(access, instanceAccess, target, accessingClass) and + unqualifiedMemberAccessCand(pragma[only_bind_into](access), instanceAccess, target, + pragma[only_bind_into](accessingClass)) and accessingClass.getDepth() = unqualifiedMemberAccessDepth(access) }