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

Method parseSelect

rel/parse_filterql.go:271–340  ·  view source on GitHub ↗

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

()

Source from the content-addressed store, hash-verified

269
270// First keyword was SELECT, so use the SELECT parser rule-set
271func (m *FilterQLParser) parseSelect() (*FilterSelect, error) {
272
273 req := &FilterSelect{FilterStatement: &FilterStatement{}}
274 m.fs = req.FilterStatement
275 req.Raw = m.l.RawInput()
276 req.Description = m.comment
277 m.Next() // Consume Select
278
279 err := parseColumns(m, m.funcs, req)
280 if err != nil {
281 return nil, err
282 }
283
284 // optional FROM
285 if m.Cur().T == lex.TokenFrom {
286 m.Next()
287 if m.Cur().T == lex.TokenIdentity || m.Cur().T == lex.TokenTable {
288 req.From = m.Next().V
289 } else {
290 return nil, fmt.Errorf("Expected FROM <identity> got %v", m.Cur())
291 }
292 }
293
294 // We accept either WHERE or FILTER
295 switch t := m.Next().T; t {
296 case lex.TokenWhere:
297 // one top level filter which may be nested
298 if err = m.parseWhereExpr(req); err != nil {
299 return nil, err
300 }
301 case lex.TokenFilter:
302 // one top level filter which may be nested
303 filter, err := m.parseFirstFilters()
304 if err != nil {
305 u.Warnf("Could not parse filters %q err=%v", req.Raw, err)
306 return nil, err
307 }
308 req.Filter = filter
309 default:
310 return nil, fmt.Errorf("expected SELECT * FROM <table> { <WHERE> | <FILTER> } but got %v instead of WHERE/FILTER", t)
311 }
312
313 // LIMIT - Optional
314 m.discardCommentsNewLines()
315 req.Limit, err = m.parseLimit()
316 if err != nil {
317 return nil, err
318 }
319
320 // WITH - Optional
321 m.discardCommentsNewLines()
322 req.With, err = ParseWith(m)
323 if err != nil {
324 return nil, err
325 }
326
327 // ALIAS - Optional
328 m.discardCommentsNewLines()

Callers 1

parseSelectStartMethod · 0.95

Calls 11

parseWhereExprMethod · 0.95
parseFirstFiltersMethod · 0.95
parseLimitMethod · 0.95
parseAliasMethod · 0.95
parseColumnsFunction · 0.85
ParseWithFunction · 0.85
RawInputMethod · 0.80
ErrorfMethod · 0.80
NextMethod · 0.65
CurMethod · 0.65

Tested by

no test coverage detected