Skip to content

Commit 99497e5

Browse files
authored
Merge pull request github#15521 from hmac/hmac-ar-connection
Ruby: Recognise more ActiveRecord connections
2 parents b6385f7 + f792b58 commit 99497e5

File tree

3 files changed

+125
-112
lines changed

3 files changed

+125
-112
lines changed

ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,11 @@ private predicate isUnlikelyExternalCall(API::MethodAccessNode node) {
7777
}
7878

7979
private API::Node activeRecordConnectionInstance() {
80-
result = activeRecordBaseClass().getReturn("connection")
80+
result =
81+
[
82+
activeRecordBaseClass().getReturn("connection"),
83+
activeRecordBaseClass().getInstance().getReturn("connection")
84+
]
8185
}
8286

8387
/**

ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.expected

Lines changed: 116 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
activeRecordModelClasses
22
| ActiveRecord.rb:1:1:3:3 | UserGroup |
3-
| ActiveRecord.rb:5:1:15:3 | User |
4-
| ActiveRecord.rb:17:1:21:3 | Admin |
3+
| ActiveRecord.rb:5:1:19:3 | User |
4+
| ActiveRecord.rb:21:1:25:3 | Admin |
55
| associations.rb:1:1:3:3 | Author |
66
| associations.rb:5:1:9:3 | Post |
77
| associations.rb:11:1:13:3 | Tag |
@@ -10,17 +10,20 @@ activeRecordInstances
1010
| ActiveRecord.rb:9:5:9:68 | call to find |
1111
| ActiveRecord.rb:13:5:13:40 | call to find_by |
1212
| ActiveRecord.rb:13:5:13:46 | call to users |
13-
| ActiveRecord.rb:35:5:35:51 | call to authenticate |
14-
| ActiveRecord.rb:36:5:36:30 | call to find_by_name |
15-
| ActiveRecord.rb:55:5:57:7 | if ... |
16-
| ActiveRecord.rb:55:43:56:40 | then ... |
17-
| ActiveRecord.rb:56:7:56:40 | call to find_by |
18-
| ActiveRecord.rb:60:5:60:33 | call to find_by |
19-
| ActiveRecord.rb:62:5:62:34 | call to find |
20-
| ActiveRecord.rb:72:5:72:24 | call to create |
21-
| ActiveRecord.rb:76:5:76:66 | call to create |
22-
| ActiveRecord.rb:80:5:80:68 | call to create |
23-
| ActiveRecord.rb:84:5:84:16 | call to create |
13+
| ActiveRecord.rb:16:3:18:5 | self (exec) |
14+
| ActiveRecord.rb:16:3:18:5 | self in exec |
15+
| ActiveRecord.rb:17:5:17:14 | self |
16+
| ActiveRecord.rb:39:5:39:51 | call to authenticate |
17+
| ActiveRecord.rb:40:5:40:30 | call to find_by_name |
18+
| ActiveRecord.rb:59:5:61:7 | if ... |
19+
| ActiveRecord.rb:59:43:60:40 | then ... |
20+
| ActiveRecord.rb:60:7:60:40 | call to find_by |
21+
| ActiveRecord.rb:64:5:64:33 | call to find_by |
22+
| ActiveRecord.rb:66:5:66:34 | call to find |
23+
| ActiveRecord.rb:76:5:76:24 | call to create |
24+
| ActiveRecord.rb:80:5:80:66 | call to create |
25+
| ActiveRecord.rb:84:5:84:68 | call to create |
26+
| ActiveRecord.rb:88:5:88:16 | call to create |
2427
| associations.rb:19:1:19:7 | author1 |
2528
| associations.rb:19:1:19:20 | ... = ... |
2629
| associations.rb:19:11:19:20 | call to new |
@@ -105,46 +108,47 @@ activeRecordInstances
105108
| associations.rb:53:1:53:34 | call to find |
106109
activeRecordSqlExecutionRanges
107110
| ActiveRecord.rb:9:33:9:67 | "name='#{...}' and pass='#{...}'" |
108-
| ActiveRecord.rb:19:16:19:24 | condition |
109-
| ActiveRecord.rb:28:30:28:44 | ...[...] |
110-
| ActiveRecord.rb:29:20:29:42 | "id = '#{...}'" |
111-
| ActiveRecord.rb:30:21:30:45 | call to [] |
112-
| ActiveRecord.rb:31:16:31:21 | <<-SQL |
113-
| ActiveRecord.rb:34:20:34:47 | "user.id = '#{...}'" |
114-
| ActiveRecord.rb:46:20:46:32 | ... + ... |
115-
| ActiveRecord.rb:52:16:52:28 | "name #{...}" |
116-
| ActiveRecord.rb:56:20:56:39 | "username = #{...}" |
117-
| ActiveRecord.rb:68:21:68:44 | ...[...] |
118-
| ActiveRecord.rb:106:27:106:76 | "this is an unsafe annotation:..." |
111+
| ActiveRecord.rb:17:24:17:24 | q |
112+
| ActiveRecord.rb:23:16:23:24 | condition |
113+
| ActiveRecord.rb:32:30:32:44 | ...[...] |
114+
| ActiveRecord.rb:33:20:33:42 | "id = '#{...}'" |
115+
| ActiveRecord.rb:34:21:34:45 | call to [] |
116+
| ActiveRecord.rb:35:16:35:21 | <<-SQL |
117+
| ActiveRecord.rb:38:20:38:47 | "user.id = '#{...}'" |
118+
| ActiveRecord.rb:50:20:50:32 | ... + ... |
119+
| ActiveRecord.rb:56:16:56:28 | "name #{...}" |
120+
| ActiveRecord.rb:60:20:60:39 | "username = #{...}" |
121+
| ActiveRecord.rb:72:21:72:44 | ...[...] |
122+
| ActiveRecord.rb:110:27:110:76 | "this is an unsafe annotation:..." |
119123
activeRecordModelClassMethodCalls
120124
| ActiveRecord.rb:2:3:2:17 | call to has_many |
121125
| ActiveRecord.rb:6:3:6:24 | call to belongs_to |
122126
| ActiveRecord.rb:9:5:9:68 | call to find |
123127
| ActiveRecord.rb:13:5:13:40 | call to find_by |
124128
| ActiveRecord.rb:13:5:13:46 | call to users |
125-
| ActiveRecord.rb:19:5:19:25 | call to destroy_by |
126-
| ActiveRecord.rb:28:5:28:45 | call to calculate |
127-
| ActiveRecord.rb:29:5:29:43 | call to delete_by |
128-
| ActiveRecord.rb:30:5:30:46 | call to destroy_by |
129-
| ActiveRecord.rb:31:5:31:35 | call to where |
130-
| ActiveRecord.rb:34:5:34:14 | call to where |
131-
| ActiveRecord.rb:34:5:34:48 | call to not |
132-
| ActiveRecord.rb:36:5:36:30 | call to find_by_name |
133-
| ActiveRecord.rb:37:5:37:36 | call to not_a_find_by_method |
134-
| ActiveRecord.rb:46:5:46:33 | call to delete_by |
135-
| ActiveRecord.rb:52:5:52:29 | call to order |
136-
| ActiveRecord.rb:56:7:56:40 | call to find_by |
137-
| ActiveRecord.rb:60:5:60:33 | call to find_by |
138-
| ActiveRecord.rb:62:5:62:34 | call to find |
139-
| ActiveRecord.rb:72:5:72:24 | call to create |
140-
| ActiveRecord.rb:76:5:76:66 | call to create |
141-
| ActiveRecord.rb:80:5:80:68 | call to create |
142-
| ActiveRecord.rb:84:5:84:16 | call to create |
143-
| ActiveRecord.rb:88:5:88:27 | call to update |
144-
| ActiveRecord.rb:92:5:92:69 | call to update |
145-
| ActiveRecord.rb:96:5:96:71 | call to update |
146-
| ActiveRecord.rb:102:13:102:54 | call to annotate |
147-
| ActiveRecord.rb:106:13:106:77 | call to annotate |
129+
| ActiveRecord.rb:23:5:23:25 | call to destroy_by |
130+
| ActiveRecord.rb:32:5:32:45 | call to calculate |
131+
| ActiveRecord.rb:33:5:33:43 | call to delete_by |
132+
| ActiveRecord.rb:34:5:34:46 | call to destroy_by |
133+
| ActiveRecord.rb:35:5:35:35 | call to where |
134+
| ActiveRecord.rb:38:5:38:14 | call to where |
135+
| ActiveRecord.rb:38:5:38:48 | call to not |
136+
| ActiveRecord.rb:40:5:40:30 | call to find_by_name |
137+
| ActiveRecord.rb:41:5:41:36 | call to not_a_find_by_method |
138+
| ActiveRecord.rb:50:5:50:33 | call to delete_by |
139+
| ActiveRecord.rb:56:5:56:29 | call to order |
140+
| ActiveRecord.rb:60:7:60:40 | call to find_by |
141+
| ActiveRecord.rb:64:5:64:33 | call to find_by |
142+
| ActiveRecord.rb:66:5:66:34 | call to find |
143+
| ActiveRecord.rb:76:5:76:24 | call to create |
144+
| ActiveRecord.rb:80:5:80:66 | call to create |
145+
| ActiveRecord.rb:84:5:84:68 | call to create |
146+
| ActiveRecord.rb:88:5:88:16 | call to create |
147+
| ActiveRecord.rb:92:5:92:27 | call to update |
148+
| ActiveRecord.rb:96:5:96:69 | call to update |
149+
| ActiveRecord.rb:100:5:100:71 | call to update |
150+
| ActiveRecord.rb:106:13:106:54 | call to annotate |
151+
| ActiveRecord.rb:110:13:110:77 | call to annotate |
148152
| associations.rb:2:3:2:17 | call to has_many |
149153
| associations.rb:6:3:6:20 | call to belongs_to |
150154
| associations.rb:7:3:7:20 | call to has_many |
@@ -200,41 +204,41 @@ activeRecordModelClassMethodCalls
200204
activeRecordModelClassMethodCallsReplacement
201205
| ActiveRecord.rb:1:1:3:3 | UserGroup | ActiveRecord.rb:2:3:2:17 | call to has_many |
202206
| ActiveRecord.rb:1:1:3:3 | UserGroup | ActiveRecord.rb:13:5:13:40 | call to find_by |
203-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:6:3:6:24 | call to belongs_to |
204-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:9:5:9:68 | call to find |
205-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:19:5:19:25 | call to destroy_by |
206-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:28:5:28:45 | call to calculate |
207-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:29:5:29:43 | call to delete_by |
208-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:30:5:30:46 | call to destroy_by |
209-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:31:5:31:35 | call to where |
210-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:34:5:34:14 | call to where |
211-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:35:5:35:51 | call to authenticate |
212-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:36:5:36:30 | call to find_by_name |
213-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:37:5:37:36 | call to not_a_find_by_method |
214-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:46:5:46:33 | call to delete_by |
215-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:52:5:52:29 | call to order |
216-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:56:7:56:40 | call to find_by |
217-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:60:5:60:33 | call to find_by |
218-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:62:5:62:34 | call to find |
219-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:68:5:68:45 | call to delete_by |
220-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:72:5:72:24 | call to create |
221-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:76:5:76:66 | call to create |
222-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:80:5:80:68 | call to create |
223-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:84:5:84:16 | call to create |
224-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:88:5:88:27 | call to update |
225-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:92:5:92:69 | call to update |
226-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:96:5:96:71 | call to update |
227-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:102:13:102:54 | call to annotate |
228-
| ActiveRecord.rb:5:1:15:3 | User | ActiveRecord.rb:106:13:106:77 | call to annotate |
229-
| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:19:5:19:25 | call to destroy_by |
230-
| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:68:5:68:45 | call to delete_by |
231-
| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:72:5:72:24 | call to create |
232-
| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:76:5:76:66 | call to create |
233-
| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:80:5:80:68 | call to create |
234-
| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:84:5:84:16 | call to create |
235-
| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:88:5:88:27 | call to update |
236-
| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:92:5:92:69 | call to update |
237-
| ActiveRecord.rb:17:1:21:3 | Admin | ActiveRecord.rb:96:5:96:71 | call to update |
207+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:6:3:6:24 | call to belongs_to |
208+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:9:5:9:68 | call to find |
209+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:23:5:23:25 | call to destroy_by |
210+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:32:5:32:45 | call to calculate |
211+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:33:5:33:43 | call to delete_by |
212+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:34:5:34:46 | call to destroy_by |
213+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:35:5:35:35 | call to where |
214+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:38:5:38:14 | call to where |
215+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:39:5:39:51 | call to authenticate |
216+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:40:5:40:30 | call to find_by_name |
217+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:41:5:41:36 | call to not_a_find_by_method |
218+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:50:5:50:33 | call to delete_by |
219+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:56:5:56:29 | call to order |
220+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:60:7:60:40 | call to find_by |
221+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:64:5:64:33 | call to find_by |
222+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:66:5:66:34 | call to find |
223+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:72:5:72:45 | call to delete_by |
224+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:76:5:76:24 | call to create |
225+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:80:5:80:66 | call to create |
226+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:84:5:84:68 | call to create |
227+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:88:5:88:16 | call to create |
228+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:92:5:92:27 | call to update |
229+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:96:5:96:69 | call to update |
230+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:100:5:100:71 | call to update |
231+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:106:13:106:54 | call to annotate |
232+
| ActiveRecord.rb:5:1:19:3 | User | ActiveRecord.rb:110:13:110:77 | call to annotate |
233+
| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:23:5:23:25 | call to destroy_by |
234+
| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:72:5:72:45 | call to delete_by |
235+
| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:76:5:76:24 | call to create |
236+
| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:80:5:80:66 | call to create |
237+
| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:84:5:84:68 | call to create |
238+
| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:88:5:88:16 | call to create |
239+
| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:92:5:92:27 | call to update |
240+
| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:96:5:96:69 | call to update |
241+
| ActiveRecord.rb:21:1:25:3 | Admin | ActiveRecord.rb:100:5:100:71 | call to update |
238242
| associations.rb:1:1:3:3 | Author | associations.rb:2:3:2:17 | call to has_many |
239243
| associations.rb:1:1:3:3 | Author | associations.rb:19:11:19:20 | call to new |
240244
| associations.rb:5:1:9:3 | Post | associations.rb:6:3:6:20 | call to belongs_to |
@@ -244,28 +248,29 @@ activeRecordModelClassMethodCallsReplacement
244248
| associations.rb:15:1:17:3 | Comment | associations.rb:16:3:16:18 | call to belongs_to |
245249
potentiallyUnsafeSqlExecutingMethodCall
246250
| ActiveRecord.rb:9:5:9:68 | call to find |
247-
| ActiveRecord.rb:19:5:19:25 | call to destroy_by |
248-
| ActiveRecord.rb:28:5:28:45 | call to calculate |
249-
| ActiveRecord.rb:29:5:29:43 | call to delete_by |
250-
| ActiveRecord.rb:30:5:30:46 | call to destroy_by |
251-
| ActiveRecord.rb:31:5:31:35 | call to where |
252-
| ActiveRecord.rb:34:5:34:48 | call to not |
253-
| ActiveRecord.rb:46:5:46:33 | call to delete_by |
254-
| ActiveRecord.rb:52:5:52:29 | call to order |
255-
| ActiveRecord.rb:56:7:56:40 | call to find_by |
256-
| ActiveRecord.rb:106:13:106:77 | call to annotate |
251+
| ActiveRecord.rb:23:5:23:25 | call to destroy_by |
252+
| ActiveRecord.rb:32:5:32:45 | call to calculate |
253+
| ActiveRecord.rb:33:5:33:43 | call to delete_by |
254+
| ActiveRecord.rb:34:5:34:46 | call to destroy_by |
255+
| ActiveRecord.rb:35:5:35:35 | call to where |
256+
| ActiveRecord.rb:38:5:38:48 | call to not |
257+
| ActiveRecord.rb:50:5:50:33 | call to delete_by |
258+
| ActiveRecord.rb:56:5:56:29 | call to order |
259+
| ActiveRecord.rb:60:7:60:40 | call to find_by |
260+
| ActiveRecord.rb:110:13:110:77 | call to annotate |
257261
activeRecordModelInstantiations
258-
| ActiveRecord.rb:9:5:9:68 | call to find | ActiveRecord.rb:5:1:15:3 | User |
262+
| ActiveRecord.rb:9:5:9:68 | call to find | ActiveRecord.rb:5:1:19:3 | User |
259263
| ActiveRecord.rb:13:5:13:40 | call to find_by | ActiveRecord.rb:1:1:3:3 | UserGroup |
260-
| ActiveRecord.rb:13:5:13:46 | call to users | ActiveRecord.rb:5:1:15:3 | User |
261-
| ActiveRecord.rb:36:5:36:30 | call to find_by_name | ActiveRecord.rb:5:1:15:3 | User |
262-
| ActiveRecord.rb:56:7:56:40 | call to find_by | ActiveRecord.rb:5:1:15:3 | User |
263-
| ActiveRecord.rb:60:5:60:33 | call to find_by | ActiveRecord.rb:5:1:15:3 | User |
264-
| ActiveRecord.rb:62:5:62:34 | call to find | ActiveRecord.rb:5:1:15:3 | User |
265-
| ActiveRecord.rb:72:5:72:24 | call to create | ActiveRecord.rb:17:1:21:3 | Admin |
266-
| ActiveRecord.rb:76:5:76:66 | call to create | ActiveRecord.rb:17:1:21:3 | Admin |
267-
| ActiveRecord.rb:80:5:80:68 | call to create | ActiveRecord.rb:17:1:21:3 | Admin |
268-
| ActiveRecord.rb:84:5:84:16 | call to create | ActiveRecord.rb:17:1:21:3 | Admin |
264+
| ActiveRecord.rb:13:5:13:46 | call to users | ActiveRecord.rb:5:1:19:3 | User |
265+
| ActiveRecord.rb:16:3:18:5 | self in exec | ActiveRecord.rb:5:1:19:3 | User |
266+
| ActiveRecord.rb:40:5:40:30 | call to find_by_name | ActiveRecord.rb:5:1:19:3 | User |
267+
| ActiveRecord.rb:60:7:60:40 | call to find_by | ActiveRecord.rb:5:1:19:3 | User |
268+
| ActiveRecord.rb:64:5:64:33 | call to find_by | ActiveRecord.rb:5:1:19:3 | User |
269+
| ActiveRecord.rb:66:5:66:34 | call to find | ActiveRecord.rb:5:1:19:3 | User |
270+
| ActiveRecord.rb:76:5:76:24 | call to create | ActiveRecord.rb:21:1:25:3 | Admin |
271+
| ActiveRecord.rb:80:5:80:66 | call to create | ActiveRecord.rb:21:1:25:3 | Admin |
272+
| ActiveRecord.rb:84:5:84:68 | call to create | ActiveRecord.rb:21:1:25:3 | Admin |
273+
| ActiveRecord.rb:88:5:88:16 | call to create | ActiveRecord.rb:21:1:25:3 | Admin |
269274
| associations.rb:19:11:19:20 | call to new | associations.rb:1:1:3:3 | Author |
270275
| associations.rb:21:9:21:21 | call to posts | associations.rb:5:1:9:3 | Post |
271276
| associations.rb:21:9:21:28 | call to create | associations.rb:5:1:9:3 | Post |
@@ -307,13 +312,13 @@ activeRecordModelInstantiations
307312
| associations.rb:53:1:53:13 | call to posts | associations.rb:5:1:9:3 | Post |
308313
| associations.rb:53:1:53:20 | call to reload | associations.rb:5:1:9:3 | Post |
309314
persistentWriteAccesses
310-
| ActiveRecord.rb:72:5:72:24 | call to create | ActiveRecord.rb:72:18:72:23 | call to params |
311-
| ActiveRecord.rb:76:5:76:66 | call to create | ActiveRecord.rb:76:24:76:36 | ...[...] |
312-
| ActiveRecord.rb:76:5:76:66 | call to create | ActiveRecord.rb:76:49:76:65 | ...[...] |
313-
| ActiveRecord.rb:80:5:80:68 | call to create | ActiveRecord.rb:80:25:80:37 | ...[...] |
314-
| ActiveRecord.rb:80:5:80:68 | call to create | ActiveRecord.rb:80:50:80:66 | ...[...] |
315-
| ActiveRecord.rb:88:5:88:27 | call to update | ActiveRecord.rb:88:21:88:26 | call to params |
316-
| ActiveRecord.rb:92:5:92:69 | call to update | ActiveRecord.rb:92:27:92:39 | ...[...] |
317-
| ActiveRecord.rb:92:5:92:69 | call to update | ActiveRecord.rb:92:52:92:68 | ...[...] |
318-
| ActiveRecord.rb:96:5:96:71 | call to update | ActiveRecord.rb:96:21:96:70 | call to [] |
315+
| ActiveRecord.rb:76:5:76:24 | call to create | ActiveRecord.rb:76:18:76:23 | call to params |
316+
| ActiveRecord.rb:80:5:80:66 | call to create | ActiveRecord.rb:80:24:80:36 | ...[...] |
317+
| ActiveRecord.rb:80:5:80:66 | call to create | ActiveRecord.rb:80:49:80:65 | ...[...] |
318+
| ActiveRecord.rb:84:5:84:68 | call to create | ActiveRecord.rb:84:25:84:37 | ...[...] |
319+
| ActiveRecord.rb:84:5:84:68 | call to create | ActiveRecord.rb:84:50:84:66 | ...[...] |
320+
| ActiveRecord.rb:92:5:92:27 | call to update | ActiveRecord.rb:92:21:92:26 | call to params |
321+
| ActiveRecord.rb:96:5:96:69 | call to update | ActiveRecord.rb:96:27:96:39 | ...[...] |
322+
| ActiveRecord.rb:96:5:96:69 | call to update | ActiveRecord.rb:96:52:96:68 | ...[...] |
323+
| ActiveRecord.rb:100:5:100:71 | call to update | ActiveRecord.rb:100:21:100:70 | call to [] |
319324
| associations.rb:31:16:31:22 | ... = ... | associations.rb:31:16:31:22 | author2 |

ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ def self.authenticate(name, pass)
1212
def self.from(user_group_id)
1313
UserGroup.find_by(id: user_group_id).users
1414
end
15+
16+
def exec(q)
17+
connection.execute(q)
18+
end
1519
end
1620

1721
class Admin < User

0 commit comments

Comments
 (0)