arel 3.0.0 → 3.0.3
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/Gemfile +4 -3
- data/History.txt +51 -0
- data/Manifest.txt +8 -0
- data/README.markdown +1 -1
- data/arel.gemspec +27 -16
- data/lib/arel.rb +2 -1
- data/lib/arel/expressions.rb +4 -0
- data/lib/arel/nodes.rb +5 -0
- data/lib/arel/nodes/extract.rb +23 -0
- data/lib/arel/nodes/function.rb +1 -0
- data/lib/arel/nodes/node.rb +1 -1
- data/lib/arel/nodes/over.rb +15 -0
- data/lib/arel/nodes/select_core.rb +3 -1
- data/lib/arel/nodes/sql_literal.rb +3 -0
- data/lib/arel/nodes/window.rb +78 -0
- data/lib/arel/select_manager.rb +6 -0
- data/lib/arel/visitors/bind_visitor.rb +24 -0
- data/lib/arel/visitors/depth_first.rb +4 -0
- data/lib/arel/visitors/dot.rb +26 -0
- data/lib/arel/visitors/informix.rb +1 -1
- data/lib/arel/visitors/to_sql.rb +71 -4
- data/lib/arel/window_predications.rb +9 -0
- data/test/nodes/test_extract.rb +19 -0
- data/test/nodes/test_node.rb +1 -0
- data/test/nodes/test_over.rb +49 -0
- data/test/test_select_manager.rb +156 -0
- data/test/visitors/test_bind_visitor.rb +39 -0
- data/test/visitors/test_depth_first.rb +10 -2
- data/test/visitors/test_informix.rb +10 -0
- data/test/visitors/test_oracle.rb +1 -1
- data/test/visitors/test_to_sql.rb +10 -8
- metadata +95 -47
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'arel/visitors/bind_visitor'
|
3
|
+
|
4
|
+
module Arel
|
5
|
+
module Visitors
|
6
|
+
class TestBindVisitor < MiniTest::Unit::TestCase
|
7
|
+
def test_visitor_yields_on_binds
|
8
|
+
visitor = Class.new(Arel::Visitors::Visitor) {
|
9
|
+
def initialize omg
|
10
|
+
end
|
11
|
+
|
12
|
+
include Arel::Visitors::BindVisitor
|
13
|
+
}.new nil
|
14
|
+
|
15
|
+
bp = Nodes::BindParam.new 'omg'
|
16
|
+
called = false
|
17
|
+
visitor.accept(bp) { called = true }
|
18
|
+
assert called
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_visitor_only_yields_on_binds
|
22
|
+
visitor = Class.new(Arel::Visitors::Visitor) {
|
23
|
+
def initialize omg
|
24
|
+
end
|
25
|
+
|
26
|
+
include Arel::Visitors::BindVisitor
|
27
|
+
}.new(nil)
|
28
|
+
|
29
|
+
bp = Arel.sql 'omg'
|
30
|
+
called = false
|
31
|
+
|
32
|
+
assert_raises(TypeError) {
|
33
|
+
visitor.accept(bp) { called = true }
|
34
|
+
}
|
35
|
+
refute called
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -114,6 +114,12 @@ module Arel
|
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
117
|
+
def test_Arel_Nodes_InfixOperation
|
118
|
+
binary = Arel::Nodes::InfixOperation.new(:o, :a, :b)
|
119
|
+
@visitor.accept binary
|
120
|
+
assert_equal [:a, :b, binary], @collector.calls
|
121
|
+
end
|
122
|
+
|
117
123
|
# N-ary
|
118
124
|
[
|
119
125
|
Arel::Nodes::And,
|
@@ -179,7 +185,8 @@ module Arel
|
|
179
185
|
core.froms = :b
|
180
186
|
core.wheres << :c
|
181
187
|
core.groups << :d
|
182
|
-
core.
|
188
|
+
core.windows << :e
|
189
|
+
core.having = :f
|
183
190
|
|
184
191
|
@visitor.accept core
|
185
192
|
assert_equal [
|
@@ -188,7 +195,8 @@ module Arel
|
|
188
195
|
core.source,
|
189
196
|
:c, core.wheres,
|
190
197
|
:d, core.groups,
|
191
|
-
:e,
|
198
|
+
:e, core.windows,
|
199
|
+
:f,
|
192
200
|
core], @collector.calls
|
193
201
|
end
|
194
202
|
|
@@ -37,6 +37,16 @@ module Arel
|
|
37
37
|
sql.must_be_like "SELECT SKIP 1 LIMIT 1"
|
38
38
|
end
|
39
39
|
|
40
|
+
it 'uses INNER JOIN to perform joins' do
|
41
|
+
core = Nodes::SelectCore.new
|
42
|
+
table = Table.new(:posts)
|
43
|
+
core.source = Nodes::JoinSource.new(table, [table.create_join(Table.new(:comments))])
|
44
|
+
|
45
|
+
stmt = Nodes::SelectStatement.new([core])
|
46
|
+
sql = @visitor.accept(stmt)
|
47
|
+
sql.must_be_like 'SELECT FROM "posts" INNER JOIN "comments"'
|
48
|
+
end
|
49
|
+
|
40
50
|
end
|
41
51
|
end
|
42
52
|
end
|
@@ -9,6 +9,12 @@ module Arel
|
|
9
9
|
@attr = @table[:id]
|
10
10
|
end
|
11
11
|
|
12
|
+
it 'works with BindParams' do
|
13
|
+
node = Nodes::BindParam.new 'omg'
|
14
|
+
sql = @visitor.accept node
|
15
|
+
sql.must_be_like 'omg'
|
16
|
+
end
|
17
|
+
|
12
18
|
it 'can define a dispatch method' do
|
13
19
|
visited = false
|
14
20
|
viz = Class.new(Arel::Visitors::Visitor) {
|
@@ -161,11 +167,9 @@ module Arel
|
|
161
167
|
}
|
162
168
|
end
|
163
169
|
|
164
|
-
it "should
|
170
|
+
it "should return 1=0 when empty right which is always false" do
|
165
171
|
node = @attr.in []
|
166
|
-
@visitor.accept(node).
|
167
|
-
"users"."id" IN (NULL)
|
168
|
-
}
|
172
|
+
@visitor.accept(node).must_equal '1=0'
|
169
173
|
end
|
170
174
|
|
171
175
|
it 'can handle two dot ranges' do
|
@@ -249,11 +253,9 @@ module Arel
|
|
249
253
|
}
|
250
254
|
end
|
251
255
|
|
252
|
-
it "should
|
256
|
+
it "should return 1=1 when empty right which is always true" do
|
253
257
|
node = @attr.not_in []
|
254
|
-
@visitor.accept(node).
|
255
|
-
"users"."id" NOT IN (NULL)
|
256
|
-
}
|
258
|
+
@visitor.accept(node).must_equal '1=1'
|
257
259
|
end
|
258
260
|
|
259
261
|
it 'can handle two dot ranges' do
|
metadata
CHANGED
@@ -1,10 +1,15 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: arel
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 1
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
- 3
|
10
|
+
version: 3.0.3
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Aaron Patterson
|
9
14
|
- Bryan Halmkamp
|
10
15
|
- Emilio Tagua
|
@@ -12,56 +17,79 @@ authors:
|
|
12
17
|
autorequire:
|
13
18
|
bindir: bin
|
14
19
|
cert_chain: []
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
+
|
21
|
+
date: 2013-11-14 00:00:00 -02:00
|
22
|
+
default_executable:
|
23
|
+
dependencies:
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: minitest
|
26
|
+
prerelease: false
|
27
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
28
|
none: false
|
21
|
-
requirements:
|
29
|
+
requirements:
|
22
30
|
- - ~>
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
hash: 21
|
33
|
+
segments:
|
34
|
+
- 4
|
35
|
+
- 7
|
36
|
+
version: "4.7"
|
25
37
|
type: :development
|
26
|
-
|
27
|
-
|
28
|
-
- !ruby/object:Gem::Dependency
|
38
|
+
version_requirements: *id001
|
39
|
+
- !ruby/object:Gem::Dependency
|
29
40
|
name: rdoc
|
30
|
-
|
41
|
+
prerelease: false
|
42
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
43
|
none: false
|
32
|
-
requirements:
|
44
|
+
requirements:
|
33
45
|
- - ~>
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
hash: 27
|
48
|
+
segments:
|
49
|
+
- 4
|
50
|
+
- 0
|
51
|
+
version: "4.0"
|
36
52
|
type: :development
|
53
|
+
version_requirements: *id002
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: hoe
|
37
56
|
prerelease: false
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
57
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
hash: 9
|
63
|
+
segments:
|
64
|
+
- 3
|
65
|
+
- 7
|
66
|
+
version: "3.7"
|
67
|
+
type: :development
|
68
|
+
version_requirements: *id003
|
69
|
+
description: |-
|
70
|
+
Arel is a SQL AST manager for Ruby. It
|
71
|
+
|
42
72
|
1. Simplifies the generation of complex SQL queries
|
43
|
-
|
44
73
|
2. Adapts to various RDBMS systems
|
45
|
-
|
46
|
-
|
74
|
+
|
47
75
|
It is intended to be a framework framework; that is, you can build your own ORM
|
48
|
-
|
49
76
|
with it, focusing on innovative object and collection modeling as opposed to
|
50
|
-
|
51
|
-
|
52
|
-
email:
|
77
|
+
database compatibility and query generation.
|
78
|
+
email:
|
53
79
|
- aaron@tenderlovemaking.com
|
54
80
|
- bryan@brynary.com
|
55
81
|
- miloops@gmail.com
|
56
82
|
- nick@example.org
|
57
83
|
executables: []
|
84
|
+
|
58
85
|
extensions: []
|
59
|
-
|
86
|
+
|
87
|
+
extra_rdoc_files:
|
60
88
|
- History.txt
|
61
89
|
- MIT-LICENSE.txt
|
62
90
|
- Manifest.txt
|
63
91
|
- README.markdown
|
64
|
-
files:
|
92
|
+
files:
|
65
93
|
- .autotest
|
66
94
|
- .gemtest
|
67
95
|
- .travis.yml
|
@@ -93,6 +121,7 @@ files:
|
|
93
121
|
- lib/arel/nodes/delete_statement.rb
|
94
122
|
- lib/arel/nodes/descending.rb
|
95
123
|
- lib/arel/nodes/equality.rb
|
124
|
+
- lib/arel/nodes/extract.rb
|
96
125
|
- lib/arel/nodes/false.rb
|
97
126
|
- lib/arel/nodes/function.rb
|
98
127
|
- lib/arel/nodes/in.rb
|
@@ -104,6 +133,7 @@ files:
|
|
104
133
|
- lib/arel/nodes/node.rb
|
105
134
|
- lib/arel/nodes/ordering.rb
|
106
135
|
- lib/arel/nodes/outer_join.rb
|
136
|
+
- lib/arel/nodes/over.rb
|
107
137
|
- lib/arel/nodes/select_core.rb
|
108
138
|
- lib/arel/nodes/select_statement.rb
|
109
139
|
- lib/arel/nodes/sql_literal.rb
|
@@ -115,6 +145,7 @@ files:
|
|
115
145
|
- lib/arel/nodes/unqualified_column.rb
|
116
146
|
- lib/arel/nodes/update_statement.rb
|
117
147
|
- lib/arel/nodes/values.rb
|
148
|
+
- lib/arel/nodes/window.rb
|
118
149
|
- lib/arel/nodes/with.rb
|
119
150
|
- lib/arel/order_predications.rb
|
120
151
|
- lib/arel/predications.rb
|
@@ -126,6 +157,7 @@ files:
|
|
126
157
|
- lib/arel/tree_manager.rb
|
127
158
|
- lib/arel/update_manager.rb
|
128
159
|
- lib/arel/visitors.rb
|
160
|
+
- lib/arel/visitors/bind_visitor.rb
|
129
161
|
- lib/arel/visitors/depth_first.rb
|
130
162
|
- lib/arel/visitors/dot.rb
|
131
163
|
- lib/arel/visitors/ibm_db.rb
|
@@ -140,6 +172,7 @@ files:
|
|
140
172
|
- lib/arel/visitors/to_sql.rb
|
141
173
|
- lib/arel/visitors/visitor.rb
|
142
174
|
- lib/arel/visitors/where_sql.rb
|
175
|
+
- lib/arel/window_predications.rb
|
143
176
|
- test/attributes/test_attribute.rb
|
144
177
|
- test/helper.rb
|
145
178
|
- test/nodes/test_as.rb
|
@@ -149,12 +182,14 @@ files:
|
|
149
182
|
- test/nodes/test_delete_statement.rb
|
150
183
|
- test/nodes/test_descending.rb
|
151
184
|
- test/nodes/test_equality.rb
|
185
|
+
- test/nodes/test_extract.rb
|
152
186
|
- test/nodes/test_infix_operation.rb
|
153
187
|
- test/nodes/test_insert_statement.rb
|
154
188
|
- test/nodes/test_named_function.rb
|
155
189
|
- test/nodes/test_node.rb
|
156
190
|
- test/nodes/test_not.rb
|
157
191
|
- test/nodes/test_or.rb
|
192
|
+
- test/nodes/test_over.rb
|
158
193
|
- test/nodes/test_select_core.rb
|
159
194
|
- test/nodes/test_select_statement.rb
|
160
195
|
- test/nodes/test_sql_literal.rb
|
@@ -170,6 +205,7 @@ files:
|
|
170
205
|
- test/test_select_manager.rb
|
171
206
|
- test/test_table.rb
|
172
207
|
- test/test_update_manager.rb
|
208
|
+
- test/visitors/test_bind_visitor.rb
|
173
209
|
- test/visitors/test_depth_first.rb
|
174
210
|
- test/visitors/test_dot.rb
|
175
211
|
- test/visitors/test_ibm_db.rb
|
@@ -181,33 +217,42 @@ files:
|
|
181
217
|
- test/visitors/test_postgres.rb
|
182
218
|
- test/visitors/test_sqlite.rb
|
183
219
|
- test/visitors/test_to_sql.rb
|
220
|
+
has_rdoc: true
|
184
221
|
homepage: http://github.com/rails/arel
|
185
|
-
licenses:
|
222
|
+
licenses:
|
223
|
+
- MIT
|
186
224
|
post_install_message:
|
187
|
-
rdoc_options:
|
225
|
+
rdoc_options:
|
188
226
|
- --main
|
189
227
|
- README.markdown
|
190
|
-
require_paths:
|
228
|
+
require_paths:
|
191
229
|
- lib
|
192
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
230
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
193
231
|
none: false
|
194
|
-
requirements:
|
195
|
-
- -
|
196
|
-
- !ruby/object:Gem::Version
|
197
|
-
|
198
|
-
|
232
|
+
requirements:
|
233
|
+
- - ">="
|
234
|
+
- !ruby/object:Gem::Version
|
235
|
+
hash: 3
|
236
|
+
segments:
|
237
|
+
- 0
|
238
|
+
version: "0"
|
239
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
240
|
none: false
|
200
|
-
requirements:
|
201
|
-
- -
|
202
|
-
- !ruby/object:Gem::Version
|
203
|
-
|
241
|
+
requirements:
|
242
|
+
- - ">="
|
243
|
+
- !ruby/object:Gem::Version
|
244
|
+
hash: 3
|
245
|
+
segments:
|
246
|
+
- 0
|
247
|
+
version: "0"
|
204
248
|
requirements: []
|
249
|
+
|
205
250
|
rubyforge_project: arel
|
206
|
-
rubygems_version: 1.
|
251
|
+
rubygems_version: 1.6.2
|
207
252
|
signing_key:
|
208
253
|
specification_version: 3
|
209
254
|
summary: Arel is a SQL AST manager for Ruby
|
210
|
-
test_files:
|
255
|
+
test_files:
|
211
256
|
- test/attributes/test_attribute.rb
|
212
257
|
- test/nodes/test_as.rb
|
213
258
|
- test/nodes/test_ascending.rb
|
@@ -216,12 +261,14 @@ test_files:
|
|
216
261
|
- test/nodes/test_delete_statement.rb
|
217
262
|
- test/nodes/test_descending.rb
|
218
263
|
- test/nodes/test_equality.rb
|
264
|
+
- test/nodes/test_extract.rb
|
219
265
|
- test/nodes/test_infix_operation.rb
|
220
266
|
- test/nodes/test_insert_statement.rb
|
221
267
|
- test/nodes/test_named_function.rb
|
222
268
|
- test/nodes/test_node.rb
|
223
269
|
- test/nodes/test_not.rb
|
224
270
|
- test/nodes/test_or.rb
|
271
|
+
- test/nodes/test_over.rb
|
225
272
|
- test/nodes/test_select_core.rb
|
226
273
|
- test/nodes/test_select_statement.rb
|
227
274
|
- test/nodes/test_sql_literal.rb
|
@@ -236,6 +283,7 @@ test_files:
|
|
236
283
|
- test/test_select_manager.rb
|
237
284
|
- test/test_table.rb
|
238
285
|
- test/test_update_manager.rb
|
286
|
+
- test/visitors/test_bind_visitor.rb
|
239
287
|
- test/visitors/test_depth_first.rb
|
240
288
|
- test/visitors/test_dot.rb
|
241
289
|
- test/visitors/test_ibm_db.rb
|