@@ -117,6 +117,8 @@ type groupByGroupingIter struct {
117117 pos int
118118 child sql.RowIter
119119 dispose sql.DisposeFunc
120+ keyRow sql.Row
121+ keySch sql.Schema
120122}
121123
122124func newGroupByGroupingIter (
@@ -128,6 +130,8 @@ func newGroupByGroupingIter(
128130 selectedExprs : selectedExprs ,
129131 groupByExprs : groupByExprs ,
130132 child : child ,
133+ keyRow : make (sql.Row , len (groupByExprs )),
134+ keySch : make (sql.Schema , len (groupByExprs )),
131135 }
132136}
133137
@@ -167,7 +171,7 @@ func (i *groupByGroupingIter) compute(ctx *sql.Context) error {
167171 return err
168172 }
169173
170- key , err := groupingKey (ctx , i .groupByExprs , row )
174+ key , err := i . groupingKey (ctx , i .groupByExprs , row )
171175 if err != nil {
172176 return err
173177 }
@@ -237,10 +241,8 @@ func (i *groupByGroupingIter) Dispose() {
237241 }
238242}
239243
240- func groupingKey (ctx * sql.Context , exprs []sql.Expression , row sql.Row ) (uint64 , error ) {
241- var keyRow = make (sql.Row , len (exprs ))
242- var keySch = make (sql.Schema , len (exprs ))
243- for i , expr := range exprs {
244+ func (i * groupByGroupingIter ) groupingKey (ctx * sql.Context , exprs []sql.Expression , row sql.Row ) (uint64 , error ) {
245+ for idx , expr := range exprs {
244246 v , err := expr .Eval (ctx , row )
245247 if err != nil {
246248 return 0 , err
@@ -256,10 +258,10 @@ func groupingKey(ctx *sql.Context, exprs []sql.Expression, row sql.Row) (uint64,
256258 v = string (val )
257259 }
258260
259- keyRow [i ] = v
260- keySch [i ] = & sql.Column {Type : typ }
261+ i . keyRow [idx ] = v
262+ i . keySch [idx ] = & sql.Column {Type : typ }
261263 }
262- return hash .HashOf (ctx , keySch , keyRow )
264+ return hash .HashOf (ctx , i . keySch , i . keyRow )
263265}
264266
265267func newAggregationBuffer (expr sql.Expression ) (sql.AggregationBuffer , error ) {
0 commit comments