arel 2.1.0 → 2.1.1

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.
@@ -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