aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael França <rafaelmfranca@gmail.com>2019-01-24 16:00:46 -0500
committerGitHub <noreply@github.com>2019-01-24 16:00:46 -0500
commit267136d87d0d032f7a95c62f115940393e1620e5 (patch)
tree8174d3d9c7b24a38a4410a380a89ac62c7a28351
parent1e25dfde032172bab2b126e60fac0302025defcc (diff)
parent5cf36e2ea2242ea6ea0cf879adf9febd86fd3aa2 (diff)
downloadrails-267136d87d0d032f7a95c62f115940393e1620e5.tar.gz
rails-267136d87d0d032f7a95c62f115940393e1620e5.tar.bz2
rails-267136d87d0d032f7a95c62f115940393e1620e5.zip
Merge pull request #35046 from kddeisz/make-and-and-case-node-expressions
Make `And` and `Case` into expression nodes
-rw-r--r--activerecord/lib/arel/nodes/and.rb2
-rw-r--r--activerecord/lib/arel/nodes/case.rb4
-rw-r--r--activerecord/test/cases/arel/nodes/and_test.rb9
3 files changed, 11 insertions, 4 deletions
diff --git a/activerecord/lib/arel/nodes/and.rb b/activerecord/lib/arel/nodes/and.rb
index c530a77bfb..bf516db35f 100644
--- a/activerecord/lib/arel/nodes/and.rb
+++ b/activerecord/lib/arel/nodes/and.rb
@@ -2,7 +2,7 @@
module Arel # :nodoc: all
module Nodes
- class And < Arel::Nodes::Node
+ class And < Arel::Nodes::NodeExpression
attr_reader :children
def initialize(children)
diff --git a/activerecord/lib/arel/nodes/case.rb b/activerecord/lib/arel/nodes/case.rb
index b8f83128c8..1c4b727bf6 100644
--- a/activerecord/lib/arel/nodes/case.rb
+++ b/activerecord/lib/arel/nodes/case.rb
@@ -2,9 +2,7 @@
module Arel # :nodoc: all
module Nodes
- class Case < Arel::Nodes::Node
- include Arel::AliasPredication
-
+ class Case < Arel::Nodes::NodeExpression
attr_accessor :case, :conditions, :default
def initialize(expression = nil, default = nil)
diff --git a/activerecord/test/cases/arel/nodes/and_test.rb b/activerecord/test/cases/arel/nodes/and_test.rb
index eff54abd91..d123ca9fd0 100644
--- a/activerecord/test/cases/arel/nodes/and_test.rb
+++ b/activerecord/test/cases/arel/nodes/and_test.rb
@@ -16,6 +16,15 @@ module Arel
assert_equal 2, array.uniq.size
end
end
+
+ describe "functions as node expression" do
+ it "allows aliasing" do
+ aliased = And.new(["foo", "bar"]).as("baz")
+
+ assert_kind_of As, aliased
+ assert_kind_of SqlLiteral, aliased.right
+ end
+ end
end
end
end