Sequel
extends Hash
to add methods to implement the SQL DSL.
Public Instance methods
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)
# File lib/sequel/extensions/core_extensions.rb 105 def &(ce) 106 ::Sequel::SQL::BooleanExpression.new(:AND, self, ce) 107 end
Return a Sequel::SQL::CaseExpression
with this hash as the conditions and the given default value.
{{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
# File lib/sequel/extensions/core_extensions.rb 133 def case(*args) 134 ::Sequel::SQL::CaseExpression.new(to_a, *args) 135 end
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
# File lib/sequel/extensions/pg_hstore.rb 338 def hstore 339 Sequel::Postgres::HStore.new(self) 340 end
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.
# File lib/sequel/extensions/pg_json.rb 608 def pg_json 609 Sequel::Postgres::JSONHash.new(self) 610 end
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.
# File lib/sequel/extensions/pg_json.rb 615 def pg_jsonb 616 Sequel::Postgres::JSONBHash.new(self) 617 end
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)))
# File lib/sequel/extensions/core_extensions.rb 143 def sql_expr 144 ::Sequel::SQL::BooleanExpression.from_value_pairs(self) 145 end
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)))
# File lib/sequel/extensions/core_extensions.rb 152 def sql_negate 153 ::Sequel::SQL::BooleanExpression.from_value_pairs(self, :AND, true) 154 end
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)))
# File lib/sequel/extensions/core_extensions.rb 161 def sql_or 162 ::Sequel::SQL::BooleanExpression.from_value_pairs(self, :OR) 163 end
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)
# File lib/sequel/extensions/core_extensions.rb 115 def |(ce) 116 ::Sequel::SQL::BooleanExpression.new(:OR, self, ce) 117 end
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)))
# File lib/sequel/extensions/core_extensions.rb 124 def ~ 125 ::Sequel::SQL::BooleanExpression.from_value_pairs(self, :OR, true) 126 end