arel 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. data/History.txt +8 -0
  2. data/README.markdown +0 -2
  3. data/Rakefile +2 -2
  4. data/arel.gemspec +13 -3
  5. data/lib/arel.rb +2 -2
  6. data/lib/arel/algebra/relations/relation.rb +3 -2
  7. data/lib/arel/engines/sql/compilers/ibm_db_compiler.rb +62 -0
  8. data/lib/arel/engines/sql/compilers/mysql_compiler.rb +11 -0
  9. data/lib/arel/engines/sql/compilers/oracle_compiler.rb +95 -0
  10. data/lib/arel/engines/sql/compilers/postgresql_compiler.rb +42 -0
  11. data/lib/arel/engines/sql/compilers/sqlite_compiler.rb +9 -0
  12. data/lib/arel/engines/sql/engine.rb +17 -3
  13. data/lib/arel/engines/sql/formatters.rb +3 -3
  14. data/lib/arel/engines/sql/relations.rb +1 -0
  15. data/lib/arel/engines/sql/relations/compiler.rb +118 -0
  16. data/lib/arel/engines/sql/relations/relation.rb +38 -63
  17. data/lib/arel/engines/sql/relations/table.rb +23 -3
  18. data/lib/arel/engines/sql/relations/utilities/externalization.rb +1 -1
  19. data/lib/arel/engines/sql/relations/writes.rb +4 -71
  20. data/spec/arel/algebra/unit/relations/relation_spec.rb +1 -2
  21. data/spec/arel/algebra/unit/relations/table_spec.rb +0 -1
  22. data/spec/arel/engines/memory/integration/joins/cross_engine_spec.rb +9 -4
  23. data/spec/arel/engines/sql/integration/joins/with_adjacency_spec.rb +68 -19
  24. data/spec/arel/engines/sql/integration/joins/with_aggregations_spec.rb +74 -20
  25. data/spec/arel/engines/sql/integration/joins/with_compounds_spec.rb +33 -3
  26. data/spec/arel/engines/sql/unit/predicates/binary_spec.rb +22 -2
  27. data/spec/arel/engines/sql/unit/predicates/equality_spec.rb +15 -3
  28. data/spec/arel/engines/sql/unit/predicates/in_spec.rb +59 -5
  29. data/spec/arel/engines/sql/unit/predicates/predicates_spec.rb +12 -0
  30. data/spec/arel/engines/sql/unit/primitives/attribute_spec.rb +24 -1
  31. data/spec/arel/engines/sql/unit/primitives/expression_spec.rb +5 -1
  32. data/spec/arel/engines/sql/unit/primitives/literal_spec.rb +10 -2
  33. data/spec/arel/engines/sql/unit/relations/alias_spec.rb +11 -1
  34. data/spec/arel/engines/sql/unit/relations/delete_spec.rb +23 -3
  35. data/spec/arel/engines/sql/unit/relations/from_spec.rb +16 -2
  36. data/spec/arel/engines/sql/unit/relations/group_spec.rb +18 -2
  37. data/spec/arel/engines/sql/unit/relations/having_spec.rb +12 -3
  38. data/spec/arel/engines/sql/unit/relations/insert_spec.rb +37 -1
  39. data/spec/arel/engines/sql/unit/relations/join_spec.rb +53 -11
  40. data/spec/arel/engines/sql/unit/relations/lock_spec.rb +25 -0
  41. data/spec/arel/engines/sql/unit/relations/order_spec.rb +52 -4
  42. data/spec/arel/engines/sql/unit/relations/project_spec.rb +38 -5
  43. data/spec/arel/engines/sql/unit/relations/skip_spec.rb +10 -1
  44. data/spec/arel/engines/sql/unit/relations/table_spec.rb +26 -5
  45. data/spec/arel/engines/sql/unit/relations/take_spec.rb +18 -1
  46. data/spec/arel/engines/sql/unit/relations/update_spec.rb +47 -1
  47. data/spec/arel/engines/sql/unit/relations/where_spec.rb +18 -2
  48. data/spec/connections/oracle_connection.rb +19 -0
  49. data/spec/schemas/mysql_schema.rb +2 -1
  50. data/spec/schemas/oracle_schema.rb +20 -0
  51. data/spec/schemas/postgresql_schema.rb +2 -1
  52. data/spec/schemas/sqlite3_schema.rb +2 -1
  53. data/spec/spec_helper.rb +16 -7
  54. metadata +31 -9
@@ -17,16 +17,25 @@ module Arel
17
17
  sql.should be_like(%Q{
18
18
  SELECT `users`.`id`, `users`.`name`, `users_2`.`id`, `users_2`.`name`
19
19
  FROM `users`
20
- INNER JOIN `users` AS `users_2`
20
+ INNER JOIN `users` `users_2`
21
21
  ON `users`.`id` = `users_2`.`id`
22
22
  })
23
23
  end
24
24
 
25
- adapter_is_not :mysql do
25
+ adapter_is :oracle do
26
+ sql.should be_like(%Q{
27
+ SELECT "USERS"."ID", "USERS"."NAME", "USERS_2"."ID", "USERS_2"."NAME"
28
+ FROM "USERS"
29
+ INNER JOIN "USERS" "USERS_2"
30
+ ON "USERS"."ID" = "USERS_2"."ID"
31
+ })
32
+ end
33
+
34
+ adapter_is_not :mysql, :oracle do
26
35
  sql.should be_like(%Q{
27
36
  SELECT "users"."id", "users"."name", "users_2"."id", "users_2"."name"
28
37
  FROM "users"
29
- INNER JOIN "users" AS "users_2"
38
+ INNER JOIN "users" "users_2"
30
39
  ON "users"."id" = "users_2"."id"
31
40
  })
32
41
  end
@@ -43,16 +52,25 @@ module Arel
43
52
  sql.should be_like(%Q{
44
53
  SELECT `users`.`id`, `users`.`name`, `users_2`.`id`, `users_2`.`name`
45
54
  FROM `users`
46
- INNER JOIN `users` AS `users_2`
55
+ INNER JOIN `users` `users_2`
47
56
  ON `users`.`id` = `users_2`.`id` AND `users_2`.`id` = 1
48
57
  })
49
58
  end
50
59
 
51
- adapter_is_not :mysql do
60
+ adapter_is :oracle do
61
+ sql.should be_like(%Q{
62
+ SELECT "USERS"."ID", "USERS"."NAME", "USERS_2"."ID", "USERS_2"."NAME"
63
+ FROM "USERS"
64
+ INNER JOIN "USERS" "USERS_2"
65
+ ON "USERS"."ID" = "USERS_2"."ID" AND "USERS_2"."ID" = 1
66
+ })
67
+ end
68
+
69
+ adapter_is_not :mysql, :oracle do
52
70
  sql.should be_like(%Q{
53
71
  SELECT "users"."id", "users"."name", "users_2"."id", "users_2"."name"
54
72
  FROM "users"
55
- INNER JOIN "users" AS "users_2"
73
+ INNER JOIN "users" "users_2"
56
74
  ON "users"."id" = "users_2"."id" AND "users_2"."id" = 1
57
75
  })
58
76
  end
@@ -71,16 +89,25 @@ module Arel
71
89
  sql.should be_like(%Q{
72
90
  SELECT `users`.`id`, `users`.`name`, `users_2`.`id`, `users_2`.`name`
73
91
  FROM `users`
74
- INNER JOIN `users` AS `users_2`
92
+ INNER JOIN `users` `users_2`
75
93
  ON `users_2`.`id` = `users`.`id` AND `users_2`.`id` = 1
76
94
  })
77
95
  end
78
96
 
79
- adapter_is_not :mysql do
97
+ adapter_is :oracle do
98
+ sql.should be_like(%Q{
99
+ SELECT "USERS"."ID", "USERS"."NAME", "USERS_2"."ID", "USERS_2"."NAME"
100
+ FROM "USERS"
101
+ INNER JOIN "USERS" "USERS_2"
102
+ ON "USERS_2"."ID" = "USERS"."ID" AND "USERS_2"."ID" = 1
103
+ })
104
+ end
105
+
106
+ adapter_is_not :mysql, :oracle do
80
107
  sql.should be_like(%Q{
81
108
  SELECT "users"."id", "users"."name", "users_2"."id", "users_2"."name"
82
109
  FROM "users"
83
- INNER JOIN "users" AS "users_2"
110
+ INNER JOIN "users" "users_2"
84
111
  ON "users_2"."id" = "users"."id" AND "users_2"."id" = 1
85
112
  })
86
113
  end
@@ -106,20 +133,31 @@ module Arel
106
133
  sql.should be_like(%Q{
107
134
  SELECT `users`.`id`, `users`.`name`, `users_2`.`id`, `users_2`.`name`, `users_3`.`id`, `users_3`.`name`
108
135
  FROM `users`
109
- INNER JOIN `users` AS `users_2`
136
+ INNER JOIN `users` `users_2`
110
137
  ON `users`.`id` = `users_2`.`id`
111
- INNER JOIN `users` AS `users_3`
138
+ INNER JOIN `users` `users_3`
112
139
  ON `users_2`.`id` = `users_3`.`id`
113
140
  })
114
141
  end
115
142
 
116
- adapter_is_not :mysql do
143
+ adapter_is :oracle do
144
+ sql.should be_like(%Q{
145
+ SELECT "USERS"."ID", "USERS"."NAME", "USERS_2"."ID", "USERS_2"."NAME", "USERS_3"."ID", "USERS_3"."NAME"
146
+ FROM "USERS"
147
+ INNER JOIN "USERS" "USERS_2"
148
+ ON "USERS"."ID" = "USERS_2"."ID"
149
+ INNER JOIN "USERS" "USERS_3"
150
+ ON "USERS_2"."ID" = "USERS_3"."ID"
151
+ })
152
+ end
153
+
154
+ adapter_is_not :mysql, :oracle do
117
155
  sql.should be_like(%Q{
118
156
  SELECT "users"."id", "users"."name", "users_2"."id", "users_2"."name", "users_3"."id", "users_3"."name"
119
157
  FROM "users"
120
- INNER JOIN "users" AS "users_2"
158
+ INNER JOIN "users" "users_2"
121
159
  ON "users"."id" = "users_2"."id"
122
- INNER JOIN "users" AS "users_3"
160
+ INNER JOIN "users" "users_3"
123
161
  ON "users_2"."id" = "users_3"."id"
124
162
  })
125
163
  end
@@ -137,20 +175,31 @@ module Arel
137
175
  sql.should be_like(%Q{
138
176
  SELECT `users`.`id`, `users`.`name`, `users_2`.`id`, `users_2`.`name`, `users_3`.`id`, `users_3`.`name`
139
177
  FROM `users`
140
- INNER JOIN `users` AS `users_2`
178
+ INNER JOIN `users` `users_2`
141
179
  ON `users`.`id` = `users_2`.`id`
142
- INNER JOIN `users` AS `users_3`
180
+ INNER JOIN `users` `users_3`
143
181
  ON `users_2`.`id` = `users_3`.`id`
144
182
  })
145
183
  end
146
184
 
147
- adapter_is_not :mysql do
185
+ adapter_is :oracle do
186
+ sql.should be_like(%Q{
187
+ SELECT "USERS"."ID", "USERS"."NAME", "USERS_2"."ID", "USERS_2"."NAME", "USERS_3"."ID", "USERS_3"."NAME"
188
+ FROM "USERS"
189
+ INNER JOIN "USERS" "USERS_2"
190
+ ON "USERS"."ID" = "USERS_2"."ID"
191
+ INNER JOIN "USERS" "USERS_3"
192
+ ON "USERS_2"."ID" = "USERS_3"."ID"
193
+ })
194
+ end
195
+
196
+ adapter_is_not :mysql, :oracle do
148
197
  sql.should be_like(%Q{
149
198
  SELECT "users"."id", "users"."name", "users_2"."id", "users_2"."name", "users_3"."id", "users_3"."name"
150
199
  FROM "users"
151
- INNER JOIN "users" AS "users_2"
200
+ INNER JOIN "users" "users_2"
152
201
  ON "users"."id" = "users_2"."id"
153
- INNER JOIN "users" AS "users_3"
202
+ INNER JOIN "users" "users_3"
154
203
  ON "users_2"."id" = "users_3"."id"
155
204
  })
156
205
  end
@@ -24,16 +24,25 @@ module Arel
24
24
  sql.should be_like(%Q{
25
25
  SELECT `users`.`id`, `users`.`name`, `photos_external`.`id`, `photos_external`.`user_id`, `photos_external`.`camera_id`
26
26
  FROM `users`
27
- INNER JOIN (SELECT `photos`.`id`, `photos`.`user_id`, `photos`.`camera_id` FROM `photos` LIMIT 3) AS `photos_external`
27
+ INNER JOIN (SELECT `photos`.`id`, `photos`.`user_id`, `photos`.`camera_id` FROM `photos` LIMIT 3) `photos_external`
28
28
  ON `users`.`id` = `photos_external`.`user_id`
29
29
  })
30
30
  end
31
31
 
32
- adapter_is_not :mysql do
32
+ adapter_is :oracle do
33
+ sql.should be_like(%Q{
34
+ SELECT "USERS"."ID", "USERS"."NAME", "PHOTOS_EXTERNAL"."ID", "PHOTOS_EXTERNAL"."USER_ID", "PHOTOS_EXTERNAL"."CAMERA_ID"
35
+ FROM "USERS"
36
+ INNER JOIN (SELECT "PHOTOS"."ID", "PHOTOS"."USER_ID", "PHOTOS"."CAMERA_ID" FROM "PHOTOS" WHERE ROWNUM <= 3) "PHOTOS_EXTERNAL"
37
+ ON "USERS"."ID" = "PHOTOS_EXTERNAL"."USER_ID"
38
+ })
39
+ end
40
+
41
+ adapter_is_not :mysql, :oracle do
33
42
  sql.should be_like(%Q{
34
43
  SELECT "users"."id", "users"."name", "photos_external"."id", "photos_external"."user_id", "photos_external"."camera_id"
35
44
  FROM "users"
36
- INNER JOIN (SELECT "photos"."id", "photos"."user_id", "photos"."camera_id" FROM "photos" LIMIT 3) AS "photos_external"
45
+ INNER JOIN (SELECT "photos"."id", "photos"."user_id", "photos"."camera_id" FROM "photos" LIMIT 3) "photos_external"
37
46
  ON "users"."id" = "photos_external"."user_id"
38
47
  })
39
48
  end
@@ -47,16 +56,25 @@ module Arel
47
56
  sql.should be_like(%Q{
48
57
  SELECT `users`.`id`, `users`.`name`, `photos_external`.`user_id`, `photos_external`.`cnt`
49
58
  FROM `users`
50
- INNER JOIN (SELECT `photos`.`user_id`, COUNT(`photos`.`id`) AS `cnt` FROM `photos` GROUP BY `photos`.`user_id`) AS `photos_external`
59
+ INNER JOIN (SELECT `photos`.`user_id`, COUNT(`photos`.`id`) AS `cnt` FROM `photos` GROUP BY `photos`.`user_id`) `photos_external`
51
60
  ON `users`.`id` = `photos_external`.`user_id`
52
61
  })
53
62
  end
54
63
 
55
- adapter_is_not :mysql do
64
+ adapter_is :oracle do
65
+ sql.should be_like(%Q{
66
+ SELECT "USERS"."ID", "USERS"."NAME", "PHOTOS_EXTERNAL"."USER_ID", "PHOTOS_EXTERNAL"."CNT"
67
+ FROM "USERS"
68
+ INNER JOIN (SELECT "PHOTOS"."USER_ID", COUNT("PHOTOS"."ID") AS "CNT" FROM "PHOTOS" GROUP BY "PHOTOS"."USER_ID") "PHOTOS_EXTERNAL"
69
+ ON "USERS"."ID" = "PHOTOS_EXTERNAL"."USER_ID"
70
+ })
71
+ end
72
+
73
+ adapter_is_not :mysql, :oracle do
56
74
  sql.should be_like(%Q{
57
75
  SELECT "users"."id", "users"."name", "photos_external"."user_id", "photos_external"."cnt"
58
76
  FROM "users"
59
- INNER JOIN (SELECT "photos"."user_id", COUNT("photos"."id") AS "cnt" FROM "photos" GROUP BY "photos"."user_id") AS "photos_external"
77
+ INNER JOIN (SELECT "photos"."user_id", COUNT("photos"."id") AS "cnt" FROM "photos" GROUP BY "photos"."user_id") "photos_external"
60
78
  ON "users"."id" = "photos_external"."user_id"
61
79
  })
62
80
  end
@@ -70,16 +88,25 @@ module Arel
70
88
  adapter_is :mysql do
71
89
  sql.should be_like(%Q{
72
90
  SELECT `photos_external`.`user_id`, `photos_external`.`cnt`, `users`.`id`, `users`.`name`
73
- FROM (SELECT `photos`.`user_id`, COUNT(`photos`.`id`) AS `cnt` FROM `photos` GROUP BY `photos`.`user_id`) AS `photos_external`
91
+ FROM (SELECT `photos`.`user_id`, COUNT(`photos`.`id`) AS `cnt` FROM `photos` GROUP BY `photos`.`user_id`) `photos_external`
74
92
  INNER JOIN `users`
75
93
  ON `users`.`id` = `photos_external`.`user_id`
76
94
  })
77
95
  end
78
96
 
79
- adapter_is_not :mysql do
97
+ adapter_is :oracle do
98
+ sql.should be_like(%Q{
99
+ SELECT "PHOTOS_EXTERNAL"."USER_ID", "PHOTOS_EXTERNAL"."CNT", "USERS"."ID", "USERS"."NAME"
100
+ FROM (SELECT "PHOTOS"."USER_ID", COUNT("PHOTOS"."ID") AS "CNT" FROM "PHOTOS" GROUP BY "PHOTOS"."USER_ID") "PHOTOS_EXTERNAL"
101
+ INNER JOIN "USERS"
102
+ ON "USERS"."ID" = "PHOTOS_EXTERNAL"."USER_ID"
103
+ })
104
+ end
105
+
106
+ adapter_is_not :mysql, :oracle do
80
107
  sql.should be_like(%Q{
81
108
  SELECT "photos_external"."user_id", "photos_external"."cnt", "users"."id", "users"."name"
82
- FROM (SELECT "photos"."user_id", COUNT("photos"."id") AS "cnt" FROM "photos" GROUP BY "photos"."user_id") AS "photos_external"
109
+ FROM (SELECT "photos"."user_id", COUNT("photos"."id") AS "cnt" FROM "photos" GROUP BY "photos"."user_id") "photos_external"
83
110
  INNER JOIN "users"
84
111
  ON "users"."id" = "photos_external"."user_id"
85
112
  })
@@ -95,17 +122,26 @@ module Arel
95
122
  adapter_is :mysql do
96
123
  sql.should be_like(%Q{
97
124
  SELECT `photos_external`.`user_id`, `photos_external`.`cnt`, `photos_external_2`.`user_id`, `photos_external_2`.`cnt`
98
- FROM (SELECT `photos`.`user_id`, COUNT(`photos`.`id`) AS `cnt` FROM `photos` GROUP BY `photos`.`user_id`) AS `photos_external`
99
- INNER JOIN (SELECT `photos`.`user_id`, COUNT(`photos`.`id`) AS `cnt` FROM `photos` GROUP BY `photos`.`user_id`) AS `photos_external_2`
125
+ FROM (SELECT `photos`.`user_id`, COUNT(`photos`.`id`) AS `cnt` FROM `photos` GROUP BY `photos`.`user_id`) `photos_external`
126
+ INNER JOIN (SELECT `photos`.`user_id`, COUNT(`photos`.`id`) AS `cnt` FROM `photos` GROUP BY `photos`.`user_id`) `photos_external_2`
100
127
  ON `photos_external_2`.`user_id` = `photos_external`.`user_id`
101
128
  })
102
129
  end
103
130
 
104
- adapter_is_not :mysql do
131
+ adapter_is :oracle do
132
+ sql.should be_like(%Q{
133
+ SELECT "PHOTOS_EXTERNAL"."USER_ID", "PHOTOS_EXTERNAL"."CNT", "PHOTOS_EXTERNAL_2"."USER_ID", "PHOTOS_EXTERNAL_2"."CNT"
134
+ FROM (SELECT "PHOTOS"."USER_ID", COUNT("PHOTOS"."ID") AS "CNT" FROM "PHOTOS" GROUP BY "PHOTOS"."USER_ID") "PHOTOS_EXTERNAL"
135
+ INNER JOIN (SELECT "PHOTOS"."USER_ID", COUNT("PHOTOS"."ID") AS "CNT" FROM "PHOTOS" GROUP BY "PHOTOS"."USER_ID") "PHOTOS_EXTERNAL_2"
136
+ ON "PHOTOS_EXTERNAL_2"."USER_ID" = "PHOTOS_EXTERNAL"."USER_ID"
137
+ })
138
+ end
139
+
140
+ adapter_is_not :mysql, :oracle do
105
141
  sql.should be_like(%Q{
106
142
  SELECT "photos_external"."user_id", "photos_external"."cnt", "photos_external_2"."user_id", "photos_external_2"."cnt"
107
- FROM (SELECT "photos"."user_id", COUNT("photos"."id") AS "cnt" FROM "photos" GROUP BY "photos"."user_id") AS "photos_external"
108
- INNER JOIN (SELECT "photos"."user_id", COUNT("photos"."id") AS "cnt" FROM "photos" GROUP BY "photos"."user_id") AS "photos_external_2"
143
+ FROM (SELECT "photos"."user_id", COUNT("photos"."id") AS "cnt" FROM "photos" GROUP BY "photos"."user_id") "photos_external"
144
+ INNER JOIN (SELECT "photos"."user_id", COUNT("photos"."id") AS "cnt" FROM "photos" GROUP BY "photos"."user_id") "photos_external_2"
109
145
  ON "photos_external_2"."user_id" = "photos_external"."user_id"
110
146
  })
111
147
  end
@@ -121,16 +157,25 @@ module Arel
121
157
  sql.should be_like(%Q{
122
158
  SELECT `users`.`id`, `users`.`name`, `photos_external`.`user_id`, `photos_external`.`cnt`
123
159
  FROM `users`
124
- INNER JOIN (SELECT `photos`.`user_id`, COUNT(`photos`.`id`) AS `cnt` FROM `photos` WHERE `photos`.`user_id` = 1 GROUP BY `photos`.`user_id`) AS `photos_external`
160
+ INNER JOIN (SELECT `photos`.`user_id`, COUNT(`photos`.`id`) AS `cnt` FROM `photos` WHERE `photos`.`user_id` = 1 GROUP BY `photos`.`user_id`) `photos_external`
125
161
  ON `users`.`id` = `photos_external`.`user_id`
126
162
  })
127
163
  end
128
164
 
129
- adapter_is_not :mysql do
165
+ adapter_is :oracle do
166
+ sql.should be_like(%Q{
167
+ SELECT "USERS"."ID", "USERS"."NAME", "PHOTOS_EXTERNAL"."USER_ID", "PHOTOS_EXTERNAL"."CNT"
168
+ FROM "USERS"
169
+ INNER JOIN (SELECT "PHOTOS"."USER_ID", COUNT("PHOTOS"."ID") AS "CNT" FROM "PHOTOS" WHERE "PHOTOS"."USER_ID" = 1 GROUP BY "PHOTOS"."USER_ID") "PHOTOS_EXTERNAL"
170
+ ON "USERS"."ID" = "PHOTOS_EXTERNAL"."USER_ID"
171
+ })
172
+ end
173
+
174
+ adapter_is_not :mysql, :oracle do
130
175
  sql.should be_like(%Q{
131
176
  SELECT "users"."id", "users"."name", "photos_external"."user_id", "photos_external"."cnt"
132
177
  FROM "users"
133
- INNER JOIN (SELECT "photos"."user_id", COUNT("photos"."id") AS "cnt" FROM "photos" WHERE "photos"."user_id" = 1 GROUP BY "photos"."user_id") AS "photos_external"
178
+ INNER JOIN (SELECT "photos"."user_id", COUNT("photos"."id") AS "cnt" FROM "photos" WHERE "photos"."user_id" = 1 GROUP BY "photos"."user_id") "photos_external"
134
179
  ON "users"."id" = "photos_external"."user_id"
135
180
  })
136
181
  end
@@ -144,16 +189,25 @@ module Arel
144
189
  adapter_is :mysql do
145
190
  sql.should be_like(%Q{
146
191
  SELECT `photos_external`.`user_id`, `photos_external`.`cnt`, `users`.`id`, `users`.`name`
147
- FROM (SELECT `photos`.`user_id`, COUNT(`photos`.`id`) AS `cnt` FROM `photos` WHERE `photos`.`user_id` = 1 GROUP BY `photos`.`user_id`) AS `photos_external`
192
+ FROM (SELECT `photos`.`user_id`, COUNT(`photos`.`id`) AS `cnt` FROM `photos` WHERE `photos`.`user_id` = 1 GROUP BY `photos`.`user_id`) `photos_external`
148
193
  INNER JOIN `users`
149
194
  ON `users`.`id` = `photos_external`.`user_id`
150
195
  })
151
196
  end
152
197
 
153
- adapter_is_not :mysql do
198
+ adapter_is :oracle do
199
+ sql.should be_like(%Q{
200
+ SELECT "PHOTOS_EXTERNAL"."USER_ID", "PHOTOS_EXTERNAL"."CNT", "USERS"."ID", "USERS"."NAME"
201
+ FROM (SELECT "PHOTOS"."USER_ID", COUNT("PHOTOS"."ID") AS "CNT" FROM "PHOTOS" WHERE "PHOTOS"."USER_ID" = 1 GROUP BY "PHOTOS"."USER_ID") "PHOTOS_EXTERNAL"
202
+ INNER JOIN "USERS"
203
+ ON "USERS"."ID" = "PHOTOS_EXTERNAL"."USER_ID"
204
+ })
205
+ end
206
+
207
+ adapter_is_not :mysql, :oracle do
154
208
  sql.should be_like(%Q{
155
209
  SELECT "photos_external"."user_id", "photos_external"."cnt", "users"."id", "users"."name"
156
- FROM (SELECT "photos"."user_id", COUNT("photos"."id") AS "cnt" FROM "photos" WHERE "photos"."user_id" = 1 GROUP BY "photos"."user_id") AS "photos_external"
210
+ FROM (SELECT "photos"."user_id", COUNT("photos"."id") AS "cnt" FROM "photos" WHERE "photos"."user_id" = 1 GROUP BY "photos"."user_id") "photos_external"
157
211
  INNER JOIN "users"
158
212
  ON "users"."id" = "photos_external"."user_id"
159
213
  })
@@ -26,7 +26,16 @@ module Arel
26
26
  })
27
27
  end
28
28
 
29
- adapter_is_not :mysql do
29
+ adapter_is :oracle do
30
+ sql.should be_like(%Q{
31
+ SELECT "USERS"."ID", "USERS"."NAME", "PHOTOS"."ID", "PHOTOS"."USER_ID", "PHOTOS"."CAMERA_ID"
32
+ FROM "USERS"
33
+ INNER JOIN "PHOTOS"
34
+ ON "USERS"."ID" = "PHOTOS"."USER_ID" AND asdf
35
+ })
36
+ end
37
+
38
+ adapter_is_not :mysql, :oracle do
30
39
  sql.should be_like(%Q{
31
40
  SELECT "users"."id", "users"."name", "photos"."id", "photos"."user_id", "photos"."camera_id"
32
41
  FROM "users"
@@ -59,7 +68,18 @@ module Arel
59
68
  })
60
69
  end
61
70
 
62
- adapter_is_not :mysql do
71
+ adapter_is :oracle do
72
+ sql.should be_like(%Q{
73
+ SELECT "USERS"."ID", "USERS"."NAME", "PHOTOS"."ID", "PHOTOS"."USER_ID", "PHOTOS"."CAMERA_ID"
74
+ FROM "USERS"
75
+ INNER JOIN "PHOTOS"
76
+ ON "USERS"."ID" = "PHOTOS"."USER_ID"
77
+ WHERE "USERS"."ID" = 1
78
+ AND "USERS"."ID" = 1
79
+ })
80
+ end
81
+
82
+ adapter_is_not :mysql, :oracle do
63
83
  sql.should be_like(%Q{
64
84
  SELECT "users"."id", "users"."name", "photos"."id", "photos"."user_id", "photos"."camera_id"
65
85
  FROM "users"
@@ -90,7 +110,17 @@ module Arel
90
110
  })
91
111
  end
92
112
 
93
- adapter_is_not :mysql do
113
+ adapter_is :oracle do
114
+ sql.should be_like(%Q{
115
+ SELECT "USERS"."ID", "USERS"."NAME", "PHOTOS"."ID", "PHOTOS"."USER_ID", "PHOTOS"."CAMERA_ID"
116
+ FROM "USERS"
117
+ INNER JOIN "PHOTOS"
118
+ ON "USERS"."ID" = "PHOTOS"."USER_ID"
119
+ GROUP BY "USERS"."ID"
120
+ })
121
+ end
122
+
123
+ adapter_is_not :mysql, :oracle do
94
124
  sql.should be_like(%Q{
95
125
  SELECT "users"."id", "users"."name", "photos"."id", "photos"."user_id", "photos"."camera_id"
96
126
  FROM "users"
@@ -37,6 +37,10 @@ module Arel
37
37
  adapter_is :sqlite3 do
38
38
  sql.should be_like(%Q{("users"."id" <=> 1 OR "users"."name" <=> 'name')})
39
39
  end
40
+
41
+ adapter_is :oracle do
42
+ sql.should be_like(%Q{("USERS"."ID" <=> 1 OR "USERS"."NAME" <=> 'name')})
43
+ end
40
44
  end
41
45
  end
42
46
  end
@@ -57,6 +61,10 @@ module Arel
57
61
  adapter_is :postgresql do
58
62
  sql.should be_like(%Q{("users"."id" <=> 1 AND "users"."name" <=> E'name')})
59
63
  end
64
+
65
+ adapter_is :oracle do
66
+ sql.should be_like(%Q{("USERS"."ID" <=> 1 AND "USERS"."NAME" <=> 'name')})
67
+ end
60
68
  end
61
69
  end
62
70
  end
@@ -71,7 +79,11 @@ module Arel
71
79
  sql.should be_like(%Q{`users`.`id` <=> `users`.`name`})
72
80
  end
73
81
 
74
- adapter_is_not :mysql do
82
+ adapter_is :oracle do
83
+ sql.should be_like(%Q{"USERS"."ID" <=> "USERS"."NAME"})
84
+ end
85
+
86
+ adapter_is_not :mysql, :oracle do
75
87
  sql.should be_like(%Q{"users"."id" <=> "users"."name"})
76
88
  end
77
89
  end
@@ -90,7 +102,11 @@ module Arel
90
102
  sql.should be_like(%Q{`users`.`id` <=> 1})
91
103
  end
92
104
 
93
- adapter_is_not :mysql do
105
+ adapter_is :oracle do
106
+ sql.should be_like(%Q{"USERS"."ID" <=> 1})
107
+ end
108
+
109
+ adapter_is_not :mysql, :oracle do
94
110
  sql.should be_like(%Q{"users"."id" <=> 1})
95
111
  end
96
112
  end
@@ -111,6 +127,10 @@ module Arel
111
127
  adapter_is :postgresql do
112
128
  sql.should be_like(%Q{"users"."name" <=> E'1-asdf'})
113
129
  end
130
+
131
+ adapter_is :oracle do
132
+ sql.should be_like(%Q{"USERS"."NAME" <=> '1-asdf'})
133
+ end
114
134
  end
115
135
  end
116
136
  end
@@ -19,7 +19,11 @@ module Arel
19
19
  sql.should be_like(%Q{`users`.`id` = `photos`.`user_id`})
20
20
  end
21
21
 
22
- adapter_is_not :mysql do
22
+ adapter_is :oracle do
23
+ sql.should be_like(%Q{"USERS"."ID" = "PHOTOS"."USER_ID"})
24
+ end
25
+
26
+ adapter_is_not :mysql, :oracle do
23
27
  sql.should be_like(%Q{"users"."id" = "photos"."user_id"})
24
28
  end
25
29
  end
@@ -37,7 +41,11 @@ module Arel
37
41
  sql.should be_like(%Q{`users`.`id` IS NULL})
38
42
  end
39
43
 
40
- adapter_is_not :mysql do
44
+ adapter_is :oracle do
45
+ sql.should be_like(%Q{"USERS"."ID" IS NULL})
46
+ end
47
+
48
+ adapter_is_not :mysql, :oracle do
41
49
  sql.should be_like(%Q{"users"."id" IS NULL})
42
50
  end
43
51
  end
@@ -52,7 +60,11 @@ module Arel
52
60
  sql.should be_like(%Q{`users`.`id` IS NULL})
53
61
  end
54
62
 
55
- adapter_is_not :mysql do
63
+ adapter_is :oracle do
64
+ sql.should be_like(%Q{"USERS"."ID" IS NULL})
65
+ end
66
+
67
+ adapter_is_not :mysql, :oracle do
56
68
  sql.should be_like(%Q{"users"."id" IS NULL})
57
69
  end
58
70
  end