-
Notifications
You must be signed in to change notification settings - Fork 6
/
bulk_select_indexed_filter.go
45 lines (36 loc) · 1.22 KB
/
bulk_select_indexed_filter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package main
import (
"fmt"
"github.com/Shopify/mybench"
)
type BulkSelectIndexedFilter struct {
mybench.WorkloadConfig
table *mybench.Table
filterField string
}
func NewBulkSelectIndexedFilter(table *mybench.Table, rateScale float64, filterField string) mybench.AbstractWorkload {
workloadInterface := &BulkSelectIndexedFilter{
WorkloadConfig: mybench.WorkloadConfig{
Name: "BulkSelectIndexedFilter_" + filterField,
WorkloadScale: rateScale,
},
table: table,
filterField: filterField,
}
return mybench.NewWorkload[MicroBenchContextData](workloadInterface)
}
func (c *BulkSelectIndexedFilter) Event(ctx mybench.WorkerContext[MicroBenchContextData]) error {
args := []interface{}{
c.table.Generate(ctx.Rand, "idx2"),
c.table.Generate(ctx.Rand, c.filterField), // Should actually be SampleFrom
}
_, err := ctx.Data.Statement.Execute(args...)
return err
}
func (c *BulkSelectIndexedFilter) NewContextData(conn *mybench.Connection) (MicroBenchContextData, error) {
var err error
contextData := MicroBenchContextData{}
query := fmt.Sprintf("SELECT * FROM `%s` WHERE idx2 = ? AND `%s` = ?", c.table.Name, c.filterField)
contextData.Statement, err = conn.Prepare(query)
return contextData, err
}