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,41 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Skip do
5
- before do
6
- @relation = Table.new(:users)
7
- @skipped = 4
8
- end
9
-
10
- describe '#to_sql' do
11
- it "manufactures sql with limit and offset" do
12
- sql = Skip.new(@relation, @skipped).to_sql
13
-
14
- adapter_is :mysql do
15
- sql.should be_like(%Q{
16
- SELECT `users`.`id`, `users`.`name`
17
- FROM `users`
18
- OFFSET 4
19
- })
20
- end
21
-
22
- adapter_is :oracle do
23
- sql.should be_like(%Q{
24
- select * from (select raw_sql_.*, rownum raw_rnum_ from
25
- (SELECT "USERS"."ID", "USERS"."NAME"
26
- FROM "USERS") raw_sql_)
27
- where raw_rnum_ > 4
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
- OFFSET 4
36
- })
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,122 +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.to_sql
12
-
13
- adapter_is :mysql do
14
- sql.should be_like(%Q{
15
- SELECT `users`.`id`, `users`.`name`
16
- FROM `users`
17
- })
18
- end
19
-
20
- adapter_is :oracle do
21
- sql.should be_like(%Q{
22
- SELECT "USERS"."ID", "USERS"."NAME"
23
- FROM "USERS"
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 "users"
31
- })
32
- end
33
- end
34
- end
35
-
36
- describe '#as' do
37
- it "manufactures a simple select query using aliases" do
38
- sql = @relation.as(:super_users).to_sql
39
-
40
- adapter_is :mysql do
41
- sql.should be_like(%Q{
42
- SELECT `super_users`.`id`, `super_users`.`name`
43
- FROM `users` `super_users`
44
- })
45
- end
46
-
47
- adapter_is :oracle do
48
- sql.should be_like(%Q{
49
- SELECT "SUPER_USERS"."ID", "SUPER_USERS"."NAME"
50
- FROM "USERS" "SUPER_USERS"
51
- })
52
- end
53
-
54
- adapter_is_not :mysql, :oracle do
55
- sql.should be_like(%Q{
56
- SELECT "super_users"."id", "super_users"."name"
57
- FROM "users" "super_users"
58
- })
59
- end
60
- end
61
-
62
- it "does not apply alias if it's same as the table name" do
63
- sql = @relation.as(:users).to_sql
64
-
65
- adapter_is :mysql do
66
- sql.should be_like(%Q{
67
- SELECT `users`.`id`, `users`.`name`
68
- FROM `users`
69
- })
70
- end
71
-
72
- adapter_is :oracle do
73
- sql.should be_like(%Q{
74
- SELECT "USERS"."ID", "USERS"."NAME"
75
- FROM "USERS"
76
- })
77
- end
78
-
79
- adapter_is_not :mysql, :oracle do
80
- sql.should be_like(%Q{
81
- SELECT "users"."id", "users"."name"
82
- FROM "users"
83
- })
84
- end
85
- end
86
-
87
- end
88
-
89
- describe '#column_for' do
90
- it "returns the column corresponding to the attribute" do
91
- @relation.column_for(@relation[:id]).should == @relation.columns.detect { |c| c.name == 'id' }
92
- end
93
- end
94
-
95
- describe '#attributes' do
96
- it 'manufactures attributes corresponding to columns in the table' do
97
- @relation.attributes.should == [
98
- Attribute.new(@relation, :id),
99
- Attribute.new(@relation, :name)
100
- ]
101
- end
102
-
103
- describe '#reset' do
104
- it "reloads columns from the database" do
105
- lambda { @relation.engine.stub!(:columns => []) }.should_not change { @relation.attributes }
106
- lambda { @relation.reset }.should change { @relation.attributes }
107
- end
108
- end
109
- end
110
-
111
- describe '#engine' do
112
- it "defaults to global engine" do
113
- Table.engine = engine = Sql::Engine.new
114
- Table.new(:users).engine.should == engine
115
- end
116
-
117
- it "can be specified" do
118
- Table.new(:users, engine = Sql::Engine.new).engine.should == engine
119
- end
120
- end
121
- end
122
- end
@@ -1,75 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Take do
5
- before do
6
- @relation = Table.new(:users)
7
- @taken = 4
8
- end
9
-
10
- describe '#to_sql' do
11
- it "manufactures sql with limit and offset" do
12
- sql = Take.new(@relation, @taken).to_sql
13
-
14
- adapter_is :mysql do
15
- sql.should be_like(%Q{
16
- SELECT `users`.`id`, `users`.`name`
17
- FROM `users`
18
- LIMIT 4
19
- })
20
- end
21
-
22
- adapter_is :oracle do
23
- sql.should be_like(%Q{
24
- SELECT "USERS"."ID", "USERS"."NAME"
25
- FROM "USERS"
26
- WHERE ROWNUM <= 4
27
- })
28
-
29
- sql_with_order_by = Take.new(@relation.order(@relation[:id]), @taken).to_sql
30
- sql_with_order_by.should be_like(%Q{
31
- select * from
32
- (SELECT "USERS"."ID", "USERS"."NAME"
33
- FROM "USERS"
34
- ORDER BY "USERS"."ID" ASC)
35
- where rownum <= 4
36
- })
37
-
38
- sql_with_distinct = Take.new(@relation.project('DISTINCT "USERS"."ID"'), @taken).to_sql
39
- sql_with_distinct.should be_like(%Q{
40
- select * from
41
- (SELECT DISTINCT "USERS"."ID"
42
- FROM "USERS")
43
- where rownum <= 4
44
- })
45
- end
46
-
47
- adapter_is_not :mysql, :oracle do
48
- sql.should be_like(%Q{
49
- SELECT "users"."id", "users"."name"
50
- FROM "users"
51
- LIMIT 4
52
- })
53
- end
54
- end
55
-
56
- it "manufactures count sql with limit" do
57
- sql = Take.new(@relation.project(@relation[:id].count), @taken).to_sql
58
-
59
- adapter_is :mysql do
60
- sql.should be_like(%Q{
61
- SELECT COUNT(*) AS count_id
62
- FROM (SELECT 1 FROM `users` LIMIT 4) AS subquery
63
- })
64
- end
65
-
66
- adapter_is_not :mysql, :oracle do
67
- sql.should be_like(%Q{
68
- SELECT COUNT(*) AS count_id
69
- FROM (SELECT 1 FROM "users" LIMIT 4) AS subquery
70
- })
71
- end
72
- end
73
- end
74
- end
75
- end
@@ -1,203 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class User
4
- def self.primary_key
5
- "id"
6
- end
7
- end
8
-
9
- module Arel
10
- describe Update do
11
- before do
12
- @relation = Table.new(:users)
13
- end
14
-
15
- describe '#to_sql' do
16
- it "manufactures sql updating attributes when given multiple attributes" do
17
- sql = Update.new(@relation, @relation[:id] => 1, @relation[:name] => "nick").to_sql
18
-
19
- adapter_is :mysql do
20
- sql.should be_like(%Q{
21
- UPDATE `users`
22
- SET `id` = 1, `name` = 'nick'
23
- })
24
- end
25
-
26
- adapter_is :sqlite3 do
27
- sql.should be_like(%Q{
28
- UPDATE "users"
29
- SET "id" = 1, "name" = 'nick'
30
- })
31
- end
32
-
33
- adapter_is :postgresql do
34
- sql.should be_like(%Q{
35
- UPDATE "users"
36
- SET "id" = 1, "name" = E'nick'
37
- })
38
- end
39
-
40
- adapter_is :oracle do
41
- sql.should be_like(%Q{
42
- UPDATE "USERS"
43
- SET "ID" = 1, "NAME" = 'nick'
44
- })
45
- end
46
- end
47
-
48
- it "manufactures sql updating attributes when given a ranged relation" do
49
- sql = Update.new(@relation.take(1), @relation[:name] => "nick").to_sql
50
-
51
- adapter_is :mysql do
52
- sql.should be_like(%Q{
53
- UPDATE `users`
54
- SET `name` = 'nick'
55
- LIMIT 1
56
- })
57
- end
58
-
59
- adapter_is :sqlite3 do
60
- sql.should be_like(%Q{
61
- UPDATE "users" SET
62
- "name" = 'nick'
63
- WHERE "id" IN (SELECT "id" FROM "users" LIMIT 1)
64
- })
65
- end
66
-
67
- adapter_is :postgresql do
68
- sql.should be_like(%Q{
69
- UPDATE "users" SET
70
- "name" = E'nick'
71
- WHERE "id" IN (SELECT "id" FROM "users" LIMIT 1)
72
- })
73
- end
74
-
75
- adapter_is :oracle do
76
- sql.should be_like(%Q{
77
- UPDATE "USERS" SET
78
- "NAME" = 'nick'
79
- WHERE "ID" IN (SELECT "ID" FROM "USERS" WHERE ROWNUM <= 1)
80
- })
81
-
82
- sql_with_order_by = Update.new(@relation.order(@relation[:id]).take(1), @relation[:name] => "nick").to_sql
83
- sql_with_order_by.should be_like(%Q{
84
- UPDATE "USERS" SET
85
- "NAME" = 'nick'
86
- WHERE "ID" IN (select * from
87
- (SELECT "ID" FROM "USERS" ORDER BY "USERS"."ID" ASC)
88
- where rownum <= 1)
89
- })
90
- end
91
- end
92
-
93
- describe 'when given values whose types correspond to the types of the attributes' do
94
- before do
95
- @update = Update.new(@relation, @relation[:name] => "nick")
96
- end
97
-
98
- it 'manufactures sql updating attributes' do
99
- adapter_is :mysql do
100
- @update.to_sql.should be_like(%Q{
101
- UPDATE `users`
102
- SET `name` = 'nick'
103
- })
104
- end
105
-
106
- adapter_is :sqlite3 do
107
- @update.to_sql.should be_like(%Q{
108
- UPDATE "users"
109
- SET "name" = 'nick'
110
- })
111
- end
112
-
113
- adapter_is :postgresql do
114
- @update.to_sql.should be_like(%Q{
115
- UPDATE "users"
116
- SET "name" = E'nick'
117
- })
118
- end
119
-
120
- adapter_is :oracle do
121
- @update.to_sql.should be_like(%Q{
122
- UPDATE "USERS"
123
- SET "NAME" = 'nick'
124
- })
125
- end
126
- end
127
- end
128
-
129
- describe 'when given values whose types differ from from the types of the attributes' do
130
- before do
131
- @update = Update.new(@relation, @relation[:id] => '1-asdf')
132
- end
133
-
134
- it 'manufactures sql updating attributes' do
135
- adapter_is :mysql do
136
- @update.to_sql.should be_like(%Q{
137
- UPDATE `users`
138
- SET `id` = 1
139
- })
140
- end
141
-
142
- adapter_is :oracle do
143
- @update.to_sql.should be_like(%Q{
144
- UPDATE "USERS"
145
- SET "ID" = 1
146
- })
147
- end
148
-
149
- adapter_is_not :mysql, :oracle do
150
- @update.to_sql.should be_like(%Q{
151
- UPDATE "users"
152
- SET "id" = 1
153
- })
154
- end
155
- end
156
- end
157
-
158
- describe 'when the relation is a where' do
159
- before do
160
- @update = Update.new(
161
- @relation.where(@relation[:id].eq(1)),
162
- @relation[:name] => "nick"
163
- )
164
- end
165
-
166
- it 'manufactures sql updating a where relation' do
167
- adapter_is :mysql do
168
- @update.to_sql.should be_like(%Q{
169
- UPDATE `users`
170
- SET `name` = 'nick'
171
- WHERE `users`.`id` = 1
172
- })
173
- end
174
-
175
- adapter_is :sqlite3 do
176
- @update.to_sql.should be_like(%Q{
177
- UPDATE "users"
178
- SET "name" = 'nick'
179
- WHERE "users"."id" = 1
180
- })
181
- end
182
-
183
- adapter_is :postgresql do
184
- @update.to_sql.should be_like(%Q{
185
- UPDATE "users"
186
- SET "name" = E'nick'
187
- WHERE "users"."id" = 1
188
- })
189
- end
190
-
191
- adapter_is :oracle do
192
- @update.to_sql.should be_like(%Q{
193
- UPDATE "USERS"
194
- SET "NAME" = 'nick'
195
- WHERE "USERS"."ID" = 1
196
- })
197
- end
198
- end
199
- end
200
- end
201
-
202
- end
203
- end
@@ -1,72 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Arel
4
- describe Where do
5
- before do
6
- @relation = Table.new(:users)
7
- @predicate = @relation[:id].eq(1)
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 = Where.new(@relation, [@predicate]).to_sql
14
-
15
- adapter_is :mysql do
16
- sql.should be_like(%Q{
17
- SELECT `users`.`id`, `users`.`name`
18
- FROM `users`
19
- WHERE `users`.`id` = 1
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
- WHERE "USERS"."ID" = 1
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
- WHERE "users"."id" = 1
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 = Where.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
- WHERE 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
- WHERE 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
- WHERE asdf
66
- })
67
- end
68
- end
69
- end
70
- end
71
- end
72
- end