Skip to content

Commit 67e8f17

Browse files
Merge pull request #15619 from joefarebrother/ruby-activerecord-connection
Ruby: Add additional sql sinks for ActiveRecord connection methods
2 parents 1f409b0 + 92bdd63 commit 67e8f17

File tree

4 files changed

+165
-116
lines changed

4 files changed

+165
-116
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* Calls to several methods of `ActiveRecord::Connection`, such as `ActiveRecord::Connection#exec_query`, are now recognized as SQL executions, including those via subclasses.

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,13 @@ private predicate sqlFragmentArgumentInner(DataFlow::CallNode call, DataFlow::No
205205
call = activeRecordQueryBuilderCall("annotate") and
206206
sink = call.getArgument(_)
207207
or
208-
call = activeRecordConnectionInstance().getAMethodCall("execute") and
208+
call =
209+
activeRecordConnectionInstance()
210+
.getAMethodCall([
211+
"create", "delete", "exec_query", "exec_delete", "exec_insert", "exec_update",
212+
"execute", "insert", "select_all", "select_one", "select_rows", "select_value",
213+
"select_values", "update"
214+
]) and
209215
sink = call.getArgument(0)
210216
or
211217
call = activeRecordQueryBuilderCall("update_all") and

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

Lines changed: 141 additions & 115 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:19:3 | User |
4-
| ActiveRecord.rb:21:1:25:3 | Admin |
3+
| ActiveRecord.rb:5:1:32:3 | User |
4+
| ActiveRecord.rb:34:1:38: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,20 +10,33 @@ 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:16:3:18:5 | self (exec) |
14-
| ActiveRecord.rb:16:3:18:5 | self in exec |
13+
| ActiveRecord.rb:16:3:31:5 | self (exec) |
14+
| ActiveRecord.rb:16:3:31:5 | self in exec |
1515
| 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 |
16+
| ActiveRecord.rb:18:5:18:14 | self |
17+
| ActiveRecord.rb:19:5:19:14 | self |
18+
| ActiveRecord.rb:20:5:20:14 | self |
19+
| ActiveRecord.rb:21:5:21:14 | self |
20+
| ActiveRecord.rb:22:5:22:14 | self |
21+
| ActiveRecord.rb:23:5:23:14 | self |
22+
| ActiveRecord.rb:24:5:24:14 | self |
23+
| ActiveRecord.rb:25:5:25:14 | self |
24+
| ActiveRecord.rb:26:5:26:14 | self |
25+
| ActiveRecord.rb:27:5:27:14 | self |
26+
| ActiveRecord.rb:28:5:28:14 | self |
27+
| ActiveRecord.rb:29:5:29:14 | self |
28+
| ActiveRecord.rb:30:5:30:14 | self |
29+
| ActiveRecord.rb:52:5:52:51 | call to authenticate |
30+
| ActiveRecord.rb:53:5:53:30 | call to find_by_name |
31+
| ActiveRecord.rb:72:5:74:7 | if ... |
32+
| ActiveRecord.rb:72:43:73:40 | then ... |
33+
| ActiveRecord.rb:73:7:73:40 | call to find_by |
34+
| ActiveRecord.rb:77:5:77:33 | call to find_by |
35+
| ActiveRecord.rb:79:5:79:34 | call to find |
36+
| ActiveRecord.rb:89:5:89:24 | call to create |
37+
| ActiveRecord.rb:93:5:93:66 | call to create |
38+
| ActiveRecord.rb:97:5:97:68 | call to create |
39+
| ActiveRecord.rb:101:5:101:16 | call to create |
2740
| associations.rb:19:1:19:7 | author1 |
2841
| associations.rb:19:1:19:20 | ... = ... |
2942
| associations.rb:19:11:19:20 | call to new |
@@ -108,47 +121,60 @@ activeRecordInstances
108121
| associations.rb:53:1:53:34 | call to find |
109122
activeRecordSqlExecutionRanges
110123
| ActiveRecord.rb:9:33:9:67 | "name='#{...}' and pass='#{...}'" |
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:..." |
124+
| ActiveRecord.rb:17:23:17:23 | q |
125+
| ActiveRecord.rb:18:23:18:23 | q |
126+
| ActiveRecord.rb:19:27:19:27 | q |
127+
| ActiveRecord.rb:20:28:20:28 | q |
128+
| ActiveRecord.rb:21:28:21:28 | q |
129+
| ActiveRecord.rb:22:28:22:28 | q |
130+
| ActiveRecord.rb:23:24:23:24 | q |
131+
| ActiveRecord.rb:24:23:24:23 | q |
132+
| ActiveRecord.rb:25:27:25:27 | q |
133+
| ActiveRecord.rb:26:27:26:27 | q |
134+
| ActiveRecord.rb:27:28:27:28 | q |
135+
| ActiveRecord.rb:28:29:28:29 | q |
136+
| ActiveRecord.rb:29:30:29:30 | q |
137+
| ActiveRecord.rb:30:23:30:23 | q |
138+
| ActiveRecord.rb:36:16:36:24 | condition |
139+
| ActiveRecord.rb:45:30:45:44 | ...[...] |
140+
| ActiveRecord.rb:46:20:46:42 | "id = '#{...}'" |
141+
| ActiveRecord.rb:47:21:47:45 | call to [] |
142+
| ActiveRecord.rb:48:16:48:21 | <<-SQL |
143+
| ActiveRecord.rb:51:20:51:47 | "user.id = '#{...}'" |
144+
| ActiveRecord.rb:63:20:63:32 | ... + ... |
145+
| ActiveRecord.rb:69:16:69:28 | "name #{...}" |
146+
| ActiveRecord.rb:73:20:73:39 | "username = #{...}" |
147+
| ActiveRecord.rb:85:21:85:44 | ...[...] |
148+
| ActiveRecord.rb:123:27:123:76 | "this is an unsafe annotation:..." |
123149
activeRecordModelClassMethodCalls
124150
| ActiveRecord.rb:2:3:2:17 | call to has_many |
125151
| ActiveRecord.rb:6:3:6:24 | call to belongs_to |
126152
| ActiveRecord.rb:9:5:9:68 | call to find |
127153
| ActiveRecord.rb:13:5:13:40 | call to find_by |
128154
| ActiveRecord.rb:13:5:13:46 | call to users |
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 |
155+
| ActiveRecord.rb:36:5:36:25 | call to destroy_by |
156+
| ActiveRecord.rb:45:5:45:45 | call to calculate |
157+
| ActiveRecord.rb:46:5:46:43 | call to delete_by |
158+
| ActiveRecord.rb:47:5:47:46 | call to destroy_by |
159+
| ActiveRecord.rb:48:5:48:35 | call to where |
160+
| ActiveRecord.rb:51:5:51:14 | call to where |
161+
| ActiveRecord.rb:51:5:51:48 | call to not |
162+
| ActiveRecord.rb:53:5:53:30 | call to find_by_name |
163+
| ActiveRecord.rb:54:5:54:36 | call to not_a_find_by_method |
164+
| ActiveRecord.rb:63:5:63:33 | call to delete_by |
165+
| ActiveRecord.rb:69:5:69:29 | call to order |
166+
| ActiveRecord.rb:73:7:73:40 | call to find_by |
167+
| ActiveRecord.rb:77:5:77:33 | call to find_by |
168+
| ActiveRecord.rb:79:5:79:34 | call to find |
169+
| ActiveRecord.rb:89:5:89:24 | call to create |
170+
| ActiveRecord.rb:93:5:93:66 | call to create |
171+
| ActiveRecord.rb:97:5:97:68 | call to create |
172+
| ActiveRecord.rb:101:5:101:16 | call to create |
173+
| ActiveRecord.rb:105:5:105:27 | call to update |
174+
| ActiveRecord.rb:109:5:109:69 | call to update |
175+
| ActiveRecord.rb:113:5:113:71 | call to update |
176+
| ActiveRecord.rb:119:13:119:54 | call to annotate |
177+
| ActiveRecord.rb:123:13:123:77 | call to annotate |
152178
| associations.rb:2:3:2:17 | call to has_many |
153179
| associations.rb:6:3:6:20 | call to belongs_to |
154180
| associations.rb:7:3:7:20 | call to has_many |
@@ -204,41 +230,41 @@ activeRecordModelClassMethodCalls
204230
activeRecordModelClassMethodCallsReplacement
205231
| ActiveRecord.rb:1:1:3:3 | UserGroup | ActiveRecord.rb:2:3:2:17 | call to has_many |
206232
| ActiveRecord.rb:1:1:3:3 | UserGroup | ActiveRecord.rb:13:5:13:40 | call to find_by |
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 |
233+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:6:3:6:24 | call to belongs_to |
234+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:9:5:9:68 | call to find |
235+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:36:5:36:25 | call to destroy_by |
236+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:45:5:45:45 | call to calculate |
237+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:46:5:46:43 | call to delete_by |
238+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:47:5:47:46 | call to destroy_by |
239+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:48:5:48:35 | call to where |
240+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:51:5:51:14 | call to where |
241+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:52:5:52:51 | call to authenticate |
242+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:53:5:53:30 | call to find_by_name |
243+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:54:5:54:36 | call to not_a_find_by_method |
244+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:63:5:63:33 | call to delete_by |
245+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:69:5:69:29 | call to order |
246+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:73:7:73:40 | call to find_by |
247+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:77:5:77:33 | call to find_by |
248+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:79:5:79:34 | call to find |
249+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:85:5:85:45 | call to delete_by |
250+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:89:5:89:24 | call to create |
251+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:93:5:93:66 | call to create |
252+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:97:5:97:68 | call to create |
253+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:101:5:101:16 | call to create |
254+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:105:5:105:27 | call to update |
255+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:109:5:109:69 | call to update |
256+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:113:5:113:71 | call to update |
257+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:119:13:119:54 | call to annotate |
258+
| ActiveRecord.rb:5:1:32:3 | User | ActiveRecord.rb:123:13:123:77 | call to annotate |
259+
| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:36:5:36:25 | call to destroy_by |
260+
| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:85:5:85:45 | call to delete_by |
261+
| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:89:5:89:24 | call to create |
262+
| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:93:5:93:66 | call to create |
263+
| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:97:5:97:68 | call to create |
264+
| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:101:5:101:16 | call to create |
265+
| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:105:5:105:27 | call to update |
266+
| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:109:5:109:69 | call to update |
267+
| ActiveRecord.rb:34:1:38:3 | Admin | ActiveRecord.rb:113:5:113:71 | call to update |
242268
| associations.rb:1:1:3:3 | Author | associations.rb:2:3:2:17 | call to has_many |
243269
| associations.rb:1:1:3:3 | Author | associations.rb:19:11:19:20 | call to new |
244270
| associations.rb:5:1:9:3 | Post | associations.rb:6:3:6:20 | call to belongs_to |
@@ -248,29 +274,29 @@ activeRecordModelClassMethodCallsReplacement
248274
| associations.rb:15:1:17:3 | Comment | associations.rb:16:3:16:18 | call to belongs_to |
249275
potentiallyUnsafeSqlExecutingMethodCall
250276
| ActiveRecord.rb:9:5:9:68 | call to find |
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 |
277+
| ActiveRecord.rb:36:5:36:25 | call to destroy_by |
278+
| ActiveRecord.rb:45:5:45:45 | call to calculate |
279+
| ActiveRecord.rb:46:5:46:43 | call to delete_by |
280+
| ActiveRecord.rb:47:5:47:46 | call to destroy_by |
281+
| ActiveRecord.rb:48:5:48:35 | call to where |
282+
| ActiveRecord.rb:51:5:51:48 | call to not |
283+
| ActiveRecord.rb:63:5:63:33 | call to delete_by |
284+
| ActiveRecord.rb:69:5:69:29 | call to order |
285+
| ActiveRecord.rb:73:7:73:40 | call to find_by |
286+
| ActiveRecord.rb:123:13:123:77 | call to annotate |
261287
activeRecordModelInstantiations
262-
| ActiveRecord.rb:9:5:9:68 | call to find | ActiveRecord.rb:5:1:19:3 | User |
288+
| ActiveRecord.rb:9:5:9:68 | call to find | ActiveRecord.rb:5:1:32:3 | User |
263289
| ActiveRecord.rb:13:5:13:40 | call to find_by | ActiveRecord.rb:1:1:3:3 | UserGroup |
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 |
290+
| ActiveRecord.rb:13:5:13:46 | call to users | ActiveRecord.rb:5:1:32:3 | User |
291+
| ActiveRecord.rb:16:3:31:5 | self in exec | ActiveRecord.rb:5:1:32:3 | User |
292+
| ActiveRecord.rb:53:5:53:30 | call to find_by_name | ActiveRecord.rb:5:1:32:3 | User |
293+
| ActiveRecord.rb:73:7:73:40 | call to find_by | ActiveRecord.rb:5:1:32:3 | User |
294+
| ActiveRecord.rb:77:5:77:33 | call to find_by | ActiveRecord.rb:5:1:32:3 | User |
295+
| ActiveRecord.rb:79:5:79:34 | call to find | ActiveRecord.rb:5:1:32:3 | User |
296+
| ActiveRecord.rb:89:5:89:24 | call to create | ActiveRecord.rb:34:1:38:3 | Admin |
297+
| ActiveRecord.rb:93:5:93:66 | call to create | ActiveRecord.rb:34:1:38:3 | Admin |
298+
| ActiveRecord.rb:97:5:97:68 | call to create | ActiveRecord.rb:34:1:38:3 | Admin |
299+
| ActiveRecord.rb:101:5:101:16 | call to create | ActiveRecord.rb:34:1:38:3 | Admin |
274300
| associations.rb:19:11:19:20 | call to new | associations.rb:1:1:3:3 | Author |
275301
| associations.rb:21:9:21:21 | call to posts | associations.rb:5:1:9:3 | Post |
276302
| associations.rb:21:9:21:28 | call to create | associations.rb:5:1:9:3 | Post |
@@ -312,13 +338,13 @@ activeRecordModelInstantiations
312338
| associations.rb:53:1:53:13 | call to posts | associations.rb:5:1:9:3 | Post |
313339
| associations.rb:53:1:53:20 | call to reload | associations.rb:5:1:9:3 | Post |
314340
persistentWriteAccesses
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 [] |
341+
| ActiveRecord.rb:89:5:89:24 | call to create | ActiveRecord.rb:89:18:89:23 | call to params |
342+
| ActiveRecord.rb:93:5:93:66 | call to create | ActiveRecord.rb:93:24:93:36 | ...[...] |
343+
| ActiveRecord.rb:93:5:93:66 | call to create | ActiveRecord.rb:93:49:93:65 | ...[...] |
344+
| ActiveRecord.rb:97:5:97:68 | call to create | ActiveRecord.rb:97:25:97:37 | ...[...] |
345+
| ActiveRecord.rb:97:5:97:68 | call to create | ActiveRecord.rb:97:50:97:66 | ...[...] |
346+
| ActiveRecord.rb:105:5:105:27 | call to update | ActiveRecord.rb:105:21:105:26 | call to params |
347+
| ActiveRecord.rb:109:5:109:69 | call to update | ActiveRecord.rb:109:27:109:39 | ...[...] |
348+
| ActiveRecord.rb:109:5:109:69 | call to update | ActiveRecord.rb:109:52:109:68 | ...[...] |
349+
| ActiveRecord.rb:113:5:113:71 | call to update | ActiveRecord.rb:113:21:113:70 | call to [] |
324350
| 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: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,20 @@ def self.from(user_group_id)
1414
end
1515

1616
def exec(q)
17+
connection.create(q)
18+
connection.delete(q)
19+
connection.exec_query(q)
20+
connection.exec_insert(q)
21+
connection.exec_delete(q)
22+
connection.exec_update(q)
1723
connection.execute(q)
24+
connection.insert(q)
25+
connection.select_all(q)
26+
connection.select_one(q)
27+
connection.select_rows(q)
28+
connection.select_value(q)
29+
connection.select_values(q)
30+
connection.update(q)
1831
end
1932
end
2033

0 commit comments

Comments
 (0)