MCPcopy Create free account
hub / github.com/dolthub/doltgresql / encode

Method encode

postgres/parser/json/encode.go:130–172  ·  view source on GitHub ↗
(appendTo []byte)

Source from the content-addressed store, hash-verified

128}
129
130func (j jsonObject) encode(appendTo []byte) (e jEntry, b []byte, err error) {
131 encodingStartPosition := len(appendTo)
132 // Object container header.
133 appendTo = encoding.EncodeUint32Ascending(appendTo, objectContainerTag|uint32(len(j)))
134 // Reserve space for the key and value JEntries and store where they start so
135 // we can fill them in later.
136 jEntryIdx := len(appendTo)
137 for i := 0; i < len(j)*2; i++ {
138 appendTo = append(appendTo, 0, 0, 0, 0)
139 }
140 offset := uint32(0)
141 // Encode all keys.
142 for i := 0; i < len(j); i++ {
143 var nextJEntry jEntry
144 nextJEntry, appendTo, err = j[i].k.encode(appendTo)
145 if err != nil {
146 return jEntry{}, appendTo, err
147 }
148
149 length := nextJEntry.length
150 offset += length
151
152 appendTo = encoding.PutUint32Ascending(appendTo, nextJEntry.encoded(encodingModeForIdx(i, offset)), jEntryIdx+i*4)
153 }
154 // Encode all values.
155 for i := 0; i < len(j); i++ {
156 var nextJEntry jEntry
157 nextJEntry, appendTo, err = j[i].v.encode(appendTo)
158 if err != nil {
159 return jEntry{}, appendTo, err
160 }
161
162 length := nextJEntry.length
163 offset += length
164
165 appendTo = encoding.PutUint32Ascending(appendTo, nextJEntry.encoded(encodingModeForIdx(i, offset)), jEntryIdx+(len(j)+i)*4)
166 }
167 lengthInBytes := len(appendTo) - encodingStartPosition
168 if err := checkLength(lengthInBytes); err != nil {
169 return jEntry{}, b, err
170 }
171 return makeContainerJEntry(lengthInBytes), appendTo, nil
172}
173
174// EncodeJSON encodes a JSON value as a sequence of bytes.
175func EncodeJSON(appendTo []byte, j JSON) ([]byte, error) {

Callers

nothing calls this directly

Calls 7

encodedMethod · 0.95
EncodeUint32AscendingFunction · 0.92
PutUint32AscendingFunction · 0.92
encodingModeForIdxFunction · 0.85
checkLengthFunction · 0.85
makeContainerJEntryFunction · 0.85
encodeMethod · 0.65

Tested by

no test coverage detected