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

Method parseGroupBy

rel/parse_sql.go:1413–1512  ·  view source on GitHub ↗
(req *SqlSelect)

Source from the content-addressed store, hash-verified

1411}
1412
1413func (m *Sqlbridge) parseGroupBy(req *SqlSelect) (err error) {
1414
1415 if m.Cur().T != lex.TokenGroupBy {
1416 return nil
1417 }
1418 m.Next()
1419
1420 var col *Column
1421
1422 for {
1423
1424 //u.Debugf("Group By? %v", m.Cur())
1425 switch m.Cur().T {
1426 case lex.TokenUdfExpr:
1427 // we have a udf/functional expression column
1428 //u.Infof("udf: %v", m.Cur().V)
1429 col = NewColumnFromToken(m.Cur())
1430 exprNode, err := expr.ParseExprWithFuncs(m, m.funcs)
1431 if err != nil {
1432 return err
1433 }
1434 col.Expr = exprNode
1435
1436 if m.Cur().T != lex.TokenAs {
1437 switch n := col.Expr.(type) {
1438 case *expr.FuncNode:
1439 col.As = expr.FindIdentityName(0, n, "")
1440 if col.As == "" {
1441 col.As = n.Name
1442 }
1443 case *expr.BinaryNode:
1444 //u.Debugf("udf? %T ", n)
1445 col.As = expr.FindIdentityName(0, n, "")
1446 if col.As == "" {
1447 u.Errorf("could not find as name: %#v", n)
1448 }
1449 }
1450 }
1451 //u.Debugf("next? %v", m.Cur())
1452
1453 case lex.TokenIdentity:
1454 //u.Warnf("?? %v", m.Cur())
1455 col = NewColumnFromToken(m.Cur())
1456 exprNode, err := expr.ParseExprWithFuncs(m, m.funcs)
1457 if err != nil {
1458 return err
1459 }
1460 col.Expr = exprNode
1461 case lex.TokenValue:
1462 // Value Literal
1463 col = NewColumnFromToken(m.Cur())
1464 exprNode, err := expr.ParseExprWithFuncs(m, m.funcs)
1465 if err != nil {
1466 return err
1467 }
1468 col.Expr = exprNode
1469 }
1470 //u.Debugf("GroupBy after colstart?: %v ", m.Cur())

Callers 1

parseSqlSelectMethod · 0.95

Calls 7

ParseExprWithFuncsFunction · 0.92
FindIdentityNameFunction · 0.92
NewColumnFromTokenFunction · 0.85
ErrorfMethod · 0.80
CurMethod · 0.65
NextMethod · 0.65
ErrMsgMethod · 0.65

Tested by

no test coverage detected