Skip to content

Commit 5e51725

Browse files
author
James Cor
committed
reduce row allocations
1 parent b7ae058 commit 5e51725

File tree

4 files changed

+15
-15
lines changed

4 files changed

+15
-15
lines changed

sql/rowexec/agg.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

122124
func 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

265267
func newAggregationBuffer(expr sql.Expression) (sql.AggregationBuffer, error) {

sql/rowexec/ddl_iters.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ func (l *loadDataIter) Next(ctx *sql.Context) (returnRow sql.Row, returnErr erro
109109
}
110110
}
111111

112-
return sql.NewRow(row...), nil
112+
return row, nil
113113
}
114114

115115
func (l *loadDataIter) Close(ctx *sql.Context) error {

sql/rowexec/rel.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,25 +55,23 @@ func (b *BaseBuilder) buildTopN(ctx *sql.Context, n *plan.TopN, row sql.Row) (sq
5555
func (b *BaseBuilder) buildValueDerivedTable(ctx *sql.Context, n *plan.ValueDerivedTable, row sql.Row) (sql.RowIter, error) {
5656
rows := make([]sql.Row, len(n.ExpressionTuples))
5757
for i, et := range n.ExpressionTuples {
58-
vals := make([]interface{}, len(et))
58+
rows[i] = make(sql.Row, len(et))
5959
for j, e := range et {
6060
var err error
6161
p, err := e.Eval(ctx, row)
6262
if err != nil {
6363
return nil, err
6464
}
6565
// cast all row values to the most permissive type
66-
vals[j], _, err = n.Schema()[j].Type.Convert(ctx, p)
66+
rows[i][j], _, err = n.Schema()[j].Type.Convert(ctx, p)
6767
if err != nil {
6868
return nil, err
6969
}
7070
// decimalType.Convert() does not use the given type precision and scale information
7171
if t, ok := n.Schema()[j].Type.(sql.DecimalType); ok {
72-
vals[j] = vals[j].(decimal.Decimal).Round(int32(t.Scale()))
72+
rows[i][j] = rows[i][j].(decimal.Decimal).Round(int32(t.Scale()))
7373
}
7474
}
75-
76-
rows[i] = sql.NewRow(vals...)
7775
}
7876

7977
return sql.RowsToRowIter(rows...), nil

sql/types/number.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,7 @@ func (t NumberTypeImpl_) SQL(ctx *sql.Context, dest []byte, v interface{}) (sqlt
601601
case []byte:
602602
dest = str
603603
case string:
604-
dest = []byte(str)
604+
dest = append(dest, str...)
605605
default:
606606
return sqltypes.Value{}, err
607607
}

0 commit comments

Comments
 (0)