@@ -269,15 +269,15 @@ private Expr getUltimateReceiver(MethodCall call) {
269269
270270// A call to `find`, `where`, etc. that may return active record model object(s)
271271private class ActiveRecordModelFinderCall extends ActiveRecordModelInstantiation , DataFlow:: CallNode {
272- private MethodCall call ;
273272 private ActiveRecordModelClass cls ;
274- private Expr recv ;
275273
276274 ActiveRecordModelFinderCall ( ) {
277- call = this .asExpr ( ) .getExpr ( ) and
278- recv = getUltimateReceiver ( call ) and
279- resolveConstant ( recv ) = cls .getAQualifiedName ( ) and
280- call .getMethodName ( ) = finderMethodName ( )
275+ exists ( MethodCall call , Expr recv |
276+ call = this .asExpr ( ) .getExpr ( ) and
277+ recv = getUltimateReceiver ( call ) and
278+ resolveConstant ( recv ) = cls .getAQualifiedName ( ) and
279+ call .getMethodName ( ) = finderMethodName ( )
280+ )
281281 }
282282
283283 final override ActiveRecordModelClass getClass ( ) { result = cls }
@@ -347,10 +347,8 @@ private module Persistence {
347347
348348 /** A call to e.g. `User.create(name: "foo")` */
349349 private class CreateLikeCall extends DataFlow:: CallNode , PersistentWriteAccess:: Range {
350- private ActiveRecordModelClass modelCls ;
351-
352350 CreateLikeCall ( ) {
353- modelCls = this .asExpr ( ) .getExpr ( ) .( ActiveRecordModelClassMethodCall ) .getReceiverClass ( ) and
351+ exists ( this .asExpr ( ) .getExpr ( ) .( ActiveRecordModelClassMethodCall ) .getReceiverClass ( ) ) and
354352 this .getMethodName ( ) =
355353 [
356354 "create" , "create!" , "create_or_find_by" , "create_or_find_by!" , "find_or_create_by" ,
@@ -367,10 +365,8 @@ private module Persistence {
367365
368366 /** A call to e.g. `User.update(1, name: "foo")` */
369367 private class UpdateLikeClassMethodCall extends DataFlow:: CallNode , PersistentWriteAccess:: Range {
370- private ActiveRecordModelClass modelCls ;
371-
372368 UpdateLikeClassMethodCall ( ) {
373- modelCls = this .asExpr ( ) .getExpr ( ) .( ActiveRecordModelClassMethodCall ) .getReceiverClass ( ) and
369+ exists ( this .asExpr ( ) .getExpr ( ) .( ActiveRecordModelClassMethodCall ) .getReceiverClass ( ) ) and
374370 this .getMethodName ( ) = [ "update" , "update!" , "upsert" ]
375371 }
376372
@@ -397,10 +393,9 @@ private module Persistence {
397393 /** A call to e.g. `User.insert_all([{name: "foo"}, {name: "bar"}])` */
398394 private class InsertAllLikeCall extends DataFlow:: CallNode , PersistentWriteAccess:: Range {
399395 private ExprNodes:: ArrayLiteralCfgNode arr ;
400- private ActiveRecordModelClass modelCls ;
401396
402397 InsertAllLikeCall ( ) {
403- modelCls = this .asExpr ( ) .getExpr ( ) .( ActiveRecordModelClassMethodCall ) .getReceiverClass ( ) and
398+ exists ( this .asExpr ( ) .getExpr ( ) .( ActiveRecordModelClassMethodCall ) .getReceiverClass ( ) ) and
404399 this .getMethodName ( ) = [ "insert_all" , "insert_all!" , "upsert_all" ] and
405400 arr = this .getArgument ( 0 ) .asExpr ( )
406401 }
0 commit comments