class Sequel::Postgres::HStore::Parser

Parser for PostgreSQL hstore output format.

Constants

KV_SEP_RE
NULL_RE
QUOTED_RE
QUOTE_RE
REPLACE_RE
REPLACE_WITH
SEP_RE

Public Instance Methods

parse() click to toggle source

Parse the output format that PostgreSQL uses for hstore columns. Note that this does not attempt to parse all input formats that PostgreSQL will accept. For instance, it expects all keys and non-NULL values to be quoted.

Return the resulting hash of objects. This can be called multiple times, it will cache the parsed hash on the first call and use it for subsequent calls.

# File lib/sequel/extensions/pg_hstore.rb, line 113
def parse
  return @result if @result
  hash = {}
  while !eos?
    skip(QUOTE_RE)
    k = parse_quoted
    skip(KV_SEP_RE)
    if skip(QUOTE_RE)
      v = parse_quoted
      skip(QUOTE_RE)
    else
      scan(NULL_RE)
      v = nil
    end
    skip(SEP_RE)
    hash[k] = v
  end
  @result = hash
end

Private Instance Methods

parse_quoted() click to toggle source

Parse and unescape a quoted key/value.

# File lib/sequel/extensions/pg_hstore.rb, line 136
def parse_quoted
  scan(QUOTED_RE).gsub(REPLACE_RE, REPLACE_WITH)
end