Race condition in GROUP BY
There seems to be a concurrent read/write on a map when using the GROUP BY statement. This sample code reproduces the issue: ```go package ql_test import ( "database/sql" "fmt" "github.com/stretchr/testify/assert" "log" _ "modernc.org/ql/driver" "testing" ) func TestGroupByRaceCondition(t *testing.T) { sess, err := sql.Open("ql2", "memory://database.ql") assert.NoError(t, err) tx, err := sess.Begin() _, err = tx.Exec(`CREATE TABLE artists (name string)`) assert.NoError(t, err) err = tx.Commit() assert.NoError(t, err) for i := 0; i < 100; i++ { tx, err := sess.Begin() assert.NoError(t, err) _, err = tx.Exec(`INSERT INTO artists (name) VALUES($1)`, fmt.Sprintf("artist-%d", i%5)) assert.NoError(t, err) err = tx.Commit() assert.NoError(t, err) } rows, err := sess.Query(`SELECT name, count(1) from artists GROUP BY name`) assert.NoError(t, err) for rows.Next() { var name string var count int err := rows.Scan(&name, &count) assert.NoError(t, err) log.Printf("NAME: %v, COUNT: %v", name, count) } } ``` The issue is visible when running the race condition detector: ```go go test -race -v -run TestGroupByRaceCondition *.go === RUN TestGroupByRaceCondition 2020/12/20 18:38:45 NAME: artist-0, COUNT: 20 ================== WARNING: DATA RACE Write at 0x00c00035fdc0 by goroutine 44: modernc.org/ql.(*selectFieldsGroupPlan).do.func1() /home/rev/go/src/modernc.org/ql/plan.go:2049 +0x10ad modernc.org/ql.(*groupByDefaultPlan).do() /home/rev/go/src/modernc.org/ql/plan.go:1684 +0xb6b modernc.org/ql.(*selectFieldsGroupPlan).do() /home/rev/go/src/modernc.org/ql/plan.go:2022 +0x1cc modernc.org/ql.(*DB).do() /home/rev/go/src/modernc.org/ql/ql.go:1479 +0x1fb modernc.org/ql.recordset.Do() /home/rev/go/src/modernc.org/ql/ql.go:75 +0x95 modernc.org/ql.(*recordset).Do() <autogenerated>:1 +0xa4 modernc.org/ql.newdriverRows.func1() /home/rev/go/src/modernc.org/ql/driver.go:449 +0x101 ```
issue