class Sequel::Postgres::HStore
Constants
- COMMA
- 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.
- ESCAPE_RE
- ESCAPE_REPLACE
- HSTORE_CAST
- KV_SEP
- NULL
- QUOTE
Public Class Methods
Use custom marshal loading, since underlying hash uses a default proc.
# File lib/sequel/extensions/pg_hstore.rb, line 208 def self._load(args) new(Hash[Marshal.load(args)]) end
Parse the given string into an HStore, assuming the str is in PostgreSQL hstore output format.
# File lib/sequel/extensions/pg_hstore.rb, line 214 def self.parse(str) new(Parser.new(str).parse) end
Public Instance Methods
Use custom marshal dumping, since underlying hash uses a default proc.
# File lib/sequel/extensions/pg_hstore.rb, line 240 def _dump(*) Marshal.dump(to_a) end
Override to force the key argument to a string.
# File lib/sequel/extensions/pg_hstore.rb, line 245 def fetch(key, *args, &block) super(key.to_s, *args, &block) end
Convert the input hash to string keys and values before merging, and return a new HStore instance with the merged hash.
# File lib/sequel/extensions/pg_hstore.rb, line 251 def merge(hash, &block) self.class.new(super(convert_hash(hash), &block)) end
Wrap the receiver in an HStoreOp so you can easily use the PostgreSQL hstore functions and operators with it.
# File lib/sequel/extensions/pg_hstore_ops.rb, line 307 def op HStoreOp.new(self) end
Append a literalize version of the hstore to the sql.
# File lib/sequel/extensions/pg_hstore.rb, line 259 def sql_literal_append(ds, sql) ds.literal_append(sql, unquoted_literal) sql << HSTORE_CAST end
Return a string containing the unquoted, unstring-escaped literal version of the hstore. Separated out for use by the bound argument code.
# File lib/sequel/extensions/pg_hstore.rb, line 267 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
Private Instance Methods
Return a new hash based on the input hash with string keys and string or nil values.
# File lib/sequel/extensions/pg_hstore.rb, line 292 def convert_hash(h) hash = Hash.new(&DEFAULT_PROC) h.each{|k,v| hash[k.to_s] = convert_value(v)} hash end
Return value v as a string unless it is already nil.
# File lib/sequel/extensions/pg_hstore.rb, line 299 def convert_value(v) v.to_s unless v.nil? end
Escape key/value strings when literalizing to correctly handle backslash and quote characters.
# File lib/sequel/extensions/pg_hstore.rb, line 305 def escape_value(k) k.to_s.gsub(ESCAPE_RE, ESCAPE_REPLACE) end