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
@@ -22,7 +22,11 @@ module Arel
22
22
  sql.should be_like(%Q{`users`.`id` IN (1, 2, 3)})
23
23
  end
24
24
 
25
- adapter_is_not :mysql do
25
+ adapter_is :oracle do
26
+ sql.should be_like(%Q{"USERS"."ID" IN (1, 2, 3)})
27
+ end
28
+
29
+ adapter_is_not :mysql, :oracle do
26
30
  sql.should be_like(%Q{"users"."id" IN (1, 2, 3)})
27
31
  end
28
32
  end
@@ -40,7 +44,11 @@ module Arel
40
44
  sql.should be_like(%Q{`users`.`id` IN (1, 2, 3)})
41
45
  end
42
46
 
43
- adapter_is_not :mysql do
47
+ adapter_is :oracle do
48
+ sql.should be_like(%Q{"USERS"."ID" IN (1, 2, 3)})
49
+ end
50
+
51
+ adapter_is_not :mysql, :oracle do
44
52
  sql.should be_like(%Q{"users"."id" IN (1, 2, 3)})
45
53
  end
46
54
  end
@@ -58,7 +66,11 @@ module Arel
58
66
  sql.should be_like(%Q{`users`.`id` IN (NULL)})
59
67
  end
60
68
 
61
- adapter_is_not :mysql do
69
+ adapter_is :oracle do
70
+ sql.should be_like(%Q{"USERS"."ID" IN (NULL)})
71
+ end
72
+
73
+ adapter_is_not :mysql, :oracle do
62
74
  sql.should be_like(%Q{"users"."id" IN (NULL)})
63
75
  end
64
76
  end
@@ -78,12 +90,48 @@ module Arel
78
90
  sql.should be_like(%Q{`users`.`id` BETWEEN 1 AND 2})
79
91
  end
80
92
 
81
- adapter_is_not :mysql do
93
+ adapter_is :oracle do
94
+ sql.should be_like(%Q{"USERS"."ID" BETWEEN 1 AND 2})
95
+ end
96
+
97
+ adapter_is_not :mysql, :oracle do
82
98
  sql.should be_like(%Q{"users"."id" BETWEEN 1 AND 2})
83
99
  end
84
100
  end
85
101
  end
86
102
 
103
+ describe 'when relating to a time range' do
104
+ before do
105
+ @relation = Arel::Table.new(:developers)
106
+ @attribute = @relation[:created_at]
107
+ @range = Time.mktime(2010, 01, 01)..Time.mktime(2010, 02, 01)
108
+ end
109
+
110
+ it 'manufactures sql with a between' do
111
+ sql = In.new(@attribute, @range).to_sql
112
+
113
+ adapter_is :mysql do
114
+ sql.should be_like(%Q{`developers`.`created_at` BETWEEN '2010-01-01 00:00:00' AND '2010-02-01 00:00:00'})
115
+ end
116
+
117
+ adapter_is :sqlite3 do
118
+ if RUBY_VERSION < '1.9'
119
+ sql.should be_like(%Q{"developers"."created_at" BETWEEN '2010-01-01 00:00:00.000000' AND '2010-02-01 00:00:00.000000'})
120
+ else
121
+ sql.should be_like(%Q{"developers"."created_at" BETWEEN '2010-01-01 00:00:00' AND '2010-02-01 00:00:00'})
122
+ end
123
+ end
124
+
125
+ adapter_is :postgresql do
126
+ sql.should be_like(%Q{"developers"."created_at" BETWEEN '2010-01-01 00:00:00.000000' AND '2010-02-01 00:00:00.000000'})
127
+ end
128
+
129
+ adapter_is :oracle do
130
+ sql.should be_like(%Q{"DEVELOPERS"."CREATED_AT" BETWEEN TO_TIMESTAMP('2010-01-01 00:00:00:000000','YYYY-MM-DD HH24:MI:SS:FF6') AND TO_TIMESTAMP('2010-02-01 00:00:00:000000','YYYY-MM-DD HH24:MI:SS:FF6')})
131
+ end
132
+ end
133
+ end
134
+
87
135
  describe 'when relating to a relation' do
88
136
  it 'manufactures sql with a subselect' do
89
137
  sql = In.new(@attribute, @relation).to_sql
@@ -94,7 +142,13 @@ module Arel
94
142
  })
95
143
  end
96
144
 
97
- adapter_is_not :mysql do
145
+ adapter_is :oracle do
146
+ sql.should be_like(%Q{
147
+ "USERS"."ID" IN (SELECT "USERS"."ID", "USERS"."NAME" FROM "USERS")
148
+ })
149
+ end
150
+
151
+ adapter_is_not :mysql, :oracle do
98
152
  sql.should be_like(%Q{
99
153
  "users"."id" IN (SELECT "users"."id", "users"."name" FROM "users")
100
154
  })
@@ -33,6 +33,12 @@ module Arel
33
33
  ("users"."id" = 1 AND "users"."name" = E'name')
34
34
  })
35
35
  end
36
+
37
+ adapter_is :oracle do
38
+ sql.should be_like(%Q{
39
+ ("USERS"."ID" = 1 AND "USERS"."NAME" = 'name')
40
+ })
41
+ end
36
42
  end
37
43
  end
38
44
  end
@@ -59,6 +65,12 @@ module Arel
59
65
  ("users"."id" = 1 OR "users"."name" = E'name')
60
66
  })
61
67
  end
68
+
69
+ adapter_is :oracle do
70
+ sql.should be_like(%Q{
71
+ ("USERS"."ID" = 1 OR "USERS"."NAME" = 'name')
72
+ })
73
+ end
62
74
  end
63
75
  end
64
76
  end
@@ -22,11 +22,34 @@ module Arel
22
22
  sql.should be_like(%Q{`users`.`id`})
23
23
  end
24
24
 
25
- adapter_is_not :mysql do
25
+ adapter_is :oracle do
26
+ sql.should be_like(%Q{"USERS"."ID"})
27
+ end
28
+
29
+ adapter_is_not :mysql, :oracle do
26
30
  sql.should be_like(%Q{"users"."id"})
27
31
  end
28
32
  end
29
33
  end
34
+
35
+ describe 'for an inexistent attribute' do
36
+ it "manufactures sql" do
37
+ sql = @relation[:does_not_exist].to_sql
38
+
39
+ adapter_is :mysql do
40
+ sql.should be_like(%Q{`users`.`does_not_exist`})
41
+ end
42
+
43
+ adapter_is :oracle do
44
+ sql.should be_like(%Q{"USERS"."DOEST_NOT_EXIST"})
45
+ end
46
+
47
+ adapter_is_not :mysql, :oracle do
48
+ sql.should be_like(%Q{"users"."does_not_exist"})
49
+ end
50
+ end
51
+ end
52
+
30
53
  end
31
54
  end
32
55
  end
@@ -15,7 +15,11 @@ module Arel
15
15
  sql.should be_like(%Q{COUNT(`users`.`id`) AS `alias`})
16
16
  end
17
17
 
18
- adapter_is_not :mysql do
18
+ adapter_is :oracle do
19
+ sql.should be_like(%Q{COUNT("USERS"."ID") AS "ALIAS"})
20
+ end
21
+
22
+ adapter_is_not :mysql, :oracle do
19
23
  sql.should be_like(%Q{COUNT("users"."id") AS "alias"})
20
24
  end
21
25
  end
@@ -14,7 +14,11 @@ module Arel
14
14
  sql.should be_like(%Q{SELECT COUNT(*) AS count_id FROM `users`})
15
15
  end
16
16
 
17
- adapter_is_not :mysql do
17
+ adapter_is :oracle do
18
+ sql.should be_like(%Q{SELECT COUNT(*) AS count_id FROM "USERS"})
19
+ end
20
+
21
+ adapter_is_not :mysql, :oracle do
18
22
  sql.should be_like(%Q{SELECT COUNT(*) AS count_id FROM "users"})
19
23
  end
20
24
  end
@@ -26,7 +30,11 @@ module Arel
26
30
  sql.should be_like(%Q{SELECT SUM(2 * credit_limit) AS sum_id FROM `users`})
27
31
  end
28
32
 
29
- adapter_is_not :mysql do
33
+ adapter_is :oracle do
34
+ sql.should be_like(%Q{SELECT SUM(2 * credit_limit) AS sum_id FROM "USERS"})
35
+ end
36
+
37
+ adapter_is_not :mysql, :oracle do
30
38
  sql.should be_like(%Q{SELECT SUM(2 * credit_limit) AS sum_id FROM "users"})
31
39
  end
32
40
  end
@@ -27,7 +27,17 @@ module Arel
27
27
  })
28
28
  end
29
29
 
30
- adapter_is_not :mysql do
30
+ adapter_is :oracle do
31
+ sql.should be_like(%Q{
32
+ SELECT "USERS"."ID"
33
+ FROM "USERS"
34
+ WHERE "USERS"."ID" = 1
35
+ GROUP BY "USERS"."ID"
36
+ ORDER BY "USERS"."ID" ASC
37
+ })
38
+ end
39
+
40
+ adapter_is_not :mysql, :oracle do
31
41
  sql.should be_like(%Q{
32
42
  SELECT "users"."id"
33
43
  FROM "users"
@@ -14,7 +14,11 @@ module Arel
14
14
  sql.should be_like(%Q{DELETE FROM `users`})
15
15
  end
16
16
 
17
- adapter_is_not :mysql do
17
+ adapter_is :oracle do
18
+ sql.should be_like(%Q{DELETE FROM "USERS"})
19
+ end
20
+
21
+ adapter_is_not :mysql, :oracle do
18
22
  sql.should be_like(%Q{DELETE FROM "users"})
19
23
  end
20
24
  end
@@ -30,7 +34,15 @@ module Arel
30
34
  })
31
35
  end
32
36
 
33
- adapter_is_not :mysql do
37
+ adapter_is :oracle do
38
+ sql.should be_like(%Q{
39
+ DELETE
40
+ FROM "USERS"
41
+ WHERE "USERS"."ID" = 1
42
+ })
43
+ end
44
+
45
+ adapter_is_not :mysql, :oracle do
34
46
  sql.should be_like(%Q{
35
47
  DELETE
36
48
  FROM "users"
@@ -50,7 +62,15 @@ module Arel
50
62
  })
51
63
  end
52
64
 
53
- adapter_is_not :mysql do
65
+ adapter_is :oracle do
66
+ sql.should be_like(%Q{
67
+ DELETE
68
+ FROM "USERS"
69
+ WHERE ROWNUM <= 1
70
+ })
71
+ end
72
+
73
+ adapter_is_not :mysql, :oracle do
54
74
  sql.should be_like(%Q{
55
75
  DELETE
56
76
  FROM "users"
@@ -17,7 +17,14 @@ module Arel
17
17
  })
18
18
  end
19
19
 
20
- adapter_is_not :mysql do
20
+ adapter_is :oracle do
21
+ sql.should be_like(%Q{
22
+ SELECT "USERS"."ID", "USERS"."NAME"
23
+ FROM workers
24
+ })
25
+ end
26
+
27
+ adapter_is_not :mysql, :oracle do
21
28
  sql.should be_like(%Q{
22
29
  SELECT "users"."id", "users"."name"
23
30
  FROM workers
@@ -37,7 +44,14 @@ module Arel
37
44
  })
38
45
  end
39
46
 
40
- adapter_is_not :mysql do
47
+ adapter_is :oracle do
48
+ sql.should be_like(%Q{
49
+ SELECT "USERS"."ID", "USERS"."NAME"
50
+ FROM users
51
+ })
52
+ end
53
+
54
+ adapter_is_not :mysql, :oracle do
41
55
  sql.should be_like(%Q{
42
56
  SELECT "users"."id", "users"."name"
43
57
  FROM users
@@ -20,7 +20,15 @@ module Arel
20
20
  })
21
21
  end
22
22
 
23
- adapter_is_not :mysql do
23
+ adapter_is :oracle do
24
+ sql.should be_like(%Q{
25
+ SELECT "USERS"."ID", "USERS"."NAME"
26
+ FROM "USERS"
27
+ GROUP BY "USERS"."ID"
28
+ })
29
+ end
30
+
31
+ adapter_is_not :mysql, :oracle do
24
32
  sql.should be_like(%Q{
25
33
  SELECT "users"."id", "users"."name"
26
34
  FROM "users"
@@ -42,7 +50,15 @@ module Arel
42
50
  })
43
51
  end
44
52
 
45
- adapter_is_not :mysql do
53
+ adapter_is :oracle do
54
+ sql.should be_like(%Q{
55
+ SELECT "USERS"."ID", "USERS"."NAME"
56
+ FROM "USERS"
57
+ GROUP BY asdf
58
+ })
59
+ end
60
+
61
+ adapter_is_not :mysql, :oracle do
46
62
  sql.should be_like(%Q{
47
63
  SELECT "users"."id", "users"."name"
48
64
  FROM "users"
@@ -13,16 +13,25 @@ module Arel
13
13
 
14
14
  adapter_is :mysql do
15
15
  sql.should be_like(%Q{
16
- SELECT `developers`.`id`, `developers`.`name`, `developers`.`salary`, `developers`.`department`
16
+ SELECT `developers`.`id`, `developers`.`name`, `developers`.`salary`, `developers`.`department`, `developers`.`created_at`
17
17
  FROM `developers`
18
18
  GROUP BY `developers`.`department`
19
19
  HAVING MIN(salary) > 1000
20
20
  })
21
21
  end
22
22
 
23
- adapter_is_not :mysql do
23
+ adapter_is :oracle do
24
24
  sql.should be_like(%Q{
25
- SELECT "developers"."id", "developers"."name", "developers"."salary", "developers"."department"
25
+ SELECT "DEVELOPERS"."ID", "DEVELOPERS"."NAME", "DEVELOPERS"."SALARY", "DEVELOPERS"."DEPARTMENT", "DEVELOPERS"."CREATED_AT"
26
+ FROM "DEVELOPERS"
27
+ GROUP BY "DEVELOPERS"."DEPARTMENT"
28
+ HAVING MIN(salary) > 1000
29
+ })
30
+ end
31
+
32
+ adapter_is_not :mysql, :oracle do
33
+ sql.should be_like(%Q{
34
+ SELECT "developers"."id", "developers"."name", "developers"."salary", "developers"."department", "developers"."created_at"
26
35
  FROM "developers"
27
36
  GROUP BY "developers"."department"
28
37
  HAVING MIN(salary) > 1000
@@ -43,6 +43,15 @@ module Arel
43
43
  INSERT
44
44
  INTO "users"
45
45
  ("id", "name") VALUES (1, E'nick')
46
+ RETURNING "id"
47
+ })
48
+ end
49
+
50
+ adapter_is :oracle do
51
+ @insertion.to_sql.should be_like(%Q{
52
+ INSERT
53
+ INTO "USERS"
54
+ ("ID", "NAME") VALUES (1, 'nick')
46
55
  })
47
56
  end
48
57
  end
@@ -74,6 +83,15 @@ module Arel
74
83
  INSERT
75
84
  INTO "users"
76
85
  ("name") VALUES (E'nick')
86
+ RETURNING "id"
87
+ })
88
+ end
89
+
90
+ adapter_is :oracle do
91
+ @insertion.to_sql.should be_like(%Q{
92
+ INSERT
93
+ INTO "USERS"
94
+ ("NAME") VALUES ('nick')
77
95
  })
78
96
  end
79
97
  end
@@ -93,13 +111,31 @@ module Arel
93
111
  })
94
112
  end
95
113
 
96
- adapter_is_not :mysql do
114
+ adapter_is :sqlite3 do
97
115
  @insertion.to_sql.should be_like(%Q{
98
116
  INSERT
99
117
  INTO "users"
100
118
  ("id") VALUES (1)
101
119
  })
102
120
  end
121
+
122
+ adapter_is :postgresql do
123
+ @insertion.to_sql.should be_like(%Q{
124
+ INSERT
125
+ INTO "users"
126
+ ("id") VALUES (1)
127
+ RETURNING "id"
128
+ })
129
+ end
130
+
131
+ adapter_is :oracle do
132
+ @insertion.to_sql.should be_like(%Q{
133
+ INSERT
134
+ INTO "USERS"
135
+ ("ID") VALUES (1)
136
+ })
137
+ end
138
+
103
139
  end
104
140
  end
105
141
  end
@@ -28,7 +28,15 @@ module Arel
28
28
  })
29
29
  end
30
30
 
31
- adapter_is_not :mysql do
31
+ adapter_is :oracle do
32
+ sql.should be_like(%Q{
33
+ SELECT "USERS"."ID", "USERS"."NAME", "PHOTOS"."ID", "PHOTOS"."USER_ID", "PHOTOS"."CAMERA_ID"
34
+ FROM "USERS"
35
+ INNER JOIN "PHOTOS" ON "USERS"."ID" = "PHOTOS"."USER_ID"
36
+ })
37
+ end
38
+
39
+ adapter_is_not :mysql, :oracle do
32
40
  sql.should be_like(%Q{
33
41
  SELECT "users"."id", "users"."name", "photos"."id", "photos"."user_id", "photos"."camera_id"
34
42
  FROM "users"
@@ -44,15 +52,23 @@ module Arel
44
52
  adapter_is :mysql do
45
53
  sql.should be_like(%Q{
46
54
  SELECT `super_users`.`id`, `super_users`.`name`, `photos`.`id`, `photos`.`user_id`, `photos`.`camera_id`
47
- FROM `users` AS `super_users`
55
+ FROM `users` `super_users`
48
56
  INNER JOIN `photos` ON `super_users`.`id` = `photos`.`user_id`
49
57
  })
50
58
  end
51
59
 
52
- adapter_is_not :mysql do
60
+ adapter_is :oracle do
61
+ sql.should be_like(%Q{
62
+ SELECT "SUPER_USERS"."ID", "SUPER_USERS"."NAME", "PHOTOS"."ID", "PHOTOS"."USER_ID", "PHOTOS"."CAMERA_ID"
63
+ FROM "USERS" "SUPER_USERS"
64
+ INNER JOIN "PHOTOS" ON "SUPER_USERS"."ID" = "PHOTOS"."USER_ID"
65
+ })
66
+ end
67
+
68
+ adapter_is_not :mysql, :oracle do
53
69
  sql.should be_like(%Q{
54
70
  SELECT "super_users"."id", "super_users"."name", "photos"."id", "photos"."user_id", "photos"."camera_id"
55
- FROM "users" AS "super_users"
71
+ FROM "users" "super_users"
56
72
  INNER JOIN "photos" ON "super_users"."id" = "photos"."user_id"
57
73
  })
58
74
  end
@@ -66,16 +82,24 @@ module Arel
66
82
  adapter_is :mysql do
67
83
  sql.should be_like(%Q{
68
84
  SELECT `super_users`.`id`, `super_users`.`name`, `super_photos`.`id`, `super_photos`.`user_id`, `super_photos`.`camera_id`
69
- FROM `users` AS `super_users`
70
- INNER JOIN `photos` AS `super_photos` ON `super_users`.`id` = `super_photos`.`user_id`
85
+ FROM `users` `super_users`
86
+ INNER JOIN `photos` `super_photos` ON `super_users`.`id` = `super_photos`.`user_id`
87
+ })
88
+ end
89
+
90
+ adapter_is :oracle do
91
+ sql.should be_like(%Q{
92
+ SELECT "SUPER_USERS"."ID", "SUPER_USERS"."NAME", "SUPER_PHOTOS"."ID", "SUPER_PHOTOS"."USER_ID", "SUPER_PHOTOS"."CAMERA_ID"
93
+ FROM "USERS" "SUPER_USERS"
94
+ INNER JOIN "PHOTOS" "SUPER_PHOTOS" ON "SUPER_USERS"."ID" = "SUPER_PHOTOS"."USER_ID"
71
95
  })
72
96
  end
73
97
 
74
- adapter_is_not :mysql do
98
+ adapter_is_not :mysql, :oracle do
75
99
  sql.should be_like(%Q{
76
100
  SELECT "super_users"."id", "super_users"."name", "super_photos"."id", "super_photos"."user_id", "super_photos"."camera_id"
77
- FROM "users" AS "super_users"
78
- INNER JOIN "photos" AS "super_photos" ON "super_users"."id" = "super_photos"."user_id"
101
+ FROM "users" "super_users"
102
+ INNER JOIN "photos" "super_photos" ON "super_users"."id" = "super_photos"."user_id"
79
103
  })
80
104
  end
81
105
  end
@@ -95,7 +119,15 @@ module Arel
95
119
  })
96
120
  end
97
121
 
98
- adapter_is_not :mysql do
122
+ adapter_is :oracle do
123
+ sql.should be_like(%Q{
124
+ SELECT "USERS"."ID", "USERS"."NAME"
125
+ FROM "USERS"
126
+ INNER JOIN asdf ON fdsa
127
+ })
128
+ end
129
+
130
+ adapter_is_not :mysql, :oracle do
99
131
  sql.should be_like(%Q{
100
132
  SELECT "users"."id", "users"."name"
101
133
  FROM "users"
@@ -119,7 +151,17 @@ module Arel
119
151
  })
120
152
  end
121
153
 
122
- adapter_is_not :mysql do
154
+ adapter_is :oracle do
155
+ sql.should be_like(%Q{
156
+ SELECT "USERS"."ID", "USERS"."NAME"
157
+ FROM "USERS"
158
+ INNER JOIN asdf ON fdsa
159
+ INNER JOIN lifo ON fifo
160
+ INNER JOIN hatful ON hallow
161
+ })
162
+ end
163
+
164
+ adapter_is_not :mysql, :oracle do
123
165
  sql.should be_like(%Q{
124
166
  SELECT "users"."id", "users"."name"
125
167
  FROM "users"