Class: Sequel::Postgres::HStore::Parser

Inherits:
StringScanner
  • Object
show all
Defined in:
lib/sequel/extensions/pg_hstore.rb

Overview

Parser for PostgreSQL hstore output format.

Constant Summary collapse

QUOTE_RE =
/"/.freeze
KV_SEP_RE =
/"\s*=>\s*/.freeze
NULL_RE =
/NULL/.freeze
SEP_RE =
/,\s*/.freeze
QUOTED_RE =
/(\\"|[^"])*/.freeze
REPLACE_RE =
/\\(.)/.freeze
REPLACE_WITH =
'\1'.freeze

Instance Method Summary collapse

Instance Method Details

#parseObject

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.



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# 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