Skip to content

Commit 77f52e4

Browse files
committed
Swift: better join order fix for NamedPattern.getVarDecl
This brings it down to 85ms when run from a query, not just from quick-eval: ``` [2023-06-14 14:47:06] Evaluated non-recursive predicate NamedPattern#1696c0d8::NamedPattern::getVarDecl#0#dispred#ff@04392e6o in 85ms (size: 91309). Evaluated relational algebra for predicate NamedPattern#1696c0d8::NamedPattern::getVarDecl#0#dispred#ff@04392e6o with tuple counts: 1310544 ~9% {2} r1 = SCAN var_decls OUTPUT In.0, In.1 1209062 ~0% {2} r2 = STREAM DEDUP r1 1209062 ~0% {2} r3 = JOIN r2 WITH Synth#5f134a93::Synth::convertVarDeclToRaw#1#ff_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1 91309 ~0% {3} r4 = JOIN r3 WITH VarDecl#914e0d1e::Generated::VarDecl::getImmediateParentPattern#0#dispred#ff ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0 69599 ~0% {3} r5 = JOIN r4 WITH #Pattern#19b8cf65::Pattern::getImmediateEnclosingPattern#0#dispredPlus#bf_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2 160908 ~1% {3} r6 = r4 UNION r5 94246 ~0% {4} r7 = JOIN r6 WITH Synth#5f134a93::Synth::convertNamedPatternToRaw#1#ff ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.0 91309 ~1% {2} r8 = JOIN r7 WITH named_patterns ON FIRST 2 OUTPUT Lhs.3, Lhs.2 return r8 ```
1 parent e93022d commit 77f52e4

File tree

1 file changed

+1
-2
lines changed

1 file changed

+1
-2
lines changed

swift/ql/lib/codeql/swift/elements/pattern/NamedPattern.qll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ class NamedPattern extends Generated::NamedPattern {
2020
*/
2121
VarDecl getVarDecl() {
2222
this.getImmediateEnclosingPattern*() = result.getImmediateParentPattern() and
23-
pragma[only_bind_out](pragma[only_bind_into](result).getName()) =
24-
pragma[only_bind_out](pragma[only_bind_into](this).getName())
23+
pragma[only_bind_out](result.getName()) = pragma[only_bind_out](this.getName())
2524
}
2625

2726
override string toString() { result = this.getName() }

0 commit comments

Comments
 (0)