@@ -88,22 +88,6 @@ impl HashAggExecutor {
8888
8989 while arena. next_tuple ( self . input ) ? {
9090 let tuple = arena. result_tuple ( ) ;
91- let mut values = Vec :: with_capacity ( self . agg_calls . len ( ) ) ;
92-
93- for expr in & self . agg_calls {
94- if let ScalarExpression :: AggCall { args, .. } = expr {
95- if args. len ( ) > 1 {
96- return Err ( DatabaseError :: UnsupportedStmt (
97- "currently aggregate functions only support a single Column as a parameter"
98- . to_string ( ) ,
99- ) ) ;
100- }
101- values. push ( args[ 0 ] . eval ( Some ( ( tuple, & self . input_schema ) ) ) ?) ;
102- } else {
103- unreachable ! ( )
104- }
105- }
106-
10791 let group_keys = self
10892 . groupby_exprs
10993 . iter ( )
@@ -114,8 +98,19 @@ impl HashAggExecutor {
11498 Entry :: Occupied ( entry) => entry. into_mut ( ) ,
11599 Entry :: Vacant ( entry) => entry. insert ( create_accumulators ( & self . agg_calls ) ?) ,
116100 } ;
117- for ( acc, value) in entry. iter_mut ( ) . zip_eq ( values. iter ( ) ) {
118- acc. update_value ( value) ?;
101+
102+ for ( acc, expr) in entry. iter_mut ( ) . zip_eq ( self . agg_calls . iter ( ) ) {
103+ let ScalarExpression :: AggCall { args, .. } = expr else {
104+ unreachable ! ( )
105+ } ;
106+ if args. len ( ) > 1 {
107+ return Err ( DatabaseError :: UnsupportedStmt (
108+ "currently aggregate functions only support a single Column as a parameter"
109+ . to_string ( ) ,
110+ ) ) ;
111+ }
112+ let value = args[ 0 ] . eval ( Some ( ( tuple, & self . input_schema ) ) ) ?;
113+ acc. update_value ( & value) ?;
119114 }
120115 }
121116
@@ -128,12 +123,15 @@ impl HashAggExecutor {
128123 } ;
129124
130125 let output = arena. result_tuple_mut ( ) ;
126+
131127 output. pk = None ;
132- output. values = accs
133- . iter ( )
134- . map ( |acc| acc. evaluate ( ) )
135- . chain ( group_keys. into_iter ( ) . map ( Ok ) )
136- . try_collect ( ) ?;
128+ output. values . clear ( ) ;
129+ output. values . reserve ( accs. len ( ) + group_keys. len ( ) ) ;
130+
131+ for acc in accs. iter ( ) {
132+ output. values . push ( acc. evaluate ( ) ?) ;
133+ }
134+ output. values . extend ( group_keys) ;
137135 arena. resume ( ) ;
138136 Ok ( ( ) )
139137 }
0 commit comments