MCPcopy Index your code
hub / github.com/lib/pq / appendArrayElement

Function appendArrayElement

array.go:722–756  ·  view source on GitHub ↗

appendArrayElement appends rv to the buffer, returning the extended buffer and the delimiter to use before the next element. When rv's Kind is neither reflect.Array nor reflect.Slice, it is converted using driver.DefaultParameterConverter and the resulting []byte or string is double-quoted. See ht

(b []byte, rv reflect.Value)

Source from the content-addressed store, hash-verified

720//
721// See http://www.postgresql.org/docs/current/static/arrays.html#ARRAYS-IO
722func appendArrayElement(b []byte, rv reflect.Value) ([]byte, string, error) {
723 if k := rv.Kind(); k == reflect.Array || k == reflect.Slice {
724 if t := rv.Type(); t != typeByteSlice && !t.Implements(typeDriverValuer) {
725 if n := rv.Len(); n > 0 {
726 return appendArray(b, rv, n)
727 }
728
729 return b, "", nil
730 }
731 }
732
733 var del = ","
734 var err error
735 var iv = rv.Interface()
736
737 if ad, ok := iv.(ArrayDelimiter); ok {
738 del = ad.ArrayDelimiter()
739 }
740
741 if iv, err = driver.DefaultParameterConverter.ConvertValue(iv); err != nil {
742 return b, del, err
743 }
744
745 switch v := iv.(type) {
746 case nil:
747 return append(b, "NULL"...), del, nil
748 case []byte:
749 return appendArrayQuotedBytes(b, v), del, nil
750 case string:
751 return appendArrayQuotedBytes(b, []byte(v)), del, nil
752 }
753
754 b, err = appendValue(b, iv)
755 return b, del, err
756}
757
758func appendArrayQuotedBytes(b, v []byte) []byte {
759 b = append(b, '"')

Callers 1

appendArrayFunction · 0.85

Calls 5

appendArrayFunction · 0.85
appendArrayQuotedBytesFunction · 0.85
appendValueFunction · 0.85
TypeMethod · 0.80
ArrayDelimiterMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…