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.
@@ -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.having = :e
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
@@ -102,7 +102,7 @@ module Arel
102
102
  SELECT * FROM (
103
103
  SELECT raw_sql_.*, rownum raw_rnum_
104
104
  FROM (SELECT) raw_sql_
105
- WHERE rownum <= 20
105
+ WHERE rownum <= 20
106
106
  )
107
107
  WHERE raw_rnum_ > 10
108
108
  }
@@ -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 turn empty right to NULL" do
170
+ it "should return 1=0 when empty right which is always false" do
165
171
  node = @attr.in []
166
- @visitor.accept(node).must_be_like %{
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 turn empty right to NULL" do
256
+ it "should return 1=1 when empty right which is always true" do
253
257
  node = @attr.not_in []
254
- @visitor.accept(node).must_be_like %{
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
- version: 3.0.0
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
- date: 2012-01-12 00:00:00.000000000 Z
16
- dependencies:
17
- - !ruby/object:Gem::Dependency
18
- name: hoe
19
- requirement: &70284393537020 !ruby/object:Gem::Requirement
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
- version: '2.12'
31
+ - !ruby/object:Gem::Version
32
+ hash: 21
33
+ segments:
34
+ - 4
35
+ - 7
36
+ version: "4.7"
25
37
  type: :development
26
- prerelease: false
27
- version_requirements: *70284393537020
28
- - !ruby/object:Gem::Dependency
38
+ version_requirements: *id001
39
+ - !ruby/object:Gem::Dependency
29
40
  name: rdoc
30
- requirement: &70284393837600 !ruby/object:Gem::Requirement
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
- version: '3.10'
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
- version_requirements: *70284393837600
39
- description: ! 'Arel is a SQL AST manager for Ruby. It
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
- database compatibility and query generation.'
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
- extra_rdoc_files:
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
- version: '0'
198
- required_rubygems_version: !ruby/object:Gem::Requirement
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
- version: '0'
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.8.11
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