MCPcopy Create free account
hub / github.com/auxten/postgresql-parser / decodeBytesInternal

Function decodeBytesInternal

pkg/util/encoding/encoding.go:578–612  ·  view source on GitHub ↗
(b []byte, r []byte, e escapes, expectMarker bool)

Source from the content-addressed store, hash-verified

576}
577
578func decodeBytesInternal(b []byte, r []byte, e escapes, expectMarker bool) ([]byte, []byte, error) {
579 if expectMarker {
580 if len(b) == 0 || b[0] != e.marker {
581 return nil, nil, errors.Errorf("did not find marker %#x in buffer %#x", e.marker, b)
582 }
583 b = b[1:]
584 }
585
586 for {
587 i := bytes.IndexByte(b, e.escape)
588 if i == -1 {
589 return nil, nil, errors.Errorf("did not find terminator %#x in buffer %#x", e.escape, b)
590 }
591 if i+1 >= len(b) {
592 return nil, nil, errors.Errorf("malformed escape in buffer %#x", b)
593 }
594 v := b[i+1]
595 if v == e.escapedTerm {
596 if r == nil {
597 r = b[:i]
598 } else {
599 r = append(r, b[:i]...)
600 }
601 return b[i+2:], r, nil
602 }
603
604 if v != e.escaped00 {
605 return nil, nil, errors.Errorf("unknown escape sequence: %#x %#x", e.escape, v)
606 }
607
608 r = append(r, b[:i]...)
609 r = append(r, e.escapedFF)
610 b = b[i+2:]
611 }
612}
613
614// getBytesLength finds the length of a bytes encoding.
615func getBytesLength(b []byte, e escapes) (int, error) {

Callers 2

DecodeBytesAscendingFunction · 0.85
DecodeBytesDescendingFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…