Class: Hash
- Defined in:
- lib/sequel/extensions/core_extensions.rb,
lib/sequel/extensions/pg_json.rb,
lib/sequel/extensions/pg_hstore.rb
Overview
Sequel extends Hash
to add methods to implement the SQL DSL.
Direct Known Subclasses
Sequel::Model::Associations::AssociationReflection, Sequel::Model::Errors, Sequel::Postgres::HStore, Sequel::Postgres::JSONHash
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. -
#hstore ⇒ Object
Create a new HStore using the receiver as the input hash.
-
#pg_json ⇒ Object
Return a Sequel::Postgres::JSONHash proxy to the receiver.
-
#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
102 103 104 |
# File 'lib/sequel/extensions/core_extensions.rb', line 102 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
132 133 134 |
# File 'lib/sequel/extensions/core_extensions.rb', line 132 def case(*args) ::Sequel::SQL::CaseExpression.new(to_a, *args) end |
#hstore ⇒ Object
Create a new HStore using the receiver as the input hash. Note that the HStore created will not use the receiver as the backing store, since it has to modify the hash. To get the new backing store, use:
hash.hstore.to_hash
293 294 295 |
# File 'lib/sequel/extensions/pg_hstore.rb', line 293 def hstore Sequel::Postgres::HStore.new(self) end |
#pg_json ⇒ Object
Return a Sequel::Postgres::JSONHash proxy to the receiver. This is mostly useful as a short cut for creating JSONHash objects that didn’t come from the database.
175 176 177 |
# File 'lib/sequel/extensions/pg_json.rb', line 175 def pg_json Sequel::Postgres::JSONHash.new(self) 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)
142 143 144 |
# File 'lib/sequel/extensions/core_extensions.rb', line 142 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)
151 152 153 |
# File 'lib/sequel/extensions/core_extensions.rb', line 151 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)
160 161 162 |
# File 'lib/sequel/extensions/core_extensions.rb', line 160 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
112 113 114 |
# File 'lib/sequel/extensions/core_extensions.rb', line 112 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)
121 122 123 |
# File 'lib/sequel/extensions/core_extensions.rb', line 121 def ~ ::Sequel::SQL::BooleanExpression.from_value_pairs(self, :OR, true) end |