class Sequel::Postgres::PGRow::Splitter

This parser-like class splits the PostgreSQL row-valued/composite type output string format into an array of strings. Note this class makes no attempt to handle all input formats that PostgreSQL will accept, it only handles the output format that PostgreSQL uses.

Constants

CLOSE_PAREN
OPEN_PAREN
QUOTED_RE
QUOTE_RE
QUOTE_SEP_RE
REPLACE_RE
REPLACE_WITH
SEP_RE
UNQUOTED_RE

Public Instance Methods

parse() click to toggle source

Split the stored string into an array of strings, handling the different types of quoting.

# File lib/sequel/extensions/pg_row.rb, line 235
def parse
  return @result if @result
  values = []
  skip(OPEN_PAREN)
  if skip(CLOSE_PAREN)
    values << nil
  else
    until eos?
      if skip(QUOTE_RE)
        values << scan(QUOTED_RE).gsub(REPLACE_RE, REPLACE_WITH)
        skip(QUOTE_SEP_RE)
      else
        v = scan(UNQUOTED_RE)
        values << (v unless v.empty?)
        skip(SEP_RE)
      end
    end
  end
  values
end