@@ -319,17 +319,6 @@ private class ActiveRecordInstanceMethodCall extends DataFlow::CallNode {
319
319
* Provides modeling relating to the `ActiveRecord::Persistence` module.
320
320
*/
321
321
private module Persistence {
322
- /**
323
- * A call to a method that may modify or create a model object and write it to
324
- * the database. Examples include `create`, `insert`, and `update`.
325
- */
326
- abstract private class ModifyAndSaveCall extends DataFlow:: CallNode , PersistentWriteAccess:: Range {
327
- /**
328
- * Gets the ActiveRecord model class to which this call applies.
329
- */
330
- abstract ActiveRecordModelClass getClass ( ) ;
331
- }
332
-
333
322
/**
334
323
* Holds if there is a hash literal argument to `call` at `argIndex`
335
324
* containing a KV pair with value `value`.
@@ -355,7 +344,7 @@ private module Persistence {
355
344
}
356
345
357
346
/** A call to e.g. `User.create(name: "foo")` */
358
- private class CreateLikeCall extends ModifyAndSaveCall {
347
+ private class CreateLikeCall extends DataFlow :: CallNode , PersistentWriteAccess :: Range {
359
348
private ActiveRecordModelClass modelCls ;
360
349
361
350
CreateLikeCall ( ) {
@@ -372,12 +361,10 @@ private module Persistence {
372
361
hashArgumentWithValue ( this , 0 , result ) or
373
362
keywordArgumentWithValue ( this , result )
374
363
}
375
-
376
- override ActiveRecordModelClass getClass ( ) { result = modelCls }
377
364
}
378
365
379
366
/** A call to e.g. `User.update(1, name: "foo")` */
380
- private class UpdateLikeClassMethodCall extends ModifyAndSaveCall {
367
+ private class UpdateLikeClassMethodCall extends DataFlow :: CallNode , PersistentWriteAccess :: Range {
381
368
private ActiveRecordModelClass modelCls ;
382
369
383
370
UpdateLikeClassMethodCall ( ) {
@@ -403,12 +390,10 @@ private module Persistence {
403
390
)
404
391
)
405
392
}
406
-
407
- override ActiveRecordModelClass getClass ( ) { result = modelCls }
408
393
}
409
394
410
395
/** A call to e.g. `User.insert_all([{name: "foo"}, {name: "bar"}])` */
411
- private class InsertAllLikeCall extends ModifyAndSaveCall {
396
+ private class InsertAllLikeCall extends DataFlow :: CallNode , PersistentWriteAccess :: Range {
412
397
private ExprNodes:: ArrayLiteralCfgNode arr ;
413
398
private ActiveRecordModelClass modelCls ;
414
399
@@ -427,12 +412,10 @@ private module Persistence {
427
412
result .asExpr ( ) = pair .getValue ( )
428
413
)
429
414
}
430
-
431
- override ActiveRecordModelClass getClass ( ) { result = modelCls }
432
415
}
433
416
434
417
/** A call to e.g. `user.update(name: "foo")` */
435
- private class UpdateLikeInstanceMethodCall extends ModifyAndSaveCall ,
418
+ private class UpdateLikeInstanceMethodCall extends DataFlow :: CallNode , PersistentWriteAccess :: Range ,
436
419
ActiveRecordInstanceMethodCall {
437
420
UpdateLikeInstanceMethodCall ( ) {
438
421
this .getMethodName ( ) = [ "update" , "update!" , "update_attributes" , "update_attributes!" ]
@@ -445,20 +428,16 @@ private module Persistence {
445
428
// keyword arg
446
429
keywordArgumentWithValue ( this , result )
447
430
}
448
-
449
- override ActiveRecordModelClass getClass ( ) { result = this .getInstance ( ) .getClass ( ) }
450
431
}
451
432
452
433
/** A call to e.g. `user.update_attribute(name, "foo")` */
453
- private class UpdateAttributeCall extends ModifyAndSaveCall , ActiveRecordInstanceMethodCall {
434
+ private class UpdateAttributeCall extends DataFlow :: CallNode , PersistentWriteAccess :: Range , ActiveRecordInstanceMethodCall {
454
435
UpdateAttributeCall ( ) { this .getMethodName ( ) = "update_attribute" }
455
436
456
437
override DataFlow:: Node getValue ( ) {
457
438
// e.g. `foo.update_attribute(key, value)`
458
439
result = this .getArgument ( 1 )
459
440
}
460
-
461
- override ActiveRecordModelClass getClass ( ) { result = this .getInstance ( ) .getClass ( ) }
462
441
}
463
442
464
443
/**
0 commit comments