arel 2.1.3 → 2.1.4

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/History.txt CHANGED
@@ -1,3 +1,10 @@
1
+ == 2.1.4 / 2011-07-25
2
+
3
+ * Bug Fixes
4
+
5
+ * Fix depth-first traversal to understand ascending / descending nodes.
6
+ * Parentheis are suppressed with nested unions in MySQL. Thanks jhtwong!
7
+
1
8
  == 2.1.3 / 2011-06-27
2
9
 
3
10
  * Bug Fixues
data/arel.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{arel}
5
- s.version = "2.1.3.20110627095956"
5
+ s.version = "2.1.4.20110725155854"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
- s.authors = [%q{Aaron Patterson}, %q{Bryan Halmkamp}, %q{Emilio Tagua}, %q{Nick Kallen}]
9
- s.date = %q{2011-06-27}
8
+ s.authors = ["Aaron Patterson", "Bryan Halmkamp", "Emilio Tagua", "Nick Kallen"]
9
+ s.date = %q{2011-07-25}
10
10
  s.description = %q{Arel is a SQL AST manager for Ruby. It
11
11
 
12
12
  1. Simplifies the generation complex of SQL queries
@@ -15,29 +15,30 @@ Gem::Specification.new do |s|
15
15
  It is intended to be a framework framework; that is, you can build your own ORM
16
16
  with it, focusing on innovative object and collection modeling as opposed to
17
17
  database compatibility and query generation.}
18
- s.email = [%q{aaron@tenderlovemaking.com}, %q{bryan@brynary.com}, %q{miloops@gmail.com}, %q{nick@example.org}]
19
- s.extra_rdoc_files = [%q{History.txt}, %q{MIT-LICENSE.txt}, %q{Manifest.txt}, %q{README.markdown}]
20
- s.files = [%q{.autotest}, %q{.gemtest}, %q{History.txt}, %q{MIT-LICENSE.txt}, %q{Manifest.txt}, %q{README.markdown}, %q{Rakefile}, %q{arel.gemspec}, %q{lib/arel.rb}, %q{lib/arel/alias_predication.rb}, %q{lib/arel/attributes.rb}, %q{lib/arel/attributes/attribute.rb}, %q{lib/arel/compatibility/wheres.rb}, %q{lib/arel/crud.rb}, %q{lib/arel/delete_manager.rb}, %q{lib/arel/deprecated.rb}, %q{lib/arel/expression.rb}, %q{lib/arel/expressions.rb}, %q{lib/arel/factory_methods.rb}, %q{lib/arel/insert_manager.rb}, %q{lib/arel/math.rb}, %q{lib/arel/nodes.rb}, %q{lib/arel/nodes/and.rb}, %q{lib/arel/nodes/ascending.rb}, %q{lib/arel/nodes/binary.rb}, %q{lib/arel/nodes/count.rb}, %q{lib/arel/nodes/delete_statement.rb}, %q{lib/arel/nodes/descending.rb}, %q{lib/arel/nodes/equality.rb}, %q{lib/arel/nodes/function.rb}, %q{lib/arel/nodes/in.rb}, %q{lib/arel/nodes/infix_operation.rb}, %q{lib/arel/nodes/inner_join.rb}, %q{lib/arel/nodes/insert_statement.rb}, %q{lib/arel/nodes/join_source.rb}, %q{lib/arel/nodes/named_function.rb}, %q{lib/arel/nodes/node.rb}, %q{lib/arel/nodes/ordering.rb}, %q{lib/arel/nodes/outer_join.rb}, %q{lib/arel/nodes/select_core.rb}, %q{lib/arel/nodes/select_statement.rb}, %q{lib/arel/nodes/sql_literal.rb}, %q{lib/arel/nodes/string_join.rb}, %q{lib/arel/nodes/table_alias.rb}, %q{lib/arel/nodes/terminal.rb}, %q{lib/arel/nodes/unary.rb}, %q{lib/arel/nodes/unqualified_column.rb}, %q{lib/arel/nodes/update_statement.rb}, %q{lib/arel/nodes/values.rb}, %q{lib/arel/nodes/with.rb}, %q{lib/arel/order_predications.rb}, %q{lib/arel/predications.rb}, %q{lib/arel/relation.rb}, %q{lib/arel/select_manager.rb}, %q{lib/arel/sql/engine.rb}, %q{lib/arel/sql_literal.rb}, %q{lib/arel/table.rb}, %q{lib/arel/tree_manager.rb}, %q{lib/arel/update_manager.rb}, %q{lib/arel/visitors.rb}, %q{lib/arel/visitors/depth_first.rb}, %q{lib/arel/visitors/dot.rb}, %q{lib/arel/visitors/ibm_db.rb}, %q{lib/arel/visitors/informix.rb}, %q{lib/arel/visitors/join_sql.rb}, %q{lib/arel/visitors/mssql.rb}, %q{lib/arel/visitors/mysql.rb}, %q{lib/arel/visitors/oracle.rb}, %q{lib/arel/visitors/order_clauses.rb}, %q{lib/arel/visitors/postgresql.rb}, %q{lib/arel/visitors/sqlite.rb}, %q{lib/arel/visitors/to_sql.rb}, %q{lib/arel/visitors/visitor.rb}, %q{lib/arel/visitors/where_sql.rb}, %q{test/attributes/test_attribute.rb}, %q{test/helper.rb}, %q{test/nodes/test_as.rb}, %q{test/nodes/test_ascending.rb}, %q{test/nodes/test_bin.rb}, %q{test/nodes/test_count.rb}, %q{test/nodes/test_delete_statement.rb}, %q{test/nodes/test_descending.rb}, %q{test/nodes/test_equality.rb}, %q{test/nodes/test_infix_operation.rb}, %q{test/nodes/test_insert_statement.rb}, %q{test/nodes/test_named_function.rb}, %q{test/nodes/test_node.rb}, %q{test/nodes/test_not.rb}, %q{test/nodes/test_or.rb}, %q{test/nodes/test_select_core.rb}, %q{test/nodes/test_select_statement.rb}, %q{test/nodes/test_sql_literal.rb}, %q{test/nodes/test_sum.rb}, %q{test/nodes/test_update_statement.rb}, %q{test/support/fake_record.rb}, %q{test/test_activerecord_compat.rb}, %q{test/test_attributes.rb}, %q{test/test_crud.rb}, %q{test/test_delete_manager.rb}, %q{test/test_factory_methods.rb}, %q{test/test_insert_manager.rb}, %q{test/test_select_manager.rb}, %q{test/test_table.rb}, %q{test/test_update_manager.rb}, %q{test/visitors/test_depth_first.rb}, %q{test/visitors/test_dot.rb}, %q{test/visitors/test_ibm_db.rb}, %q{test/visitors/test_informix.rb}, %q{test/visitors/test_join_sql.rb}, %q{test/visitors/test_mssql.rb}, %q{test/visitors/test_mysql.rb}, %q{test/visitors/test_oracle.rb}, %q{test/visitors/test_postgres.rb}, %q{test/visitors/test_sqlite.rb}, %q{test/visitors/test_to_sql.rb}]
18
+ s.email = ["aaron@tenderlovemaking.com", "bryan@brynary.com", "miloops@gmail.com", "nick@example.org"]
19
+ s.extra_rdoc_files = ["History.txt", "MIT-LICENSE.txt", "Manifest.txt", "README.markdown"]
20
+ s.files = [".autotest", ".gemtest", "History.txt", "MIT-LICENSE.txt", "Manifest.txt", "README.markdown", "Rakefile", "arel.gemspec", "lib/arel.rb", "lib/arel/alias_predication.rb", "lib/arel/attributes.rb", "lib/arel/attributes/attribute.rb", "lib/arel/compatibility/wheres.rb", "lib/arel/crud.rb", "lib/arel/delete_manager.rb", "lib/arel/deprecated.rb", "lib/arel/expression.rb", "lib/arel/expressions.rb", "lib/arel/factory_methods.rb", "lib/arel/insert_manager.rb", "lib/arel/math.rb", "lib/arel/nodes.rb", "lib/arel/nodes/and.rb", "lib/arel/nodes/ascending.rb", "lib/arel/nodes/binary.rb", "lib/arel/nodes/count.rb", "lib/arel/nodes/delete_statement.rb", "lib/arel/nodes/descending.rb", "lib/arel/nodes/equality.rb", "lib/arel/nodes/function.rb", "lib/arel/nodes/in.rb", "lib/arel/nodes/infix_operation.rb", "lib/arel/nodes/inner_join.rb", "lib/arel/nodes/insert_statement.rb", "lib/arel/nodes/join_source.rb", "lib/arel/nodes/named_function.rb", "lib/arel/nodes/node.rb", "lib/arel/nodes/ordering.rb", "lib/arel/nodes/outer_join.rb", "lib/arel/nodes/select_core.rb", "lib/arel/nodes/select_statement.rb", "lib/arel/nodes/sql_literal.rb", "lib/arel/nodes/string_join.rb", "lib/arel/nodes/table_alias.rb", "lib/arel/nodes/terminal.rb", "lib/arel/nodes/unary.rb", "lib/arel/nodes/unqualified_column.rb", "lib/arel/nodes/update_statement.rb", "lib/arel/nodes/values.rb", "lib/arel/nodes/with.rb", "lib/arel/order_predications.rb", "lib/arel/predications.rb", "lib/arel/relation.rb", "lib/arel/select_manager.rb", "lib/arel/sql/engine.rb", "lib/arel/sql_literal.rb", "lib/arel/table.rb", "lib/arel/tree_manager.rb", "lib/arel/update_manager.rb", "lib/arel/visitors.rb", "lib/arel/visitors/depth_first.rb", "lib/arel/visitors/dot.rb", "lib/arel/visitors/ibm_db.rb", "lib/arel/visitors/informix.rb", "lib/arel/visitors/join_sql.rb", "lib/arel/visitors/mssql.rb", "lib/arel/visitors/mysql.rb", "lib/arel/visitors/oracle.rb", "lib/arel/visitors/order_clauses.rb", "lib/arel/visitors/postgresql.rb", "lib/arel/visitors/sqlite.rb", "lib/arel/visitors/to_sql.rb", "lib/arel/visitors/visitor.rb", "lib/arel/visitors/where_sql.rb", "test/attributes/test_attribute.rb", "test/helper.rb", "test/nodes/test_as.rb", "test/nodes/test_ascending.rb", "test/nodes/test_bin.rb", "test/nodes/test_count.rb", "test/nodes/test_delete_statement.rb", "test/nodes/test_descending.rb", "test/nodes/test_equality.rb", "test/nodes/test_infix_operation.rb", "test/nodes/test_insert_statement.rb", "test/nodes/test_named_function.rb", "test/nodes/test_node.rb", "test/nodes/test_not.rb", "test/nodes/test_or.rb", "test/nodes/test_select_core.rb", "test/nodes/test_select_statement.rb", "test/nodes/test_sql_literal.rb", "test/nodes/test_sum.rb", "test/nodes/test_update_statement.rb", "test/support/fake_record.rb", "test/test_activerecord_compat.rb", "test/test_attributes.rb", "test/test_crud.rb", "test/test_delete_manager.rb", "test/test_factory_methods.rb", "test/test_insert_manager.rb", "test/test_select_manager.rb", "test/test_table.rb", "test/test_update_manager.rb", "test/visitors/test_depth_first.rb", "test/visitors/test_dot.rb", "test/visitors/test_ibm_db.rb", "test/visitors/test_informix.rb", "test/visitors/test_join_sql.rb", "test/visitors/test_mssql.rb", "test/visitors/test_mysql.rb", "test/visitors/test_oracle.rb", "test/visitors/test_postgres.rb", "test/visitors/test_sqlite.rb", "test/visitors/test_to_sql.rb"]
21
21
  s.homepage = %q{http://github.com/rails/arel}
22
- s.rdoc_options = [%q{--main}, %q{README.markdown}]
23
- s.require_paths = [%q{lib}]
22
+ s.rdoc_options = ["--main", "README.markdown"]
23
+ s.require_paths = ["lib"]
24
24
  s.rubyforge_project = %q{arel}
25
- s.rubygems_version = %q{1.8.5}
25
+ s.rubygems_version = %q{1.3.6}
26
26
  s.summary = %q{Arel is a SQL AST manager for Ruby}
27
- s.test_files = [%q{test/attributes/test_attribute.rb}, %q{test/nodes/test_as.rb}, %q{test/nodes/test_ascending.rb}, %q{test/nodes/test_bin.rb}, %q{test/nodes/test_count.rb}, %q{test/nodes/test_delete_statement.rb}, %q{test/nodes/test_descending.rb}, %q{test/nodes/test_equality.rb}, %q{test/nodes/test_infix_operation.rb}, %q{test/nodes/test_insert_statement.rb}, %q{test/nodes/test_named_function.rb}, %q{test/nodes/test_node.rb}, %q{test/nodes/test_not.rb}, %q{test/nodes/test_or.rb}, %q{test/nodes/test_select_core.rb}, %q{test/nodes/test_select_statement.rb}, %q{test/nodes/test_sql_literal.rb}, %q{test/nodes/test_sum.rb}, %q{test/nodes/test_update_statement.rb}, %q{test/test_activerecord_compat.rb}, %q{test/test_attributes.rb}, %q{test/test_crud.rb}, %q{test/test_delete_manager.rb}, %q{test/test_factory_methods.rb}, %q{test/test_insert_manager.rb}, %q{test/test_select_manager.rb}, %q{test/test_table.rb}, %q{test/test_update_manager.rb}, %q{test/visitors/test_depth_first.rb}, %q{test/visitors/test_dot.rb}, %q{test/visitors/test_ibm_db.rb}, %q{test/visitors/test_informix.rb}, %q{test/visitors/test_join_sql.rb}, %q{test/visitors/test_mssql.rb}, %q{test/visitors/test_mysql.rb}, %q{test/visitors/test_oracle.rb}, %q{test/visitors/test_postgres.rb}, %q{test/visitors/test_sqlite.rb}, %q{test/visitors/test_to_sql.rb}]
27
+ s.test_files = ["test/attributes/test_attribute.rb", "test/nodes/test_as.rb", "test/nodes/test_ascending.rb", "test/nodes/test_bin.rb", "test/nodes/test_count.rb", "test/nodes/test_delete_statement.rb", "test/nodes/test_descending.rb", "test/nodes/test_equality.rb", "test/nodes/test_infix_operation.rb", "test/nodes/test_insert_statement.rb", "test/nodes/test_named_function.rb", "test/nodes/test_node.rb", "test/nodes/test_not.rb", "test/nodes/test_or.rb", "test/nodes/test_select_core.rb", "test/nodes/test_select_statement.rb", "test/nodes/test_sql_literal.rb", "test/nodes/test_sum.rb", "test/nodes/test_update_statement.rb", "test/test_activerecord_compat.rb", "test/test_attributes.rb", "test/test_crud.rb", "test/test_delete_manager.rb", "test/test_factory_methods.rb", "test/test_insert_manager.rb", "test/test_select_manager.rb", "test/test_table.rb", "test/test_update_manager.rb", "test/visitors/test_depth_first.rb", "test/visitors/test_dot.rb", "test/visitors/test_ibm_db.rb", "test/visitors/test_informix.rb", "test/visitors/test_join_sql.rb", "test/visitors/test_mssql.rb", "test/visitors/test_mysql.rb", "test/visitors/test_oracle.rb", "test/visitors/test_postgres.rb", "test/visitors/test_sqlite.rb", "test/visitors/test_to_sql.rb"]
28
28
 
29
29
  if s.respond_to? :specification_version then
30
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
30
31
  s.specification_version = 3
31
32
 
32
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
33
- s.add_development_dependency(%q<minitest>, [">= 2.2.2"])
34
- s.add_development_dependency(%q<hoe>, [">= 2.9.4"])
33
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
34
+ s.add_development_dependency(%q<minitest>, ["~> 2.3"])
35
+ s.add_development_dependency(%q<hoe>, ["~> 2.9"])
35
36
  else
36
- s.add_dependency(%q<minitest>, [">= 2.2.2"])
37
- s.add_dependency(%q<hoe>, [">= 2.9.4"])
37
+ s.add_dependency(%q<minitest>, ["~> 2.3"])
38
+ s.add_dependency(%q<hoe>, ["~> 2.9"])
38
39
  end
39
40
  else
40
- s.add_dependency(%q<minitest>, [">= 2.2.2"])
41
- s.add_dependency(%q<hoe>, [">= 2.9.4"])
41
+ s.add_dependency(%q<minitest>, ["~> 2.3"])
42
+ s.add_dependency(%q<hoe>, ["~> 2.9"])
42
43
  end
43
44
  end
data/lib/arel.rb CHANGED
@@ -33,7 +33,7 @@ require 'arel/sql_literal'
33
33
  ####
34
34
 
35
35
  module Arel
36
- VERSION = '2.1.3'
36
+ VERSION = '2.1.4'
37
37
 
38
38
  def self.sql raw_sql
39
39
  Arel::Nodes::SqlLiteral.new raw_sql
@@ -23,6 +23,8 @@ module Arel
23
23
  alias :visit_Arel_Nodes_Offset :unary
24
24
  alias :visit_Arel_Nodes_On :unary
25
25
  alias :visit_Arel_Nodes_Ordering :unary
26
+ alias :visit_Arel_Nodes_Ascending :unary
27
+ alias :visit_Arel_Nodes_Descending :unary
26
28
  alias :visit_Arel_Nodes_Top :unary
27
29
  alias :visit_Arel_Nodes_UnqualifiedColumn :unary
28
30
 
@@ -2,6 +2,28 @@ module Arel
2
2
  module Visitors
3
3
  class MySQL < Arel::Visitors::ToSql
4
4
  private
5
+ def visit_Arel_Nodes_Union o, suppress_parens = false
6
+ left_result = case o.left
7
+ when Arel::Nodes::Union
8
+ visit_Arel_Nodes_Union o.left, true
9
+ else
10
+ visit o.left
11
+ end
12
+
13
+ right_result = case o.right
14
+ when Arel::Nodes::Union
15
+ visit_Arel_Nodes_Union o.right, true
16
+ else
17
+ visit o.right
18
+ end
19
+
20
+ if suppress_parens
21
+ "#{left_result} UNION #{right_result}"
22
+ else
23
+ "( #{left_result} UNION #{right_result} )"
24
+ end
25
+ end
26
+
5
27
  def visit_Arel_Nodes_Bin o
6
28
  "BINARY #{visit o.expr}"
7
29
  end
@@ -412,6 +412,15 @@ module Arel
412
412
  ast = mgr.ast
413
413
  mgr.visitor.accept(ast).must_equal mgr.to_sql
414
414
  end
415
+ it 'should allow orders to work when the ast is grepped' do
416
+ table = Table.new :users
417
+ mgr = table.from table
418
+ mgr.project Arel.sql '*'
419
+ mgr.from table
420
+ mgr.orders << Arel::Nodes::Ascending.new(Arel.sql('foo'))
421
+ mgr.ast.grep(Arel::Nodes::OuterJoin)
422
+ mgr.to_sql.must_be_like %{ SELECT * FROM "users" ORDER BY foo ASC }
423
+ end
415
424
  end
416
425
 
417
426
  describe 'taken' do
@@ -7,6 +7,16 @@ module Arel
7
7
  @visitor = MySQL.new Table.engine
8
8
  end
9
9
 
10
+ it 'squashes parenthesis on multiple unions' do
11
+ subnode = Nodes::Union.new 'left', 'right'
12
+ node = Nodes::Union.new subnode, 'topright'
13
+ assert_equal 1, @visitor.accept(node).scan('(').length
14
+
15
+ subnode = Nodes::Union.new 'left', 'right'
16
+ node = Nodes::Union.new 'topleft', subnode
17
+ assert_equal 1, @visitor.accept(node).scan('(').length
18
+ end
19
+
10
20
  ###
11
21
  # :'(
12
22
  # http://dev.mysql.com/doc/refman/5.0/en/select.html#id3482214
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arel
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
5
- prerelease:
4
+ prerelease: false
6
5
  segments:
7
6
  - 2
8
7
  - 1
9
- - 3
10
- version: 2.1.3
8
+ - 4
9
+ version: 2.1.4
11
10
  platform: ruby
12
11
  authors:
13
12
  - Aaron Patterson
@@ -18,23 +17,35 @@ autorequire:
18
17
  bindir: bin
19
18
  cert_chain: []
20
19
 
21
- date: 2011-06-27 00:00:00 Z
20
+ date: 2011-07-25 00:00:00 -07:00
21
+ default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
- name: hoe
24
+ name: minitest
25
25
  prerelease: false
26
26
  requirement: &id001 !ruby/object:Gem::Requirement
27
- none: false
28
27
  requirements:
29
28
  - - ~>
30
29
  - !ruby/object:Gem::Version
31
- hash: 17
30
+ segments:
31
+ - 2
32
+ - 3
33
+ version: "2.3"
34
+ type: :development
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: hoe
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
32
43
  segments:
33
44
  - 2
34
45
  - 9
35
46
  version: "2.9"
36
47
  type: :development
37
- version_requirements: *id001
48
+ version_requirements: *id002
38
49
  description: |-
39
50
  Arel is a SQL AST manager for Ruby. It
40
51
 
@@ -174,6 +185,7 @@ files:
174
185
  - test/visitors/test_postgres.rb
175
186
  - test/visitors/test_sqlite.rb
176
187
  - test/visitors/test_to_sql.rb
188
+ has_rdoc: true
177
189
  homepage: http://github.com/rails/arel
178
190
  licenses: []
179
191
 
@@ -184,27 +196,23 @@ rdoc_options:
184
196
  require_paths:
185
197
  - lib
186
198
  required_ruby_version: !ruby/object:Gem::Requirement
187
- none: false
188
199
  requirements:
189
200
  - - ">="
190
201
  - !ruby/object:Gem::Version
191
- hash: 3
192
202
  segments:
193
203
  - 0
194
204
  version: "0"
195
205
  required_rubygems_version: !ruby/object:Gem::Requirement
196
- none: false
197
206
  requirements:
198
207
  - - ">="
199
208
  - !ruby/object:Gem::Version
200
- hash: 3
201
209
  segments:
202
210
  - 0
203
211
  version: "0"
204
212
  requirements: []
205
213
 
206
214
  rubyforge_project: arel
207
- rubygems_version: 1.8.2
215
+ rubygems_version: 1.3.6
208
216
  signing_key:
209
217
  specification_version: 3
210
218
  summary: Arel is a SQL AST manager for Ruby