MCPcopy
hub / github.com/jackc/pgx / parseUntypedTextMultirange

Function parseUntypedTextMultirange

pgtype/multirange.go:344–388  ·  view source on GitHub ↗
(src []byte)

Source from the content-addressed store, hash-verified

342}
343
344func parseUntypedTextMultirange(src []byte) ([]string, error) {
345 elements := make([]string, 0)
346
347 buf := bytes.NewBuffer(src)
348
349 skipWhitespace(buf)
350
351 r, _, err := buf.ReadRune()
352 if err != nil {
353 return nil, fmt.Errorf("invalid array: %w", err)
354 }
355
356 if r != '{' {
357 return nil, fmt.Errorf("invalid multirange, expected '{' got %v", r)
358 }
359
360parseValueLoop:
361 for {
362 r, _, err = buf.ReadRune()
363 if err != nil {
364 return nil, fmt.Errorf("invalid multirange: %w", err)
365 }
366
367 switch r {
368 case ',': // skip range separator
369 case '}':
370 break parseValueLoop
371 default:
372 buf.UnreadRune()
373 value, err := parseRange(buf)
374 if err != nil {
375 return nil, fmt.Errorf("invalid multirange value: %w", err)
376 }
377 elements = append(elements, value)
378 }
379 }
380
381 skipWhitespace(buf)
382
383 if buf.Len() > 0 {
384 return nil, fmt.Errorf("unexpected trailing data: %v", buf.String())
385 }
386
387 return elements, nil
388}
389
390func parseRange(buf *bytes.Buffer) (string, error) {
391 s := &bytes.Buffer{}

Callers 1

decodeTextMethod · 0.85

Calls 4

skipWhitespaceFunction · 0.85
parseRangeFunction · 0.85
LenMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected