@@ -653,6 +653,9 @@ impl<'a> Analysis<'a> {
653653 if let Some ( expr) = & group_by. predicate {
654654 self . analyze_expr ( & mut ctx, expr, Type :: Bool ) ?;
655655 }
656+
657+ ctx. allow_agg_func = true ;
658+ ctx. use_agg_funcs = true ;
656659 }
657660
658661 let project = self . analyze_projection ( & mut ctx, & query. projection ) ?;
@@ -742,7 +745,12 @@ impl<'a> Analysis<'a> {
742745
743746 ctx. allow_agg_func = true ;
744747 let tpe = self . analyze_expr ( ctx, expr, Type :: Unspecified ) ?;
745- self . check_projection_on_record ( & mut CheckContext :: default ( ) , record. as_slice ( ) ) ?;
748+ let mut chk_ctx = CheckContext {
749+ use_agg_func : ctx. use_agg_funcs ,
750+ ..Default :: default ( )
751+ } ;
752+
753+ self . check_projection_on_record ( & mut chk_ctx, record. as_slice ( ) ) ?;
746754 Ok ( tpe)
747755 }
748756
@@ -752,14 +760,24 @@ impl<'a> Analysis<'a> {
752760 let tpe = self . analyze_expr ( ctx, expr, Type :: Unspecified ) ?;
753761
754762 if ctx. use_agg_funcs {
755- self . check_projection_on_field_expr ( & mut CheckContext :: default ( ) , expr) ?;
763+ let mut chk_ctx = CheckContext {
764+ use_agg_func : ctx. use_agg_funcs ,
765+ ..Default :: default ( )
766+ } ;
767+
768+ self . check_projection_on_field_expr ( & mut chk_ctx, expr) ?;
756769 } else {
757770 self . reject_constant_func ( & expr. attrs , app) ?;
758771 }
759772
760773 Ok ( tpe)
761774 }
762775
776+ Value :: Id ( _) if ctx. use_agg_funcs => Err ( AnalysisError :: ExpectAggExpr (
777+ expr. attrs . pos . line ,
778+ expr. attrs . pos . col ,
779+ ) ) ,
780+
763781 Value :: Id ( id) => {
764782 if let Some ( tpe) = self . scope . entries . get ( id. as_str ( ) ) . cloned ( ) {
765783 Ok ( tpe)
@@ -772,6 +790,11 @@ impl<'a> Analysis<'a> {
772790 }
773791 }
774792
793+ Value :: Access ( _) if ctx. use_agg_funcs => Err ( AnalysisError :: ExpectAggExpr (
794+ expr. attrs . pos . line ,
795+ expr. attrs . pos . col ,
796+ ) ) ,
797+
775798 Value :: Access ( access) => {
776799 let mut current = & access. target . value ;
777800
0 commit comments