Class: Sequel::Postgres::PGRow::Splitter
- Defined in:
- lib/sequel/extensions/pg_row.rb
Overview
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.
Constant Summary collapse
- OPEN_PAREN =
/\(/.freeze
- CLOSE_PAREN =
/\)/.freeze
- UNQUOTED_RE =
/[^,)]*/.freeze
- SEP_RE =
/[,)]/.freeze
- QUOTE_RE =
/"/.freeze
- QUOTE_SEP_RE =
/"[,)]/.freeze
- QUOTED_RE =
/(\\.|""|[^"])*/.freeze
- REPLACE_RE =
/\\(.)|"(")/.freeze
- REPLACE_WITH =
'\1\2'.freeze
Instance Method Summary collapse
-
#parse ⇒ Object
Split the stored string into an array of strings, handling the different types of quoting.
Instance Method Details
#parse ⇒ Object
Split the stored string into an array of strings, handling the different types of quoting.
213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 |
# File 'lib/sequel/extensions/pg_row.rb', line 213 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 |