Class: Sequel::Postgres::HStore

Inherits:
Hash show all
Defined in:
lib/sequel/extensions/pg_hstore.rb,
lib/sequel/extensions/pg_hstore_ops.rb

Defined Under Namespace

Modules: DatabaseMethods Classes: Parser

Constant Summary collapse

DEFAULT_PROC =

Default proc used for all underlying HStore hashes, so that even if you grab the underlying hash, it will still convert non-string keys to strings during lookup.

lambda{|h, k| h[k.to_s] unless k.is_a?(String)}
QUOTE =
'"'.freeze
COMMA =
",".freeze
KV_SEP =
"=>".freeze
NULL =
"NULL".freeze
ESCAPE_RE =
/("|\\)/.freeze
ESCAPE_REPLACE =
'\\\\\1'.freeze
HSTORE_CAST =
'::hstore'.freeze

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Hash

#&, #case, #hstore, #sql_expr, #sql_negate, #sql_or, #|, #~

Class Method Details

.parse(str) ⇒ Object

Parse the given string into an HStore, assuming the str is in PostgreSQL hstore output format.



189
190
191
# File 'lib/sequel/extensions/pg_hstore.rb', line 189

def self.parse(str)
  new(Parser.new(str).parse)
end

Instance Method Details

#fetch(key, *args, &block) ⇒ Object

Override to force the key argument to a string.



215
216
217
# File 'lib/sequel/extensions/pg_hstore.rb', line 215

def fetch(key, *args, &block)
  super(key.to_s, *args, &block)
end

#merge(hash, &block) ⇒ Object

Convert the input hash to string keys and values before merging, and return a new HStore instance with the merged hash.



221
222
223
# File 'lib/sequel/extensions/pg_hstore.rb', line 221

def merge(hash, &block)
  self.class.new(super(convert_hash(hash), &block))
end

#opObject

Wrap the receiver in an HStoreOp so you can easily use the PostgreSQL hstore functions and operators with it.



241
242
243
# File 'lib/sequel/extensions/pg_hstore_ops.rb', line 241

def op
  HStoreOp.new(self)
end

#sql_literal_append(ds, sql) ⇒ Object

Append a literalize version of the hstore to the sql.



229
230
231
232
# File 'lib/sequel/extensions/pg_hstore.rb', line 229

def sql_literal_append(ds, sql)
  ds.literal_append(sql, unquoted_literal)
  sql << HSTORE_CAST
end

#unquoted_literalObject

Return a string containing the unquoted, unstring-escaped literal version of the hstore. Separated out for use by the bound argument code.



237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
# File 'lib/sequel/extensions/pg_hstore.rb', line 237

def unquoted_literal
  str = ''
  comma = false
  commas = COMMA
  quote = QUOTE
  kv_sep = KV_SEP
  null = NULL
  each do |k, v|
    str << commas if comma
    str << quote << escape_value(k) << quote
    str << kv_sep
    if v.nil?
      str << null
    else
      str << quote << escape_value(v) << quote
    end
    comma = true
  end
  str
end