arel 1.0.1 → 2.0.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 (247) hide show
  1. data/MIT-LICENSE.txt +20 -0
  2. data/Manifest.txt +105 -0
  3. data/README.markdown +12 -32
  4. data/Rakefile +17 -0
  5. data/arel.gemspec +39 -0
  6. data/lib/arel.rb +30 -9
  7. data/lib/arel/attributes.rb +20 -0
  8. data/lib/arel/attributes/attribute.rb +190 -0
  9. data/lib/arel/compatibility/wheres.rb +33 -0
  10. data/lib/arel/crud.rb +37 -0
  11. data/lib/arel/delete_manager.rb +22 -0
  12. data/lib/arel/deprecated.rb +4 -0
  13. data/lib/arel/expression.rb +4 -0
  14. data/lib/arel/expressions.rb +23 -0
  15. data/lib/arel/insert_manager.rb +34 -0
  16. data/lib/arel/nodes.rb +44 -0
  17. data/lib/arel/nodes/and.rb +6 -0
  18. data/lib/arel/nodes/assignment.rb +6 -0
  19. data/lib/arel/nodes/avg.rb +6 -0
  20. data/lib/arel/nodes/between.rb +6 -0
  21. data/lib/arel/nodes/binary.rb +12 -0
  22. data/lib/arel/nodes/count.rb +13 -0
  23. data/lib/arel/nodes/delete_statement.rb +17 -0
  24. data/lib/arel/nodes/does_not_match.rb +6 -0
  25. data/lib/arel/nodes/equality.rb +9 -0
  26. data/lib/arel/nodes/exists.rb +11 -0
  27. data/lib/arel/nodes/function.rb +18 -0
  28. data/lib/arel/nodes/greater_than.rb +6 -0
  29. data/lib/arel/nodes/greater_than_or_equal.rb +6 -0
  30. data/lib/arel/nodes/group.rb +11 -0
  31. data/lib/arel/nodes/grouping.rb +11 -0
  32. data/lib/arel/nodes/having.rb +11 -0
  33. data/lib/arel/nodes/in.rb +6 -0
  34. data/lib/arel/nodes/inner_join.rb +6 -0
  35. data/lib/arel/nodes/insert_statement.rb +19 -0
  36. data/lib/arel/nodes/join.rb +13 -0
  37. data/lib/arel/nodes/less_than.rb +6 -0
  38. data/lib/arel/nodes/less_than_or_equal.rb +6 -0
  39. data/lib/arel/nodes/lock.rb +6 -0
  40. data/lib/arel/nodes/matches.rb +6 -0
  41. data/lib/arel/nodes/max.rb +6 -0
  42. data/lib/arel/nodes/min.rb +6 -0
  43. data/lib/arel/nodes/node.rb +30 -0
  44. data/lib/arel/nodes/not_equal.rb +6 -0
  45. data/lib/arel/nodes/not_in.rb +6 -0
  46. data/lib/arel/nodes/offset.rb +11 -0
  47. data/lib/arel/nodes/on.rb +11 -0
  48. data/lib/arel/nodes/or.rb +6 -0
  49. data/lib/arel/nodes/ordering.rb +19 -0
  50. data/lib/arel/nodes/outer_join.rb +6 -0
  51. data/lib/arel/nodes/select_core.rb +25 -0
  52. data/lib/arel/nodes/select_statement.rb +22 -0
  53. data/lib/arel/nodes/sql_literal.rb +7 -0
  54. data/lib/arel/nodes/string_join.rb +11 -0
  55. data/lib/arel/nodes/sum.rb +6 -0
  56. data/lib/arel/nodes/table_alias.rb +21 -0
  57. data/lib/arel/nodes/unqualified_column.rb +19 -0
  58. data/lib/arel/nodes/update_statement.rb +21 -0
  59. data/lib/arel/nodes/values.rb +12 -0
  60. data/lib/arel/relation.rb +6 -0
  61. data/lib/arel/select_manager.rb +203 -0
  62. data/lib/arel/sql/engine.rb +10 -0
  63. data/lib/arel/sql_literal.rb +1 -10
  64. data/lib/arel/table.rb +126 -0
  65. data/lib/arel/tree_manager.rb +26 -0
  66. data/lib/arel/update_manager.rb +48 -0
  67. data/lib/arel/visitors.rb +30 -0
  68. data/lib/arel/visitors/dot.rb +233 -0
  69. data/lib/arel/visitors/join_sql.rb +38 -0
  70. data/lib/arel/visitors/mysql.rb +16 -0
  71. data/lib/arel/visitors/oracle.rb +69 -0
  72. data/lib/arel/visitors/order_clauses.rb +9 -0
  73. data/lib/arel/visitors/postgresql.rb +54 -0
  74. data/lib/arel/visitors/to_sql.rb +301 -0
  75. data/lib/arel/visitors/where_sql.rb +9 -0
  76. data/spec/activerecord_compat_spec.rb +18 -0
  77. data/spec/attributes/attribute_spec.rb +648 -0
  78. data/spec/attributes_spec.rb +33 -6
  79. data/spec/crud_spec.rb +69 -0
  80. data/spec/delete_manager_spec.rb +53 -0
  81. data/spec/insert_manager_spec.rb +141 -0
  82. data/spec/nodes/count_spec.rb +18 -0
  83. data/spec/nodes/delete_statement_spec.rb +15 -0
  84. data/spec/nodes/equality_spec.rb +72 -0
  85. data/spec/nodes/insert_statement_spec.rb +18 -0
  86. data/spec/nodes/or_spec.rb +20 -0
  87. data/spec/nodes/select_core_spec.rb +21 -0
  88. data/spec/nodes/select_statement_spec.rb +14 -0
  89. data/spec/nodes/sql_literal_spec.rb +26 -0
  90. data/spec/nodes/sum_spec.rb +12 -0
  91. data/spec/nodes/update_statement_spec.rb +18 -0
  92. data/spec/select_manager_spec.rb +581 -0
  93. data/spec/spec.opts +3 -0
  94. data/spec/spec_helper.rb +6 -21
  95. data/spec/support/fake_record.rb +89 -0
  96. data/spec/support/shared/tree_manager_shared.rb +9 -0
  97. data/spec/table_spec.rb +176 -0
  98. data/spec/update_manager_spec.rb +89 -0
  99. data/spec/visitors/join_sql_spec.rb +35 -0
  100. data/spec/visitors/oracle_spec.rb +111 -0
  101. data/spec/visitors/to_sql_spec.rb +134 -0
  102. metadata +160 -260
  103. data/lib/arel/algebra.rb +0 -10
  104. data/lib/arel/algebra/attributes.rb +0 -7
  105. data/lib/arel/algebra/attributes/attribute.rb +0 -304
  106. data/lib/arel/algebra/attributes/boolean.rb +0 -21
  107. data/lib/arel/algebra/attributes/decimal.rb +0 -9
  108. data/lib/arel/algebra/attributes/float.rb +0 -9
  109. data/lib/arel/algebra/attributes/integer.rb +0 -10
  110. data/lib/arel/algebra/attributes/string.rb +0 -10
  111. data/lib/arel/algebra/attributes/time.rb +0 -6
  112. data/lib/arel/algebra/core_extensions.rb +0 -3
  113. data/lib/arel/algebra/core_extensions/hash.rb +0 -7
  114. data/lib/arel/algebra/core_extensions/object.rb +0 -13
  115. data/lib/arel/algebra/core_extensions/symbol.rb +0 -9
  116. data/lib/arel/algebra/expression.rb +0 -56
  117. data/lib/arel/algebra/header.rb +0 -66
  118. data/lib/arel/algebra/ordering.rb +0 -31
  119. data/lib/arel/algebra/predicates.rb +0 -306
  120. data/lib/arel/algebra/relations.rb +0 -16
  121. data/lib/arel/algebra/relations/operations/from.rb +0 -14
  122. data/lib/arel/algebra/relations/operations/group.rb +0 -14
  123. data/lib/arel/algebra/relations/operations/having.rb +0 -14
  124. data/lib/arel/algebra/relations/operations/join.rb +0 -103
  125. data/lib/arel/algebra/relations/operations/lock.rb +0 -10
  126. data/lib/arel/algebra/relations/operations/order.rb +0 -23
  127. data/lib/arel/algebra/relations/operations/project.rb +0 -20
  128. data/lib/arel/algebra/relations/operations/skip.rb +0 -14
  129. data/lib/arel/algebra/relations/operations/take.rb +0 -18
  130. data/lib/arel/algebra/relations/operations/where.rb +0 -24
  131. data/lib/arel/algebra/relations/relation.rb +0 -205
  132. data/lib/arel/algebra/relations/row.rb +0 -29
  133. data/lib/arel/algebra/relations/utilities/compound.rb +0 -55
  134. data/lib/arel/algebra/relations/utilities/externalization.rb +0 -26
  135. data/lib/arel/algebra/relations/utilities/nil.rb +0 -7
  136. data/lib/arel/algebra/relations/writes.rb +0 -47
  137. data/lib/arel/algebra/value.rb +0 -53
  138. data/lib/arel/engines.rb +0 -2
  139. data/lib/arel/engines/memory.rb +0 -2
  140. data/lib/arel/engines/memory/engine.rb +0 -10
  141. data/lib/arel/engines/memory/relations.rb +0 -2
  142. data/lib/arel/engines/memory/relations/array.rb +0 -37
  143. data/lib/arel/engines/memory/relations/operations.rb +0 -9
  144. data/lib/arel/engines/sql.rb +0 -6
  145. data/lib/arel/engines/sql/attributes.rb +0 -45
  146. data/lib/arel/engines/sql/christener.rb +0 -20
  147. data/lib/arel/engines/sql/compilers/ibm_db_compiler.rb +0 -48
  148. data/lib/arel/engines/sql/compilers/mysql_compiler.rb +0 -11
  149. data/lib/arel/engines/sql/compilers/oracle_compiler.rb +0 -106
  150. data/lib/arel/engines/sql/compilers/postgresql_compiler.rb +0 -50
  151. data/lib/arel/engines/sql/compilers/sqlite_compiler.rb +0 -9
  152. data/lib/arel/engines/sql/core_extensions.rb +0 -4
  153. data/lib/arel/engines/sql/core_extensions/array.rb +0 -24
  154. data/lib/arel/engines/sql/core_extensions/nil_class.rb +0 -15
  155. data/lib/arel/engines/sql/core_extensions/object.rb +0 -19
  156. data/lib/arel/engines/sql/core_extensions/range.rb +0 -19
  157. data/lib/arel/engines/sql/engine.rb +0 -47
  158. data/lib/arel/engines/sql/formatters.rb +0 -138
  159. data/lib/arel/engines/sql/relations.rb +0 -3
  160. data/lib/arel/engines/sql/relations/compiler.rb +0 -153
  161. data/lib/arel/engines/sql/relations/table.rb +0 -100
  162. data/lib/arel/engines/sql/relations/utilities/nil.rb +0 -6
  163. data/lib/arel/recursion/base_case.rb +0 -13
  164. data/lib/arel/session.rb +0 -35
  165. data/lib/arel/version.rb +0 -3
  166. data/spec/algebra/unit/predicates/binary_spec.rb +0 -35
  167. data/spec/algebra/unit/predicates/equality_spec.rb +0 -29
  168. data/spec/algebra/unit/predicates/in_spec.rb +0 -12
  169. data/spec/algebra/unit/predicates/inequality_spec.rb +0 -32
  170. data/spec/algebra/unit/predicates/predicate_spec.rb +0 -22
  171. data/spec/algebra/unit/primitives/attribute_spec.rb +0 -175
  172. data/spec/algebra/unit/primitives/expression_spec.rb +0 -39
  173. data/spec/algebra/unit/primitives/value_spec.rb +0 -15
  174. data/spec/algebra/unit/relations/alias_spec.rb +0 -16
  175. data/spec/algebra/unit/relations/delete_spec.rb +0 -9
  176. data/spec/algebra/unit/relations/group_spec.rb +0 -10
  177. data/spec/algebra/unit/relations/insert_spec.rb +0 -9
  178. data/spec/algebra/unit/relations/join_spec.rb +0 -18
  179. data/spec/algebra/unit/relations/order_spec.rb +0 -21
  180. data/spec/algebra/unit/relations/project_spec.rb +0 -34
  181. data/spec/algebra/unit/relations/relation_spec.rb +0 -241
  182. data/spec/algebra/unit/relations/skip_spec.rb +0 -10
  183. data/spec/algebra/unit/relations/table_spec.rb +0 -38
  184. data/spec/algebra/unit/relations/take_spec.rb +0 -10
  185. data/spec/algebra/unit/relations/update_spec.rb +0 -9
  186. data/spec/algebra/unit/relations/where_spec.rb +0 -19
  187. data/spec/algebra/unit/session/session_spec.rb +0 -84
  188. data/spec/attributes/boolean_spec.rb +0 -57
  189. data/spec/attributes/float_spec.rb +0 -119
  190. data/spec/attributes/header_spec.rb +0 -42
  191. data/spec/attributes/integer_spec.rb +0 -119
  192. data/spec/attributes/string_spec.rb +0 -43
  193. data/spec/attributes/time_spec.rb +0 -24
  194. data/spec/engines/memory/integration/joins/cross_engine_spec.rb +0 -61
  195. data/spec/engines/memory/unit/relations/array_spec.rb +0 -33
  196. data/spec/engines/memory/unit/relations/insert_spec.rb +0 -28
  197. data/spec/engines/memory/unit/relations/join_spec.rb +0 -32
  198. data/spec/engines/memory/unit/relations/order_spec.rb +0 -28
  199. data/spec/engines/memory/unit/relations/project_spec.rb +0 -27
  200. data/spec/engines/memory/unit/relations/skip_spec.rb +0 -31
  201. data/spec/engines/memory/unit/relations/take_spec.rb +0 -28
  202. data/spec/engines/memory/unit/relations/where_spec.rb +0 -43
  203. data/spec/engines/sql/integration/joins/with_adjacency_spec.rb +0 -258
  204. data/spec/engines/sql/integration/joins/with_aggregations_spec.rb +0 -221
  205. data/spec/engines/sql/integration/joins/with_compounds_spec.rb +0 -137
  206. data/spec/engines/sql/unit/engine_spec.rb +0 -65
  207. data/spec/engines/sql/unit/predicates/binary_spec.rb +0 -140
  208. data/spec/engines/sql/unit/predicates/equality_spec.rb +0 -75
  209. data/spec/engines/sql/unit/predicates/in_spec.rb +0 -179
  210. data/spec/engines/sql/unit/predicates/noteq_spec.rb +0 -75
  211. data/spec/engines/sql/unit/predicates/predicates_spec.rb +0 -79
  212. data/spec/engines/sql/unit/primitives/attribute_spec.rb +0 -36
  213. data/spec/engines/sql/unit/primitives/expression_spec.rb +0 -28
  214. data/spec/engines/sql/unit/primitives/literal_spec.rb +0 -43
  215. data/spec/engines/sql/unit/primitives/value_spec.rb +0 -29
  216. data/spec/engines/sql/unit/relations/alias_spec.rb +0 -53
  217. data/spec/engines/sql/unit/relations/delete_spec.rb +0 -83
  218. data/spec/engines/sql/unit/relations/from_spec.rb +0 -64
  219. data/spec/engines/sql/unit/relations/group_spec.rb +0 -72
  220. data/spec/engines/sql/unit/relations/having_spec.rb +0 -78
  221. data/spec/engines/sql/unit/relations/insert_spec.rb +0 -143
  222. data/spec/engines/sql/unit/relations/join_spec.rb +0 -180
  223. data/spec/engines/sql/unit/relations/lock_spec.rb +0 -86
  224. data/spec/engines/sql/unit/relations/order_spec.rb +0 -161
  225. data/spec/engines/sql/unit/relations/project_spec.rb +0 -143
  226. data/spec/engines/sql/unit/relations/skip_spec.rb +0 -41
  227. data/spec/engines/sql/unit/relations/table_spec.rb +0 -122
  228. data/spec/engines/sql/unit/relations/take_spec.rb +0 -75
  229. data/spec/engines/sql/unit/relations/update_spec.rb +0 -203
  230. data/spec/engines/sql/unit/relations/where_spec.rb +0 -72
  231. data/spec/relations/join_spec.rb +0 -42
  232. data/spec/relations/relation_spec.rb +0 -31
  233. data/spec/shared/relation_spec.rb +0 -255
  234. data/spec/sql/christener_spec.rb +0 -70
  235. data/spec/support/connections/mysql_connection.rb +0 -14
  236. data/spec/support/connections/oracle_connection.rb +0 -17
  237. data/spec/support/connections/postgresql_connection.rb +0 -13
  238. data/spec/support/connections/sqlite3_connection.rb +0 -24
  239. data/spec/support/guards.rb +0 -28
  240. data/spec/support/matchers/disambiguate_attributes.rb +0 -28
  241. data/spec/support/matchers/hash_the_same_as.rb +0 -26
  242. data/spec/support/matchers/have_rows.rb +0 -18
  243. data/spec/support/model.rb +0 -67
  244. data/spec/support/schemas/mysql_schema.rb +0 -26
  245. data/spec/support/schemas/oracle_schema.rb +0 -20
  246. data/spec/support/schemas/postgresql_schema.rb +0 -26
  247. data/spec/support/schemas/sqlite3_schema.rb +0 -26
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe SqlLiteral do
5
- before do
6
- @relation = Table.new(:users)
7
- end
8
-
9
- describe '#to_sql' do
10
- it "manufactures sql with a literal SQL fragment" do
11
- sql = @relation.project(Count.new(SqlLiteral.new("*"))).to_sql
12
-
13
- adapter_is :mysql do
14
- sql.should be_like(%Q{SELECT COUNT(*) AS count_id FROM `users`})
15
- end
16
-
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
22
- sql.should be_like(%Q{SELECT COUNT(*) AS count_id FROM "users"})
23
- end
24
- end
25
-
26
- it "manufactures expressions on literal SQL fragment" do
27
- sql = @relation.project(SqlLiteral.new("2 * credit_limit").sum).to_sql
28
-
29
- adapter_is :mysql do
30
- sql.should be_like(%Q{SELECT SUM(2 * credit_limit) AS sum_id FROM `users`})
31
- end
32
-
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
38
- sql.should be_like(%Q{SELECT SUM(2 * credit_limit) AS sum_id FROM "users"})
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,29 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Value do
5
- before do
6
- @relation = Table.new(:users)
7
- end
8
-
9
- describe '#to_sql' do
10
- it "appropriately quotes the value" do
11
- Value.new(1, @relation).to_sql.should be_like('1')
12
-
13
- adapter_is_not :postgresql do
14
- Value.new('asdf', @relation).to_sql.should be_like("'asdf'")
15
- end
16
-
17
- adapter_is :postgresql do
18
- Value.new('asdf', @relation).to_sql.should be_like("E'asdf'")
19
- end
20
- end
21
- end
22
-
23
- describe '#format' do
24
- it "returns the sql of the provided object" do
25
- Value.new(1, @relation).format(@relation[:id]).should == @relation[:id].to_sql
26
- end
27
- end
28
- end
29
- end
@@ -1,53 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Alias do
5
- before do
6
- @relation = Table.new(:users)
7
- end
8
-
9
- describe '#to_sql' do
10
- describe 'when there is no ambiguity' do
11
- it 'does not alias table names anywhere a table name can appear' do
12
- sql = @relation \
13
- .where(@relation[:id].eq(1)) \
14
- .order(@relation[:id]) \
15
- .project(@relation[:id]) \
16
- .group(@relation[:id]) \
17
- .alias \
18
- .to_sql
19
-
20
- adapter_is :mysql do
21
- sql.should be_like(%Q{
22
- SELECT `users`.`id`
23
- FROM `users`
24
- WHERE `users`.`id` = 1
25
- GROUP BY `users`.`id`
26
- ORDER BY `users`.`id` ASC
27
- })
28
- end
29
-
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
41
- sql.should be_like(%Q{
42
- SELECT "users"."id"
43
- FROM "users"
44
- WHERE "users"."id" = 1
45
- GROUP BY "users"."id"
46
- ORDER BY "users"."id" ASC
47
- })
48
- end
49
- end
50
- end
51
- end
52
- end
53
- end
@@ -1,83 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Deletion do
5
- before do
6
- @relation = Table.new(:users)
7
- end
8
-
9
- describe '#to_sql' do
10
- it 'manufactures sql deleting a table relation' do
11
- sql = Deletion.new(@relation).to_sql
12
-
13
- adapter_is :mysql do
14
- sql.should be_like(%Q{DELETE FROM `users`})
15
- end
16
-
17
- adapter_is :oracle do
18
- sql.should be_like(%Q{DELETE FROM "USERS"})
19
- end
20
-
21
- adapter_is_not :mysql, :oracle do
22
- sql.should be_like(%Q{DELETE FROM "users"})
23
- end
24
- end
25
-
26
- it 'manufactures sql deleting a where relation' do
27
- sql = Deletion.new(@relation.where(@relation[:id].eq(1))).to_sql
28
-
29
- adapter_is :mysql do
30
- sql.should be_like(%Q{
31
- DELETE
32
- FROM `users`
33
- WHERE `users`.`id` = 1
34
- })
35
- end
36
-
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
46
- sql.should be_like(%Q{
47
- DELETE
48
- FROM "users"
49
- WHERE "users"."id" = 1
50
- })
51
- end
52
- end
53
-
54
- it "manufactures sql deleting a ranged relation" do
55
- sql = Deletion.new(@relation.take(1)).to_sql
56
-
57
- adapter_is :mysql do
58
- sql.should be_like(%Q{
59
- DELETE
60
- FROM `users`
61
- LIMIT 1
62
- })
63
- end
64
-
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
74
- sql.should be_like(%Q{
75
- DELETE
76
- FROM "users"
77
- LIMIT 1
78
- })
79
- end
80
- end
81
- end
82
- end
83
- end
@@ -1,64 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Table do
5
- before do
6
- @relation = Table.new(:users)
7
- end
8
-
9
- describe '#to_sql' do
10
- it "manufactures a simple select query" do
11
- sql = @relation.from("workers").to_sql
12
-
13
- adapter_is :mysql do
14
- sql.should be_like(%Q{
15
- SELECT `users`.`id`, `users`.`name`
16
- FROM workers
17
- })
18
- end
19
-
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
28
- sql.should be_like(%Q{
29
- SELECT "users"."id", "users"."name"
30
- FROM workers
31
- })
32
- end
33
- end
34
- end
35
-
36
- describe '#to_sql' do
37
- it "overrides and use last from clause given " do
38
- sql = @relation.from("workers").from("users").to_sql
39
-
40
- adapter_is :mysql do
41
- sql.should be_like(%Q{
42
- SELECT `users`.`id`, `users`.`name`
43
- FROM users
44
- })
45
- end
46
-
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
55
- sql.should be_like(%Q{
56
- SELECT "users"."id", "users"."name"
57
- FROM users
58
- })
59
- end
60
- end
61
- end
62
-
63
- end
64
- end
@@ -1,72 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Group do
5
- before do
6
- @relation = Table.new(:users)
7
- @attribute = @relation[:id]
8
- end
9
-
10
- describe '#to_sql' do
11
- describe 'when given a predicate' do
12
- it "manufactures sql with where clause conditions" do
13
- sql = Group.new(@relation, [@attribute]).to_sql
14
-
15
- adapter_is :mysql do
16
- sql.should be_like(%Q{
17
- SELECT `users`.`id`, `users`.`name`
18
- FROM `users`
19
- GROUP BY `users`.`id`
20
- })
21
- end
22
-
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
32
- sql.should be_like(%Q{
33
- SELECT "users"."id", "users"."name"
34
- FROM "users"
35
- GROUP BY "users"."id"
36
- })
37
- end
38
- end
39
- end
40
-
41
- describe 'when given a string' do
42
- it "passes the string through to the where clause" do
43
- sql = Group.new(@relation, ['asdf']).to_sql
44
-
45
- adapter_is :mysql do
46
- sql.should be_like(%Q{
47
- SELECT `users`.`id`, `users`.`name`
48
- FROM `users`
49
- GROUP BY asdf
50
- })
51
- end
52
-
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
62
- sql.should be_like(%Q{
63
- SELECT "users"."id", "users"."name"
64
- FROM "users"
65
- GROUP BY asdf
66
- })
67
- end
68
- end
69
- end
70
- end
71
- end
72
- end
@@ -1,78 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Having do
5
- before do
6
- @relation = Table.new(:developers)
7
- end
8
-
9
- describe '#to_sql' do
10
- describe 'when given a predicate' do
11
- it "manufactures sql with where clause conditions" do
12
- sql = @relation.group(@relation[:department]).having("MIN(salary) > 1000").to_sql
13
-
14
- adapter_is :mysql do
15
- sql.should be_like(%Q{
16
- SELECT `developers`.`id`, `developers`.`name`, `developers`.`salary`, `developers`.`department`, `developers`.`created_at`
17
- FROM `developers`
18
- GROUP BY `developers`.`department`
19
- HAVING MIN(salary) > 1000
20
- })
21
- end
22
-
23
- adapter_is :oracle do
24
- sql.should be_like(%Q{
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"
35
- FROM "developers"
36
- GROUP BY "developers"."department"
37
- HAVING MIN(salary) > 1000
38
- })
39
- end
40
- end
41
- end
42
-
43
- describe 'when given two predicates' do
44
- it "manufactures sql with where clause conditions joined by AND" do
45
- sql = @relation.group(@relation[:department]).having("MIN(salary) > 1000", "MAX(salary) < 10000").to_sql
46
-
47
- adapter_is :mysql do
48
- sql.should be_like(%Q{
49
- SELECT `developers`.`id`, `developers`.`name`, `developers`.`salary`, `developers`.`department`, `developers`.`created_at`
50
- FROM `developers`
51
- GROUP BY `developers`.`department`
52
- HAVING MIN(salary) > 1000 AND MAX(salary) < 10000
53
- })
54
- end
55
-
56
- adapter_is :oracle do
57
- sql.should be_like(%Q{
58
- SELECT "DEVELOPERS"."ID", "DEVELOPERS"."NAME", "DEVELOPERS"."SALARY", "DEVELOPERS"."DEPARTMENT", "DEVELOPERS"."CREATED_AT"
59
- FROM "DEVELOPERS"
60
- GROUP BY "DEVELOPERS"."DEPARTMENT"
61
- HAVING MIN(salary) > 1000 AND MAX(salary) < 10000
62
- })
63
- end
64
-
65
- adapter_is_not :mysql, :oracle do
66
- sql.should be_like(%Q{
67
- SELECT "developers"."id", "developers"."name", "developers"."salary", "developers"."department", "developers"."created_at"
68
- FROM "developers"
69
- GROUP BY "developers"."department"
70
- HAVING MIN(salary) > 1000 AND MAX(salary) < 10000
71
- })
72
- end
73
- end
74
- end
75
- end
76
- end
77
- end
78
-
@@ -1,143 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Insert do
5
- before do
6
- @relation = Table.new(:users)
7
- end
8
-
9
- describe '#to_sql' do
10
- it 'manufactures sql inserting data when given multiple rows' do
11
- pending 'it should insert multiple rows' do
12
- @insertion = Insert.new(@relation, [@relation[:name] => "nick", @relation[:name] => "bryan"])
13
-
14
- @insertion.to_sql.should be_like("
15
- INSERT
16
- INTO `users`
17
- (`name`) VALUES ('nick'), ('bryan')
18
- ")
19
- end
20
- end
21
-
22
- it 'manufactures sql inserting data when given multiple values' do
23
- @insertion = Insert.new(@relation, @relation[:id] => "1", @relation[:name] => "nick")
24
-
25
- adapter_is :mysql do
26
- @insertion.to_sql.should be_like(%Q{
27
- INSERT
28
- INTO `users`
29
- (`id`, `name`) VALUES (1, 'nick')
30
- })
31
- end
32
-
33
- adapter_is :sqlite3 do
34
- @insertion.to_sql.should be_like(%Q{
35
- INSERT
36
- INTO "users"
37
- ("id", "name") VALUES (1, 'nick')
38
- })
39
- end
40
-
41
- adapter_is :postgresql do
42
- @insertion.to_sql.should be_like(%Q{
43
- INSERT
44
- INTO "users"
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')
55
- })
56
- end
57
- end
58
-
59
- describe 'when given values whose types correspond to the types of the attributes' do
60
- before do
61
- @insertion = Insert.new(@relation, @relation[:name] => "nick")
62
- end
63
-
64
- it 'manufactures sql inserting data' do
65
- adapter_is :mysql do
66
- @insertion.to_sql.should be_like(%Q{
67
- INSERT
68
- INTO `users`
69
- (`name`) VALUES ('nick')
70
- })
71
- end
72
-
73
- adapter_is :sqlite3 do
74
- @insertion.to_sql.should be_like(%Q{
75
- INSERT
76
- INTO "users"
77
- ("name") VALUES ('nick')
78
- })
79
- end
80
-
81
- adapter_is :postgresql do
82
- @insertion.to_sql.should be_like(%Q{
83
- INSERT
84
- INTO "users"
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')
95
- })
96
- end
97
- end
98
- end
99
-
100
- describe 'when given values whose types differ from from the types of the attributes' do
101
- before do
102
- @insertion = Insert.new(@relation, @relation[:id] => '1-asdf')
103
- end
104
-
105
- it 'manufactures sql inserting data' do
106
- adapter_is :mysql do
107
- @insertion.to_sql.should be_like(%Q{
108
- INSERT
109
- INTO `users`
110
- (`id`) VALUES (1)
111
- })
112
- end
113
-
114
- adapter_is :sqlite3 do
115
- @insertion.to_sql.should be_like(%Q{
116
- INSERT
117
- INTO "users"
118
- ("id") VALUES (1)
119
- })
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
-
139
- end
140
- end
141
- end
142
- end
143
- end