(req *SqlSelect)
| 1411 | } |
| 1412 | |
| 1413 | func (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()) |
no test coverage detected