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
@@ -0,0 +1,111 @@
1
+ require 'spec_helper'
2
+
3
+ module Arel
4
+ module Visitors
5
+ describe 'the oracle visitor' do
6
+ before do
7
+ @visitor = Oracle.new Table.engine
8
+ end
9
+
10
+ it 'modifies order when there is distinct and first value' do
11
+ # *sigh*
12
+ select = "DISTINCT foo.id, FIRST_VALUE(projects.name) OVER (foo) AS alias_0__"
13
+ stmt = Nodes::SelectStatement.new
14
+ stmt.cores.first.projections << Nodes::SqlLiteral.new(select)
15
+ stmt.orders << Nodes::SqlLiteral.new('foo')
16
+ sql = @visitor.accept(stmt)
17
+ sql.should be_like %{
18
+ SELECT #{select} ORDER BY alias_0__
19
+ }
20
+ end
21
+
22
+ it 'is idempotent with crazy query' do
23
+ # *sigh*
24
+ select = "DISTINCT foo.id, FIRST_VALUE(projects.name) OVER (foo) AS alias_0__"
25
+ stmt = Nodes::SelectStatement.new
26
+ stmt.cores.first.projections << Nodes::SqlLiteral.new(select)
27
+ stmt.orders << Nodes::SqlLiteral.new('foo')
28
+
29
+ sql = @visitor.accept(stmt)
30
+ sql2 = @visitor.accept(stmt)
31
+ check sql.should == sql2
32
+ end
33
+
34
+ it 'splits orders with commas' do
35
+ # *sigh*
36
+ select = "DISTINCT foo.id, FIRST_VALUE(projects.name) OVER (foo) AS alias_0__"
37
+ stmt = Nodes::SelectStatement.new
38
+ stmt.cores.first.projections << Nodes::SqlLiteral.new(select)
39
+ stmt.orders << Nodes::SqlLiteral.new('foo, bar')
40
+ sql = @visitor.accept(stmt)
41
+ sql.should be_like %{
42
+ SELECT #{select} ORDER BY alias_0__, alias_1__
43
+ }
44
+ end
45
+
46
+ describe 'Nodes::SelectStatement' do
47
+ describe 'limit' do
48
+ it 'adds a rownum clause' do
49
+ stmt = Nodes::SelectStatement.new
50
+ stmt.limit = 10
51
+ sql = @visitor.accept stmt
52
+ sql.should be_like %{ SELECT WHERE ROWNUM <= 10 }
53
+ end
54
+
55
+ it 'is idempotent' do
56
+ stmt = Nodes::SelectStatement.new
57
+ stmt.orders << Nodes::SqlLiteral.new('foo')
58
+ stmt.limit = 10
59
+ sql = @visitor.accept stmt
60
+ sql2 = @visitor.accept stmt
61
+ check sql.should == sql2
62
+ end
63
+
64
+ it 'creates a subquery when there is order_by' do
65
+ stmt = Nodes::SelectStatement.new
66
+ stmt.orders << Nodes::SqlLiteral.new('foo')
67
+ stmt.limit = 10
68
+ sql = @visitor.accept stmt
69
+ sql.should be_like %{
70
+ SELECT * FROM (SELECT ORDER BY foo) WHERE ROWNUM <= 10
71
+ }
72
+ end
73
+
74
+ it 'creates a subquery when there is DISTINCT' do
75
+ stmt = Nodes::SelectStatement.new
76
+ stmt.cores.first.projections << Nodes::SqlLiteral.new('DISTINCT id')
77
+ stmt.limit = 10
78
+ sql = @visitor.accept stmt
79
+ sql.should be_like %{
80
+ SELECT * FROM (SELECT DISTINCT id) WHERE ROWNUM <= 10
81
+ }
82
+ end
83
+
84
+ it 'creates a different subquery when there is an offset' do
85
+ stmt = Nodes::SelectStatement.new
86
+ stmt.limit = 10
87
+ stmt.offset = Nodes::Offset.new(10)
88
+ sql = @visitor.accept stmt
89
+ sql.should be_like %{
90
+ SELECT * FROM (
91
+ SELECT raw_sql_.*, rownum raw_rnum_
92
+ FROM (SELECT ) raw_sql_
93
+ WHERE rownum <= 20
94
+ )
95
+ WHERE raw_rnum_ > 10
96
+ }
97
+ end
98
+
99
+ it 'is idempotent with different subquery' do
100
+ stmt = Nodes::SelectStatement.new
101
+ stmt.limit = 10
102
+ stmt.offset = Nodes::Offset.new(10)
103
+ sql = @visitor.accept stmt
104
+ sql2 = @visitor.accept stmt
105
+ check sql.should == sql2
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,134 @@
1
+ require 'spec_helper'
2
+
3
+ module Arel
4
+ module Visitors
5
+ describe 'the to_sql visitor' do
6
+ before do
7
+ @visitor = ToSql.new Table.engine
8
+ @attr = Table.new(:users)[:id]
9
+ end
10
+
11
+ describe 'equality' do
12
+ it 'should handle false' do
13
+ sql = @visitor.accept Nodes::Equality.new(false, false)
14
+ sql.should be_like %{ 'f' = 'f' }
15
+ end
16
+
17
+ it 'should use the column to quote' do
18
+ table = Table.new(:users)
19
+ sql = @visitor.accept Nodes::Equality.new(table[:id], '1-fooo')
20
+ sql.should be_like %{ "users"."id" = 1 }
21
+ end
22
+ end
23
+
24
+ it "should visit_DateTime" do
25
+ @visitor.accept DateTime.now
26
+ end
27
+
28
+ it "should visit_Float" do
29
+ @visitor.accept 2.14
30
+ end
31
+
32
+ it "should visit_Hash" do
33
+ @visitor.accept({:a => 1})
34
+ end
35
+
36
+ it "should visit_BigDecimal" do
37
+ @visitor.accept BigDecimal.new('2.14')
38
+ end
39
+
40
+ it "should visit_Date" do
41
+ @visitor.accept Date.today
42
+ end
43
+
44
+ it "should visit_Arel_Nodes_And" do
45
+ node = Nodes::And.new @attr.eq(10), @attr.eq(11)
46
+ @visitor.accept(node).should be_like %{
47
+ "users"."id" = 10 AND "users"."id" = 11
48
+ }
49
+ end
50
+
51
+ it "should visit_Arel_Nodes_Or" do
52
+ node = Nodes::Or.new @attr.eq(10), @attr.eq(11)
53
+ @visitor.accept(node).should be_like %{
54
+ "users"."id" = 10 OR "users"."id" = 11
55
+ }
56
+ end
57
+
58
+ it "should visit visit_Arel_Attributes_Time" do
59
+ attr = Attributes::Time.new(@attr.relation, @attr.name, @attr.column)
60
+ @visitor.accept attr
61
+ end
62
+
63
+ it "should visit_TrueClass" do
64
+ test = @attr.eq(true)
65
+ test.left.column.type = :boolean
66
+ @visitor.accept(test).should be_like %{ "users"."id" = 't' }
67
+ end
68
+
69
+ describe "Nodes::Ordering" do
70
+ it "should know how to visit" do
71
+ node = @attr.desc
72
+ @visitor.accept(node).should be_like %{
73
+ "users"."id" DESC
74
+ }
75
+ end
76
+ end
77
+
78
+ describe "Nodes::In" do
79
+ it "should know how to visit" do
80
+ node = @attr.in [1, 2, 3]
81
+ @visitor.accept(node).should be_like %{
82
+ "users"."id" IN (1, 2, 3)
83
+ }
84
+ end
85
+
86
+ it "should turn empty right to NULL" do
87
+ node = @attr.in []
88
+ @visitor.accept(node).should be_like %{
89
+ "users"."id" IN (NULL)
90
+ }
91
+ end
92
+
93
+ it 'can handle two dot ranges' do
94
+ node = @attr.in 1..3
95
+ @visitor.accept(node).should be_like %{
96
+ "users"."id" BETWEEN 1 AND 3
97
+ }
98
+ end
99
+
100
+ it 'can handle three dot ranges' do
101
+ node = @attr.in 1...3
102
+ @visitor.accept(node).should be_like %{
103
+ "users"."id" >= 1 AND "users"."id" < 3
104
+ }
105
+ end
106
+
107
+ it 'uses the same column for escaping values' do
108
+ visitor = Class.new(ToSql) do
109
+ attr_accessor :expected
110
+
111
+ def quote value, column = nil
112
+ raise unless column == expected
113
+ super
114
+ end
115
+ end
116
+ in_node = Nodes::In.new @attr, %w{ a b c }
117
+ visitor = visitor.new(Table.engine)
118
+ visitor.expected = @attr.column
119
+ lambda { visitor.accept(in_node) }.should_not raise_error
120
+ end
121
+ end
122
+
123
+ describe 'Equality' do
124
+ it "should escape strings" do
125
+ test = @attr.eq 'Aaron Patterson'
126
+ test.left.column.type = :string
127
+ @visitor.accept(test).should be_like %{
128
+ "users"."id" = 'Aaron Patterson'
129
+ }
130
+ end
131
+ end
132
+ end
133
+ end
134
+ end
metadata CHANGED
@@ -1,217 +1,203 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arel
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
- - 1
7
+ - 2
8
8
  - 0
9
- - 1
10
- version: 1.0.1
9
+ - 0
10
+ version: 2.0.0
11
11
  platform: ruby
12
12
  authors:
13
- - Bryan Helmkamp
14
- - Nick Kallen
13
+ - Aaron Patterson
14
+ - Bryan Halmkamp
15
15
  - Emilio Tagua
16
+ - Nick Kallen
16
17
  autorequire:
17
18
  bindir: bin
18
19
  cert_chain: []
19
20
 
20
- date: 2010-06-08 00:00:00 +09:00
21
+ date: 2010-10-13 00:00:00 -07:00
21
22
  default_executable:
22
23
  dependencies:
23
24
  - !ruby/object:Gem::Dependency
24
- name: activesupport
25
+ name: rubyforge
25
26
  prerelease: false
26
27
  requirement: &id001 !ruby/object:Gem::Requirement
27
28
  none: false
28
29
  requirements:
29
- - - ~>
30
+ - - ">="
30
31
  - !ruby/object:Gem::Version
31
32
  hash: 7
32
33
  segments:
33
- - 3
34
+ - 2
34
35
  - 0
35
- - 0
36
- version: 3.0.0
37
- type: :runtime
36
+ - 4
37
+ version: 2.0.4
38
+ type: :development
38
39
  version_requirements: *id001
39
- description: |-
40
- Arel is a Relational Algebra for Ruby. It 1) simplifies the generation complex
41
- of SQL queries and it 2) adapts to various RDBMS systems. It is intended to be
42
- a framework framework; that is, you can build your own ORM with it, focusing on
43
- innovative object and collection modeling as opposed to database compatibility
44
- and query generation.
45
- email: bryan@brynary.com
40
+ - !ruby/object:Gem::Dependency
41
+ name: rspec
42
+ prerelease: false
43
+ requirement: &id002 !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ hash: 27
49
+ segments:
50
+ - 1
51
+ - 3
52
+ - 0
53
+ version: 1.3.0
54
+ type: :development
55
+ version_requirements: *id002
56
+ - !ruby/object:Gem::Dependency
57
+ name: hoe
58
+ prerelease: false
59
+ requirement: &id003 !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ hash: 19
65
+ segments:
66
+ - 2
67
+ - 6
68
+ - 2
69
+ version: 2.6.2
70
+ type: :development
71
+ version_requirements: *id003
72
+ description: Arel is a Relational Algebra for Ruby. It 1) simplifies the generation complex of SQL queries and it 2) adapts to various RDBMS systems. It is intended to be a framework framework; that is, you can build your own ORM with it, focusing on innovative object and collection modeling as opposed to database compatibility and query generation.
73
+ email:
74
+ - aaron@tenderlovemaking.com
75
+ - bryan@brynary.com
76
+ - miloops@gmail.com
77
+ - nick@example.org
46
78
  executables: []
47
79
 
48
80
  extensions: []
49
81
 
50
82
  extra_rdoc_files:
51
83
  - History.txt
84
+ - MIT-LICENSE.txt
85
+ - Manifest.txt
52
86
  - README.markdown
53
87
  files:
54
- - lib/arel/algebra/attributes/attribute.rb
55
- - lib/arel/algebra/attributes/boolean.rb
56
- - lib/arel/algebra/attributes/decimal.rb
57
- - lib/arel/algebra/attributes/float.rb
58
- - lib/arel/algebra/attributes/integer.rb
59
- - lib/arel/algebra/attributes/string.rb
60
- - lib/arel/algebra/attributes/time.rb
61
- - lib/arel/algebra/attributes.rb
62
- - lib/arel/algebra/core_extensions/hash.rb
63
- - lib/arel/algebra/core_extensions/object.rb
64
- - lib/arel/algebra/core_extensions/symbol.rb
65
- - lib/arel/algebra/core_extensions.rb
66
- - lib/arel/algebra/expression.rb
67
- - lib/arel/algebra/header.rb
68
- - lib/arel/algebra/ordering.rb
69
- - lib/arel/algebra/predicates.rb
70
- - lib/arel/algebra/relations/operations/from.rb
71
- - lib/arel/algebra/relations/operations/group.rb
72
- - lib/arel/algebra/relations/operations/having.rb
73
- - lib/arel/algebra/relations/operations/join.rb
74
- - lib/arel/algebra/relations/operations/lock.rb
75
- - lib/arel/algebra/relations/operations/order.rb
76
- - lib/arel/algebra/relations/operations/project.rb
77
- - lib/arel/algebra/relations/operations/skip.rb
78
- - lib/arel/algebra/relations/operations/take.rb
79
- - lib/arel/algebra/relations/operations/where.rb
80
- - lib/arel/algebra/relations/relation.rb
81
- - lib/arel/algebra/relations/row.rb
82
- - lib/arel/algebra/relations/utilities/compound.rb
83
- - lib/arel/algebra/relations/utilities/externalization.rb
84
- - lib/arel/algebra/relations/utilities/nil.rb
85
- - lib/arel/algebra/relations/writes.rb
86
- - lib/arel/algebra/relations.rb
87
- - lib/arel/algebra/value.rb
88
- - lib/arel/algebra.rb
89
- - lib/arel/engines/memory/engine.rb
90
- - lib/arel/engines/memory/relations/array.rb
91
- - lib/arel/engines/memory/relations/operations.rb
92
- - lib/arel/engines/memory/relations.rb
93
- - lib/arel/engines/memory.rb
94
- - lib/arel/engines/sql/attributes.rb
95
- - lib/arel/engines/sql/christener.rb
96
- - lib/arel/engines/sql/compilers/ibm_db_compiler.rb
97
- - lib/arel/engines/sql/compilers/mysql_compiler.rb
98
- - lib/arel/engines/sql/compilers/oracle_compiler.rb
99
- - lib/arel/engines/sql/compilers/postgresql_compiler.rb
100
- - lib/arel/engines/sql/compilers/sqlite_compiler.rb
101
- - lib/arel/engines/sql/core_extensions/array.rb
102
- - lib/arel/engines/sql/core_extensions/nil_class.rb
103
- - lib/arel/engines/sql/core_extensions/object.rb
104
- - lib/arel/engines/sql/core_extensions/range.rb
105
- - lib/arel/engines/sql/core_extensions.rb
106
- - lib/arel/engines/sql/engine.rb
107
- - lib/arel/engines/sql/formatters.rb
108
- - lib/arel/engines/sql/relations/compiler.rb
109
- - lib/arel/engines/sql/relations/table.rb
110
- - lib/arel/engines/sql/relations/utilities/nil.rb
111
- - lib/arel/engines/sql/relations.rb
112
- - lib/arel/engines/sql.rb
113
- - lib/arel/engines.rb
114
- - lib/arel/recursion/base_case.rb
115
- - lib/arel/session.rb
116
- - lib/arel/sql_literal.rb
117
- - lib/arel/version.rb
118
- - lib/arel.rb
119
88
  - History.txt
89
+ - MIT-LICENSE.txt
90
+ - Manifest.txt
120
91
  - README.markdown
121
- - spec/algebra/unit/predicates/binary_spec.rb
122
- - spec/algebra/unit/predicates/equality_spec.rb
123
- - spec/algebra/unit/predicates/in_spec.rb
124
- - spec/algebra/unit/predicates/inequality_spec.rb
125
- - spec/algebra/unit/predicates/predicate_spec.rb
126
- - spec/algebra/unit/primitives/attribute_spec.rb
127
- - spec/algebra/unit/primitives/expression_spec.rb
128
- - spec/algebra/unit/primitives/value_spec.rb
129
- - spec/algebra/unit/relations/alias_spec.rb
130
- - spec/algebra/unit/relations/delete_spec.rb
131
- - spec/algebra/unit/relations/group_spec.rb
132
- - spec/algebra/unit/relations/insert_spec.rb
133
- - spec/algebra/unit/relations/join_spec.rb
134
- - spec/algebra/unit/relations/order_spec.rb
135
- - spec/algebra/unit/relations/project_spec.rb
136
- - spec/algebra/unit/relations/relation_spec.rb
137
- - spec/algebra/unit/relations/skip_spec.rb
138
- - spec/algebra/unit/relations/table_spec.rb
139
- - spec/algebra/unit/relations/take_spec.rb
140
- - spec/algebra/unit/relations/update_spec.rb
141
- - spec/algebra/unit/relations/where_spec.rb
142
- - spec/algebra/unit/session/session_spec.rb
143
- - spec/attributes/boolean_spec.rb
144
- - spec/attributes/float_spec.rb
145
- - spec/attributes/header_spec.rb
146
- - spec/attributes/integer_spec.rb
147
- - spec/attributes/string_spec.rb
148
- - spec/attributes/time_spec.rb
92
+ - Rakefile
93
+ - arel.gemspec
94
+ - lib/arel.rb
95
+ - lib/arel/attributes.rb
96
+ - lib/arel/attributes/attribute.rb
97
+ - lib/arel/compatibility/wheres.rb
98
+ - lib/arel/crud.rb
99
+ - lib/arel/delete_manager.rb
100
+ - lib/arel/deprecated.rb
101
+ - lib/arel/expression.rb
102
+ - lib/arel/expressions.rb
103
+ - lib/arel/insert_manager.rb
104
+ - lib/arel/nodes.rb
105
+ - lib/arel/nodes/and.rb
106
+ - lib/arel/nodes/assignment.rb
107
+ - lib/arel/nodes/avg.rb
108
+ - lib/arel/nodes/between.rb
109
+ - lib/arel/nodes/binary.rb
110
+ - lib/arel/nodes/count.rb
111
+ - lib/arel/nodes/delete_statement.rb
112
+ - lib/arel/nodes/does_not_match.rb
113
+ - lib/arel/nodes/equality.rb
114
+ - lib/arel/nodes/exists.rb
115
+ - lib/arel/nodes/function.rb
116
+ - lib/arel/nodes/greater_than.rb
117
+ - lib/arel/nodes/greater_than_or_equal.rb
118
+ - lib/arel/nodes/group.rb
119
+ - lib/arel/nodes/grouping.rb
120
+ - lib/arel/nodes/having.rb
121
+ - lib/arel/nodes/in.rb
122
+ - lib/arel/nodes/inner_join.rb
123
+ - lib/arel/nodes/insert_statement.rb
124
+ - lib/arel/nodes/join.rb
125
+ - lib/arel/nodes/less_than.rb
126
+ - lib/arel/nodes/less_than_or_equal.rb
127
+ - lib/arel/nodes/lock.rb
128
+ - lib/arel/nodes/matches.rb
129
+ - lib/arel/nodes/max.rb
130
+ - lib/arel/nodes/min.rb
131
+ - lib/arel/nodes/node.rb
132
+ - lib/arel/nodes/not_equal.rb
133
+ - lib/arel/nodes/not_in.rb
134
+ - lib/arel/nodes/offset.rb
135
+ - lib/arel/nodes/on.rb
136
+ - lib/arel/nodes/or.rb
137
+ - lib/arel/nodes/ordering.rb
138
+ - lib/arel/nodes/outer_join.rb
139
+ - lib/arel/nodes/select_core.rb
140
+ - lib/arel/nodes/select_statement.rb
141
+ - lib/arel/nodes/sql_literal.rb
142
+ - lib/arel/nodes/string_join.rb
143
+ - lib/arel/nodes/sum.rb
144
+ - lib/arel/nodes/table_alias.rb
145
+ - lib/arel/nodes/unqualified_column.rb
146
+ - lib/arel/nodes/update_statement.rb
147
+ - lib/arel/nodes/values.rb
148
+ - lib/arel/relation.rb
149
+ - lib/arel/select_manager.rb
150
+ - lib/arel/sql/engine.rb
151
+ - lib/arel/sql_literal.rb
152
+ - lib/arel/table.rb
153
+ - lib/arel/tree_manager.rb
154
+ - lib/arel/update_manager.rb
155
+ - lib/arel/visitors.rb
156
+ - lib/arel/visitors/dot.rb
157
+ - lib/arel/visitors/join_sql.rb
158
+ - lib/arel/visitors/mysql.rb
159
+ - lib/arel/visitors/oracle.rb
160
+ - lib/arel/visitors/order_clauses.rb
161
+ - lib/arel/visitors/postgresql.rb
162
+ - lib/arel/visitors/to_sql.rb
163
+ - lib/arel/visitors/where_sql.rb
164
+ - spec/activerecord_compat_spec.rb
165
+ - spec/attributes/attribute_spec.rb
149
166
  - spec/attributes_spec.rb
150
- - spec/engines/memory/integration/joins/cross_engine_spec.rb
151
- - spec/engines/memory/unit/relations/array_spec.rb
152
- - spec/engines/memory/unit/relations/insert_spec.rb
153
- - spec/engines/memory/unit/relations/join_spec.rb
154
- - spec/engines/memory/unit/relations/order_spec.rb
155
- - spec/engines/memory/unit/relations/project_spec.rb
156
- - spec/engines/memory/unit/relations/skip_spec.rb
157
- - spec/engines/memory/unit/relations/take_spec.rb
158
- - spec/engines/memory/unit/relations/where_spec.rb
159
- - spec/engines/sql/integration/joins/with_adjacency_spec.rb
160
- - spec/engines/sql/integration/joins/with_aggregations_spec.rb
161
- - spec/engines/sql/integration/joins/with_compounds_spec.rb
162
- - spec/engines/sql/unit/engine_spec.rb
163
- - spec/engines/sql/unit/predicates/binary_spec.rb
164
- - spec/engines/sql/unit/predicates/equality_spec.rb
165
- - spec/engines/sql/unit/predicates/in_spec.rb
166
- - spec/engines/sql/unit/predicates/noteq_spec.rb
167
- - spec/engines/sql/unit/predicates/predicates_spec.rb
168
- - spec/engines/sql/unit/primitives/attribute_spec.rb
169
- - spec/engines/sql/unit/primitives/expression_spec.rb
170
- - spec/engines/sql/unit/primitives/literal_spec.rb
171
- - spec/engines/sql/unit/primitives/value_spec.rb
172
- - spec/engines/sql/unit/relations/alias_spec.rb
173
- - spec/engines/sql/unit/relations/delete_spec.rb
174
- - spec/engines/sql/unit/relations/from_spec.rb
175
- - spec/engines/sql/unit/relations/group_spec.rb
176
- - spec/engines/sql/unit/relations/having_spec.rb
177
- - spec/engines/sql/unit/relations/insert_spec.rb
178
- - spec/engines/sql/unit/relations/join_spec.rb
179
- - spec/engines/sql/unit/relations/lock_spec.rb
180
- - spec/engines/sql/unit/relations/order_spec.rb
181
- - spec/engines/sql/unit/relations/project_spec.rb
182
- - spec/engines/sql/unit/relations/skip_spec.rb
183
- - spec/engines/sql/unit/relations/table_spec.rb
184
- - spec/engines/sql/unit/relations/take_spec.rb
185
- - spec/engines/sql/unit/relations/update_spec.rb
186
- - spec/engines/sql/unit/relations/where_spec.rb
187
- - spec/relations/join_spec.rb
188
- - spec/relations/relation_spec.rb
189
- - spec/shared/relation_spec.rb
167
+ - spec/crud_spec.rb
168
+ - spec/delete_manager_spec.rb
169
+ - spec/insert_manager_spec.rb
170
+ - spec/nodes/count_spec.rb
171
+ - spec/nodes/delete_statement_spec.rb
172
+ - spec/nodes/equality_spec.rb
173
+ - spec/nodes/insert_statement_spec.rb
174
+ - spec/nodes/or_spec.rb
175
+ - spec/nodes/select_core_spec.rb
176
+ - spec/nodes/select_statement_spec.rb
177
+ - spec/nodes/sql_literal_spec.rb
178
+ - spec/nodes/sum_spec.rb
179
+ - spec/nodes/update_statement_spec.rb
180
+ - spec/select_manager_spec.rb
181
+ - spec/spec.opts
190
182
  - spec/spec_helper.rb
191
- - spec/sql/christener_spec.rb
192
183
  - spec/support/check.rb
193
- - spec/support/connections/mysql_connection.rb
194
- - spec/support/connections/oracle_connection.rb
195
- - spec/support/connections/postgresql_connection.rb
196
- - spec/support/connections/sqlite3_connection.rb
197
- - spec/support/guards.rb
198
- - spec/support/matchers/be_like.rb
199
- - spec/support/matchers/disambiguate_attributes.rb
200
- - spec/support/matchers/hash_the_same_as.rb
201
- - spec/support/matchers/have_rows.rb
184
+ - spec/support/fake_record.rb
202
185
  - spec/support/matchers.rb
203
- - spec/support/model.rb
204
- - spec/support/schemas/mysql_schema.rb
205
- - spec/support/schemas/oracle_schema.rb
206
- - spec/support/schemas/postgresql_schema.rb
207
- - spec/support/schemas/sqlite3_schema.rb
186
+ - spec/support/matchers/be_like.rb
187
+ - spec/support/shared/tree_manager_shared.rb
188
+ - spec/table_spec.rb
189
+ - spec/update_manager_spec.rb
190
+ - spec/visitors/join_sql_spec.rb
191
+ - spec/visitors/oracle_spec.rb
192
+ - spec/visitors/to_sql_spec.rb
208
193
  has_rdoc: true
209
- homepage: http://github.com/brynary/arel
194
+ homepage: http://github.com/rails/arel
210
195
  licenses: []
211
196
 
212
197
  post_install_message:
213
- rdoc_options: []
214
-
198
+ rdoc_options:
199
+ - --main
200
+ - README.markdown
215
201
  require_paths:
216
202
  - lib
217
203
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -238,92 +224,6 @@ rubyforge_project: arel
238
224
  rubygems_version: 1.3.7
239
225
  signing_key:
240
226
  specification_version: 3
241
- summary: Arel is a relational algebra engine for Ruby
242
- test_files:
243
- - spec/algebra/unit/predicates/binary_spec.rb
244
- - spec/algebra/unit/predicates/equality_spec.rb
245
- - spec/algebra/unit/predicates/in_spec.rb
246
- - spec/algebra/unit/predicates/inequality_spec.rb
247
- - spec/algebra/unit/predicates/predicate_spec.rb
248
- - spec/algebra/unit/primitives/attribute_spec.rb
249
- - spec/algebra/unit/primitives/expression_spec.rb
250
- - spec/algebra/unit/primitives/value_spec.rb
251
- - spec/algebra/unit/relations/alias_spec.rb
252
- - spec/algebra/unit/relations/delete_spec.rb
253
- - spec/algebra/unit/relations/group_spec.rb
254
- - spec/algebra/unit/relations/insert_spec.rb
255
- - spec/algebra/unit/relations/join_spec.rb
256
- - spec/algebra/unit/relations/order_spec.rb
257
- - spec/algebra/unit/relations/project_spec.rb
258
- - spec/algebra/unit/relations/relation_spec.rb
259
- - spec/algebra/unit/relations/skip_spec.rb
260
- - spec/algebra/unit/relations/table_spec.rb
261
- - spec/algebra/unit/relations/take_spec.rb
262
- - spec/algebra/unit/relations/update_spec.rb
263
- - spec/algebra/unit/relations/where_spec.rb
264
- - spec/algebra/unit/session/session_spec.rb
265
- - spec/attributes/boolean_spec.rb
266
- - spec/attributes/float_spec.rb
267
- - spec/attributes/header_spec.rb
268
- - spec/attributes/integer_spec.rb
269
- - spec/attributes/string_spec.rb
270
- - spec/attributes/time_spec.rb
271
- - spec/attributes_spec.rb
272
- - spec/engines/memory/integration/joins/cross_engine_spec.rb
273
- - spec/engines/memory/unit/relations/array_spec.rb
274
- - spec/engines/memory/unit/relations/insert_spec.rb
275
- - spec/engines/memory/unit/relations/join_spec.rb
276
- - spec/engines/memory/unit/relations/order_spec.rb
277
- - spec/engines/memory/unit/relations/project_spec.rb
278
- - spec/engines/memory/unit/relations/skip_spec.rb
279
- - spec/engines/memory/unit/relations/take_spec.rb
280
- - spec/engines/memory/unit/relations/where_spec.rb
281
- - spec/engines/sql/integration/joins/with_adjacency_spec.rb
282
- - spec/engines/sql/integration/joins/with_aggregations_spec.rb
283
- - spec/engines/sql/integration/joins/with_compounds_spec.rb
284
- - spec/engines/sql/unit/engine_spec.rb
285
- - spec/engines/sql/unit/predicates/binary_spec.rb
286
- - spec/engines/sql/unit/predicates/equality_spec.rb
287
- - spec/engines/sql/unit/predicates/in_spec.rb
288
- - spec/engines/sql/unit/predicates/noteq_spec.rb
289
- - spec/engines/sql/unit/predicates/predicates_spec.rb
290
- - spec/engines/sql/unit/primitives/attribute_spec.rb
291
- - spec/engines/sql/unit/primitives/expression_spec.rb
292
- - spec/engines/sql/unit/primitives/literal_spec.rb
293
- - spec/engines/sql/unit/primitives/value_spec.rb
294
- - spec/engines/sql/unit/relations/alias_spec.rb
295
- - spec/engines/sql/unit/relations/delete_spec.rb
296
- - spec/engines/sql/unit/relations/from_spec.rb
297
- - spec/engines/sql/unit/relations/group_spec.rb
298
- - spec/engines/sql/unit/relations/having_spec.rb
299
- - spec/engines/sql/unit/relations/insert_spec.rb
300
- - spec/engines/sql/unit/relations/join_spec.rb
301
- - spec/engines/sql/unit/relations/lock_spec.rb
302
- - spec/engines/sql/unit/relations/order_spec.rb
303
- - spec/engines/sql/unit/relations/project_spec.rb
304
- - spec/engines/sql/unit/relations/skip_spec.rb
305
- - spec/engines/sql/unit/relations/table_spec.rb
306
- - spec/engines/sql/unit/relations/take_spec.rb
307
- - spec/engines/sql/unit/relations/update_spec.rb
308
- - spec/engines/sql/unit/relations/where_spec.rb
309
- - spec/relations/join_spec.rb
310
- - spec/relations/relation_spec.rb
311
- - spec/shared/relation_spec.rb
312
- - spec/spec_helper.rb
313
- - spec/sql/christener_spec.rb
314
- - spec/support/check.rb
315
- - spec/support/connections/mysql_connection.rb
316
- - spec/support/connections/oracle_connection.rb
317
- - spec/support/connections/postgresql_connection.rb
318
- - spec/support/connections/sqlite3_connection.rb
319
- - spec/support/guards.rb
320
- - spec/support/matchers/be_like.rb
321
- - spec/support/matchers/disambiguate_attributes.rb
322
- - spec/support/matchers/hash_the_same_as.rb
323
- - spec/support/matchers/have_rows.rb
324
- - spec/support/matchers.rb
325
- - spec/support/model.rb
326
- - spec/support/schemas/mysql_schema.rb
327
- - spec/support/schemas/oracle_schema.rb
328
- - spec/support/schemas/postgresql_schema.rb
329
- - spec/support/schemas/sqlite3_schema.rb
227
+ summary: Arel is a Relational Algebra for Ruby
228
+ test_files: []
229
+