Class: Sequel::SQL::Expression
- Defined in:
- lib/sequel/sql.rb,
lib/sequel/extensions/eval_inspect.rb
Overview
Base class for all SQL expression objects.
Direct Known Subclasses
Postgres::HStoreSubscriptOp, Postgres::JSONBSubscriptOp, AliasedExpression, ColumnAll, ComplexExpression, EscapedLikeExpression, GenericExpression, JoinClause, OrderedExpression, Window
Class Attribute Summary collapse
-
.comparison_attrs ⇒ Object
readonly
All attributes used for equality and hash methods.
Class Method Summary collapse
-
.attr_reader(*args) ⇒ Object
Expression objects are assumed to be value objects, where their attribute values can’t change after assignment.
-
.inherited(subclass) ⇒ Object
Copy the comparison_attrs into the subclass.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Alias of
eql?
. -
#clone ⇒ Object
(also: #dup)
Make clone/dup return self, since Expression objects are supposed to be frozen value objects.
-
#eql?(other) ⇒ Boolean
Returns true if the receiver is the same expression as the the
other
expression. -
#hash ⇒ Object
Make sure that the hash value is the same if the attributes are the same.
-
#inspect ⇒ Object
Attempt to produce a string suitable for eval, such that:.
Class Attribute Details
.comparison_attrs ⇒ Object (readonly)
All attributes used for equality and hash methods.
85 86 87 |
# File 'lib/sequel/sql.rb', line 85 def comparison_attrs @comparison_attrs end |
Class Method Details
.attr_reader(*args) ⇒ Object
Expression objects are assumed to be value objects, where their attribute values can’t change after assignment. In order to make it easy to define equality and hash methods, subclass instances assume that the only values that affect the results of such methods are the values of the object’s attributes.
92 93 94 95 |
# File 'lib/sequel/sql.rb', line 92 def attr_reader(*args) super comparison_attrs.concat(args) end |
.inherited(subclass) ⇒ Object
Copy the comparison_attrs into the subclass.
98 99 100 101 |
# File 'lib/sequel/sql.rb', line 98 def inherited(subclass) super subclass.instance_variable_set(:@comparison_attrs, comparison_attrs.dup) end |
Instance Method Details
#==(other) ⇒ Object
Alias of eql?
125 126 127 |
# File 'lib/sequel/sql.rb', line 125 def ==(other) eql?(other) end |
#clone ⇒ Object Also known as: dup
Make clone/dup return self, since Expression objects are supposed to be frozen value objects
119 120 121 |
# File 'lib/sequel/sql.rb', line 119 def clone self end |
#eql?(other) ⇒ Boolean
Returns true if the receiver is the same expression as the the other
expression.
131 132 133 |
# File 'lib/sequel/sql.rb', line 131 def eql?(other) other.is_a?(self.class) && !self.class.comparison_attrs.find{|a| public_send(a) != other.public_send(a)} end |
#hash ⇒ Object
Make sure that the hash value is the same if the attributes are the same.
136 137 138 |
# File 'lib/sequel/sql.rb', line 136 def hash ([self.class] + self.class.comparison_attrs.map{|x| public_send(x)}).hash end |
#inspect ⇒ Object
Attempt to produce a string suitable for eval, such that:
eval(obj.inspect) == obj
141 142 143 |
# File 'lib/sequel/sql.rb', line 141 def inspect "#<#{self.class} #{instance_variables.map{|iv| "#{iv}=>#{instance_variable_get(iv).inspect}"}.join(', ')}>" end |