arel 0.4.0 → 1.0.0.rc1
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.
- data/README.markdown +24 -0
- data/lib/arel.rb +3 -1
- data/lib/arel/algebra/attributes/attribute.rb +175 -141
- data/lib/arel/algebra/core_extensions.rb +0 -1
- data/lib/arel/algebra/core_extensions/hash.rb +5 -9
- data/lib/arel/algebra/core_extensions/object.rb +0 -4
- data/lib/arel/algebra/expression.rb +37 -24
- data/lib/arel/algebra/header.rb +5 -6
- data/lib/arel/algebra/ordering.rb +13 -5
- data/lib/arel/algebra/predicates.rb +143 -27
- data/lib/arel/algebra/relations.rb +0 -1
- data/lib/arel/algebra/relations/operations/from.rb +10 -2
- data/lib/arel/algebra/relations/operations/group.rb +8 -6
- data/lib/arel/algebra/relations/operations/having.rb +3 -6
- data/lib/arel/algebra/relations/operations/join.rb +52 -18
- data/lib/arel/algebra/relations/operations/lock.rb +4 -6
- data/lib/arel/algebra/relations/operations/order.rb +11 -7
- data/lib/arel/algebra/relations/operations/project.rb +10 -10
- data/lib/arel/algebra/relations/operations/skip.rb +10 -3
- data/lib/arel/algebra/relations/operations/take.rb +10 -3
- data/lib/arel/algebra/relations/operations/where.rb +12 -6
- data/lib/arel/algebra/relations/relation.rb +161 -92
- data/lib/arel/algebra/relations/row.rb +8 -5
- data/lib/arel/algebra/relations/utilities/compound.rb +34 -33
- data/lib/arel/algebra/relations/utilities/externalization.rb +10 -8
- data/lib/arel/algebra/relations/writes.rb +24 -13
- data/lib/arel/algebra/value.rb +41 -2
- data/lib/arel/engines/memory.rb +0 -2
- data/lib/arel/engines/memory/engine.rb +3 -9
- data/lib/arel/engines/memory/relations.rb +0 -3
- data/lib/arel/engines/memory/relations/array.rb +5 -3
- data/lib/arel/engines/memory/relations/operations.rb +2 -60
- data/lib/arel/engines/sql.rb +0 -2
- data/lib/arel/engines/sql/christener.rb +12 -6
- data/lib/arel/engines/sql/compilers/oracle_compiler.rb +34 -23
- data/lib/arel/engines/sql/compilers/postgresql_compiler.rb +23 -15
- data/lib/arel/engines/sql/engine.rb +19 -27
- data/lib/arel/engines/sql/formatters.rb +26 -10
- data/lib/arel/engines/sql/relations.rb +0 -7
- data/lib/arel/engines/sql/relations/compiler.rb +70 -35
- data/lib/arel/engines/sql/relations/table.rb +44 -32
- data/lib/arel/{engines/sql/relations/utilities/recursion.rb → recursion/base_case.rb} +0 -0
- data/lib/arel/session.rb +24 -40
- data/lib/arel/sql_literal.rb +13 -0
- data/lib/arel/version.rb +1 -1
- data/spec/algebra/unit/predicates/inequality_spec.rb +32 -0
- data/spec/algebra/unit/predicates/predicate_spec.rb +22 -0
- data/spec/algebra/unit/primitives/attribute_spec.rb +3 -9
- data/spec/algebra/unit/primitives/expression_spec.rb +1 -7
- data/spec/algebra/unit/relations/join_spec.rb +0 -7
- data/spec/algebra/unit/relations/project_spec.rb +3 -3
- data/spec/algebra/unit/relations/relation_spec.rb +74 -25
- data/spec/algebra/unit/session/session_spec.rb +7 -7
- data/spec/engines/memory/integration/joins/cross_engine_spec.rb +20 -10
- data/spec/engines/memory/unit/relations/array_spec.rb +6 -5
- data/spec/engines/memory/unit/relations/join_spec.rb +7 -6
- data/spec/engines/memory/unit/relations/order_spec.rb +7 -6
- data/spec/engines/memory/unit/relations/project_spec.rb +6 -6
- data/spec/engines/memory/unit/relations/skip_spec.rb +10 -5
- data/spec/engines/memory/unit/relations/take_spec.rb +7 -5
- data/spec/engines/memory/unit/relations/where_spec.rb +13 -9
- data/spec/engines/sql/unit/engine_spec.rb +20 -0
- data/spec/engines/sql/unit/relations/group_spec.rb +2 -2
- data/spec/engines/sql/unit/relations/order_spec.rb +5 -5
- data/spec/engines/sql/unit/relations/project_spec.rb +4 -4
- data/spec/engines/sql/unit/relations/table_spec.rb +0 -7
- data/spec/engines/sql/unit/relations/take_spec.rb +26 -0
- data/spec/engines/sql/unit/relations/where_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -4
- data/spec/sql/christener_spec.rb +70 -0
- data/spec/support/model.rb +7 -2
- metadata +109 -23
- data/lib/arel/algebra/core_extensions/class.rb +0 -32
- data/lib/arel/algebra/relations/operations/alias.rb +0 -7
- data/lib/arel/engines/memory/predicates.rb +0 -99
- data/lib/arel/engines/memory/primitives.rb +0 -27
- data/lib/arel/engines/memory/relations/compound.rb +0 -9
- data/lib/arel/engines/memory/relations/writes.rb +0 -7
- data/lib/arel/engines/sql/predicates.rb +0 -103
- data/lib/arel/engines/sql/primitives.rb +0 -97
- data/lib/arel/engines/sql/relations/operations/alias.rb +0 -5
- data/lib/arel/engines/sql/relations/operations/join.rb +0 -33
- data/lib/arel/engines/sql/relations/relation.rb +0 -65
- data/lib/arel/engines/sql/relations/utilities/compound.rb +0 -10
- data/lib/arel/engines/sql/relations/utilities/externalization.rb +0 -14
- data/lib/arel/engines/sql/relations/writes.rb +0 -19
data/spec/support/model.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Arel
|
2
2
|
module Testing
|
3
|
-
class Engine
|
3
|
+
class Engine < Arel::Memory::Engine
|
4
4
|
attr_reader :rows
|
5
5
|
|
6
6
|
def initialize
|
@@ -12,7 +12,12 @@ module Arel
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def read(relation)
|
15
|
-
|
15
|
+
case relation
|
16
|
+
when Arel::Take, Arel::Order, Arel::Skip, Arel::Where
|
17
|
+
relation.eval
|
18
|
+
else
|
19
|
+
@rows.dup.map { |r| Row.new(relation, r) }
|
20
|
+
end
|
16
21
|
end
|
17
22
|
|
18
23
|
def create(insert)
|
metadata
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 977940574
|
5
|
+
prerelease: true
|
5
6
|
segments:
|
7
|
+
- 1
|
6
8
|
- 0
|
7
|
-
- 4
|
8
9
|
- 0
|
9
|
-
|
10
|
+
- rc1
|
11
|
+
version: 1.0.0.rc1
|
10
12
|
platform: ruby
|
11
13
|
authors:
|
12
14
|
- Bryan Helmkamp
|
@@ -16,16 +18,18 @@ autorequire:
|
|
16
18
|
bindir: bin
|
17
19
|
cert_chain: []
|
18
20
|
|
19
|
-
date: 2010-06-08 00:00:00 -
|
21
|
+
date: 2010-06-08 00:00:00 -07:00
|
20
22
|
default_executable:
|
21
23
|
dependencies:
|
22
24
|
- !ruby/object:Gem::Dependency
|
23
25
|
name: activesupport
|
24
26
|
prerelease: false
|
25
27
|
requirement: &id001 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
26
29
|
requirements:
|
27
30
|
- - ">="
|
28
31
|
- !ruby/object:Gem::Version
|
32
|
+
hash: 31098225
|
29
33
|
segments:
|
30
34
|
- 3
|
31
35
|
- 0
|
@@ -57,7 +61,6 @@ files:
|
|
57
61
|
- lib/arel/algebra/attributes/string.rb
|
58
62
|
- lib/arel/algebra/attributes/time.rb
|
59
63
|
- lib/arel/algebra/attributes.rb
|
60
|
-
- lib/arel/algebra/core_extensions/class.rb
|
61
64
|
- lib/arel/algebra/core_extensions/hash.rb
|
62
65
|
- lib/arel/algebra/core_extensions/object.rb
|
63
66
|
- lib/arel/algebra/core_extensions/symbol.rb
|
@@ -66,7 +69,6 @@ files:
|
|
66
69
|
- lib/arel/algebra/header.rb
|
67
70
|
- lib/arel/algebra/ordering.rb
|
68
71
|
- lib/arel/algebra/predicates.rb
|
69
|
-
- lib/arel/algebra/relations/operations/alias.rb
|
70
72
|
- lib/arel/algebra/relations/operations/from.rb
|
71
73
|
- lib/arel/algebra/relations/operations/group.rb
|
72
74
|
- lib/arel/algebra/relations/operations/having.rb
|
@@ -87,12 +89,8 @@ files:
|
|
87
89
|
- lib/arel/algebra/value.rb
|
88
90
|
- lib/arel/algebra.rb
|
89
91
|
- lib/arel/engines/memory/engine.rb
|
90
|
-
- lib/arel/engines/memory/predicates.rb
|
91
|
-
- lib/arel/engines/memory/primitives.rb
|
92
92
|
- lib/arel/engines/memory/relations/array.rb
|
93
|
-
- lib/arel/engines/memory/relations/compound.rb
|
94
93
|
- lib/arel/engines/memory/relations/operations.rb
|
95
|
-
- lib/arel/engines/memory/relations/writes.rb
|
96
94
|
- lib/arel/engines/memory/relations.rb
|
97
95
|
- lib/arel/engines/memory.rb
|
98
96
|
- lib/arel/engines/sql/attributes.rb
|
@@ -109,26 +107,105 @@ files:
|
|
109
107
|
- lib/arel/engines/sql/core_extensions.rb
|
110
108
|
- lib/arel/engines/sql/engine.rb
|
111
109
|
- lib/arel/engines/sql/formatters.rb
|
112
|
-
- lib/arel/engines/sql/predicates.rb
|
113
|
-
- lib/arel/engines/sql/primitives.rb
|
114
110
|
- lib/arel/engines/sql/relations/compiler.rb
|
115
|
-
- lib/arel/engines/sql/relations/operations/alias.rb
|
116
|
-
- lib/arel/engines/sql/relations/operations/join.rb
|
117
|
-
- lib/arel/engines/sql/relations/relation.rb
|
118
111
|
- lib/arel/engines/sql/relations/table.rb
|
119
|
-
- lib/arel/engines/sql/relations/utilities/compound.rb
|
120
|
-
- lib/arel/engines/sql/relations/utilities/externalization.rb
|
121
112
|
- lib/arel/engines/sql/relations/utilities/nil.rb
|
122
|
-
- lib/arel/engines/sql/relations/utilities/recursion.rb
|
123
|
-
- lib/arel/engines/sql/relations/writes.rb
|
124
113
|
- lib/arel/engines/sql/relations.rb
|
125
114
|
- lib/arel/engines/sql.rb
|
126
115
|
- lib/arel/engines.rb
|
116
|
+
- lib/arel/recursion/base_case.rb
|
127
117
|
- lib/arel/session.rb
|
118
|
+
- lib/arel/sql_literal.rb
|
128
119
|
- lib/arel/version.rb
|
129
120
|
- lib/arel.rb
|
130
121
|
- History.txt
|
131
122
|
- README.markdown
|
123
|
+
- spec/algebra/unit/predicates/binary_spec.rb
|
124
|
+
- spec/algebra/unit/predicates/equality_spec.rb
|
125
|
+
- spec/algebra/unit/predicates/in_spec.rb
|
126
|
+
- spec/algebra/unit/predicates/inequality_spec.rb
|
127
|
+
- spec/algebra/unit/predicates/predicate_spec.rb
|
128
|
+
- spec/algebra/unit/primitives/attribute_spec.rb
|
129
|
+
- spec/algebra/unit/primitives/expression_spec.rb
|
130
|
+
- spec/algebra/unit/primitives/value_spec.rb
|
131
|
+
- spec/algebra/unit/relations/alias_spec.rb
|
132
|
+
- spec/algebra/unit/relations/delete_spec.rb
|
133
|
+
- spec/algebra/unit/relations/group_spec.rb
|
134
|
+
- spec/algebra/unit/relations/insert_spec.rb
|
135
|
+
- spec/algebra/unit/relations/join_spec.rb
|
136
|
+
- spec/algebra/unit/relations/order_spec.rb
|
137
|
+
- spec/algebra/unit/relations/project_spec.rb
|
138
|
+
- spec/algebra/unit/relations/relation_spec.rb
|
139
|
+
- spec/algebra/unit/relations/skip_spec.rb
|
140
|
+
- spec/algebra/unit/relations/table_spec.rb
|
141
|
+
- spec/algebra/unit/relations/take_spec.rb
|
142
|
+
- spec/algebra/unit/relations/update_spec.rb
|
143
|
+
- spec/algebra/unit/relations/where_spec.rb
|
144
|
+
- spec/algebra/unit/session/session_spec.rb
|
145
|
+
- spec/attributes/boolean_spec.rb
|
146
|
+
- spec/attributes/float_spec.rb
|
147
|
+
- spec/attributes/header_spec.rb
|
148
|
+
- spec/attributes/integer_spec.rb
|
149
|
+
- spec/attributes/string_spec.rb
|
150
|
+
- spec/attributes/time_spec.rb
|
151
|
+
- spec/engines/memory/integration/joins/cross_engine_spec.rb
|
152
|
+
- spec/engines/memory/unit/relations/array_spec.rb
|
153
|
+
- spec/engines/memory/unit/relations/insert_spec.rb
|
154
|
+
- spec/engines/memory/unit/relations/join_spec.rb
|
155
|
+
- spec/engines/memory/unit/relations/order_spec.rb
|
156
|
+
- spec/engines/memory/unit/relations/project_spec.rb
|
157
|
+
- spec/engines/memory/unit/relations/skip_spec.rb
|
158
|
+
- spec/engines/memory/unit/relations/take_spec.rb
|
159
|
+
- spec/engines/memory/unit/relations/where_spec.rb
|
160
|
+
- spec/engines/sql/integration/joins/with_adjacency_spec.rb
|
161
|
+
- spec/engines/sql/integration/joins/with_aggregations_spec.rb
|
162
|
+
- spec/engines/sql/integration/joins/with_compounds_spec.rb
|
163
|
+
- spec/engines/sql/unit/engine_spec.rb
|
164
|
+
- spec/engines/sql/unit/predicates/binary_spec.rb
|
165
|
+
- spec/engines/sql/unit/predicates/equality_spec.rb
|
166
|
+
- spec/engines/sql/unit/predicates/in_spec.rb
|
167
|
+
- spec/engines/sql/unit/predicates/noteq_spec.rb
|
168
|
+
- spec/engines/sql/unit/predicates/predicates_spec.rb
|
169
|
+
- spec/engines/sql/unit/primitives/attribute_spec.rb
|
170
|
+
- spec/engines/sql/unit/primitives/expression_spec.rb
|
171
|
+
- spec/engines/sql/unit/primitives/literal_spec.rb
|
172
|
+
- spec/engines/sql/unit/primitives/value_spec.rb
|
173
|
+
- spec/engines/sql/unit/relations/alias_spec.rb
|
174
|
+
- spec/engines/sql/unit/relations/delete_spec.rb
|
175
|
+
- spec/engines/sql/unit/relations/from_spec.rb
|
176
|
+
- spec/engines/sql/unit/relations/group_spec.rb
|
177
|
+
- spec/engines/sql/unit/relations/having_spec.rb
|
178
|
+
- spec/engines/sql/unit/relations/insert_spec.rb
|
179
|
+
- spec/engines/sql/unit/relations/join_spec.rb
|
180
|
+
- spec/engines/sql/unit/relations/lock_spec.rb
|
181
|
+
- spec/engines/sql/unit/relations/order_spec.rb
|
182
|
+
- spec/engines/sql/unit/relations/project_spec.rb
|
183
|
+
- spec/engines/sql/unit/relations/skip_spec.rb
|
184
|
+
- spec/engines/sql/unit/relations/table_spec.rb
|
185
|
+
- spec/engines/sql/unit/relations/take_spec.rb
|
186
|
+
- spec/engines/sql/unit/relations/update_spec.rb
|
187
|
+
- spec/engines/sql/unit/relations/where_spec.rb
|
188
|
+
- spec/relations/join_spec.rb
|
189
|
+
- spec/relations/relation_spec.rb
|
190
|
+
- spec/shared/relation_spec.rb
|
191
|
+
- spec/spec_helper.rb
|
192
|
+
- spec/sql/christener_spec.rb
|
193
|
+
- spec/support/check.rb
|
194
|
+
- spec/support/connections/mysql_connection.rb
|
195
|
+
- spec/support/connections/oracle_connection.rb
|
196
|
+
- spec/support/connections/postgresql_connection.rb
|
197
|
+
- spec/support/connections/sqlite3_connection.rb
|
198
|
+
- spec/support/guards.rb
|
199
|
+
- spec/support/matchers/be_like.rb
|
200
|
+
- spec/support/matchers/disambiguate_attributes.rb
|
201
|
+
- spec/support/matchers/hash_the_same_as.rb
|
202
|
+
- spec/support/matchers/have_rows.rb
|
203
|
+
- spec/support/matchers.rb
|
204
|
+
- spec/support/model.rb
|
205
|
+
- spec/support/schemas/mysql_schema.rb
|
206
|
+
- spec/support/schemas/oracle_schema.rb
|
207
|
+
- spec/support/schemas/postgresql_schema.rb
|
208
|
+
- spec/support/schemas/sqlite3_schema.rb
|
132
209
|
has_rdoc: true
|
133
210
|
homepage: http://github.com/brynary/arel
|
134
211
|
licenses: []
|
@@ -139,23 +216,29 @@ rdoc_options: []
|
|
139
216
|
require_paths:
|
140
217
|
- lib
|
141
218
|
required_ruby_version: !ruby/object:Gem::Requirement
|
219
|
+
none: false
|
142
220
|
requirements:
|
143
221
|
- - ">="
|
144
222
|
- !ruby/object:Gem::Version
|
223
|
+
hash: 3
|
145
224
|
segments:
|
146
225
|
- 0
|
147
226
|
version: "0"
|
148
227
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
228
|
+
none: false
|
149
229
|
requirements:
|
150
|
-
- - "
|
230
|
+
- - ">"
|
151
231
|
- !ruby/object:Gem::Version
|
232
|
+
hash: 25
|
152
233
|
segments:
|
153
|
-
-
|
154
|
-
|
234
|
+
- 1
|
235
|
+
- 3
|
236
|
+
- 1
|
237
|
+
version: 1.3.1
|
155
238
|
requirements: []
|
156
239
|
|
157
240
|
rubyforge_project: arel
|
158
|
-
rubygems_version: 1.3.
|
241
|
+
rubygems_version: 1.3.7
|
159
242
|
signing_key:
|
160
243
|
specification_version: 3
|
161
244
|
summary: Arel is a relational algebra engine for Ruby
|
@@ -163,6 +246,8 @@ test_files:
|
|
163
246
|
- spec/algebra/unit/predicates/binary_spec.rb
|
164
247
|
- spec/algebra/unit/predicates/equality_spec.rb
|
165
248
|
- spec/algebra/unit/predicates/in_spec.rb
|
249
|
+
- spec/algebra/unit/predicates/inequality_spec.rb
|
250
|
+
- spec/algebra/unit/predicates/predicate_spec.rb
|
166
251
|
- spec/algebra/unit/primitives/attribute_spec.rb
|
167
252
|
- spec/algebra/unit/primitives/expression_spec.rb
|
168
253
|
- spec/algebra/unit/primitives/value_spec.rb
|
@@ -227,6 +312,7 @@ test_files:
|
|
227
312
|
- spec/relations/relation_spec.rb
|
228
313
|
- spec/shared/relation_spec.rb
|
229
314
|
- spec/spec_helper.rb
|
315
|
+
- spec/sql/christener_spec.rb
|
230
316
|
- spec/support/check.rb
|
231
317
|
- spec/support/connections/mysql_connection.rb
|
232
318
|
- spec/support/connections/oracle_connection.rb
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module Arel
|
2
|
-
module ClassExtensions
|
3
|
-
def attributes(*attrs)
|
4
|
-
@attributes = attrs
|
5
|
-
attr_reader(*attrs)
|
6
|
-
end
|
7
|
-
|
8
|
-
def deriving(*methods)
|
9
|
-
methods.each { |m| derive m }
|
10
|
-
end
|
11
|
-
|
12
|
-
def derive(method_name)
|
13
|
-
methods = {
|
14
|
-
:initialize => "
|
15
|
-
def #{method_name}(#{@attributes.join(',')})
|
16
|
-
#{@attributes.collect { |a| "@#{a} = #{a}" }.join("\n")}
|
17
|
-
end
|
18
|
-
",
|
19
|
-
:== => "
|
20
|
-
def ==(other)
|
21
|
-
#{name} === other &&
|
22
|
-
#{@attributes.collect { |a| "@#{a} == other.#{a}" }.join(" &&\n")}
|
23
|
-
end
|
24
|
-
"
|
25
|
-
}
|
26
|
-
class_eval methods[method_name], __FILE__, __LINE__
|
27
|
-
end
|
28
|
-
|
29
|
-
Class.send(:include, self)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
@@ -1,99 +0,0 @@
|
|
1
|
-
module Arel
|
2
|
-
module Predicates
|
3
|
-
class Binary < Predicate
|
4
|
-
def eval(row)
|
5
|
-
operand1.eval(row).send(operator, operand2.eval(row))
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
class Unary < Predicate
|
10
|
-
def eval(row)
|
11
|
-
operand.eval(row).send(operator)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
class Not < Unary
|
16
|
-
def eval(row)
|
17
|
-
!operand.eval(row)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
class Polyadic < Predicate
|
22
|
-
def eval(row)
|
23
|
-
predicates.send(compounder) do |operation|
|
24
|
-
operation.eval(row)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class Any < Polyadic
|
30
|
-
def compounder; :any? end
|
31
|
-
end
|
32
|
-
|
33
|
-
class All < Polyadic
|
34
|
-
def compounder; :all? end
|
35
|
-
end
|
36
|
-
|
37
|
-
class CompoundPredicate < Binary
|
38
|
-
def eval(row)
|
39
|
-
eval "operand1.eval(row) #{operator} operand2.eval(row)"
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
class Or < CompoundPredicate
|
44
|
-
def operator; :or end
|
45
|
-
end
|
46
|
-
|
47
|
-
class And < CompoundPredicate
|
48
|
-
def operator; :and end
|
49
|
-
end
|
50
|
-
|
51
|
-
class Equality < Binary
|
52
|
-
def operator; :== end
|
53
|
-
end
|
54
|
-
|
55
|
-
class Inequality < Binary
|
56
|
-
def eval(row)
|
57
|
-
operand1.eval(row) != operand2.eval(row)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
class GreaterThanOrEqualTo < Binary
|
62
|
-
def operator; :>= end
|
63
|
-
end
|
64
|
-
|
65
|
-
class GreaterThan < Binary
|
66
|
-
def operator; :> end
|
67
|
-
end
|
68
|
-
|
69
|
-
class LessThanOrEqualTo < Binary
|
70
|
-
def operator; :<= end
|
71
|
-
end
|
72
|
-
|
73
|
-
class LessThan < Binary
|
74
|
-
def operator; :< end
|
75
|
-
end
|
76
|
-
|
77
|
-
class Match < Binary
|
78
|
-
def operator; :=~ end
|
79
|
-
end
|
80
|
-
|
81
|
-
class NotMatch < Binary
|
82
|
-
def eval(row)
|
83
|
-
operand1.eval(row) !~ operand2.eval(row)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
class In < Binary
|
88
|
-
def eval(row)
|
89
|
-
operand2.eval(row).include?(operand1.eval(row))
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
class NotIn < Binary
|
94
|
-
def eval(row)
|
95
|
-
!(operand2.eval(row).include?(operand1.eval(row)))
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module Arel
|
2
|
-
class Attribute
|
3
|
-
def eval(row)
|
4
|
-
row[self]
|
5
|
-
end
|
6
|
-
end
|
7
|
-
|
8
|
-
class Value
|
9
|
-
def eval(row)
|
10
|
-
value
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
class Ordering
|
15
|
-
def eval(row1, row2)
|
16
|
-
(attribute.eval(row1) <=> attribute.eval(row2)) * direction
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
class Descending < Ordering
|
21
|
-
def direction; -1 end
|
22
|
-
end
|
23
|
-
|
24
|
-
class Ascending < Ordering
|
25
|
-
def direction; 1 end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,103 +0,0 @@
|
|
1
|
-
module Arel
|
2
|
-
module Predicates
|
3
|
-
class Binary < Predicate
|
4
|
-
def to_sql(formatter = nil)
|
5
|
-
"#{operand1.to_sql} #{predicate_sql} #{operand1.format(operand2)}"
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
class Unary < Predicate
|
10
|
-
def to_sql(formatter = nil)
|
11
|
-
"#{predicate_sql} (#{operand.to_sql(formatter)})"
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
class Not < Unary
|
16
|
-
def predicate_sql; "NOT" end
|
17
|
-
end
|
18
|
-
|
19
|
-
class CompoundPredicate < Binary
|
20
|
-
def to_sql(formatter = nil)
|
21
|
-
"(#{operand1.to_sql(formatter)} #{predicate_sql} #{operand2.to_sql(formatter)})"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
class Or < CompoundPredicate
|
26
|
-
def predicate_sql; "OR" end
|
27
|
-
end
|
28
|
-
|
29
|
-
class And < CompoundPredicate
|
30
|
-
def predicate_sql; "AND" end
|
31
|
-
end
|
32
|
-
|
33
|
-
class Polyadic < Predicate
|
34
|
-
def to_sql(formatter = nil)
|
35
|
-
"(" +
|
36
|
-
predicates.map {|p| p.to_sql(formatter)}.join(" #{predicate_sql} ") +
|
37
|
-
")"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
class Any < Polyadic
|
42
|
-
def predicate_sql; "OR" end
|
43
|
-
end
|
44
|
-
|
45
|
-
class All < Polyadic
|
46
|
-
def predicate_sql; "AND" end
|
47
|
-
end
|
48
|
-
|
49
|
-
class Equality < Binary
|
50
|
-
def predicate_sql
|
51
|
-
operand2.equality_predicate_sql
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
class Inequality < Binary
|
56
|
-
def predicate_sql
|
57
|
-
operand2.inequality_predicate_sql
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
class GreaterThanOrEqualTo < Binary
|
62
|
-
def predicate_sql; '>=' end
|
63
|
-
end
|
64
|
-
|
65
|
-
class GreaterThan < Binary
|
66
|
-
def predicate_sql; '>' end
|
67
|
-
end
|
68
|
-
|
69
|
-
class LessThanOrEqualTo < Binary
|
70
|
-
def predicate_sql; '<=' end
|
71
|
-
end
|
72
|
-
|
73
|
-
class LessThan < Binary
|
74
|
-
def predicate_sql; '<' end
|
75
|
-
end
|
76
|
-
|
77
|
-
class Match < Binary
|
78
|
-
def predicate_sql; 'LIKE' end
|
79
|
-
end
|
80
|
-
|
81
|
-
class NotMatch < Binary
|
82
|
-
def predicate_sql; 'NOT LIKE' end
|
83
|
-
end
|
84
|
-
|
85
|
-
class In < Binary
|
86
|
-
def to_sql(formatter = nil)
|
87
|
-
if operand2.is_a?(Range) && operand2.exclude_end?
|
88
|
-
GreaterThanOrEqualTo.new(operand1, operand2.begin).and(
|
89
|
-
LessThan.new(operand1, operand2.end)
|
90
|
-
).to_sql(formatter)
|
91
|
-
else
|
92
|
-
super
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def predicate_sql; operand2.inclusion_predicate_sql end
|
97
|
-
end
|
98
|
-
|
99
|
-
class NotIn < Binary
|
100
|
-
def predicate_sql; operand2.exclusion_predicate_sql end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|