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,33 @@
1
+ module Arel
2
+ module Compatibility # :nodoc:
3
+ class Wheres # :nodoc:
4
+ include Enumerable
5
+
6
+ module Value # :nodoc:
7
+ attr_accessor :visitor
8
+ def value
9
+ visitor.accept self
10
+ end
11
+
12
+ def name
13
+ super.to_sym
14
+ end
15
+ end
16
+
17
+ def initialize engine, collection
18
+ @engine = engine
19
+ @collection = collection
20
+ end
21
+
22
+ def each
23
+ to_sql = Visitors::ToSql.new @engine
24
+
25
+ @collection.each { |c|
26
+ c.extend(Value)
27
+ c.visitor = to_sql
28
+ yield c
29
+ }
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,37 @@
1
+ module Arel
2
+ ###
3
+ # FIXME hopefully we can remove this
4
+ module Crud
5
+ # FIXME: this method should go away
6
+ def update values
7
+ um = UpdateManager.new @engine
8
+
9
+ if Nodes::SqlLiteral === values
10
+ relation = @ctx.froms
11
+ else
12
+ relation = values.first.first.relation
13
+ end
14
+ um.table relation
15
+ um.set values
16
+ um.take @head.limit
17
+ um.order(*@head.orders)
18
+ um.wheres = @ctx.wheres
19
+
20
+ @engine.connection.update um.to_sql, 'AREL'
21
+ end
22
+
23
+ # FIXME: this method should go away
24
+ def insert values
25
+ im = InsertManager.new @engine
26
+ im.insert values
27
+ @engine.connection.insert im.to_sql
28
+ end
29
+
30
+ def delete
31
+ dm = DeleteManager.new @engine
32
+ dm.wheres = @ctx.wheres
33
+ dm.from @ctx.froms
34
+ @engine.connection.delete dm.to_sql, 'AREL'
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,22 @@
1
+ module Arel
2
+ class DeleteManager < Arel::TreeManager
3
+ def initialize engine
4
+ super
5
+ @head = Nodes::DeleteStatement.new
6
+ end
7
+
8
+ def from relation
9
+ @head.relation = relation
10
+ self
11
+ end
12
+
13
+ def where expression
14
+ @head.wheres << expression
15
+ self
16
+ end
17
+
18
+ def wheres= list
19
+ @head.wheres = list
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,4 @@
1
+ module Arel
2
+ InnerJoin = Nodes::InnerJoin
3
+ OuterJoin = Nodes::OuterJoin
4
+ end
@@ -0,0 +1,4 @@
1
+ module Arel
2
+ module Expression
3
+ end
4
+ end
@@ -0,0 +1,23 @@
1
+ module Arel
2
+ module Expressions
3
+ def count distinct = false
4
+ Nodes::Count.new [self], distinct
5
+ end
6
+
7
+ def sum
8
+ Nodes::Sum.new [self], Nodes::SqlLiteral.new('sum_id')
9
+ end
10
+
11
+ def maximum
12
+ Nodes::Max.new [self], Nodes::SqlLiteral.new('max_id')
13
+ end
14
+
15
+ def minimum
16
+ Nodes::Min.new [self], Nodes::SqlLiteral.new('min_id')
17
+ end
18
+
19
+ def average
20
+ Nodes::Avg.new [self], Nodes::SqlLiteral.new('avg_id')
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,34 @@
1
+ module Arel
2
+ class InsertManager < Arel::TreeManager
3
+ def initialize engine
4
+ super
5
+ @head = Nodes::InsertStatement.new
6
+ end
7
+
8
+ def into table
9
+ @head.relation = table
10
+ self
11
+ end
12
+
13
+ def columns; @head.columns end
14
+ def values= val; @head.values = val; end
15
+
16
+ def insert fields
17
+ return if fields.empty?
18
+
19
+ if String === fields
20
+ @head.values = SqlLiteral.new(fields)
21
+ else
22
+ @head.relation ||= fields.first.first.relation
23
+
24
+ values = []
25
+
26
+ fields.each do |column, value|
27
+ @head.columns << column
28
+ values << value
29
+ end
30
+ @head.values = Nodes::Values.new values, @head.columns
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,44 @@
1
+ require 'arel/nodes/node'
2
+ require 'arel/nodes/binary'
3
+ require 'arel/nodes/equality'
4
+ require 'arel/nodes/between'
5
+ require 'arel/nodes/not_equal'
6
+ require 'arel/nodes/assignment'
7
+ require 'arel/nodes/or'
8
+ require 'arel/nodes/and'
9
+ require 'arel/nodes/greater_than'
10
+ require 'arel/nodes/greater_than_or_equal'
11
+ require 'arel/nodes/less_than'
12
+ require 'arel/nodes/less_than_or_equal'
13
+ require 'arel/nodes/matches'
14
+ require 'arel/nodes/does_not_match'
15
+
16
+ require 'arel/nodes/in'
17
+ require 'arel/nodes/not_in'
18
+ require 'arel/nodes/ordering'
19
+ require 'arel/nodes/lock'
20
+ require 'arel/nodes/function'
21
+ require 'arel/nodes/count'
22
+ require 'arel/nodes/values'
23
+ require 'arel/nodes/offset'
24
+ require 'arel/nodes/sum'
25
+ require 'arel/nodes/exists'
26
+ require 'arel/nodes/max'
27
+ require 'arel/nodes/min'
28
+ require 'arel/nodes/avg'
29
+ require 'arel/nodes/having'
30
+ require 'arel/nodes/sql_literal'
31
+ require 'arel/nodes/select_core'
32
+ require 'arel/nodes/select_statement'
33
+ require 'arel/nodes/insert_statement'
34
+ require 'arel/nodes/update_statement'
35
+ require 'arel/nodes/delete_statement'
36
+ require 'arel/nodes/unqualified_column'
37
+ require 'arel/nodes/table_alias'
38
+ require 'arel/nodes/join'
39
+ require 'arel/nodes/group'
40
+ require 'arel/nodes/grouping'
41
+ require 'arel/nodes/inner_join'
42
+ require 'arel/nodes/outer_join'
43
+ require 'arel/nodes/string_join'
44
+ require 'arel/nodes/on'
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module Nodes
3
+ class And < Arel::Nodes::Binary
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module Nodes
3
+ class Assignment < Arel::Nodes::Binary
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module Nodes
3
+ class Avg < Arel::Nodes::Function
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module Nodes
3
+ class Between < Arel::Nodes::Binary
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,12 @@
1
+ module Arel
2
+ module Nodes
3
+ class Binary < Arel::Nodes::Node
4
+ attr_accessor :left, :right
5
+
6
+ def initialize left, right
7
+ @left = left
8
+ @right = right
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ module Arel
2
+ module Nodes
3
+ class Count < Arel::Nodes::Function
4
+
5
+ attr_accessor :distinct
6
+
7
+ def initialize expr, distinct = false, aliaz = nil
8
+ super(expr, aliaz)
9
+ @distinct = distinct
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ module Arel
2
+ module Nodes
3
+ class DeleteStatement
4
+ attr_accessor :relation, :wheres
5
+
6
+ def initialize
7
+ @from = nil
8
+ @wheres = []
9
+ end
10
+
11
+ def initialize_copy other
12
+ super
13
+ @wheres = @wheres.clone
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module Nodes
3
+ class DoesNotMatch < Arel::Nodes::Binary
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ module Arel
2
+ module Nodes
3
+ class Equality < Arel::Nodes::Binary
4
+ def operator; :== end
5
+ alias :operand1 :left
6
+ alias :operand2 :right
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ module Arel
2
+ module Nodes
3
+ class Exists
4
+ attr_reader :select_stmt
5
+
6
+ def initialize select_stmt
7
+ @select_stmt = select_stmt
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ module Arel
2
+ module Nodes
3
+ class Function < Arel::Nodes::Node
4
+ include Arel::Expression
5
+ attr_accessor :expressions, :alias
6
+
7
+ def initialize expr, aliaz = nil
8
+ @expressions = expr
9
+ @alias = aliaz
10
+ end
11
+
12
+ def as aliaz
13
+ self.alias = SqlLiteral.new(aliaz)
14
+ self
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module Nodes
3
+ class GreaterThan < Arel::Nodes::Binary
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module Nodes
3
+ class GreaterThanOrEqual < Arel::Nodes::Binary
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,11 @@
1
+ module Arel
2
+ module Nodes
3
+ class Group
4
+ attr_accessor :expr
5
+
6
+ def initialize expr
7
+ @expr = expr
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Arel
2
+ module Nodes
3
+ class Grouping < Arel::Nodes::Node
4
+ attr_accessor :expr
5
+
6
+ def initialize expression
7
+ @expr = expression
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Arel
2
+ module Nodes
3
+ class Having
4
+ attr_accessor :expr
5
+
6
+ def initialize expr
7
+ @expr = expr
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module Nodes
3
+ class In < Equality
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Arel
2
+ module Nodes
3
+ class InnerJoin < Arel::Nodes::Join
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,19 @@
1
+ module Arel
2
+ module Nodes
3
+ class InsertStatement
4
+ attr_accessor :relation, :columns, :values
5
+
6
+ def initialize
7
+ @relation = nil
8
+ @columns = []
9
+ @values = nil
10
+ end
11
+
12
+ def initialize_copy other
13
+ super
14
+ @columns = @columns.clone
15
+ @values = @values.clone if @values
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ module Arel
2
+ module Nodes
3
+ class Join
4
+ attr_accessor :left, :right, :constraint
5
+
6
+ def initialize left, right, constraint
7
+ @left = left
8
+ @right = right
9
+ @constraint = constraint
10
+ end
11
+ end
12
+ end
13
+ end