(b []byte)
| 321 | } |
| 322 | |
| 323 | func (c *tsNodeCodec) decodeTSNode(b []byte) ([]byte, *tsNode, error) { |
| 324 | if c.nTokens == 0 { |
| 325 | return nil, nil, errors.Errorf("malformed tsquery: too many nodes") |
| 326 | } |
| 327 | c.nTokens-- |
| 328 | var err error |
| 329 | var nodeType byte |
| 330 | b, nodeType, err = getOneByte(b) |
| 331 | if err != nil { |
| 332 | return nil, nil, err |
| 333 | } |
| 334 | ret := &tsNode{} |
| 335 | if nodeType == tsNodeTypeVal { |
| 336 | // We're at a leaf. Decode and return. |
| 337 | if len(b) < 2 { |
| 338 | return nil, nil, errors.Errorf("insufficient bytes to decode value weight") |
| 339 | } |
| 340 | weight, prefix := b[0], b[1] |
| 341 | b = b[2:] |
| 342 | if weight != 0 || prefix != 0 { |
| 343 | ret.term.positions = []tsPosition{{weight: tsWeight(weight | (prefix << 4))}} |
| 344 | } |
| 345 | // Decode the lexeme. |
| 346 | var lexeme []byte |
| 347 | b, lexeme, err = encoding.DecodeUntaggedBytesValue(b) |
| 348 | if err != nil { |
| 349 | return nil, nil, err |
| 350 | } |
| 351 | ret.term.lexeme = string(lexeme) |
| 352 | return b, ret, nil |
| 353 | } |
| 354 | |
| 355 | // We're at an operator. |
| 356 | var operType byte |
| 357 | b, operType, err = getOneByte(b) |
| 358 | if err != nil { |
| 359 | return nil, nil, err |
| 360 | } |
| 361 | oper, err := tsOperatorFromPgwireEncoding(operType) |
| 362 | if err != nil { |
| 363 | return nil, nil, err |
| 364 | } |
| 365 | ret.op = oper |
| 366 | if oper == followedby { |
| 367 | var followedN uint16 |
| 368 | b, followedN, err = encoding.DecodeUint16Ascending(b) |
| 369 | if err != nil { |
| 370 | return nil, nil, err |
| 371 | } |
| 372 | ret.followedN = followedN |
| 373 | } |
| 374 | b, ret.l, err = c.decodeTSNode(b) |
| 375 | if err != nil { |
| 376 | return nil, nil, err |
| 377 | } |
| 378 | switch oper { |
| 379 | // Not doesn't have a right argument. |
| 380 | case and, or, followedby: |
no test coverage detected