Class: Hash

Inherits:
Object show all
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.

Instance Method Summary collapse

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


104
105
106
# File 'lib/sequel/extensions/core_extensions.rb', line 104

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


134
135
136
# File 'lib/sequel/extensions/core_extensions.rb', line 134

def case(*args)
  ::Sequel::SQL::CaseExpression.new(to_a, *args)
end

#hstoreObject

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


342
343
344
# File 'lib/sequel/extensions/pg_hstore.rb', line 342

def hstore
  Sequel::Postgres::HStore.new(self)
end

#pg_jsonObject

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.



331
332
333
# File 'lib/sequel/extensions/pg_json.rb', line 331

def pg_json
  Sequel::Postgres::JSONHash.new(self)
end

#pg_jsonbObject

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.



338
339
340
# File 'lib/sequel/extensions/pg_json.rb', line 338

def pg_jsonb
  Sequel::Postgres::JSONBHash.new(self)
end

#sql_exprObject

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)


144
145
146
# File 'lib/sequel/extensions/core_extensions.rb', line 144

def sql_expr
  ::Sequel::SQL::BooleanExpression.from_value_pairs(self)
end

#sql_negateObject

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)


153
154
155
# File 'lib/sequel/extensions/core_extensions.rb', line 153

def sql_negate
  ::Sequel::SQL::BooleanExpression.from_value_pairs(self, :AND, true)
end

#sql_orObject

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)


162
163
164
# File 'lib/sequel/extensions/core_extensions.rb', line 162

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


114
115
116
# File 'lib/sequel/extensions/core_extensions.rb', line 114

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)


123
124
125
# File 'lib/sequel/extensions/core_extensions.rb', line 123

def ~
  ::Sequel::SQL::BooleanExpression.from_value_pairs(self, :OR, true)
end