arel 1.0.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
+