func (nr *nameResolver) handlePosition(pos *ast.PositionExpr) { ctx := nr.currentContext() if pos.N < 1 || pos.N > len(ctx.fieldList) { nr.Err = errors.Errorf("Unknown column '%d'", pos.N) return } pos.Refer = ctx.fieldList[pos.N-1] }
func (nr *nameResolver) handlePosition(pos *ast.PositionExpr) { ctx := nr.currentContext() if pos.N < 1 || pos.N > len(ctx.fieldList) { nr.Err = errors.Errorf("Unknown column '%d'", pos.N) return } pos.Refer = ctx.fieldList[pos.N-1] if nr.currentContext().inGroupBy { // make sure item is not aggregate function if ast.HasAggFlag(pos.Refer.Expr) { nr.Err = errors.New("group by cannot contain aggregate function") } } }
func (nr *nameResolver) handlePosition(pos *ast.PositionExpr) { ctx := nr.currentContext() if pos.N < 1 || pos.N > len(ctx.fieldList) { nr.Err = errors.Errorf("Unknown column '%d'", pos.N) return } matched := ctx.fieldList[pos.N-1] nf := *matched expr := matched.Expr if cexpr, ok := expr.(*ast.ColumnNameExpr); ok { expr = cexpr.Refer.Expr } nf.Expr = expr pos.Refer = &nf if nr.currentContext().inGroupBy { // make sure item is not aggregate function if ast.HasAggFlag(pos.Refer.Expr) { nr.Err = errors.New("group by cannot contain aggregate function") } } }