arel 2.1.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,10 @@
1
+ == 2.1.1 / 2011/05/14
2
+
3
+ * Bug fixes
4
+
5
+ * Fixed thread safety bug in ToSql visitor. Thanks Damon McCormick and
6
+ Cameron Walters!
7
+
1
8
  == 2.1.0 / 2011/04/30
2
9
 
3
10
  * Enhancements
@@ -33,7 +33,7 @@ require 'arel/sql_literal'
33
33
  ####
34
34
 
35
35
  module Arel
36
- VERSION = '2.1.0'
36
+ VERSION = '2.1.1'
37
37
 
38
38
  def self.sql raw_sql
39
39
  Arel::Nodes::SqlLiteral.new raw_sql
@@ -4,6 +4,7 @@ module Arel
4
4
  class InfixOperation < Binary
5
5
  include Arel::Expressions
6
6
  include Arel::Predications
7
+ include Arel::OrderPredications
7
8
  include Arel::AliasPredication
8
9
  include Arel::Math
9
10
 
@@ -8,14 +8,13 @@ module Arel
8
8
  @engine = engine
9
9
  @connection = nil
10
10
  @pool = nil
11
- @last_column = nil
12
11
  @quoted_tables = {}
13
12
  @quoted_columns = {}
14
13
  end
15
14
 
16
15
  def accept object
17
- @last_column = nil
18
- @pool = @engine.connection_pool
16
+ self.last_column = nil
17
+ @pool = @engine.connection_pool
19
18
  @pool.with_connection do |conn|
20
19
  @connection = conn
21
20
  super
@@ -23,6 +22,14 @@ module Arel
23
22
  end
24
23
 
25
24
  private
25
+ def last_column= col
26
+ Thread.current[:arel_visitors_to_sql_last_column] = col
27
+ end
28
+
29
+ def last_column
30
+ Thread.current[:arel_visitors_to_sql_last_column]
31
+ end
32
+
26
33
  def visit_Arel_Nodes_DeleteStatement o
27
34
  [
28
35
  "DELETE FROM #{visit o.relation}",
@@ -356,7 +363,7 @@ key on UpdateManager using UpdateManager#key=
356
363
  end
357
364
 
358
365
  def visit_Arel_Attributes_Attribute o
359
- @last_column = column_for o
366
+ self.last_column = column_for o
360
367
  join_name = o.relation.table_alias || o.relation.name
361
368
  "#{quote_table_name join_name}.#{quote_column_name o.name}"
362
369
  end
@@ -374,7 +381,7 @@ key on UpdateManager using UpdateManager#key=
374
381
  alias :visit_Bignum :literal
375
382
  alias :visit_Fixnum :literal
376
383
 
377
- def quoted o; quote(o, @last_column) end
384
+ def quoted o; quote(o, last_column) end
378
385
 
379
386
  alias :visit_ActiveSupport_Multibyte_Chars :quoted
380
387
  alias :visit_ActiveSupport_StringInquirer :quoted
@@ -409,7 +416,8 @@ key on UpdateManager using UpdateManager#key=
409
416
  end
410
417
 
411
418
  def quote_table_name name
412
- @quoted_tables[name] ||= Arel::Nodes::SqlLiteral === name ? name : @connection.quote_table_name(name)
419
+ return name if Arel::Nodes::SqlLiteral === name
420
+ @quoted_tables[name] ||= @connection.quote_table_name(name)
413
421
  end
414
422
 
415
423
  def quote_column_name name
@@ -0,0 +1,30 @@
1
+ require 'helper'
2
+
3
+ module Arel
4
+ module Nodes
5
+ class TestInfixOperation < MiniTest::Unit::TestCase
6
+ def test_construct
7
+ operation = InfixOperation.new :+, 1, 2
8
+ assert_equal :+, operation.operator
9
+ assert_equal 1, operation.left
10
+ assert_equal 2, operation.right
11
+ end
12
+
13
+ def test_operation_alias
14
+ operation = InfixOperation.new :+, 1, 2
15
+ aliaz = operation.as('zomg')
16
+ assert_kind_of As, aliaz
17
+ assert_equal operation, aliaz.left
18
+ assert_equal 'zomg', aliaz.right
19
+ end
20
+
21
+ def test_opertaion_ordering
22
+ operation = InfixOperation.new :+, 1, 2
23
+ ordering = operation.desc
24
+ assert_kind_of Ordering, ordering
25
+ assert_equal operation, ordering.expr
26
+ assert_equal :desc, ordering.direction
27
+ end
28
+ end
29
+ end
30
+ end
@@ -216,7 +216,7 @@ module Arel
216
216
  table = Table.new :users, :engine => Table.engine, :as => 'foo'
217
217
  mgr = table.from table
218
218
  mgr.skip 10
219
- mgr.to_sql.must_be_like %{ SELECT FROM "users" foo OFFSET 10 }
219
+ mgr.to_sql.must_be_like %{ SELECT FROM "users" "foo" OFFSET 10 }
220
220
  end
221
221
  end
222
222
 
@@ -1,5 +1,9 @@
1
1
  require 'helper'
2
2
 
3
+ class Arel::Visitors::ToSql
4
+ def last_column; Thread.current[:arel_visitors_to_sql_last_column]; end
5
+ end
6
+
3
7
  module Arel
4
8
  module Visitors
5
9
  describe 'the to_sql visitor' do
@@ -9,6 +13,20 @@ module Arel
9
13
  @attr = @table[:id]
10
14
  end
11
15
 
16
+ it "should be thread safe around usage of last_column" do
17
+ visit_integer_column = Thread.new do
18
+ Thread.stop
19
+ @visitor.send(:visit_Arel_Attributes_Attribute, @attr)
20
+ end
21
+
22
+ sleep 0.2
23
+ @visitor.accept(@table[:name])
24
+ assert_equal(:string, @visitor.last_column.type)
25
+ visit_integer_column.run
26
+ visit_integer_column.join
27
+ assert_equal(:string, @visitor.last_column.type)
28
+ end
29
+
12
30
  it 'should not quote sql literals' do
13
31
  node = @table[Arel.star]
14
32
  sql = @visitor.accept node
metadata CHANGED
@@ -1,15 +1,10 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: arel
3
- version: !ruby/object:Gem::Version
4
- hash: 11
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.1.1
5
5
  prerelease:
6
- segments:
7
- - 2
8
- - 1
9
- - 0
10
- version: 2.1.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Aaron Patterson
14
9
  - Bryan Halmkamp
15
10
  - Emilio Tagua
@@ -17,49 +12,56 @@ authors:
17
12
  autorequire:
18
13
  bindir: bin
19
14
  cert_chain: []
20
-
21
- date: 2011-05-01 00:00:00 Z
22
- dependencies:
23
- - !ruby/object:Gem::Dependency
24
- name: hoe
15
+ date: 2011-05-17 00:00:00.000000000 Z
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: minitest
19
+ requirement: &2156937040 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ! '>='
23
+ - !ruby/object:Gem::Version
24
+ version: 2.0.2
25
+ type: :development
25
26
  prerelease: false
26
- requirement: &id001 !ruby/object:Gem::Requirement
27
+ version_requirements: *2156937040
28
+ - !ruby/object:Gem::Dependency
29
+ name: hoe
30
+ requirement: &2156936540 !ruby/object:Gem::Requirement
27
31
  none: false
28
- requirements:
29
- - - ">="
30
- - !ruby/object:Gem::Version
31
- hash: 35
32
- segments:
33
- - 2
34
- - 9
35
- - 4
36
- version: 2.9.4
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: 2.9.1
37
36
  type: :development
38
- version_requirements: *id001
39
- description: |-
40
- Arel is a SQL AST manager for Ruby. It
41
-
37
+ prerelease: false
38
+ version_requirements: *2156936540
39
+ description: ! 'Arel is a SQL AST manager for Ruby. It
40
+
41
+
42
42
  1. Simplifies the generation complex of SQL queries
43
+
43
44
  2. Adapts to various RDBMS systems
44
-
45
+
46
+
45
47
  It is intended to be a framework framework; that is, you can build your own ORM
48
+
46
49
  with it, focusing on innovative object and collection modeling as opposed to
47
- database compatibility and query generation.
48
- email:
50
+
51
+ database compatibility and query generation.'
52
+ email:
49
53
  - aaron@tenderlovemaking.com
50
54
  - bryan@brynary.com
51
55
  - miloops@gmail.com
52
56
  - nick@example.org
53
57
  executables: []
54
-
55
58
  extensions: []
56
-
57
- extra_rdoc_files:
59
+ extra_rdoc_files:
58
60
  - History.txt
59
61
  - MIT-LICENSE.txt
60
62
  - Manifest.txt
61
63
  - README.markdown
62
- files:
64
+ files:
63
65
  - .autotest
64
66
  - .gemtest
65
67
  - History.txt
@@ -168,47 +170,41 @@ files:
168
170
  - test/visitors/test_postgres.rb
169
171
  - test/visitors/test_sqlite.rb
170
172
  - test/visitors/test_to_sql.rb
173
+ - test/nodes/test_infix_operation.rb
171
174
  homepage: http://github.com/rails/arel
172
175
  licenses: []
173
-
174
176
  post_install_message:
175
- rdoc_options:
177
+ rdoc_options:
176
178
  - --main
177
179
  - README.markdown
178
- require_paths:
180
+ require_paths:
179
181
  - lib
180
- required_ruby_version: !ruby/object:Gem::Requirement
182
+ required_ruby_version: !ruby/object:Gem::Requirement
181
183
  none: false
182
- requirements:
183
- - - ">="
184
- - !ruby/object:Gem::Version
185
- hash: 3
186
- segments:
187
- - 0
188
- version: "0"
189
- required_rubygems_version: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ! '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ required_rubygems_version: !ruby/object:Gem::Requirement
190
189
  none: false
191
- requirements:
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- hash: 3
195
- segments:
196
- - 0
197
- version: "0"
190
+ requirements:
191
+ - - ! '>='
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
198
194
  requirements: []
199
-
200
195
  rubyforge_project: arel
201
- rubygems_version: 1.7.2
196
+ rubygems_version: 1.8.2
202
197
  signing_key:
203
198
  specification_version: 3
204
199
  summary: Arel is a SQL AST manager for Ruby
205
- test_files:
200
+ test_files:
206
201
  - test/attributes/test_attribute.rb
207
202
  - test/nodes/test_as.rb
208
203
  - test/nodes/test_bin.rb
209
204
  - test/nodes/test_count.rb
210
205
  - test/nodes/test_delete_statement.rb
211
206
  - test/nodes/test_equality.rb
207
+ - test/nodes/test_infix_operation.rb
212
208
  - test/nodes/test_insert_statement.rb
213
209
  - test/nodes/test_named_function.rb
214
210
  - test/nodes/test_node.rb