Class: Hash
Overview
Sequel extends Hash
to add methods to implement the SQL DSL.
Direct Known Subclasses
Sequel::Model::Associations::AssociationReflection, Sequel::Model::Errors
Instance Method Summary collapse
-
#&(ce) ⇒ Object
Return a
Sequel::SQL::BooleanExpression
created from this hash, matching all of the conditions in this hash and the condition specified by the given argument. -
#case(*args) ⇒ Object
Return a
Sequel::SQL::CaseExpression
with this hash as the conditions and the given default value. -
#sql_expr ⇒ Object
Return a
Sequel::SQL::BooleanExpression
created from this hash, matching all of the conditions. -
#sql_negate ⇒ Object
Return a
Sequel::SQL::BooleanExpression
created from this hash, matching none of the conditions. -
#sql_or ⇒ Object
Return a
Sequel::SQL::BooleanExpression
created from this hash, matching any of the conditions. -
#|(ce) ⇒ Object
Return a
Sequel::SQL::BooleanExpression
created from this hash, matching all of the conditions in this hash or the condition specified by the given argument. -
#~ ⇒ Object
Return a
Sequel::SQL::BooleanExpression
created from this hash, not matching all of the conditions.
Instance Method Details
#&(ce) ⇒ Object
Return a Sequel::SQL::BooleanExpression
created from this hash, matching all of the conditions in this hash and the condition specified by the given argument.
{:a=>1} & :b # SQL: a = 1 AND b
{:a=>true} & ~:b # SQL: a IS TRUE AND NOT b
120 121 122 |
# File 'lib/sequel/core_sql.rb', line 120 def &(ce) ::Sequel::SQL::BooleanExpression.new(:AND, self, ce) end |
#case(*args) ⇒ Object
Return a Sequel::SQL::CaseExpression
with this hash as the conditions and the given default value. Note that the order of the conditions will be arbitrary on ruby 1.8, so all conditions should be orthogonal.
{{:a=>[2,3]}=>1}.case(0) # SQL: CASE WHEN a IN (2, 3) THEN 1 ELSE 0 END
{:a=>1, :b=>2}.case(:d, :c) # SQL: CASE c WHEN a THEN 1 WHEN b THEN 2 ELSE d END
# or: CASE c WHEN b THEN 2 WHEN a THEN 1 ELSE d END
150 151 152 |
# File 'lib/sequel/core_sql.rb', line 150 def case(*args) ::Sequel::SQL::CaseExpression.new(to_a, *args) end |
#sql_expr ⇒ Object
Return a Sequel::SQL::BooleanExpression
created from this hash, matching all of the conditions. Rarely do you need to call this explicitly, as Sequel generally assumes that hashes specify this type of condition.
{:a=>true}.sql_expr # SQL: a IS TRUE
{:a=>1, :b=>[2, 3]}.sql_expr # SQL: a = 1 AND b IN (2, 3)
160 161 162 |
# File 'lib/sequel/core_sql.rb', line 160 def sql_expr ::Sequel::SQL::BooleanExpression.from_value_pairs(self) end |
#sql_negate ⇒ Object
Return a Sequel::SQL::BooleanExpression
created from this hash, matching none of the conditions.
{:a=>true}.sql_negate # SQL: a IS NOT TRUE
{:a=>1, :b=>[2, 3]}.sql_negate # SQL: a != 1 AND b NOT IN (2, 3)
169 170 171 |
# File 'lib/sequel/core_sql.rb', line 169 def sql_negate ::Sequel::SQL::BooleanExpression.from_value_pairs(self, :AND, true) end |
#sql_or ⇒ Object
Return a Sequel::SQL::BooleanExpression
created from this hash, matching any of the conditions.
{:a=>true}.sql_or # SQL: a IS TRUE
{:a=>1, :b=>[2, 3]}.sql_or # SQL: a = 1 OR b IN (2, 3)
178 179 180 |
# File 'lib/sequel/core_sql.rb', line 178 def sql_or ::Sequel::SQL::BooleanExpression.from_value_pairs(self, :OR) end |
#|(ce) ⇒ Object
Return a Sequel::SQL::BooleanExpression
created from this hash, matching all of the conditions in this hash or the condition specified by the given argument.
{:a=>1} | :b # SQL: a = 1 OR b
{:a=>true} | ~:b # SQL: a IS TRUE OR NOT b
130 131 132 |
# File 'lib/sequel/core_sql.rb', line 130 def |(ce) ::Sequel::SQL::BooleanExpression.new(:OR, self, ce) end |
#~ ⇒ Object
Return a Sequel::SQL::BooleanExpression
created from this hash, not matching all of the conditions.
~{:a=>true} # SQL: a IS NOT TRUE
~{:a=>1, :b=>[2, 3]} # SQL: a != 1 OR b NOT IN (2, 3)
139 140 141 |
# File 'lib/sequel/core_sql.rb', line 139 def ~ ::Sequel::SQL::BooleanExpression.from_value_pairs(self, :OR, true) end |