Skip to content

Commit 35d933c

Browse files
committed
Use IteratorLoader to process queries
Signed-off-by: Florent Poinsard <[email protected]>
1 parent c3cb690 commit 35d933c

8 files changed

+36
-34
lines changed

go/data/query.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424

2525
type (
2626
Loader interface {
27-
Load(url string) ([]Query, error)
27+
Load(filename string) IteratorLoader
2828
}
2929

3030
IteratorLoader interface {

go/data/query_log_parse.go

+1-7
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,6 @@ type (
4444
}
4545
)
4646

47-
func (MySQLLogLoader) Load(fileName string) ([]Query, error) {
48-
loader := MySQLLogLoader{}.Loadit(fileName)
49-
50-
return makeSlice(loader)
51-
}
52-
5347
func makeSlice(loader IteratorLoader) ([]Query, error) {
5448
var queries []Query
5549
for {
@@ -151,7 +145,7 @@ func (s *logReaderState) NextLine() (string, bool) {
151145
return s.scanner.Text(), true
152146
}
153147

154-
func (MySQLLogLoader) Loadit(fileName string) IteratorLoader {
148+
func (MySQLLogLoader) Load(fileName string) IteratorLoader {
155149
reg := regexp.MustCompile(`^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}Z)\s+(\d+)\s+(\w+)\s+(.*)`)
156150

157151
fd, err := os.OpenFile(fileName, os.O_RDONLY, 0)

go/data/query_log_parse_test.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@ import (
2323
)
2424

2525
func TestParseMySQLQueryLog(t *testing.T) {
26-
gotQueries, err := MySQLLogLoader{}.Load("./testdata/mysql.query.log")
26+
loader := MySQLLogLoader{}.Load("./testdata/mysql.query.log")
27+
gotQueries, err := makeSlice(loader)
2728
require.NoError(t, err)
2829
require.Equal(t, 1517, len(gotQueries), "expected 1517 queries") //nolint:testifylint // too many elements for the output to be readable
2930
}
3031

3132
func TestSmallSnippet(t *testing.T) {
32-
gotQueries, err := MySQLLogLoader{}.Load("./testdata/mysql.small-query.log")
33+
loader := MySQLLogLoader{}.Load("./testdata/mysql.small-query.log")
34+
gotQueries, err := makeSlice(loader)
3335
require.NoError(t, err)
3436
expected := []Query{
3537
{

go/data/sql_script_loader.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ func readData(url string) ([]byte, error) {
106106
return io.ReadAll(res.Body)
107107
}
108108

109-
func (SQLScriptLoader) Loadit(filename string) IteratorLoader {
109+
func (SQLScriptLoader) Load(filename string) IteratorLoader {
110110
var scanner *bufio.Scanner
111111
var fd *os.File
112112

@@ -133,11 +133,6 @@ func (SQLScriptLoader) Loadit(filename string) IteratorLoader {
133133
}
134134
}
135135

136-
func (SQLScriptLoader) Load(url string) ([]Query, error) {
137-
loader := SQLScriptLoader{}.Loadit(url)
138-
return makeSlice(loader)
139-
}
140-
141136
// Helper function to parse individual queries
142137
func parseQuery(rs Query) (*Query, error) {
143138
realS := rs.Query

go/data/vtgate_log_parse.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ type (
4545
}
4646
)
4747

48-
func (vll VtGateLogLoader) Loadit(fileName string) IteratorLoader {
48+
func (vll VtGateLogLoader) Load(fileName string) IteratorLoader {
4949
reg := regexp.MustCompile(`\t"([^"]+)"\t(\{(?:[^{}]|(?:\{[^{}]*\}))*\}|"[^"]+")`)
5050
fd, err := os.OpenFile(fileName, os.O_RDONLY, 0)
5151
if err != nil {
@@ -129,11 +129,6 @@ func (s *vtgateLogReaderState) Next() (Query, bool) {
129129
return Query{}, false
130130
}
131131

132-
func (vll VtGateLogLoader) Load(fileName string) (queries []Query, err error) {
133-
loader := vll.Loadit(fileName)
134-
return makeSlice(loader)
135-
}
136-
137132
func addBindVarsToQuery(query string, bvs map[string]*querypb.BindVariable) (string, error) {
138133
parser, err := sqlparser.New(sqlparser.Options{})
139134
if err != nil {

go/data/vtgate_log_parse_test.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,14 @@ import (
2525
)
2626

2727
func TestParseVtGateQueryLogRedacted(t *testing.T) {
28-
_, err := VtGateLogLoader{NeedsBindVars: true}.Load("./testdata/vtgate.query.log.redacted")
28+
loader := VtGateLogLoader{NeedsBindVars: true}.Load("./testdata/vtgate.query.log.redacted")
29+
_, err := makeSlice(loader)
2930
require.EqualError(t, err, "line 1: query has redacted bind variables, cannot parse them")
3031
}
3132

3233
func TestParseVtGateQueryLog(t *testing.T) {
33-
gotQueries, err := VtGateLogLoader{NeedsBindVars: true}.Load("./testdata/vtgate.query.log")
34+
loader := VtGateLogLoader{NeedsBindVars: true}.Load("./testdata/vtgate.query.log")
35+
gotQueries, err := makeSlice(loader)
3436
require.NoError(t, err)
3537

3638
require.Len(t, gotQueries, 25)
@@ -47,7 +49,8 @@ func TestParseVtGateQueryLog(t *testing.T) {
4749
}
4850

4951
func TestParseVtGateQueryLogNoBindVars(t *testing.T) {
50-
gotQueries, err := VtGateLogLoader{NeedsBindVars: false}.Load("./testdata/vtgate.query.log")
52+
loader := VtGateLogLoader{NeedsBindVars: false}.Load("./testdata/vtgate.query.log")
53+
gotQueries, err := makeSlice(loader)
5154
require.NoError(t, err)
5255
require.Len(t, gotQueries, 25)
5356

go/keys/keys.go

+11-5
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,15 @@ func run(out io.Writer, cfg Config) error {
4949
queries: make(map[string]*QueryAnalysisResult),
5050
failed: make(map[string]*QueryFailedResult),
5151
}
52-
queries, err := cfg.Loader.Load(cfg.FileName)
53-
if err != nil {
54-
return err
55-
}
5652

53+
loader := cfg.Loader.Load(cfg.FileName)
5754
skip := false
58-
for _, query := range queries {
55+
for {
56+
query, kontinue := loader.Next()
57+
if !kontinue {
58+
break
59+
}
60+
5961
switch query.Type {
6062
case data.Skip, data.Error, data.VExplain:
6163
skip = true
@@ -72,6 +74,10 @@ func run(out io.Writer, cfg Config) error {
7274
}
7375
}
7476

77+
if err := loader.Close(); err != nil {
78+
return err
79+
}
80+
7581
return ql.writeJSONTo(out)
7682
}
7783

go/tester/tester.go

+11-4
Original file line numberDiff line numberDiff line change
@@ -223,15 +223,22 @@ func (t *Tester) Run() (err error) {
223223
err = errors.Join(err, postErr)
224224
}()
225225
}
226-
queries, err := t.loader.Load(t.name)
226+
227+
loader := t.loader.Load(t.name)
228+
for {
229+
query, kontinue := loader.Next()
230+
if !kontinue {
231+
break
232+
}
233+
t.handleQuery(query)
234+
}
235+
236+
err = loader.Close()
227237
if err != nil {
228238
t.reporter.AddFailure(err)
229239
return err
230240
}
231241

232-
for _, q := range queries {
233-
t.handleQuery(q)
234-
}
235242
fmt.Printf("%s\n", t.reporter.Report())
236243

237244
return nil

0 commit comments

Comments
 (0)