diff options
-rw-r--r-- | lib/arel/select_manager.rb | 4 | ||||
-rw-r--r-- | 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 |