aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/arel/nodes/casted.rb
diff options
context:
space:
mode:
authorMatthew Draper <matthew@trebex.net>2018-04-25 08:18:02 +0930
committerGitHub <noreply@github.com>2018-04-25 08:18:02 +0930
commit989b1cb4a326632a686d61df42695b27e4ef6b2e (patch)
tree026a41714b44dba185f084f8f21bb81eb01db681 /activerecord/lib/arel/nodes/casted.rb
parent7e815415edbe42f1df64d786a8f923a171778d64 (diff)
parent354f1c28e81d9846fb9e5346fcca50cf303c12c1 (diff)
downloadrails-989b1cb4a326632a686d61df42695b27e4ef6b2e.tar.gz
rails-989b1cb4a326632a686d61df42695b27e4ef6b2e.tar.bz2
rails-989b1cb4a326632a686d61df42695b27e4ef6b2e.zip
Merge pull request #32097 from matthewd/arel
Merge Arel
Diffstat (limited to 'activerecord/lib/arel/nodes/casted.rb')
-rw-r--r--activerecord/lib/arel/nodes/casted.rb46
1 files changed, 46 insertions, 0 deletions
diff --git a/activerecord/lib/arel/nodes/casted.rb b/activerecord/lib/arel/nodes/casted.rb
new file mode 100644
index 0000000000..c1e6e97d6d
--- /dev/null
+++ b/activerecord/lib/arel/nodes/casted.rb
@@ -0,0 +1,46 @@
+# frozen_string_literal: true
+
+module Arel # :nodoc: all
+ module Nodes
+ class Casted < Arel::Nodes::NodeExpression # :nodoc:
+ attr_reader :val, :attribute
+ def initialize(val, attribute)
+ @val = val
+ @attribute = attribute
+ super()
+ end
+
+ def nil?; @val.nil?; end
+
+ def hash
+ [self.class, val, attribute].hash
+ end
+
+ def eql?(other)
+ self.class == other.class &&
+ self.val == other.val &&
+ self.attribute == other.attribute
+ end
+ alias :== :eql?
+ end
+
+ class Quoted < Arel::Nodes::Unary # :nodoc:
+ alias :val :value
+ def nil?; val.nil?; end
+ end
+
+ def self.build_quoted(other, attribute = nil)
+ case other
+ when Arel::Nodes::Node, Arel::Attributes::Attribute, Arel::Table, Arel::Nodes::BindParam, Arel::SelectManager, Arel::Nodes::Quoted, Arel::Nodes::SqlLiteral
+ other
+ else
+ case attribute
+ when Arel::Attributes::Attribute
+ Casted.new other, attribute
+ else
+ Quoted.new other
+ end
+ end
+ end
+ end
+end