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

Method Encode

pgtype/array_codec.go:177–234  ·  view source on GitHub ↗
(value any, buf []byte)

Source from the content-addressed store, hash-verified

175}
176
177func (p *encodePlanArrayCodecBinary) Encode(value any, buf []byte) (newBuf []byte, err error) {
178 array := value.(ArrayGetter)
179
180 dimensions := array.Dimensions()
181 if dimensions == nil {
182 return nil, nil
183 }
184
185 arrayHeader := arrayHeader{
186 Dimensions: dimensions,
187 ElementOID: p.ac.ElementType.OID,
188 }
189
190 containsNullIndex := len(buf) + 4
191
192 buf = arrayHeader.EncodeBinary(buf)
193
194 elementCount := cardinality(dimensions)
195
196 var encodePlan EncodePlan
197 var lastElemType reflect.Type
198 for i := range elementCount {
199 sp := len(buf)
200 buf = pgio.AppendInt32(buf, -1)
201
202 elem := array.Index(i)
203 var elemBuf []byte
204 isNil, callNilDriverValuer := isNilDriverValuer(elem)
205 if !isNil {
206 elemType := reflect.TypeOf(elem)
207 if lastElemType != elemType {
208 lastElemType = elemType
209 encodePlan = p.m.PlanEncode(p.ac.ElementType.OID, BinaryFormatCode, elem)
210 if encodePlan == nil {
211 return nil, fmt.Errorf("unable to encode %v", array.Index(i))
212 }
213 }
214 elemBuf, err = encodePlan.Encode(elem, buf)
215 if err != nil {
216 return nil, err
217 }
218 } else if callNilDriverValuer {
219 elemBuf, err = (&encodePlanDriverValuer{m: p.m, oid: p.ac.ElementType.OID, formatCode: BinaryFormatCode}).Encode(elem, buf)
220 if err != nil {
221 return nil, err
222 }
223 }
224
225 if elemBuf == nil {
226 pgio.SetInt32(buf[containsNullIndex:], 1)
227 } else {
228 buf = elemBuf
229 pgio.SetInt32(buf[sp:], int32(len(buf[sp:])-4))
230 }
231 }
232
233 return buf, nil
234}

Callers

nothing calls this directly

Calls 9

EncodeBinaryMethod · 0.95
EncodeMethod · 0.95
AppendInt32Function · 0.92
SetInt32Function · 0.92
cardinalityFunction · 0.85
isNilDriverValuerFunction · 0.85
DimensionsMethod · 0.65
IndexMethod · 0.65
PlanEncodeMethod · 0.65

Tested by

no test coverage detected