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
AliasedExpression, ColumnAll, ComplexExpression, 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?. -
#eql?(other) ⇒ Boolean
Returns true if the receiver is the same expression as the the
otherexpression. -
#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:.
-
#lit ⇒ Object
Returns
self, becauseSQL::Expressionalready acts likeLiteralString. -
#sql_literal(ds) ⇒ Object
Alias of
to_s.
Class Attribute Details
.comparison_attrs ⇒ Object (readonly)
All attributes used for equality and hash methods.
100 101 102 |
# File 'lib/sequel/sql.rb', line 100 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.
107 108 109 110 |
# File 'lib/sequel/sql.rb', line 107 def attr_reader(*args) super comparison_attrs.concat(args) end |
.inherited(subclass) ⇒ Object
Copy the comparison_attrs into the subclass.
113 114 115 116 |
# File 'lib/sequel/sql.rb', line 113 def inherited(subclass) super subclass.instance_variable_set(:@comparison_attrs, comparison_attrs.dup) end |
Instance Method Details
#==(other) ⇒ Object
Alias of eql?
132 133 134 |
# File 'lib/sequel/sql.rb', line 132 def ==(other) eql?(other) end |
#eql?(other) ⇒ Boolean
Returns true if the receiver is the same expression as the the other expression.
138 139 140 |
# File 'lib/sequel/sql.rb', line 138 def eql?(other) other.is_a?(self.class) && !self.class.comparison_attrs.find{|a| send(a) != other.send(a)} end |
#hash ⇒ Object
Make sure that the hash value is the same if the attributes are the same.
143 144 145 |
# File 'lib/sequel/sql.rb', line 143 def hash ([self.class] + self.class.comparison_attrs.map{|x| send(x)}).hash end |
#inspect ⇒ Object
Attempt to produce a string suitable for eval, such that:
eval(obj.inspect) == obj
148 149 150 |
# File 'lib/sequel/sql.rb', line 148 def inspect "#<#{self.class} #{instance_variables.map{|iv| "#{iv}=>#{instance_variable_get(iv).inspect}"}.join(', ')}>" end |
#lit ⇒ Object
Returns self, because SQL::Expression already acts like LiteralString.
153 154 155 156 |
# File 'lib/sequel/sql.rb', line 153 def lit Sequel::Deprecation.deprecate("Sequel::SQL::Expression#lit", "This method returns self, so just use the receiver") self end |
#sql_literal(ds) ⇒ Object
Alias of to_s
159 160 161 162 163 164 |
# File 'lib/sequel/sql.rb', line 159 def sql_literal(ds) Sequel::Deprecation.deprecate("Sequel::SQL::Expression#sql_literal", "Call Sequel::Dataset#literal with the expression instead") s = String.new to_s_append(ds, s) s end |