arel 1.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. data/MIT-LICENSE.txt +20 -0
  2. data/Manifest.txt +105 -0
  3. data/README.markdown +12 -32
  4. data/Rakefile +17 -0
  5. data/arel.gemspec +39 -0
  6. data/lib/arel.rb +30 -9
  7. data/lib/arel/attributes.rb +20 -0
  8. data/lib/arel/attributes/attribute.rb +190 -0
  9. data/lib/arel/compatibility/wheres.rb +33 -0
  10. data/lib/arel/crud.rb +37 -0
  11. data/lib/arel/delete_manager.rb +22 -0
  12. data/lib/arel/deprecated.rb +4 -0
  13. data/lib/arel/expression.rb +4 -0
  14. data/lib/arel/expressions.rb +23 -0
  15. data/lib/arel/insert_manager.rb +34 -0
  16. data/lib/arel/nodes.rb +44 -0
  17. data/lib/arel/nodes/and.rb +6 -0
  18. data/lib/arel/nodes/assignment.rb +6 -0
  19. data/lib/arel/nodes/avg.rb +6 -0
  20. data/lib/arel/nodes/between.rb +6 -0
  21. data/lib/arel/nodes/binary.rb +12 -0
  22. data/lib/arel/nodes/count.rb +13 -0
  23. data/lib/arel/nodes/delete_statement.rb +17 -0
  24. data/lib/arel/nodes/does_not_match.rb +6 -0
  25. data/lib/arel/nodes/equality.rb +9 -0
  26. data/lib/arel/nodes/exists.rb +11 -0
  27. data/lib/arel/nodes/function.rb +18 -0
  28. data/lib/arel/nodes/greater_than.rb +6 -0
  29. data/lib/arel/nodes/greater_than_or_equal.rb +6 -0
  30. data/lib/arel/nodes/group.rb +11 -0
  31. data/lib/arel/nodes/grouping.rb +11 -0
  32. data/lib/arel/nodes/having.rb +11 -0
  33. data/lib/arel/nodes/in.rb +6 -0
  34. data/lib/arel/nodes/inner_join.rb +6 -0
  35. data/lib/arel/nodes/insert_statement.rb +19 -0
  36. data/lib/arel/nodes/join.rb +13 -0
  37. data/lib/arel/nodes/less_than.rb +6 -0
  38. data/lib/arel/nodes/less_than_or_equal.rb +6 -0
  39. data/lib/arel/nodes/lock.rb +6 -0
  40. data/lib/arel/nodes/matches.rb +6 -0
  41. data/lib/arel/nodes/max.rb +6 -0
  42. data/lib/arel/nodes/min.rb +6 -0
  43. data/lib/arel/nodes/node.rb +30 -0
  44. data/lib/arel/nodes/not_equal.rb +6 -0
  45. data/lib/arel/nodes/not_in.rb +6 -0
  46. data/lib/arel/nodes/offset.rb +11 -0
  47. data/lib/arel/nodes/on.rb +11 -0
  48. data/lib/arel/nodes/or.rb +6 -0
  49. data/lib/arel/nodes/ordering.rb +19 -0
  50. data/lib/arel/nodes/outer_join.rb +6 -0
  51. data/lib/arel/nodes/select_core.rb +25 -0
  52. data/lib/arel/nodes/select_statement.rb +22 -0
  53. data/lib/arel/nodes/sql_literal.rb +7 -0
  54. data/lib/arel/nodes/string_join.rb +11 -0
  55. data/lib/arel/nodes/sum.rb +6 -0
  56. data/lib/arel/nodes/table_alias.rb +21 -0
  57. data/lib/arel/nodes/unqualified_column.rb +19 -0
  58. data/lib/arel/nodes/update_statement.rb +21 -0
  59. data/lib/arel/nodes/values.rb +12 -0
  60. data/lib/arel/relation.rb +6 -0
  61. data/lib/arel/select_manager.rb +203 -0
  62. data/lib/arel/sql/engine.rb +10 -0
  63. data/lib/arel/sql_literal.rb +1 -10
  64. data/lib/arel/table.rb +126 -0
  65. data/lib/arel/tree_manager.rb +26 -0
  66. data/lib/arel/update_manager.rb +48 -0
  67. data/lib/arel/visitors.rb +30 -0
  68. data/lib/arel/visitors/dot.rb +233 -0
  69. data/lib/arel/visitors/join_sql.rb +38 -0
  70. data/lib/arel/visitors/mysql.rb +16 -0
  71. data/lib/arel/visitors/oracle.rb +69 -0
  72. data/lib/arel/visitors/order_clauses.rb +9 -0
  73. data/lib/arel/visitors/postgresql.rb +54 -0
  74. data/lib/arel/visitors/to_sql.rb +301 -0
  75. data/lib/arel/visitors/where_sql.rb +9 -0
  76. data/spec/activerecord_compat_spec.rb +18 -0
  77. data/spec/attributes/attribute_spec.rb +648 -0
  78. data/spec/attributes_spec.rb +33 -6
  79. data/spec/crud_spec.rb +69 -0
  80. data/spec/delete_manager_spec.rb +53 -0
  81. data/spec/insert_manager_spec.rb +141 -0
  82. data/spec/nodes/count_spec.rb +18 -0
  83. data/spec/nodes/delete_statement_spec.rb +15 -0
  84. data/spec/nodes/equality_spec.rb +72 -0
  85. data/spec/nodes/insert_statement_spec.rb +18 -0
  86. data/spec/nodes/or_spec.rb +20 -0
  87. data/spec/nodes/select_core_spec.rb +21 -0
  88. data/spec/nodes/select_statement_spec.rb +14 -0
  89. data/spec/nodes/sql_literal_spec.rb +26 -0
  90. data/spec/nodes/sum_spec.rb +12 -0
  91. data/spec/nodes/update_statement_spec.rb +18 -0
  92. data/spec/select_manager_spec.rb +581 -0
  93. data/spec/spec.opts +3 -0
  94. data/spec/spec_helper.rb +6 -21
  95. data/spec/support/fake_record.rb +89 -0
  96. data/spec/support/shared/tree_manager_shared.rb +9 -0
  97. data/spec/table_spec.rb +176 -0
  98. data/spec/update_manager_spec.rb +89 -0
  99. data/spec/visitors/join_sql_spec.rb +35 -0
  100. data/spec/visitors/oracle_spec.rb +111 -0
  101. data/spec/visitors/to_sql_spec.rb +134 -0
  102. metadata +160 -260
  103. data/lib/arel/algebra.rb +0 -10
  104. data/lib/arel/algebra/attributes.rb +0 -7
  105. data/lib/arel/algebra/attributes/attribute.rb +0 -304
  106. data/lib/arel/algebra/attributes/boolean.rb +0 -21
  107. data/lib/arel/algebra/attributes/decimal.rb +0 -9
  108. data/lib/arel/algebra/attributes/float.rb +0 -9
  109. data/lib/arel/algebra/attributes/integer.rb +0 -10
  110. data/lib/arel/algebra/attributes/string.rb +0 -10
  111. data/lib/arel/algebra/attributes/time.rb +0 -6
  112. data/lib/arel/algebra/core_extensions.rb +0 -3
  113. data/lib/arel/algebra/core_extensions/hash.rb +0 -7
  114. data/lib/arel/algebra/core_extensions/object.rb +0 -13
  115. data/lib/arel/algebra/core_extensions/symbol.rb +0 -9
  116. data/lib/arel/algebra/expression.rb +0 -56
  117. data/lib/arel/algebra/header.rb +0 -66
  118. data/lib/arel/algebra/ordering.rb +0 -31
  119. data/lib/arel/algebra/predicates.rb +0 -306
  120. data/lib/arel/algebra/relations.rb +0 -16
  121. data/lib/arel/algebra/relations/operations/from.rb +0 -14
  122. data/lib/arel/algebra/relations/operations/group.rb +0 -14
  123. data/lib/arel/algebra/relations/operations/having.rb +0 -14
  124. data/lib/arel/algebra/relations/operations/join.rb +0 -103
  125. data/lib/arel/algebra/relations/operations/lock.rb +0 -10
  126. data/lib/arel/algebra/relations/operations/order.rb +0 -23
  127. data/lib/arel/algebra/relations/operations/project.rb +0 -20
  128. data/lib/arel/algebra/relations/operations/skip.rb +0 -14
  129. data/lib/arel/algebra/relations/operations/take.rb +0 -18
  130. data/lib/arel/algebra/relations/operations/where.rb +0 -24
  131. data/lib/arel/algebra/relations/relation.rb +0 -205
  132. data/lib/arel/algebra/relations/row.rb +0 -29
  133. data/lib/arel/algebra/relations/utilities/compound.rb +0 -55
  134. data/lib/arel/algebra/relations/utilities/externalization.rb +0 -26
  135. data/lib/arel/algebra/relations/utilities/nil.rb +0 -7
  136. data/lib/arel/algebra/relations/writes.rb +0 -47
  137. data/lib/arel/algebra/value.rb +0 -53
  138. data/lib/arel/engines.rb +0 -2
  139. data/lib/arel/engines/memory.rb +0 -2
  140. data/lib/arel/engines/memory/engine.rb +0 -10
  141. data/lib/arel/engines/memory/relations.rb +0 -2
  142. data/lib/arel/engines/memory/relations/array.rb +0 -37
  143. data/lib/arel/engines/memory/relations/operations.rb +0 -9
  144. data/lib/arel/engines/sql.rb +0 -6
  145. data/lib/arel/engines/sql/attributes.rb +0 -45
  146. data/lib/arel/engines/sql/christener.rb +0 -20
  147. data/lib/arel/engines/sql/compilers/ibm_db_compiler.rb +0 -48
  148. data/lib/arel/engines/sql/compilers/mysql_compiler.rb +0 -11
  149. data/lib/arel/engines/sql/compilers/oracle_compiler.rb +0 -106
  150. data/lib/arel/engines/sql/compilers/postgresql_compiler.rb +0 -50
  151. data/lib/arel/engines/sql/compilers/sqlite_compiler.rb +0 -9
  152. data/lib/arel/engines/sql/core_extensions.rb +0 -4
  153. data/lib/arel/engines/sql/core_extensions/array.rb +0 -24
  154. data/lib/arel/engines/sql/core_extensions/nil_class.rb +0 -15
  155. data/lib/arel/engines/sql/core_extensions/object.rb +0 -19
  156. data/lib/arel/engines/sql/core_extensions/range.rb +0 -19
  157. data/lib/arel/engines/sql/engine.rb +0 -47
  158. data/lib/arel/engines/sql/formatters.rb +0 -138
  159. data/lib/arel/engines/sql/relations.rb +0 -3
  160. data/lib/arel/engines/sql/relations/compiler.rb +0 -153
  161. data/lib/arel/engines/sql/relations/table.rb +0 -100
  162. data/lib/arel/engines/sql/relations/utilities/nil.rb +0 -6
  163. data/lib/arel/recursion/base_case.rb +0 -13
  164. data/lib/arel/session.rb +0 -35
  165. data/lib/arel/version.rb +0 -3
  166. data/spec/algebra/unit/predicates/binary_spec.rb +0 -35
  167. data/spec/algebra/unit/predicates/equality_spec.rb +0 -29
  168. data/spec/algebra/unit/predicates/in_spec.rb +0 -12
  169. data/spec/algebra/unit/predicates/inequality_spec.rb +0 -32
  170. data/spec/algebra/unit/predicates/predicate_spec.rb +0 -22
  171. data/spec/algebra/unit/primitives/attribute_spec.rb +0 -175
  172. data/spec/algebra/unit/primitives/expression_spec.rb +0 -39
  173. data/spec/algebra/unit/primitives/value_spec.rb +0 -15
  174. data/spec/algebra/unit/relations/alias_spec.rb +0 -16
  175. data/spec/algebra/unit/relations/delete_spec.rb +0 -9
  176. data/spec/algebra/unit/relations/group_spec.rb +0 -10
  177. data/spec/algebra/unit/relations/insert_spec.rb +0 -9
  178. data/spec/algebra/unit/relations/join_spec.rb +0 -18
  179. data/spec/algebra/unit/relations/order_spec.rb +0 -21
  180. data/spec/algebra/unit/relations/project_spec.rb +0 -34
  181. data/spec/algebra/unit/relations/relation_spec.rb +0 -241
  182. data/spec/algebra/unit/relations/skip_spec.rb +0 -10
  183. data/spec/algebra/unit/relations/table_spec.rb +0 -38
  184. data/spec/algebra/unit/relations/take_spec.rb +0 -10
  185. data/spec/algebra/unit/relations/update_spec.rb +0 -9
  186. data/spec/algebra/unit/relations/where_spec.rb +0 -19
  187. data/spec/algebra/unit/session/session_spec.rb +0 -84
  188. data/spec/attributes/boolean_spec.rb +0 -57
  189. data/spec/attributes/float_spec.rb +0 -119
  190. data/spec/attributes/header_spec.rb +0 -42
  191. data/spec/attributes/integer_spec.rb +0 -119
  192. data/spec/attributes/string_spec.rb +0 -43
  193. data/spec/attributes/time_spec.rb +0 -24
  194. data/spec/engines/memory/integration/joins/cross_engine_spec.rb +0 -61
  195. data/spec/engines/memory/unit/relations/array_spec.rb +0 -33
  196. data/spec/engines/memory/unit/relations/insert_spec.rb +0 -28
  197. data/spec/engines/memory/unit/relations/join_spec.rb +0 -32
  198. data/spec/engines/memory/unit/relations/order_spec.rb +0 -28
  199. data/spec/engines/memory/unit/relations/project_spec.rb +0 -27
  200. data/spec/engines/memory/unit/relations/skip_spec.rb +0 -31
  201. data/spec/engines/memory/unit/relations/take_spec.rb +0 -28
  202. data/spec/engines/memory/unit/relations/where_spec.rb +0 -43
  203. data/spec/engines/sql/integration/joins/with_adjacency_spec.rb +0 -258
  204. data/spec/engines/sql/integration/joins/with_aggregations_spec.rb +0 -221
  205. data/spec/engines/sql/integration/joins/with_compounds_spec.rb +0 -137
  206. data/spec/engines/sql/unit/engine_spec.rb +0 -65
  207. data/spec/engines/sql/unit/predicates/binary_spec.rb +0 -140
  208. data/spec/engines/sql/unit/predicates/equality_spec.rb +0 -75
  209. data/spec/engines/sql/unit/predicates/in_spec.rb +0 -179
  210. data/spec/engines/sql/unit/predicates/noteq_spec.rb +0 -75
  211. data/spec/engines/sql/unit/predicates/predicates_spec.rb +0 -79
  212. data/spec/engines/sql/unit/primitives/attribute_spec.rb +0 -36
  213. data/spec/engines/sql/unit/primitives/expression_spec.rb +0 -28
  214. data/spec/engines/sql/unit/primitives/literal_spec.rb +0 -43
  215. data/spec/engines/sql/unit/primitives/value_spec.rb +0 -29
  216. data/spec/engines/sql/unit/relations/alias_spec.rb +0 -53
  217. data/spec/engines/sql/unit/relations/delete_spec.rb +0 -83
  218. data/spec/engines/sql/unit/relations/from_spec.rb +0 -64
  219. data/spec/engines/sql/unit/relations/group_spec.rb +0 -72
  220. data/spec/engines/sql/unit/relations/having_spec.rb +0 -78
  221. data/spec/engines/sql/unit/relations/insert_spec.rb +0 -143
  222. data/spec/engines/sql/unit/relations/join_spec.rb +0 -180
  223. data/spec/engines/sql/unit/relations/lock_spec.rb +0 -86
  224. data/spec/engines/sql/unit/relations/order_spec.rb +0 -161
  225. data/spec/engines/sql/unit/relations/project_spec.rb +0 -143
  226. data/spec/engines/sql/unit/relations/skip_spec.rb +0 -41
  227. data/spec/engines/sql/unit/relations/table_spec.rb +0 -122
  228. data/spec/engines/sql/unit/relations/take_spec.rb +0 -75
  229. data/spec/engines/sql/unit/relations/update_spec.rb +0 -203
  230. data/spec/engines/sql/unit/relations/where_spec.rb +0 -72
  231. data/spec/relations/join_spec.rb +0 -42
  232. data/spec/relations/relation_spec.rb +0 -31
  233. data/spec/shared/relation_spec.rb +0 -255
  234. data/spec/sql/christener_spec.rb +0 -70
  235. data/spec/support/connections/mysql_connection.rb +0 -14
  236. data/spec/support/connections/oracle_connection.rb +0 -17
  237. data/spec/support/connections/postgresql_connection.rb +0 -13
  238. data/spec/support/connections/sqlite3_connection.rb +0 -24
  239. data/spec/support/guards.rb +0 -28
  240. data/spec/support/matchers/disambiguate_attributes.rb +0 -28
  241. data/spec/support/matchers/hash_the_same_as.rb +0 -26
  242. data/spec/support/matchers/have_rows.rb +0 -18
  243. data/spec/support/model.rb +0 -67
  244. data/spec/support/schemas/mysql_schema.rb +0 -26
  245. data/spec/support/schemas/oracle_schema.rb +0 -20
  246. data/spec/support/schemas/postgresql_schema.rb +0 -26
  247. data/spec/support/schemas/sqlite3_schema.rb +0 -26
@@ -1,66 +0,0 @@
1
- module Arel
2
- class Header
3
- include Enumerable
4
-
5
- def initialize(attrs = [])
6
- @attributes = attrs.to_ary
7
- @names = {}
8
- end
9
-
10
- def each
11
- to_ary.each { |e| yield e }
12
- self
13
- end
14
-
15
- def [](key)
16
- case key
17
- when String, Symbol then find_by_name(key)
18
- when Attribute then find_by_attribute(key)
19
- end
20
- end
21
-
22
- def ==(other)
23
- to_set == other.to_set
24
- end
25
-
26
- def union(other)
27
- new(to_ary | other)
28
- end
29
-
30
- alias | union
31
-
32
- def to_ary
33
- @attributes
34
- end
35
-
36
- def bind(relation)
37
- Header.new(map { |a| a.bind(relation) })
38
- end
39
-
40
- # TMP
41
- def index(i)
42
- to_ary.index(i)
43
- end
44
-
45
- private
46
-
47
- def new(attrs)
48
- self.class.new(attrs)
49
- end
50
-
51
- def matching(attribute)
52
- select { |a| !a.is_a?(Value) && a.root == attribute.root }
53
- end
54
-
55
- def find_by_name(name)
56
- k = name.to_sym
57
- @names[k] ||= @attributes.detect { |a| a.named?(k) }
58
- end
59
-
60
- def find_by_attribute(attr)
61
- matching(attr).max do |a, b|
62
- (a.original_attribute / attr) <=> (b.original_attribute / attr)
63
- end
64
- end
65
- end
66
- end
@@ -1,31 +0,0 @@
1
- module Arel
2
- class Ordering < Struct.new(:attribute)
3
- delegate :relation, :to => :attribute
4
-
5
- def bind(relation)
6
- self.class.new(attribute.bind(relation))
7
- end
8
-
9
- def to_ordering
10
- self
11
- end
12
-
13
- def eval(row1, row2)
14
- (attribute.eval(row1) <=> attribute.eval(row2)) * direction
15
- end
16
-
17
- def to_sql(formatter = Sql::OrderClause.new(relation))
18
- formatter.ordering self
19
- end
20
- end
21
-
22
- class Ascending < Ordering
23
- def direction; 1 end
24
- def direction_sql; 'ASC' end
25
- end
26
-
27
- class Descending < Ordering
28
- def direction_sql; 'DESC' end
29
- def direction; -1 end
30
- end
31
- end
@@ -1,306 +0,0 @@
1
- module Arel
2
- module Predicates
3
- class Predicate
4
- def or(other_predicate)
5
- Or.new(self, other_predicate)
6
- end
7
-
8
- def and(other_predicate)
9
- And.new(self, other_predicate)
10
- end
11
-
12
- def complement
13
- Not.new(self)
14
- end
15
-
16
- def not
17
- self.complement
18
- end
19
- end
20
-
21
- class Polyadic < Predicate
22
- attr_reader :predicates
23
-
24
- def initialize(*predicates)
25
- @predicates = predicates
26
- end
27
-
28
- # Build a Polyadic predicate based on:
29
- # * <tt>operator</tt> - The Predicate subclass that defines the type of operation
30
- # (LessThan, Equality, etc)
31
- # * <tt>operand1</tt> - The left-hand operand (normally an Arel::Attribute)
32
- # * <tt>additional_operands</tt> - All possible right-hand operands
33
- def self.build(operator, operand1, *additional_operands)
34
- new(
35
- *additional_operands.uniq.map do |operand|
36
- operator.new(operand1, operand)
37
- end
38
- )
39
- end
40
-
41
- def ==(other)
42
- super || predicates == other.predicates
43
- end
44
-
45
- def bind(relation)
46
- self.class.new(
47
- *predicates.map {|p| p.find_correlate_in(relation)}
48
- )
49
- end
50
-
51
- def eval(row)
52
- predicates.send(compounder) do |operation|
53
- operation.eval(row)
54
- end
55
- end
56
-
57
- def to_sql(formatter = nil)
58
- "(" +
59
- predicates.map {|p| p.to_sql(formatter)}.join(" #{predicate_sql} ") +
60
- ")"
61
- end
62
- end
63
-
64
- class Any < Polyadic
65
- def complement
66
- All.new(*predicates.map {|p| p.complement})
67
- end
68
-
69
- def compounder; :any? end
70
-
71
- def predicate_sql; "OR" end
72
- end
73
-
74
- class All < Polyadic
75
- def complement
76
- Any.new(*predicates.map {|p| p.complement})
77
- end
78
-
79
- def compounder; :all? end
80
-
81
- def predicate_sql; "AND" end
82
- end
83
-
84
- class Unary < Predicate
85
- attr_reader :operand
86
-
87
- def initialize operand
88
- @operand = operand
89
- end
90
-
91
- def bind(relation)
92
- self.class.new(operand.find_correlate_in(relation))
93
- end
94
-
95
- def == other
96
- super || self.class === other && operand == other.operand
97
- end
98
-
99
- def eval(row)
100
- operand.eval(row).send(operator)
101
- end
102
-
103
- def to_sql(formatter = nil)
104
- "#{predicate_sql} (#{operand.to_sql(formatter)})"
105
- end
106
- end
107
-
108
- class Not < Unary
109
- def complement
110
- operand
111
- end
112
-
113
- def eval(row)
114
- !operand.eval(row)
115
- end
116
-
117
- def predicate_sql; "NOT" end
118
- end
119
-
120
- class Binary < Unary
121
- attr_reader :operand2
122
- alias :operand1 :operand
123
-
124
- def initialize left, right
125
- super(left)
126
- @operand2 = right
127
- end
128
-
129
- def ==(other)
130
- super && @operand2 == other.operand2
131
- end
132
-
133
- def bind(relation)
134
- self.class.new(operand1.find_correlate_in(relation), operand2.find_correlate_in(relation))
135
- end
136
-
137
- def eval(row)
138
- operand1.eval(row).send(operator, operand2.eval(row))
139
- end
140
-
141
- def to_sql(formatter = nil)
142
- "#{operand1.to_sql} #{predicate_sql} #{operand1.format(operand2)}"
143
- end
144
- alias :value :to_sql
145
- end
146
-
147
- class CompoundPredicate < Binary
148
- def eval(row)
149
- eval "operand1.eval(row) #{operator} operand2.eval(row)"
150
- end
151
-
152
- def to_sql(formatter = nil)
153
- "(#{operand1.to_sql(formatter)} #{predicate_sql} #{operand2.to_sql(formatter)})"
154
- end
155
- end
156
-
157
- class And < CompoundPredicate
158
- def complement
159
- Or.new(operand1.complement, operand2.complement)
160
- end
161
-
162
- def operator; :and end
163
-
164
- def predicate_sql; "AND" end
165
- end
166
-
167
- class Or < CompoundPredicate
168
- def complement
169
- And.new(operand1.complement, operand2.complement)
170
- end
171
-
172
- def operator; :or end
173
-
174
- def predicate_sql; "OR" end
175
- end
176
-
177
- class Equality < Binary
178
- def ==(other)
179
- self.class === other and
180
- ((operand1 == other.operand1 and operand2 == other.operand2) or
181
- (operand1 == other.operand2 and operand2 == other.operand1))
182
- end
183
-
184
- def complement
185
- Inequality.new(operand1, operand2)
186
- end
187
-
188
- def operator; :== end
189
-
190
- def predicate_sql
191
- operand2.equality_predicate_sql
192
- end
193
- end
194
-
195
- class Inequality < Equality
196
- def complement
197
- Equality.new(operand1, operand2)
198
- end
199
-
200
- def operator; :"!=" end
201
- def eval(row)
202
- operand1.eval(row) != operand2.eval(row)
203
- end
204
-
205
- def predicate_sql
206
- operand2.inequality_predicate_sql
207
- end
208
- end
209
-
210
- class GreaterThanOrEqualTo < Binary
211
- def complement
212
- LessThan.new(operand1, operand2)
213
- end
214
-
215
- def operator; :>= end
216
-
217
- def predicate_sql; '>=' end
218
- end
219
-
220
- class GreaterThan < Binary
221
- def complement
222
- LessThanOrEqualTo.new(operand1, operand2)
223
- end
224
-
225
- def operator; :> end
226
-
227
- def predicate_sql; '>' end
228
- end
229
-
230
- class LessThanOrEqualTo < Binary
231
- def complement
232
- GreaterThan.new(operand1, operand2)
233
- end
234
-
235
- def operator; :<= end
236
-
237
- def predicate_sql; '<=' end
238
- end
239
-
240
- class LessThan < Binary
241
- def complement
242
- GreaterThanOrEqualTo.new(operand1, operand2)
243
- end
244
-
245
- def operator; :< end
246
-
247
- def predicate_sql; '<' end
248
- end
249
-
250
- class Match < Binary
251
- def complement
252
- NotMatch.new(operand1, operand2)
253
- end
254
-
255
- def operator; :=~ end
256
-
257
- def predicate_sql; 'LIKE' end
258
- end
259
-
260
- class NotMatch < Binary
261
- def complement
262
- Match.new(operand1, operand2)
263
- end
264
-
265
- def eval(row)
266
- operand1.eval(row) !~ operand2.eval(row)
267
- end
268
-
269
- def predicate_sql; 'NOT LIKE' end
270
- end
271
-
272
- class In < Binary
273
- def complement
274
- NotIn.new(operand1, operand2)
275
- end
276
-
277
- def eval(row)
278
- operand2.eval(row).include?(operand1.eval(row))
279
- end
280
-
281
- def to_sql(formatter = nil)
282
- if operand2.is_a?(Range) && operand2.exclude_end?
283
- GreaterThanOrEqualTo.new(operand1, operand2.begin).and(
284
- LessThan.new(operand1, operand2.end)
285
- ).to_sql(formatter)
286
- else
287
- super
288
- end
289
- end
290
-
291
- def predicate_sql; operand2.inclusion_predicate_sql end
292
- end
293
-
294
- class NotIn < Binary
295
- def complement
296
- In.new(operand1, operand2)
297
- end
298
-
299
- def eval(row)
300
- !(operand2.eval(row).include?(operand1.eval(row)))
301
- end
302
-
303
- def predicate_sql; operand2.exclusion_predicate_sql end
304
- end
305
- end
306
- end
@@ -1,16 +0,0 @@
1
- require 'arel/algebra/relations/relation'
2
- require 'arel/algebra/relations/utilities/compound'
3
- require 'arel/algebra/relations/utilities/nil'
4
- require 'arel/algebra/relations/utilities/externalization'
5
- require 'arel/algebra/relations/row'
6
- require 'arel/algebra/relations/writes'
7
- require 'arel/algebra/relations/operations/from'
8
- require 'arel/algebra/relations/operations/group'
9
- require 'arel/algebra/relations/operations/having'
10
- require 'arel/algebra/relations/operations/join'
11
- require 'arel/algebra/relations/operations/order'
12
- require 'arel/algebra/relations/operations/project'
13
- require 'arel/algebra/relations/operations/where'
14
- require 'arel/algebra/relations/operations/skip'
15
- require 'arel/algebra/relations/operations/take'
16
- require 'arel/algebra/relations/operations/lock'
@@ -1,14 +0,0 @@
1
- module Arel
2
- class From < Compound
3
- attr_reader :sources
4
-
5
- def initialize relation, sources
6
- super(relation)
7
- @sources = sources
8
- end
9
-
10
- def eval
11
- unoperated_rows[sources..-1]
12
- end
13
- end
14
- end
@@ -1,14 +0,0 @@
1
- module Arel
2
- class Group < Compound
3
- attr_reader :groupings
4
-
5
- def initialize(relation, groupings)
6
- super(relation)
7
- @groupings = groupings.collect { |g| g.bind(relation) }
8
- end
9
-
10
- def eval
11
- raise NotImplementedError
12
- end
13
- end
14
- end