MCPcopy Create free account
hub / github.com/araddon/qlbridge / parseFilter

Method parseFilter

rel/parse_filterql.go:343–400  ·  view source on GitHub ↗

First keyword was FILTER, so use the FILTER parser rule-set

()

Source from the content-addressed store, hash-verified

341
342// First keyword was FILTER, so use the FILTER parser rule-set
343func (m *FilterQLParser) parseFilter() (*FilterStatement, error) {
344
345 req := NewFilterStatement()
346 m.fs = req
347 req.Description = m.comment
348 req.Raw = m.l.RawInput()
349 m.Next() // Consume (FILTER | WHERE )
350
351 // one top level filter which may be nested
352 filter, err := m.parseFirstFilters()
353 if err != nil {
354 return nil, err
355 }
356 req.Filter = filter
357
358 m.discardCommentsNewLines()
359 // OPTIONAL From clause
360 if m.Cur().T == lex.TokenFrom {
361 m.Next()
362 if m.Cur().T != lex.TokenIdentity {
363 return nil, m.Cur().ErrMsg(m.l, "Expected identity after FROM")
364 }
365 if m.Cur().T == lex.TokenIdentity || m.Cur().T == lex.TokenTable {
366 req.From = m.Cur().V
367 m.Next()
368 }
369 }
370
371 // LIMIT - Optional
372 m.discardCommentsNewLines()
373 req.Limit, err = m.parseLimit()
374 if err != nil {
375 return nil, err
376 }
377
378 // WITH - Optional
379 m.discardCommentsNewLines()
380 req.With, err = ParseWith(m)
381 if err != nil {
382 return nil, err
383 }
384
385 // ALIAS - Optional
386 m.discardCommentsNewLines()
387 req.Alias, err = m.parseAlias()
388 if err != nil {
389 return nil, err
390 }
391
392 m.discardCommentsNewLines()
393 switch m.Cur().T {
394 case lex.TokenEOF, lex.TokenEOS: //, lex.TokenRightParenthesis
395 return req, nil
396 case lex.TokenError:
397 return nil, m.Cur().Err(m.l)
398 }
399 return nil, fmt.Errorf("Did not complete parsing input: %v", m.Cur())
400}

Callers 2

parseFilterStartMethod · 0.95
parseSelectStartMethod · 0.95

Calls 12

parseFirstFiltersMethod · 0.95
parseLimitMethod · 0.95
parseAliasMethod · 0.95
NewFilterStatementFunction · 0.85
ParseWithFunction · 0.85
RawInputMethod · 0.80
ErrorfMethod · 0.80
NextMethod · 0.65
CurMethod · 0.65
ErrMsgMethod · 0.65
ErrMethod · 0.65

Tested by

no test coverage detected