(node *tsNode, appendTo []byte)
| 242 | ) |
| 243 | |
| 244 | func (c *tsNodeCodec) encodeTSNode(node *tsNode, appendTo []byte) ([]byte, error) { |
| 245 | c.nTokens++ |
| 246 | if node.op == invalid { |
| 247 | appendTo = append(appendTo, byte(tsNodeTypeVal)) |
| 248 | if len(node.term.positions) > 0 { |
| 249 | weight := byte(node.term.positions[0].weight & (^weightStar)) |
| 250 | appendTo = append(appendTo, weight) |
| 251 | prefix := byte(node.term.positions[0].weight >> 4) |
| 252 | appendTo = append(appendTo, prefix) |
| 253 | } else { |
| 254 | appendTo = append(appendTo, byte(0), byte(0)) |
| 255 | } |
| 256 | if len(node.term.lexeme) > maxTSVectorLexemeLen { |
| 257 | return nil, pgerror.Newf(pgcode.ProgramLimitExceeded, |
| 258 | "tsvector lexeme of size %d too large (maximum is %d)", len(node.term.lexeme), |
| 259 | maxTSVectorLexemeLen) |
| 260 | } |
| 261 | appendTo = encoding.EncodeUntaggedBytesValue(appendTo, encoding.UnsafeConvertStringToBytes(node.term.lexeme)) |
| 262 | return appendTo, nil |
| 263 | } |
| 264 | appendTo = append(appendTo, byte(tsNodeTypeOper)) |
| 265 | appendTo = append(appendTo, node.op.pgwireEncoding()) |
| 266 | if node.op == followedby { |
| 267 | if node.followedN > maxTSVectorFollowedBy { |
| 268 | return nil, pgerror.Newf(pgcode.ProgramLimitExceeded, |
| 269 | "tsvector followed by argument %d too large (maximum is %d)", node.followedN, |
| 270 | maxTSVectorLexemeLen) |
| 271 | } |
| 272 | appendTo = encoding.EncodeUint16Ascending(appendTo, node.followedN) |
| 273 | } |
| 274 | var err error |
| 275 | appendTo, err = c.encodeTSNode(node.l, appendTo) |
| 276 | if err != nil { |
| 277 | return nil, err |
| 278 | } |
| 279 | if node.r != nil { |
| 280 | appendTo, err = c.encodeTSNode(node.r, appendTo) |
| 281 | if err != nil { |
| 282 | return nil, err |
| 283 | } |
| 284 | } |
| 285 | return appendTo, nil |
| 286 | } |
| 287 | |
| 288 | func (c *tsNodeCodec) encodeTSNodePGBinary(node *tsNode, appendTo []byte) []byte { |
| 289 | c.nTokens++ |
no test coverage detected