(req *SqlSelect)
| 1512 | } |
| 1513 | |
| 1514 | func (m *Sqlbridge) parseHaving(req *SqlSelect) (err error) { |
| 1515 | |
| 1516 | if m.Cur().T != lex.TokenHaving { |
| 1517 | return nil |
| 1518 | } |
| 1519 | defer func() { |
| 1520 | if r := recover(); r != nil { |
| 1521 | u.Errorf("having error? %v \n %v", r, m.Cur()) |
| 1522 | if m.Cur().T == lex.TokenSelect { |
| 1523 | // TODO this is deeply flawed, need to fix/use tokenpager |
| 1524 | // with rewind ability |
| 1525 | err = m.parseWhereSelect(req) |
| 1526 | return |
| 1527 | } |
| 1528 | err = fmt.Errorf("panic err: %v", r) |
| 1529 | } |
| 1530 | }() |
| 1531 | m.Next() |
| 1532 | exprNode, err := expr.ParseExprWithFuncs(m, m.funcs) |
| 1533 | if err != nil { |
| 1534 | return err |
| 1535 | } |
| 1536 | req.Having = exprNode |
| 1537 | return err |
| 1538 | } |
| 1539 | |
| 1540 | func (m *Sqlbridge) parseOrderBy(req *SqlSelect) (err error) { |
| 1541 |
no test coverage detected