MCPcopy Create free account
hub / github.com/cockroachdb/cockroachdb-parser / decodeTSNode

Method decodeTSNode

pkg/util/tsearch/encoding.go:323–387  ·  view source on GitHub ↗
(b []byte)

Source from the content-addressed store, hash-verified

321}
322
323func (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:

Callers 1

DecodeTSQueryFunction · 0.95

Calls 6

DecodeUntaggedBytesValueFunction · 0.92
DecodeUint16AscendingFunction · 0.92
getOneByteFunction · 0.85
tsWeightTypeAlias · 0.85
ErrorfMethod · 0.80

Tested by

no test coverage detected