aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/arel/select_manager.rb4
-rw-r--r--test/test_select_manager.rb20
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