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

Function jsonTypeFromRootBuffer

postgres/parser/json/encoded.go:101–132  ·  view source on GitHub ↗
(v []byte)

Source from the content-addressed store, hash-verified

99}
100
101func jsonTypeFromRootBuffer(v []byte) ([]byte, Type, error) {
102 // Root buffers always have a container header.
103 containerHeader, err := getUint32At(v, 0)
104 if err != nil {
105 return v, 0, err
106 }
107 typeTag := containerHeader & containerHeaderTypeMask
108 switch typeTag {
109 case arrayContainerTag:
110 return v, ArrayJSONType, nil
111 case objectContainerTag:
112 return v, ObjectJSONType, nil
113 case scalarContainerTag:
114 entry, err := getUint32At(v, containerHeaderLen)
115 if err != nil {
116 return v, 0, err
117 }
118 switch entry & jEntryTypeMask {
119 case nullTag:
120 return v[containerHeaderLen+jEntryLen:], NullJSONType, nil
121 case trueTag:
122 return v[containerHeaderLen+jEntryLen:], TrueJSONType, nil
123 case falseTag:
124 return v[containerHeaderLen+jEntryLen:], FalseJSONType, nil
125 case numberTag:
126 return v[containerHeaderLen+jEntryLen:], NumberJSONType, nil
127 case stringTag:
128 return v[containerHeaderLen+jEntryLen:], StringJSONType, nil
129 }
130 }
131 return nil, 0, errors.AssertionFailedf("unknown json type %d", errors.Safe(typeTag))
132}
133
134func newEncoded(e jEntry, v []byte) (JSON, error) {
135 var typ Type

Callers 1

newEncodedFromRootFunction · 0.85

Calls 1

getUint32AtFunction · 0.85

Tested by

no test coverage detected