From f771b71d1d7cb75e4d19b85e33a85f659088f17f Mon Sep 17 00:00:00 2001 From: John Mileham Date: Fri, 25 Mar 2011 02:13:21 +0800 Subject: Make SelectManager#as act like node predications --- lib/arel/select_manager.rb | 4 ++-- test/test_select_manager.rb | 20 ++++++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/lib/arel/select_manager.rb b/lib/arel/select_manager.rb index 34a86da68d..de68b25b64 100644 --- a/lib/arel/select_manager.rb +++ b/lib/arel/select_manager.rb @@ -38,8 +38,8 @@ module Arel Arel::Nodes::Exists.new @ast end - def as node, expr - Arel::Nodes::As.new node, expr + def as other + Nodes::As.new grouping(@ast), Nodes::SqlLiteral.new(other) end def where_clauses diff --git a/test/test_select_manager.rb b/test/test_select_manager.rb index 799c9fe453..7f276d071f 100644 --- a/test/test_select_manager.rb +++ b/test/test_select_manager.rb @@ -91,6 +91,22 @@ module Arel end end + describe 'as' do + it 'makes an AS node by grouping the AST' do + manager = Arel::SelectManager.new Table.engine + as = manager.as(Arel.sql('foo')) + assert_kind_of Arel::Nodes::Grouping, as.left + assert_equal manager.ast, as.left.expr + assert_equal 'foo', as.right + end + + it 'converts right to SqlLiteral if a string' do + manager = Arel::SelectManager.new Table.engine + as = manager.as('foo') + assert_kind_of Arel::Nodes::SqlLiteral, as.right + end + end + describe 'from' do it 'ignores strings when table of same name exists' do table = Table.new :users @@ -111,8 +127,8 @@ module Arel manager2.from table manager1.project Arel.sql('lol') - as = manager2.as manager2.grouping(manager2.ast), Arel.sql('omg') - manager1.from as + as = manager2.as Arel.sql('omg') + manager1.from(as) manager1.to_sql.must_be_like %{ SELECT lol FROM (SELECT * FROM "users" ) AS omg -- cgit v1.2.3