From 9aead192ff274da363dc24b4d11ed5dc556deb38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Muhammed=20Efe=20=C3=87etin?= Date: Tue, 20 Jun 2023 13:35:15 +0300 Subject: [PATCH] add all orms --- benchs/gorp.go | 5 +- benchs/pgx.go | 11 -- benchs/reform/reform_models.go | 1 + benchs/rel.go | 170 +++++++++++++++++++++++ benchs/rel.go.bak | 123 ----------------- benchs/sqlboiler.go | 141 +++++++++++++++++++ benchs/sqlboiler.go.bak | 98 ------------- benchs/sqlc.go | 244 +++++++++++++++++++++++++++++++++ benchs/sqlc.go.bak | 211 ---------------------------- benchs/sqlx.go | 157 +++++++++++++++++++++ benchs/sqlx.go.bak | 122 ----------------- benchs/upper.go | 167 ++++++++++++++++++++++ benchs/upper.go.bak | 120 ---------------- benchs/xorm.go | 150 ++++++++++++++++++++ benchs/xorm.go.bak | 102 -------------- benchs/zorm.go | 173 +++++++++++++++++++++++ benchs/zorm.go.bak | 124 ----------------- go.mod | 2 +- go.sum | 82 +---------- main.go | 11 +- 20 files changed, 1219 insertions(+), 995 deletions(-) create mode 100644 benchs/rel.go delete mode 100644 benchs/rel.go.bak create mode 100644 benchs/sqlboiler.go delete mode 100644 benchs/sqlboiler.go.bak create mode 100644 benchs/sqlc.go delete mode 100644 benchs/sqlc.go.bak create mode 100644 benchs/sqlx.go delete mode 100644 benchs/sqlx.go.bak create mode 100644 benchs/upper.go delete mode 100644 benchs/upper.go.bak create mode 100644 benchs/xorm.go delete mode 100644 benchs/xorm.go.bak create mode 100644 benchs/zorm.go delete mode 100644 benchs/zorm.go.bak diff --git a/benchs/gorp.go b/benchs/gorp.go index bbee2f0..cf67c31 100644 --- a/benchs/gorp.go +++ b/benchs/gorp.go @@ -108,12 +108,13 @@ func (gorp *Gorp) Read(b *testing.B) { } } -// TODO: not working func (gorp *Gorp) ReadSlice(b *testing.B) { m := NewModel() for i := 0; i < 100; i++ { err := gorp.conn.Insert(m) - gorp.error(b, "read_slice", fmt.Sprintf("gorp: read_slice: %v", err)) + if err != nil { + gorp.error(b, "read_slice", fmt.Sprintf("gorp: read_slice: %v", err)) + } } b.ReportAllocs() diff --git a/benchs/pgx.go b/benchs/pgx.go index 60ec634..d5887ca 100644 --- a/benchs/pgx.go +++ b/benchs/pgx.go @@ -7,17 +7,6 @@ import ( "testing" ) -const ( - sqlxInsertBaseSQL = `INSERT INTO models (name, title, fax, web, age, "right", counter) VALUES ` - sqlxInsertValuesSQL = `($1, $2, $3, $4, $5, $6, $7)` - sqlxInsertSQL = sqlxInsertBaseSQL + sqlxInsertValuesSQL - sqlxInsertNamesSQL = `(:name, :title, :fax, :web, :age, :right, :counter)` - sqlxInsertMultiSQL = sqlxInsertBaseSQL + sqlxInsertNamesSQL - sqlxUpdateSQL = `UPDATE models SET name = $1, title = $2, fax = $3, web = $4, age = $5, "right" = $6, counter = $7 WHERE id = $8` - sqlxSelectSQL = `SELECT * FROM models WHERE id = $1` - sqlxSelectMultiSQL = `SELECT * FROM models WHERE id > 0 LIMIT 100` -) - type Pgx struct { Instance mu sync.Mutex diff --git a/benchs/reform/reform_models.go b/benchs/reform/reform_models.go index 7bb62ea..a07aaae 100644 --- a/benchs/reform/reform_models.go +++ b/benchs/reform/reform_models.go @@ -3,6 +3,7 @@ package reform //go:generate reform // reform_models represents a row in models table. +// //reform:models type ReformModels struct { ID int `reform:"id,pk"` diff --git a/benchs/rel.go b/benchs/rel.go new file mode 100644 index 0000000..5a245f7 --- /dev/null +++ b/benchs/rel.go @@ -0,0 +1,170 @@ +package benchs + +import ( + "context" + "fmt" + "sync" + "testing" + + "github.com/go-rel/postgres" + relware "github.com/go-rel/rel" + "github.com/go-rel/rel/where" +) + +type Rel struct { + Instance + mu sync.Mutex + conn relware.Repository + db relware.Adapter + iterations int // Same as b.N, just to customize it + errors map[string]string +} + +func CreateRel(iterations int) Instance { + rel := &Rel{ + iterations: iterations, + errors: map[string]string{}, + } + + return rel +} + +func (rel *Rel) Name() string { + return "rel" +} + +func (rel *Rel) Init() error { + var err error + rel.db, err = postgres.Open(OrmSource) + if err != nil { + return err + } + + rel.conn = relware.New(rel.db) + if err := rel.conn.Ping(ctx); err != nil { + return err + } + + // Disable debug logging + rel.conn.Instrumentation(func(ctx context.Context, op string, message string, args ...any) func(err error) { + return func(err error) { + if err != nil { + panic(err) + } + } + }) + + return nil +} + +func (rel *Rel) Close() error { + return rel.db.Close() +} + +func (rel *Rel) GetError(method string) string { + return rel.errors[method] +} + +func (rel *Rel) Insert(b *testing.B) { + m := NewModel3() + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + m.ID = 0 + err := rel.conn.Insert(ctx, m) + if err != nil { + rel.error(b, "insert", fmt.Sprintf("rel: insert: %v", err)) + } + } +} + +func (rel *Rel) InsertMulti(b *testing.B) { + ms := make([]*Model3, 0, 100) + for i := 0; i < 100; i++ { + ms = append(ms, NewModel3()) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + for _, m := range ms { + m.ID = 0 + } + err := rel.conn.InsertAll(ctx, &ms) + if err != nil { + rel.error(b, "insert_multi", fmt.Sprintf("rel: insert_multi: %v", err)) + } + } +} + +func (rel *Rel) Update(b *testing.B) { + m := NewModel3() + m.ID = 0 + err := rel.conn.Insert(ctx, m) + if err != nil { + rel.error(b, "update", fmt.Sprintf("rel: update: %v", err)) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + err := rel.conn.Update(ctx, m) + if err != nil { + rel.error(b, "update", fmt.Sprintf("rel: update: %v", err)) + } + } +} + +func (rel *Rel) Read(b *testing.B) { + m := NewModel3() + m.ID = 0 + err := rel.conn.Insert(ctx, m) + if err != nil { + rel.error(b, "read", fmt.Sprintf("rel: read: %v", err)) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + err := rel.conn.Find(ctx, m) + if err != nil { + rel.error(b, "read", fmt.Sprintf("rel: read: %v", err)) + } + } +} + +func (rel *Rel) ReadSlice(b *testing.B) { + m := NewModel3() + for i := 0; i < 100; i++ { + m.ID = 0 + err := rel.conn.Insert(ctx, m) + if err != nil { + rel.error(b, "read_slice", fmt.Sprintf("rel: read_slice: %v", err)) + } + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + var ms []Model3 + err := rel.conn.FindAll(ctx, &ms, where.Gt("id", 0), relware.Limit(100)) + if err != nil { + rel.error(b, "read_slice", fmt.Sprintf("rel: read_slice: %v", err)) + } + } +} + +func (rel *Rel) error(b *testing.B, method string, err string) { + b.Helper() + + rel.mu.Lock() + rel.errors[method] = err + rel.mu.Unlock() + b.Fail() +} diff --git a/benchs/rel.go.bak b/benchs/rel.go.bak deleted file mode 100644 index d12ed44..0000000 --- a/benchs/rel.go.bak +++ /dev/null @@ -1,123 +0,0 @@ -package benchs - -import ( - "context" - "log" - - "github.com/go-rel/postgres" - relware "github.com/go-rel/rel" - "github.com/go-rel/rel/where" -) - -var rel relware.Repository - -func init() { - st := NewSuite("rel") - st.InitF = func() { - st.AddBenchmark("Insert", 200*OrmMulti, RelInsert) - st.AddBenchmark("MultiInsert 100 row", 200*OrmMulti, RelInsertMulti) - st.AddBenchmark("Update", 200*OrmMulti, RelUpdate) - st.AddBenchmark("Read", 200*OrmMulti, RelRead) - st.AddBenchmark("MultiRead limit 100", 200*OrmMulti, RelReadSlice) - - conn, err := postgres.Open(OrmSource) - if err != nil { - log.Fatalf("failed opening connection to postgres: %v", err) - } - - rel = relware.New(conn) - err = rel.Ping(ctx) - CheckErr(err) - - // Disable debug logging - rel.Instrumentation(func(ctx context.Context, op string, message string, args ...any) func(err error) { - return func(err error) { - CheckErr(err) - } - }) - } -} - -func RelInsert(b *B) { - var m *Model3 - WrapExecute(b, func() { - InitDB() - m = NewModel3() - }) - - for i := 0; i < b.N; i++ { - m.ID = 0 - err := rel.Insert(ctx, m) - CheckErr(err, b) - } -} - -func RelInsertMulti(b *B) { - var ms []*Model3 - WrapExecute(b, func() { - InitDB() - ms = make([]*Model3, 0, 100) - for i := 0; i < 100; i++ { - ms = append(ms, NewModel3()) - } - }) - - for i := 0; i < b.N; i++ { - for _, m := range ms { - m.ID = 0 - } - err := rel.InsertAll(ctx, &ms) - CheckErr(err, b) - } -} - -func RelUpdate(b *B) { - var m *Model3 - WrapExecute(b, func() { - InitDB() - m = NewModel3() - m.ID = 0 - err := rel.Insert(ctx, m) - CheckErr(err, b) - }) - - for i := 0; i < b.N; i++ { - err := rel.Update(ctx, m) - CheckErr(err, b) - } -} - -func RelRead(b *B) { - var m *Model3 - WrapExecute(b, func() { - InitDB() - m = NewModel3() - m.ID = 0 - err := rel.Insert(ctx, m) - CheckErr(err, b) - }) - - for i := 0; i < b.N; i++ { - err := rel.Find(ctx, m) - CheckErr(err, b) - } -} - -func RelReadSlice(b *B) { - var m *Model3 - WrapExecute(b, func() { - InitDB() - m = NewModel3() - for i := 0; i < 100; i++ { - m.ID = 0 - err := rel.Insert(ctx, m) - CheckErr(err, b) - } - }) - - for i := 0; i < b.N; i++ { - var ms []Model3 - err := rel.FindAll(ctx, &ms, where.Gt("id", 0), relware.Limit(100)) - CheckErr(err, b) - } -} diff --git a/benchs/sqlboiler.go b/benchs/sqlboiler.go new file mode 100644 index 0000000..aadfb6f --- /dev/null +++ b/benchs/sqlboiler.go @@ -0,0 +1,141 @@ +package benchs + +import ( + "database/sql" + "fmt" + "sync" + "testing" + + models "github.com/efectn/go-orm-benchmarks/benchs/sqlboiler" + _ "github.com/jackc/pgx/v4/stdlib" + "github.com/volatiletech/sqlboiler/v4/boil" + "github.com/volatiletech/sqlboiler/v4/queries/qm" +) + +type Sqlboiler struct { + Instance + mu sync.Mutex + conn *sql.DB + iterations int // Same as b.N, just to customize it + errors map[string]string +} + +func CreateSqlboiler(iterations int) Instance { + sqlboiler := &Sqlboiler{ + iterations: iterations, + errors: map[string]string{}, + } + + return sqlboiler +} + +func (sqlboiler *Sqlboiler) Name() string { + return "sqlboiler" +} + +func (sqlboiler *Sqlboiler) Init() error { + var err error + sqlboiler.conn, err = sql.Open("pgx", OrmSource) + if err != nil { + return err + } + + boil.SetDB(sqlboiler.conn) + + return nil +} + +func (sqlboiler *Sqlboiler) Close() error { + return sqlboiler.conn.Close() +} + +func (sqlboiler *Sqlboiler) GetError(method string) string { + return sqlboiler.errors[method] +} + +func (sqlboiler *Sqlboiler) Insert(b *testing.B) { + m := NewModel6() + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + m.ID = 0 + err := m.Insert(ctx, sqlboiler.conn, boil.Infer()) + if err != nil { + sqlboiler.error(b, "insert", fmt.Sprintf("sqlboiler: insert: %v", err)) + } + } +} + +func (sqlboiler *Sqlboiler) InsertMulti(b *testing.B) { + sqlboiler.error(b, "insert_multi", "sqlboiler: insert_multi: insert multi is not supported on sqlboiler") +} + +func (sqlboiler *Sqlboiler) Update(b *testing.B) { + m := NewModel6() + m.ID = 0 + err := m.Insert(ctx, sqlboiler.conn, boil.Infer()) + if err != nil { + sqlboiler.error(b, "update", fmt.Sprintf("sqlboiler: update: %v", err)) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err := m.Update(ctx, sqlboiler.conn, boil.Infer()) + if err != nil { + sqlboiler.error(b, "update", fmt.Sprintf("sqlboiler: update: %v", err)) + } + } +} + +func (sqlboiler *Sqlboiler) Read(b *testing.B) { + m := NewModel6() + m.ID = 0 + err := m.Insert(ctx, sqlboiler.conn, boil.Infer()) + if err != nil { + sqlboiler.error(b, "read", fmt.Sprintf("sqlboiler: read: %v", err)) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err := models.Models(qm.Where("id = 0")).Exec(sqlboiler.conn) + if err != nil { + sqlboiler.error(b, "read", fmt.Sprintf("sqlboiler: read: %v", err)) + } + } +} + +func (sqlboiler *Sqlboiler) ReadSlice(b *testing.B) { + m := NewModel6() + for i := 0; i < 100; i++ { + m.ID = 0 + err := m.Insert(ctx, sqlboiler.conn, boil.Infer()) + if err != nil { + sqlboiler.error(b, "read_slice", fmt.Sprintf("sqlboiler: read_slice: %v", err)) + } + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err := models.Models(qm.Where("id > 0"), qm.Limit(100)).All(ctx, sqlboiler.conn) + if err != nil { + sqlboiler.error(b, "read_slice", fmt.Sprintf("sqlboiler: read_slice: %v", err)) + } + } +} + +func (sqlboiler *Sqlboiler) error(b *testing.B, method string, err string) { + b.Helper() + + sqlboiler.mu.Lock() + sqlboiler.errors[method] = err + sqlboiler.mu.Unlock() + b.Fail() +} diff --git a/benchs/sqlboiler.go.bak b/benchs/sqlboiler.go.bak deleted file mode 100644 index ab788ba..0000000 --- a/benchs/sqlboiler.go.bak +++ /dev/null @@ -1,98 +0,0 @@ -package benchs - -import ( - "database/sql" - "fmt" - - models "github.com/efectn/go-orm-benchmarks/benchs/sqlboiler" - _ "github.com/jackc/pgx/v4/stdlib" - "github.com/volatiletech/sqlboiler/v4/boil" - "github.com/volatiletech/sqlboiler/v4/queries/qm" -) - -var sqlboiler *sql.DB - -func init() { - st := NewSuite("sqlboiler") - st.InitF = func() { - st.AddBenchmark("Insert", 200*OrmMulti, SqlboilerInsert) - st.AddBenchmark("MultiInsert 100 row", 200*OrmMulti, SqlboilerInsertMulti) - st.AddBenchmark("Update", 200*OrmMulti, SqlboilerUpdate) - st.AddBenchmark("Read", 200*OrmMulti, SqlboilerRead) - st.AddBenchmark("MultiRead limit 100", 200*OrmMulti, SqlboilerReadSlice) - - var err error - sqlboiler, err = sql.Open("pgx", OrmSource) - CheckErr(err) - - boil.SetDB(sqlboiler) - } -} - -func SqlboilerInsert(b *B) { - var m *models.Model - WrapExecute(b, func() { - InitDB() - m = NewModel6() - }) - - for i := 0; i < b.N; i++ { - m.ID = 0 - err := m.Insert(ctx, sqlboiler, boil.Infer()) - CheckErr(err, b) - } -} - -func SqlboilerInsertMulti(b *B) { - panic(fmt.Errorf("doesn't support bulk-insert")) -} - -func SqlboilerUpdate(b *B) { - var m *models.Model - WrapExecute(b, func() { - InitDB() - m = NewModel6() - m.ID = 0 - err := m.Insert(ctx, sqlboiler, boil.Infer()) - CheckErr(err, b) - }) - - for i := 0; i < b.N; i++ { - _, err := m.Update(ctx, sqlboiler, boil.Infer()) - CheckErr(err, b) - } -} - -func SqlboilerRead(b *B) { - var m *models.Model - WrapExecute(b, func() { - InitDB() - m = NewModel6() - m.ID = 0 - err := m.Insert(ctx, sqlboiler, boil.Infer()) - CheckErr(err, b) - }) - - for i := 0; i < b.N; i++ { - _, err := models.Models(qm.Where("id = 0")).Exec(sqlboiler) - CheckErr(err, b) - } -} - -func SqlboilerReadSlice(b *B) { - var m *models.Model - WrapExecute(b, func() { - InitDB() - m = NewModel6() - for i := 0; i < 100; i++ { - m.ID = 0 - err := m.Insert(ctx, sqlboiler, boil.Infer()) - CheckErr(err, b) - } - }) - - for i := 0; i < b.N; i++ { - _, err := models.Models(qm.Where("id > 0"), qm.Limit(100)).All(ctx, sqlboiler) - CheckErr(err, b) - } -} diff --git a/benchs/sqlc.go b/benchs/sqlc.go new file mode 100644 index 0000000..1f10e76 --- /dev/null +++ b/benchs/sqlc.go @@ -0,0 +1,244 @@ +package benchs + +import ( + "database/sql" + "fmt" + "sync" + "testing" + + "github.com/efectn/go-orm-benchmarks/benchs/sqlc/db" +) + +type Sqlc struct { + Instance + mu sync.Mutex + conn *db.Queries + db *sql.DB + iterations int // Same as b.N, just to customize it + errors map[string]string +} + +func CreateSqlc(iterations int) Instance { + sqlc := &Sqlc{ + iterations: iterations, + errors: map[string]string{}, + } + + return sqlc +} + +func (sqlc *Sqlc) Name() string { + return "sqlc" +} + +func (sqlc *Sqlc) Init() error { + var err error + sqlc.db, err = sql.Open("pgx", OrmSource) + if err != nil { + return err + } + + sqlc.conn = db.New(sqlc.db) + + return nil +} + +func (sqlc *Sqlc) Close() error { + return sqlc.db.Close() +} + +func (sqlc *Sqlc) GetError(method string) string { + return sqlc.errors[method] +} + +func (sqlc *Sqlc) Insert(b *testing.B) { + m := NewModel() + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + m.Id = 0 + _, err := sqlc.conn.CreateModel(ctx, db.CreateModelParams{ + Name: m.Name, + Title: m.Title, + Fax: m.Fax, + Web: m.Web, + Age: int32(m.Age), + Right: m.Right, + Counter: m.Counter, + }) + if err != nil { + sqlc.error(b, "insert", fmt.Sprintf("sqlc: insert: %v", err)) + } + } +} + +func (sqlc *Sqlc) InsertMulti(b *testing.B) { + sqlc.error(b, "insert_multi", "sqlc: insert_multi: insert multi is not supported on sqlc") +} + +func (sqlc *Sqlc) Update(b *testing.B) { + m := NewModel() + + _, err := sqlc.conn.CreateModel(ctx, db.CreateModelParams{ + Name: m.Name, + Title: m.Title, + Fax: m.Fax, + Web: m.Web, + Age: int32(m.Age), + Right: m.Right, + Counter: m.Counter, + }) + if err != nil { + sqlc.error(b, "update", fmt.Sprintf("sqlc: update: %v", err)) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + err := sqlc.conn.UpdateModel(ctx, db.UpdateModelParams{ + Name: m.Name, + Title: m.Title, + Fax: m.Fax, + Web: m.Web, + Age: int32(m.Age), + Right: m.Right, + Counter: m.Counter, + ID: int32(m.Id), + }) + if err != nil { + sqlc.error(b, "update", fmt.Sprintf("sqlc: update: %v", err)) + } + } +} + +func (sqlc *Sqlc) Read(b *testing.B) { + m := NewModel() + + output, err := sqlc.conn.CreateModel(ctx, db.CreateModelParams{ + Name: m.Name, + Title: m.Title, + Fax: m.Fax, + Web: m.Web, + Age: int32(m.Age), + Right: m.Right, + Counter: m.Counter, + }) + m.Id = int(output.ID) + if err != nil { + sqlc.error(b, "read", fmt.Sprintf("sqlc: read: %v", err)) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err := sqlc.conn.GetModel(ctx, int32(m.Id)) + if err != nil { + sqlc.error(b, "read", fmt.Sprintf("sqlc: read: %v", err)) + } + } +} + +func (sqlc *Sqlc) ReadSlice(b *testing.B) { + m := NewModel() + + for i := 0; i < 100; i++ { + m.Id = 0 + + _, err := sqlc.conn.CreateModel(ctx, db.CreateModelParams{ + Name: m.Name, + Title: m.Title, + Fax: m.Fax, + Web: m.Web, + Age: int32(m.Age), + Right: m.Right, + Counter: m.Counter, + }) + if err != nil { + sqlc.error(b, "read_slice", fmt.Sprintf("sqlc: read_slice: %v", err)) + } + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err := sqlc.conn.ListModels(ctx, db.ListModelsParams{ + ID: 0, + Limit: 100, + }) + if err != nil { + sqlc.error(b, "read_slice", fmt.Sprintf("sqlc: read_slice: %v", err)) + } + } +} + +func (sqlc *Sqlc) error(b *testing.B, method string, err string) { + b.Helper() + + sqlc.mu.Lock() + sqlc.errors[method] = err + sqlc.mu.Unlock() + b.Fail() +} + +/* +func SqlcReadSlice(b *B) { + var m *Model + + WrapExecute(b, func() { + InitDB() + m = NewModel() + for i := 0; i < 100; i++ { + m.Id = 0 + + created, err := sqlcQueries.CreateModel(ctx, db.CreateModelParams{ + Name: m.Name, + Title: m.Title, + Fax: m.Fax, + Web: m.Web, + Age: int32(m.Age), + Right: m.Right, + Counter: m.Counter, + }) + CheckErr(err, b) + + m = &Model{ + Id: int(created.ID), + Name: created.Name, + Title: created.Title, + Fax: created.Fax, + Web: created.Web, + Age: int(created.Age), + Right: created.Right, + Counter: created.Counter, + } + } + }) + + for i := 0; i < b.N; i++ { + sqlcModels, err := sqlcQueries.ListModels(ctx, db.ListModelsParams{ + ID: 0, + Limit: 100, + }) + CheckErr(err, b) + + models := make([]*Model, len(sqlcModels)) + + for i2 := range sqlcModels { + models[i2] = &Model{ + Name: sqlcModels[i2].Name, + Title: sqlcModels[i2].Title, + Fax: sqlcModels[i2].Fax, + Web: sqlcModels[i2].Web, + Age: int(sqlcModels[i2].Age), + Right: sqlcModels[i2].Right, + Counter: sqlcModels[i2].Counter, + } + } + } +} +*/ diff --git a/benchs/sqlc.go.bak b/benchs/sqlc.go.bak deleted file mode 100644 index dbca166..0000000 --- a/benchs/sqlc.go.bak +++ /dev/null @@ -1,211 +0,0 @@ -package benchs - -import ( - "database/sql" - "fmt" - - "github.com/efectn/go-orm-benchmarks/benchs/sqlc/db" -) - -var ( - sqlcQueries *db.Queries -) - -func init() { - st := NewSuite("sqlc") - st.InitF = func() { - st.AddBenchmark("Insert", 200*OrmMulti, SqlcInsert) - st.AddBenchmark("MultiInsert 100 row", 200*OrmMulti, SqlcInsertMulti) - st.AddBenchmark("Update", 200*OrmMulti, SqlcUpdate) - st.AddBenchmark("Read", 200*OrmMulti, SqlcRead) - st.AddBenchmark("MultiRead limit 100", 200*OrmMulti, SqlcReadSlice) - - dbConnection, _ := sql.Open("pgx", OrmSource) - sqlcQueries = db.New(dbConnection) - } -} - -func SqlcInsert(b *B) { - var m *Model - - WrapExecute(b, func() { - InitDB() - m = NewModel() - }) - - for i := 0; i < b.N; i++ { - m.Id = 0 - - created, err := sqlcQueries.CreateModel(ctx, db.CreateModelParams{ - Name: m.Name, - Title: m.Title, - Fax: m.Fax, - Web: m.Web, - Age: int32(m.Age), - Right: m.Right, - Counter: m.Counter, - }) - CheckErr(err, b) - - m = &Model{ - Id: int(created.ID), - Name: created.Name, - Title: created.Title, - Fax: created.Fax, - Web: created.Web, - Age: int(created.Age), - Right: created.Right, - Counter: created.Counter, - } - } -} - -func SqlcInsertMulti(b *B) { - panic(fmt.Errorf("doesn't support bulk-insert")) -} - -func SqlcUpdate(b *B) { - var m *Model - - WrapExecute(b, func() { - InitDB() - m = NewModel() - created, err := sqlcQueries.CreateModel(ctx, db.CreateModelParams{ - Name: m.Name, - Title: m.Title, - Fax: m.Fax, - Web: m.Web, - Age: int32(m.Age), - Right: m.Right, - Counter: m.Counter, - }) - CheckErr(err, b) - - m = &Model{ - Id: int(created.ID), - Name: created.Name, - Title: created.Title, - Fax: created.Fax, - Web: created.Web, - Age: int(created.Age), - Right: created.Right, - Counter: created.Counter, - } - }) - - for i := 0; i < b.N; i++ { - err := sqlcQueries.UpdateModel(ctx, db.UpdateModelParams{ - Name: m.Name, - Title: m.Title, - Fax: m.Fax, - Web: m.Web, - Age: int32(m.Age), - Right: m.Right, - Counter: m.Counter, - ID: int32(m.Id), - }) - CheckErr(err, b) - } -} - -func SqlcRead(b *B) { - var m *Model - - WrapExecute(b, func() { - InitDB() - m = NewModel() - created, err := sqlcQueries.CreateModel(ctx, db.CreateModelParams{ - Name: m.Name, - Title: m.Title, - Fax: m.Fax, - Web: m.Web, - Age: int32(m.Age), - Right: m.Right, - Counter: m.Counter, - }) - CheckErr(err, b) - - m = &Model{ - Id: int(created.ID), - Name: created.Name, - Title: created.Title, - Fax: created.Fax, - Web: created.Web, - Age: int(created.Age), - Right: created.Right, - Counter: created.Counter, - } - }) - - for i := 0; i < b.N; i++ { - readed, err := sqlcQueries.GetModel(ctx, int32(m.Id)) - CheckErr(err, b) - - m = &Model{ - Id: int(readed.ID), - Name: readed.Name, - Title: readed.Title, - Fax: readed.Fax, - Web: readed.Web, - Age: int(readed.Age), - Right: readed.Right, - Counter: readed.Counter, - } - } -} - -func SqlcReadSlice(b *B) { - var m *Model - - WrapExecute(b, func() { - InitDB() - m = NewModel() - for i := 0; i < 100; i++ { - m.Id = 0 - - created, err := sqlcQueries.CreateModel(ctx, db.CreateModelParams{ - Name: m.Name, - Title: m.Title, - Fax: m.Fax, - Web: m.Web, - Age: int32(m.Age), - Right: m.Right, - Counter: m.Counter, - }) - CheckErr(err, b) - - m = &Model{ - Id: int(created.ID), - Name: created.Name, - Title: created.Title, - Fax: created.Fax, - Web: created.Web, - Age: int(created.Age), - Right: created.Right, - Counter: created.Counter, - } - } - }) - - for i := 0; i < b.N; i++ { - sqlcModels, err := sqlcQueries.ListModels(ctx, db.ListModelsParams{ - ID: 0, - Limit: 100, - }) - CheckErr(err, b) - - models := make([]*Model, len(sqlcModels)) - - for i2 := range sqlcModels { - models[i2] = &Model{ - Name: sqlcModels[i2].Name, - Title: sqlcModels[i2].Title, - Fax: sqlcModels[i2].Fax, - Web: sqlcModels[i2].Web, - Age: int(sqlcModels[i2].Age), - Right: sqlcModels[i2].Right, - Counter: sqlcModels[i2].Counter, - } - } - } -} diff --git a/benchs/sqlx.go b/benchs/sqlx.go new file mode 100644 index 0000000..0ad968e --- /dev/null +++ b/benchs/sqlx.go @@ -0,0 +1,157 @@ +package benchs + +import ( + "fmt" + sqlxdb "github.com/jmoiron/sqlx" + _ "github.com/lib/pq" + "sync" + "testing" +) + +const ( + sqlxInsertBaseSQL = `INSERT INTO models (name, title, fax, web, age, "right", counter) VALUES ` + sqlxInsertValuesSQL = `($1, $2, $3, $4, $5, $6, $7)` + sqlxInsertSQL = sqlxInsertBaseSQL + sqlxInsertValuesSQL + sqlxInsertNamesSQL = `(:name, :title, :fax, :web, :age, :right, :counter)` + sqlxInsertMultiSQL = sqlxInsertBaseSQL + sqlxInsertNamesSQL + sqlxUpdateSQL = `UPDATE models SET name = $1, title = $2, fax = $3, web = $4, age = $5, "right" = $6, counter = $7 WHERE id = $8` + sqlxSelectSQL = `SELECT * FROM models WHERE id = $1` + sqlxSelectMultiSQL = `SELECT * FROM models WHERE id > 0 LIMIT 100` +) + +type Sqlx struct { + Instance + mu sync.Mutex + conn *sqlxdb.DB + iterations int // Same as b.N, just to customize it + errors map[string]string +} + +func CreateSqlx(iterations int) Instance { + sqlx := &Sqlx{ + iterations: iterations, + errors: map[string]string{}, + } + + return sqlx +} + +func (sqlx *Sqlx) Name() string { + return "sqlx" +} + +func (sqlx *Sqlx) Init() error { + var err error + sqlx.conn, err = sqlxdb.Connect("postgres", OrmSource) + if err != nil { + return err + } + + return nil +} + +func (sqlx *Sqlx) Close() error { + return sqlx.conn.Close() +} + +func (sqlx *Sqlx) GetError(method string) string { + return sqlx.errors[method] +} + +func (sqlx *Sqlx) Insert(b *testing.B) { + m := NewModel() + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err := sqlx.conn.Exec(sqlxInsertSQL, m.Name, m.Title, m.Fax, m.Web, m.Age, m.Right, m.Counter) + if err != nil { + sqlx.error(b, "insert", fmt.Sprintf("sqlx: insert: %v", err)) + } + } +} + +func (sqlx *Sqlx) InsertMulti(b *testing.B) { + ms := make([]*Model, 0, 100) + for i := 0; i < 100; i++ { + ms = append(ms, NewModel()) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err := sqlx.conn.NamedExec(sqlxInsertMultiSQL, ms) + if err != nil { + sqlx.error(b, "insert_multi", fmt.Sprintf("sqlx: insert_multi: %v", err)) + } + } +} + +func (sqlx *Sqlx) Update(b *testing.B) { + m := NewModel() + _, err := sqlx.conn.Exec(sqlxInsertSQL, m.Name, m.Title, m.Fax, m.Web, m.Age, m.Right, m.Counter) + if err != nil { + sqlx.error(b, "update", fmt.Sprintf("sqlx: update: %v", err)) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err := sqlx.conn.Exec(sqlxUpdateSQL, m.Name, m.Title, m.Fax, m.Web, m.Age, m.Right, m.Counter, m.Id) + if err != nil { + sqlx.error(b, "update", fmt.Sprintf("sqlx: update: %v", err)) + } + } +} + +func (sqlx *Sqlx) Read(b *testing.B) { + m := NewModel() + _, err := sqlx.conn.Exec(sqlxInsertSQL, m.Name, m.Title, m.Fax, m.Web, m.Age, m.Right, m.Counter) + if err != nil { + sqlx.error(b, "read", fmt.Sprintf("sqlx: read: %v", err)) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + var m []Model + err := sqlx.conn.Select(&m, sqlxSelectSQL, 1) + if err != nil { + sqlx.error(b, "read", fmt.Sprintf("sqlx: read: %v", err)) + } + } +} + +func (sqlx *Sqlx) ReadSlice(b *testing.B) { + m := NewModel() + for i := 0; i < 100; i++ { + _, err := sqlx.conn.Exec(sqlxInsertSQL, m.Name, m.Title, m.Fax, m.Web, m.Age, m.Right, m.Counter) + if err != nil { + sqlx.error(b, "read_slice", fmt.Sprintf("sqlx: read_slice: %v", err)) + } + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + ms := make([]Model, 100) + err := sqlx.conn.Select(&ms, sqlxSelectMultiSQL) + if err != nil { + sqlx.error(b, "read_slice", fmt.Sprintf("sqlx: read_slice: %v", err)) + } + } +} + +func (sqlx *Sqlx) error(b *testing.B, method string, err string) { + b.Helper() + + sqlx.mu.Lock() + sqlx.errors[method] = err + sqlx.mu.Unlock() + b.Fail() +} diff --git a/benchs/sqlx.go.bak b/benchs/sqlx.go.bak deleted file mode 100644 index cb31136..0000000 --- a/benchs/sqlx.go.bak +++ /dev/null @@ -1,122 +0,0 @@ -package benchs - -import ( - "github.com/jmoiron/sqlx" - _ "github.com/lib/pq" -) - -var sqlxdb *sqlx.DB - -const ( - sqlxInsertBaseSQL = `INSERT INTO models (name, title, fax, web, age, "right", counter) VALUES ` - sqlxInsertValuesSQL = `($1, $2, $3, $4, $5, $6, $7)` - sqlxInsertSQL = sqlxInsertBaseSQL + sqlxInsertValuesSQL - sqlxInsertNamesSQL = `(:name, :title, :fax, :web, :age, :right, :counter)` - sqlxInsertMultiSQL = sqlxInsertBaseSQL + sqlxInsertNamesSQL - sqlxUpdateSQL = `UPDATE models SET name = $1, title = $2, fax = $3, web = $4, age = $5, "right" = $6, counter = $7 WHERE id = $8` - sqlxSelectSQL = `SELECT * FROM models WHERE id = $1` - sqlxSelectMultiSQL = `SELECT * FROM models WHERE id > 0 LIMIT 100` -) - -func init() { - st := NewSuite("sqlx") - st.InitF = func() { - st.AddBenchmark("Insert", 200*OrmMulti, SqlxInsert) - st.AddBenchmark("MultiInsert 100 row", 200*OrmMulti, SqlxInsertMulti) - st.AddBenchmark("Update", 200*OrmMulti, SqlxUpdate) - st.AddBenchmark("Read", 200*OrmMulti, SqlxRead) - st.AddBenchmark("MultiRead limit 100", 200*OrmMulti, SqlxReadSlice) - - db, err := sqlx.Connect("postgres", OrmSource) - CheckErr(err) - - sqlxdb = db - } -} - -func SqlxInsert(b *B) { - var m *Model - WrapExecute(b, func() { - InitDB() - m = NewModel() - }) - - for i := 0; i < b.N; i++ { - _, err := sqlxdb.Exec(sqlxInsertSQL, m.Name, m.Title, m.Fax, m.Web, m.Age, m.Right, m.Counter) - CheckErr(err, b) - } -} - -func sqlxInsert(m *Model) error { - _, err := sqlxdb.Exec(sqlxInsertSQL, m.Name, m.Title, m.Fax, m.Web, m.Age, m.Right, m.Counter) - CheckErr(err) - - return nil -} - -func SqlxInsertMulti(b *B) { - var ms []*Model - WrapExecute(b, func() { - InitDB() - ms = make([]*Model, 0, 100) - for i := 0; i < 100; i++ { - ms = append(ms, NewModel()) - } - }) - - for i := 0; i < b.N; i++ { - _, err := sqlxdb.NamedExec(sqlxInsertMultiSQL, ms) - CheckErr(err, b) - } -} - -func SqlxUpdate(b *B) { - var m *Model - WrapExecute(b, func() { - InitDB() - m = NewModel() - err := sqlxInsert(m) - CheckErr(err, b) - }) - - for i := 0; i < b.N; i++ { - _, err := sqlxdb.Exec(sqlxUpdateSQL, m.Name, m.Title, m.Fax, m.Web, m.Age, m.Right, m.Counter, m.Id) - CheckErr(err, b) - } -} - -func SqlxRead(b *B) { - var m *Model - WrapExecute(b, func() { - InitDB() - m = NewModel() - err := sqlxInsert(m) - CheckErr(err, b) - }) - - for i := 0; i < b.N; i++ { - m := []Model{} - err := sqlxdb.Select(&m, sqlxSelectSQL, 1) - CheckErr(err, b) - } -} - -func SqlxReadSlice(b *B) { - var m *Model - WrapExecute(b, func() { - var err error - InitDB() - m = NewModel() - for i := 0; i < 100; i++ { - err = sqlxInsert(m) - CheckErr(err, b) - } - CheckErr(err, b) - }) - - for i := 0; i < b.N; i++ { - ms := make([]Model, 100) - err := sqlxdb.Select(&ms, sqlxSelectMultiSQL) - CheckErr(err, b) - } -} diff --git a/benchs/upper.go b/benchs/upper.go new file mode 100644 index 0000000..0c4f27c --- /dev/null +++ b/benchs/upper.go @@ -0,0 +1,167 @@ +package benchs + +import ( + "fmt" + db "github.com/upper/db/v4" + "github.com/upper/db/v4/adapter/postgresql" + "sync" + "testing" +) + +type Upper struct { + Instance + mu sync.Mutex + conn db.Session + iterations int // Same as b.N, just to customize it + errors map[string]string +} + +func CreateUpper(iterations int) Instance { + upper := &Upper{ + iterations: iterations, + errors: map[string]string{}, + } + + return upper +} + +func (upper *Upper) Name() string { + return "upper" +} + +func (upper *Upper) Init() error { + var err error + source := SplitSource() + + upper.conn, err = postgresql.Open(postgresql.ConnectionURL{ + Host: source["host"] + ":5432", + User: source["user"], + Password: source["password"], + Database: source["dbname"], + }) + if err != nil { + return err + } + + // Disable logger + db.LC().SetLogger(nil) + + if err := upper.conn.Ping(); err != nil { + return err + } + + return nil +} + +func (upper *Upper) Close() error { + return upper.conn.Close() +} + +func (upper *Upper) GetError(method string) string { + return upper.errors[method] +} + +func (upper *Upper) Insert(b *testing.B) { + m := NewModel4() + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err := upper.conn.Collection("models").Insert(m) + if err != nil { + upper.error(b, "insert", fmt.Sprintf("upper: insert: %v", err)) + } + } +} + +func (upper *Upper) InsertMulti(b *testing.B) { + m := NewModel4() + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + batch := upper.conn.SQL().InsertInto("models").Columns("name", "title", "fax", "web", "age", "right", "counter").Batch(100) + + go func() { + for i := 0; i < 100; i++ { + batch.Values(m.Name, m.Title, m.Fax, m.Web, m.Age, m.Right, m.Counter) + } + batch.Done() + }() + + if err := batch.Wait(); err != nil { + upper.error(b, "insert_multi", fmt.Sprintf("upper: insert_multi: %v", err)) + } + } +} + +func (upper *Upper) Update(b *testing.B) { + m := NewModel4() + + err := upper.conn.Collection("models").InsertReturning(m) + if err != nil { + upper.error(b, "update", fmt.Sprintf("upper: update: %v", err)) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + err := upper.conn.Collection("models").UpdateReturning(m) + if err != nil { + upper.error(b, "update", fmt.Sprintf("upper: update: %v", err)) + } + } +} + +func (upper *Upper) Read(b *testing.B) { + m := NewModel4() + + err := upper.conn.Collection("models").InsertReturning(m) + if err != nil { + upper.error(b, "read", fmt.Sprintf("upper: read: %v", err)) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + err := upper.conn.SQL().SelectFrom("models").Where("id = ?", m.ID).One(m) + if err != nil { + upper.error(b, "read", fmt.Sprintf("upper: read: %v", err)) + } + } +} + +func (upper *Upper) ReadSlice(b *testing.B) { + m := NewModel4() + for i := 0; i < 100; i++ { + m.ID = 0 + err := upper.conn.Collection("models").InsertReturning(m) + if err != nil { + upper.error(b, "read_slice", fmt.Sprintf("upper: read_slice: %v", err)) + } + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + var ms []*Model4 + err := upper.conn.SQL().SelectFrom("models").Where("id > ?", m.ID).Limit(100).All(&ms) + if err != nil { + upper.error(b, "read_slice", fmt.Sprintf("upper: read_slice: %v", err)) + } + } +} + +func (upper *Upper) error(b *testing.B, method string, err string) { + b.Helper() + + upper.mu.Lock() + upper.errors[method] = err + upper.mu.Unlock() + b.Fail() +} diff --git a/benchs/upper.go.bak b/benchs/upper.go.bak deleted file mode 100644 index 4b27fc9..0000000 --- a/benchs/upper.go.bak +++ /dev/null @@ -1,120 +0,0 @@ -package benchs - -import ( - db "github.com/upper/db/v4" - "github.com/upper/db/v4/adapter/postgresql" -) - -var upper db.Session - -func init() { - st := NewSuite("upper") - st.InitF = func() { - st.AddBenchmark("Insert", 200*OrmMulti, UpperInsert) - st.AddBenchmark("MultiInsert 100 row", 200*OrmMulti, UpperInsertMulti) - st.AddBenchmark("Update", 200*OrmMulti, UpperUpdate) - st.AddBenchmark("Read", 200*OrmMulti, UpperRead) - st.AddBenchmark("MultiRead limit 100", 200*OrmMulti, UpperReadSlice) - - var err error - - source := SplitSource() - upper, err = postgresql.Open(postgresql.ConnectionURL{ - Host: source["host"] + ":5432", - User: source["user"], - Password: source["password"], - Database: source["dbname"], - }) - CheckErr(err) - - // Disable logger - db.LC().SetLogger(nil) - - err = upper.Ping() - CheckErr(err) - } -} - -func UpperInsert(b *B) { - var m *Model4 - WrapExecute(b, func() { - InitDB() - m = NewModel4() - }) - - for i := 1; i < b.N+1; i++ { - _, err := upper.Collection("models").Insert(m) - CheckErr(err, b) - } -} - -func UpperInsertMulti(b *B) { - var m *Model4 - WrapExecute(b, func() { - InitDB() - m = NewModel4() - }) - - for i := 1; i < b.N+1; i++ { - batch := upper.SQL().InsertInto("models").Columns("name", "title", "fax", "web", "age", "right", "counter").Batch(100) - - go func() { - for i := 0; i < 100; i++ { - batch.Values(m.Name, m.Title, m.Fax, m.Web, m.Age, m.Right, m.Counter) - } - batch.Done() - }() - - err := batch.Wait() - CheckErr(err, b) - } -} - -func UpperUpdate(b *B) { - var m *Model4 - WrapExecute(b, func() { - InitDB() - m = NewModel4() - - err := upper.Collection("models").InsertReturning(m) - CheckErr(err, b) - }) - - for i := 0; i < b.N; i++ { - err := upper.Collection("models").UpdateReturning(m) - CheckErr(err, b) - } -} - -func UpperRead(b *B) { - var m *Model4 - WrapExecute(b, func() { - InitDB() - m = NewModel4() - - err := upper.Collection("models").InsertReturning(m) - CheckErr(err, b) - }) - - for i := 0; i < b.N; i++ { - err := upper.SQL().SelectFrom("models").Where("id = ?", m.ID).One(m) - CheckErr(err, b) - } -} - -func UpperReadSlice(b *B) { - var m *Model4 - WrapExecute(b, func() { - InitDB() - m = NewModel4() - - err := upper.Collection("models").InsertReturning(m) - CheckErr(err, b) - }) - - for i := 0; i < b.N; i++ { - var ms []*Model4 - err := upper.SQL().SelectFrom("models").Where("id > ?", m.ID).Limit(100).All(&ms) - CheckErr(err, b) - } -} diff --git a/benchs/xorm.go b/benchs/xorm.go new file mode 100644 index 0000000..fc4d1c6 --- /dev/null +++ b/benchs/xorm.go @@ -0,0 +1,150 @@ +package benchs + +import ( + "fmt" + "sync" + "testing" + xormdb "xorm.io/xorm" +) + +type Xorm struct { + Instance + mu sync.Mutex + conn *xormdb.Session + iterations int // Same as b.N, just to customize it + errors map[string]string +} + +func CreateXorm(iterations int) Instance { + xorm := &Xorm{ + iterations: iterations, + errors: map[string]string{}, + } + + return xorm +} + +func (xorm *Xorm) Name() string { + return "xorm" +} + +func (xorm *Xorm) Init() error { + engine, err := xormdb.NewEngine("postgres", OrmSource) + if err != nil { + return err + } + + xorm.conn = engine.NewSession() + + return nil +} + +func (xorm *Xorm) Close() error { + return xorm.conn.Close() +} + +func (xorm *Xorm) GetError(method string) string { + return xorm.errors[method] +} + +func (xorm *Xorm) Insert(b *testing.B) { + m := NewModel5() + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + m.ID = 0 + _, err := xorm.conn.Insert(m) + if err != nil { + xorm.error(b, "insert", fmt.Sprintf("xorm: insert: %v", err)) + } + } +} + +func (xorm *Xorm) InsertMulti(b *testing.B) { + ms := make([]*Model5, 0, 100) + for i := 0; i < 100; i++ { + ms = append(ms, NewModel5()) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err := xorm.conn.Insert(&ms) + if err != nil { + xorm.error(b, "insert_multi", fmt.Sprintf("xorm: insert_multi: %v", err)) + } + } +} + +func (xorm *Xorm) Update(b *testing.B) { + m := NewModel5() + + _, err := xorm.conn.Insert(m) + if err != nil { + xorm.error(b, "update", fmt.Sprintf("xorm: update: %v", err)) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err := xorm.conn.ID(m.ID).Update(m) + if err != nil { + xorm.error(b, "update", fmt.Sprintf("xorm: update: %v", err)) + } + } +} + +func (xorm *Xorm) Read(b *testing.B) { + m := NewModel5() + + _, err := xorm.conn.Insert(m) + if err != nil { + xorm.error(b, "read", fmt.Sprintf("xorm: read: %v", err)) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err := xorm.conn.ID(1).NoAutoCondition().Get(m) + if err != nil { + xorm.error(b, "read", fmt.Sprintf("xorm: read: %v", err)) + } + } +} + +func (xorm *Xorm) ReadSlice(b *testing.B) { + m := NewModel5() + + for i := 0; i < 100; i++ { + m.ID = 0 + _, err := xorm.conn.Insert(m) + if err != nil { + xorm.error(b, "read_slice", fmt.Sprintf("xorm: read_slice: %v", err)) + } + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + var models []*Model5 + err := xorm.conn.Where("id > 0").Limit(100).Find(&models) + if err != nil { + xorm.error(b, "read_slice", fmt.Sprintf("xorm: read_slice: %v", err)) + } + } +} + +func (xorm *Xorm) error(b *testing.B, method string, err string) { + b.Helper() + + xorm.mu.Lock() + xorm.errors[method] = err + xorm.mu.Unlock() + b.Fail() +} diff --git a/benchs/xorm.go.bak b/benchs/xorm.go.bak deleted file mode 100644 index 81e82f6..0000000 --- a/benchs/xorm.go.bak +++ /dev/null @@ -1,102 +0,0 @@ -package benchs - -import ( - "xorm.io/xorm" -) - -var xo *xorm.Session - -func init() { - st := NewSuite("xorm") - st.InitF = func() { - st.AddBenchmark("Insert", 200*OrmMulti, XormInsert) - st.AddBenchmark("MultiInsert 100 row", 200*OrmMulti, XormInsertMulti) - st.AddBenchmark("Update", 200*OrmMulti, XormUpdate) - st.AddBenchmark("Read", 200*OrmMulti, XormRead) - st.AddBenchmark("MultiRead limit 100", 200*OrmMulti, XormReadSlice) - - engine, err := xorm.NewEngine("postgres", OrmSource) - CheckErr(err) - - xo = engine.NewSession() - } -} - -func XormInsert(b *B) { - var m *Model5 - WrapExecute(b, func() { - InitDB() - m = NewModel5() - }) - - for i := 0; i < b.N; i++ { - m.ID = 0 - _, err := xo.Insert(m) - CheckErr(err, b) - } -} - -func XormInsertMulti(b *B) { - var ms []*Model5 - WrapExecute(b, func() { - InitDB() - ms = make([]*Model5, 0, 100) - for i := 0; i < 100; i++ { - ms = append(ms, NewModel5()) - } - }) - - for i := 0; i < b.N; i++ { - _, err := xo.Insert(&ms) - CheckErr(err, b) - } -} - -func XormUpdate(b *B) { - var m *Model5 - WrapExecute(b, func() { - InitDB() - m = NewModel5() - _, err := xo.Insert(m) - CheckErr(err, b) - }) - - for i := 0; i < b.N; i++ { - _, err := xo.ID(m.ID).Update(m) - CheckErr(err, b) - } -} - -func XormRead(b *B) { - var m *Model5 - WrapExecute(b, func() { - InitDB() - m = NewModel5() - _, err := xo.Insert(m) - CheckErr(err, b) - }) - - for i := 0; i < b.N; i++ { - _, err := xo.ID(1).NoAutoCondition().Get(m) - CheckErr(err, b) - } -} - -func XormReadSlice(b *B) { - var m *Model5 - WrapExecute(b, func() { - InitDB() - m = NewModel5() - for i := 0; i < 100; i++ { - m.ID = 0 - _, err := xo.Insert(m) - CheckErr(err, b) - } - }) - - for i := 0; i < b.N; i++ { - var models []*Model5 - err := xo.Where("id > 0").Limit(100).Find(&models) - CheckErr(err, b) - } -} diff --git a/benchs/zorm.go b/benchs/zorm.go new file mode 100644 index 0000000..dbb5e4d --- /dev/null +++ b/benchs/zorm.go @@ -0,0 +1,173 @@ +package benchs + +import ( + "context" + "fmt" + "sync" + "testing" + + zormdb "gitee.com/chunanyong/zorm" + _ "github.com/lib/pq" +) + +var ( + zormCtx = context.Background() + readFinder = zormdb.NewFinder().Append("SELECT * FROM models WHERE id = 1") + readSliceFinder = zormdb.NewFinder().Append("SELECT * FROM models WHERE id > 0") + page = &zormdb.Page{PageNo: 1, PageSize: 100} +) + +type Zorm struct { + Instance + mu sync.Mutex + iterations int // Same as b.N, just to customize it + errors map[string]string +} + +func CreateZorm(iterations int) Instance { + zorm := &Zorm{ + iterations: iterations, + errors: map[string]string{}, + } + + return zorm +} + +func (zorm *Zorm) Name() string { + return "zorm" +} + +func (zorm *Zorm) Init() error { + readFinder.InjectionCheck = false + readSliceFinder.InjectionCheck = false + readSliceFinder.SelectTotalCount = false + + dbDaoConfig := zormdb.DataSourceConfig{ + DSN: OrmSource, + DriverName: "postgres", + Dialect: "postgresql", + MaxOpenConns: OrmMaxConn, + MaxIdleConns: OrmMaxIdle, + SlowSQLMillis: -1, + DisableTransaction: true, + } + _, err := zormdb.NewDBDao(&dbDaoConfig) + if err != nil { + return err + } + + return nil +} + +func (zorm *Zorm) Close() error { + return nil +} + +func (zorm *Zorm) GetError(method string) string { + return zorm.errors[method] +} + +func (zorm *Zorm) Insert(b *testing.B) { + m := NewModel7() + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + m.ID = 0 + _, err := zormdb.Insert(zormCtx, m) + if err != nil { + zorm.error(b, "insert", fmt.Sprintf("zorm: insert: %v", err)) + } + } +} + +func (zorm *Zorm) InsertMulti(b *testing.B) { + ms := make([]zormdb.IEntityStruct, 0, 100) + for i := 0; i < 100; i++ { + ms = append(ms, NewModel7()) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + for _, m := range ms { + m7, _ := m.(*Model7) + m7.ID = 0 + } + _, err := zormdb.InsertSlice(zormCtx, ms) + if err != nil { + zorm.error(b, "insert_multi", fmt.Sprintf("zorm: insert_multi: %v", err)) + } + } +} + +func (zorm *Zorm) Update(b *testing.B) { + m := NewModel7() + + _, err := zormdb.Insert(zormCtx, m) + if err != nil { + zorm.error(b, "update", fmt.Sprintf("zorm: update: %v", err)) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err := zormdb.Update(zormCtx, m) + if err != nil { + zorm.error(b, "update", fmt.Sprintf("zorm: update: %v", err)) + } + } +} + +func (zorm *Zorm) Read(b *testing.B) { + m := NewModel7() + + _, err := zormdb.Insert(zormCtx, m) + if err != nil { + zorm.error(b, "read", fmt.Sprintf("zorm: read: %v", err)) + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err := zormdb.QueryRow(zormCtx, readFinder, m) + if err != nil { + zorm.error(b, "read", fmt.Sprintf("zorm: read: %v", err)) + } + } +} + +func (zorm *Zorm) ReadSlice(b *testing.B) { + m := NewModel7() + for i := 0; i < 100; i++ { + m.ID = 0 + _, err := zormdb.Insert(zormCtx, m) + if err != nil { + zorm.error(b, "read_slice", fmt.Sprintf("zorm: read_slice: %v", err)) + } + } + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + var models []Model7 + err := zormdb.Query(zormCtx, readSliceFinder, &models, page) + if err != nil { + zorm.error(b, "read_slice", fmt.Sprintf("zorm: read_slice: %v", err)) + } + } +} + +func (zorm *Zorm) error(b *testing.B, method string, err string) { + b.Helper() + + zorm.mu.Lock() + zorm.errors[method] = err + zorm.mu.Unlock() + b.Fail() +} diff --git a/benchs/zorm.go.bak b/benchs/zorm.go.bak deleted file mode 100644 index c84159c..0000000 --- a/benchs/zorm.go.bak +++ /dev/null @@ -1,124 +0,0 @@ -package benchs - -import ( - "context" - - "gitee.com/chunanyong/zorm" - _ "github.com/lib/pq" -) - -var ( - zormCtx = context.Background() - readFinder = zorm.NewFinder().Append("SELECT * FROM models WHERE id = 1") - readSliceFinder = zorm.NewFinder().Append("SELECT * FROM models WHERE id > 0") - page = &zorm.Page{PageNo: 1, PageSize: 100} -) - -func init() { - st := NewSuite("zorm") - readFinder.InjectionCheck = false - readSliceFinder.InjectionCheck = false - readSliceFinder.SelectTotalCount = false - st.InitF = func() { - st.AddBenchmark("Insert", 200*OrmMulti, ZormInsert) - st.AddBenchmark("MultiInsert 100 row", 200*OrmMulti, ZormInsertMulti) - st.AddBenchmark("Update", 200*OrmMulti, ZormUpdate) - st.AddBenchmark("Read", 200*OrmMulti, ZormRead) - st.AddBenchmark("MultiRead limit 100", 200*OrmMulti, ZormReadSlice) - - dbDaoConfig := zorm.DataSourceConfig{ - DSN: OrmSource, - DriverName: "postgres", - Dialect: "postgresql", - MaxOpenConns: OrmMaxConn, - MaxIdleConns: OrmMaxIdle, - SlowSQLMillis: -1, - DisableTransaction: true, - } - _, err := zorm.NewDBDao(&dbDaoConfig) - CheckErr(err) - } -} - -func ZormInsert(b *B) { - var m *Model7 - WrapExecute(b, func() { - InitDB() - m = NewModel7() - }) - - for i := 0; i < b.N; i++ { - m.ID = 0 - _, err := zorm.Insert(zormCtx, m) - CheckErr(err, b) - } -} - -func ZormInsertMulti(b *B) { - var ms []zorm.IEntityStruct - WrapExecute(b, func() { - InitDB() - ms = make([]zorm.IEntityStruct, 0, 100) - for i := 0; i < 100; i++ { - ms = append(ms, NewModel7()) - } - }) - - for i := 0; i < b.N; i++ { - for _, m := range ms { - m7, _ := m.(*Model7) - m7.ID = 0 - } - _, err := zorm.InsertSlice(zormCtx, ms) - CheckErr(err, b) - } -} - -func ZormUpdate(b *B) { - var m *Model7 - WrapExecute(b, func() { - InitDB() - m = NewModel7() - _, err := zorm.Insert(zormCtx, m) - CheckErr(err, b) - }) - - for i := 0; i < b.N; i++ { - _, err := zorm.Update(zormCtx, m) - CheckErr(err, b) - } -} - -func ZormRead(b *B) { - var m *Model7 - WrapExecute(b, func() { - InitDB() - m = NewModel7() - _, err := zorm.Insert(zormCtx, m) - CheckErr(err, b) - }) - - for i := 0; i < b.N; i++ { - _, err := zorm.QueryRow(zormCtx, readFinder, m) - CheckErr(err, b) - } -} - -func ZormReadSlice(b *B) { - var m *Model7 - WrapExecute(b, func() { - InitDB() - m = NewModel7() - for i := 0; i < 100; i++ { - m.ID = 0 - _, err := zorm.Insert(zormCtx, m) - CheckErr(err, b) - } - }) - - for i := 0; i < b.N; i++ { - var models []Model7 - err := zorm.Query(zormCtx, readSliceFinder, &models, page) - CheckErr(err, b) - } -} diff --git a/go.mod b/go.mod index 8aa686d..7ece5cb 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/efectn/go-orm-benchmarks -go 1.18 +go 1.20 require ( entgo.io/ent v0.12.3 diff --git a/go.sum b/go.sum index 704ab4e..45722c1 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -ariga.io/atlas v0.9.1 h1:EpoPMnwsQG0vn9c0sYExpwSYtr7bvuSUXzQclU2pMjc= -ariga.io/atlas v0.9.1/go.mod h1:T230JFcENj4ZZzMkZrXFDSkv+2kXkUgpJ5FQQ5hMcKU= ariga.io/atlas v0.12.0 h1:jDfjxT3ppKhzqLS26lZv9ni7p9TVNrhy7SQquaF7bPs= ariga.io/atlas v0.12.0/go.mod h1:+TR129FJZ5Lvzms6dvCeGWh1yR6hMvmXBhug4hrNIGk= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -58,14 +56,10 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -entgo.io/ent v0.11.9 h1:dbbCkAiPVTRBIJwoZctiSYjB7zxQIBOzVSU5H9VYIQI= -entgo.io/ent v0.11.9/go.mod h1:KWHOcDZn1xk3mz3ipWdKrQpMvwqa/9B69TUuAPP9W6g= entgo.io/ent v0.12.3 h1:N5lO2EOrHpCH5HYfiMOCHYbo+oh5M8GjT0/cx5x6xkk= entgo.io/ent v0.12.3/go.mod h1:AigGGx+tbrBBYHAzGOg8ND661E5cxx1Uiu5o/otJ6Yg= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= -gitee.com/chunanyong/zorm v1.6.7 h1:6leXvEQJVEY03KBq1WsHUhowCb6em7duaCio7ZZdUdY= -gitee.com/chunanyong/zorm v1.6.7/go.mod h1:Sk+vofBqQXgNrDTe+nWhV6iMXhiBObFHdCo1MfvAdi8= gitee.com/chunanyong/zorm v1.6.9 h1:qEm9Ok4MSDiNAzn5V3SNtjNgdAecvmdUf30RQ5xN9XI= gitee.com/chunanyong/zorm v1.6.9/go.mod h1:Sk+vofBqQXgNrDTe+nWhV6iMXhiBObFHdCo1MfvAdi8= gitee.com/travelliu/dm v1.8.11192/go.mod h1:DHTzyhCrM843x9VdKVbZ+GKXGRbKM2sJ4LxihRxShkE= @@ -83,7 +77,6 @@ github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3 github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= @@ -94,8 +87,6 @@ github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWX github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/agext/levenshtein v1.2.1 h1:QmvMAjj2aEICytGiWzmxoE0x2KZvE0fvmqMOfy2tjT8= -github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -210,7 +201,6 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/ericlagergren/decimal v0.0.0-20211103172832-aca2edc11f73/go.mod h1:5sruVSMrZCk0U4hwRaGD0D8wIMFVsBWQqG74jQDFg4k= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= @@ -218,14 +208,12 @@ github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/friendsofgo/errors v0.9.2 h1:X6NYxef4efCBdwI7BgS820zFaN7Cphrmb+Pljdzjtgk= github.com/friendsofgo/errors v0.9.2/go.mod h1:yCvFW5AkDIL9qn7suHVLiI/gH228n7PC4Pn44IGoTOI= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -250,17 +238,13 @@ github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8w github.com/go-rel/postgres v0.8.0 h1:SBaXmCQbZ7t0JBw9M2UUnNgna+vAVsxPehOfllW63RU= github.com/go-rel/postgres v0.8.0/go.mod h1:74yHS5xTTMTBUys1XqfsPea3yOdCXtSa7J1BxvJY/so= github.com/go-rel/primaryreplica v0.4.0 h1:lhU+4dh0/sDQEs602Chiz0SJDXewPU06baWQlx7oB3c= -github.com/go-rel/rel v0.37.0/go.mod h1:Zq18pQqXZbDh2JBCo29jgt+y90nZWkUvI+W9Ls29ans= github.com/go-rel/rel v0.39.0 h1:2zmK8kazM82iRRfWX7+mm1MxDkGKDj2W+xJLjguli5U= github.com/go-rel/rel v0.39.0/go.mod h1:yN6+aimHyRIzbuWFe5DaxiZPuVuPfd7GlLpy/YTqTUg= -github.com/go-rel/sql v0.11.0 h1:MeyoMtfDpn9sZSQNMuo7YbN8M/z74eIy9UMN3m6uonQ= -github.com/go-rel/sql v0.11.0/go.mod h1:L4XKALdxaEGwT7ngflceoHVFSooUJap5TO/Yu8FGKJI= github.com/go-rel/sql v0.13.1 h1:Q3G9/QyK4p7AIDNviW0x3JrfdG5LyoLrGH9uoaUtA+o= github.com/go-rel/sql v0.13.1/go.mod h1:3t/E+2E/Y9rXURDD7ZMgpFdXLji10gP7gb57HeoaRNY= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= @@ -272,12 +256,10 @@ github.com/gobuffalo/envy v1.10.2/go.mod h1:qGAGwdvDsaEtPhfBzb3o0SfDea8ByGn9j8bK github.com/gobuffalo/fizz v1.14.4 h1:8uume7joF6niTNWN582IQ2jhGTUoa9g1fiV/tIoGdBs= github.com/gobuffalo/fizz v1.14.4/go.mod h1:9/2fGNXNeIFOXEEgTPJwiK63e44RjG+Nc4hfMm1ArGM= github.com/gobuffalo/flect v0.3.0/go.mod h1:5pf3aGnsvqvCj50AVni7mJJF8ICxGZ8HomberC3pXLE= -github.com/gobuffalo/flect v1.0.0 h1:eBFmskjXZgAOagiTXJH25Nt5sdFwNRcb8DKZsIsAUQI= github.com/gobuffalo/flect v1.0.0/go.mod h1:l9V6xSb4BlXwsxEMj3FVEub2nkdQjWhPvD8XTTlHPQc= github.com/gobuffalo/flect v1.0.2 h1:eqjPGSo2WmjgY2XlpGwo2NXgL3RucAKo4k4qQMNA5sA= github.com/gobuffalo/flect v1.0.2/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs= github.com/gobuffalo/genny/v2 v2.1.0/go.mod h1:4yoTNk4bYuP3BMM6uQKYPvtP6WsXFGm2w2EFYZdRls8= -github.com/gobuffalo/github_flavored_markdown v1.1.3 h1:rSMPtx9ePkFB22vJ+dH+m/EUBS8doQ3S8LeEXcdwZHk= github.com/gobuffalo/github_flavored_markdown v1.1.3/go.mod h1:IzgO5xS6hqkDmUh91BW/+Qxo/qYnvfzoz3A7uLkg77I= github.com/gobuffalo/github_flavored_markdown v1.1.4 h1:WacrEGPXUDX+BpU1GM/Y0ADgMzESKNWls9hOTG1MHVs= github.com/gobuffalo/github_flavored_markdown v1.1.4/go.mod h1:Vl9686qrVVQou4GrHRK/KOG3jCZOKLUqV8MMOAYtlso= @@ -296,12 +278,9 @@ github.com/gobuffalo/tags/v3 v3.1.4 h1:X/ydLLPhgXV4h04Hp2xlbI2oc5MDaa7eub6zw8oHj github.com/gobuffalo/tags/v3 v3.1.4/go.mod h1:ArRNo3ErlHO8BtdA0REaZxijuWnWzF6PUXngmMXd2I0= github.com/gobuffalo/validate/v3 v3.3.3 h1:o7wkIGSvZBYBd6ChQoLxkz2y1pfmhbI4jNJYh6PuNJ4= github.com/gobuffalo/validate/v3 v3.3.3/go.mod h1:YC7FsbJ/9hW/VjQdmXPvFqvRis4vrRYFxr69WiNZw6g= -github.com/goccy/go-json v0.8.1 h1:4/Wjm0JIJaTDm8K1KcGrLHJoa8EsJ13YWeX+6Kfq6uI= github.com/goccy/go-json v0.8.1/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/gocraft/dbr/v2 v2.7.3 h1:5/PTRiBkdD2FoHpnrCMoEUw5Wf/Cl3l3PjJ02Wm+pwM= -github.com/gocraft/dbr/v2 v2.7.3/go.mod h1:8IH98S8M8J0JSEiYk0MPH26ZDUKemiQ/GvmXL5jo+Uw= github.com/gocraft/dbr/v2 v2.7.4 h1:n2gJ8D5FqCbFGeAsgQvciqsQRp2QMrel1fNjcJeVsXw= github.com/gocraft/dbr/v2 v2.7.4/go.mod h1:8IH98S8M8J0JSEiYk0MPH26ZDUKemiQ/GvmXL5jo+Uw= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -309,7 +288,6 @@ github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRx github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.3.1+incompatible h1:0/KbAdpx3UXAx1kEOWHJeOkpbgRFGHVgv+CFIY7dBJI= github.com/gofrs/uuid v4.3.1+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= @@ -379,7 +357,6 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -458,10 +435,7 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/hcl/v2 v2.13.0 h1:0Apadu1w6M11dyGFxWnmhhcMjkbAiKCv7G1r/2QgCNc= -github.com/hashicorp/hcl/v2 v2.13.0/go.mod h1:e4z5nxYlWNPdDSNYX+ph14EvWYMFm3eP0zIUqPc2jr0= github.com/hashicorp/hcl/v2 v2.17.0 h1:z1XvSUyXd1HP10U4lrLg5e0JMVz6CPaJvAgxM0KNZVY= github.com/hashicorp/hcl/v2 v2.17.0/go.mod h1:gJyW2PTShkJqQBKpAmPO3yxMxIuoXkOF2TpqXzrQyx4= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= @@ -485,7 +459,6 @@ github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= @@ -513,7 +486,6 @@ github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65 h1:DadwsjnMwFjfWc9y5W github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= @@ -570,13 +542,11 @@ github.com/jackc/puddle v1.3.0 h1:eHK/5clGOatcjX3oWGBO/MpxpbHzSwud5EWTSCI+MX0= github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= -github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg= github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= @@ -608,7 +578,6 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -627,7 +596,6 @@ github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= @@ -657,12 +625,9 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOA github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= @@ -672,7 +637,6 @@ github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/microcosm-cc/bluemonday v1.0.20 h1:flpzsq4KU3QIYAYGV/szUat7H+GPOXR0B2JU5A1Wp8Y= github.com/microcosm-cc/bluemonday v1.0.20/go.mod h1:yfBmMi8mxvaZut3Yytv+jTXRY8mxyjJ0/kQBTElld50= github.com/microcosm-cc/bluemonday v1.0.24 h1:NGQoPtwGVcbGkKfvyYk1yRqknzBuoMiUrO6R7uFTPlw= github.com/microcosm-cc/bluemonday v1.0.24/go.mod h1:ArQySAMps0790cHSkdPEJ7bGkF2VePWH773hsJNSHf8= @@ -687,8 +651,6 @@ github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HK github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 h1:DpOJ2HYzCv8LZP15IdmG+YdwD2luVPHITV96TkirNBM= -github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= @@ -718,27 +680,23 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.15.0 h1:1V1NfVQR87RtWAgp1lv9JZJ5Jap+XFGKPi00andXGi4= -github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= github.com/onsi/gomega v1.10.5 h1:7n6FEkpFmfCoo2t+YYqXH0evK+a9ICQz0xcAy9dYcaQ= -github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= @@ -808,7 +766,6 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= @@ -828,7 +785,6 @@ github.com/segmentio/fasthash v1.0.3 h1:EI9+KE1EwvMLBWwjpRDc+fEM+prwxDYbslddQGtr github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/serenize/snaker v0.0.0-20201027110005-a7ad2135616e h1:zWKUYT07mGmVBH+9UgnHXd/ekCK99C8EbDSAt5qsjXE= github.com/serenize/snaker v0.0.0-20201027110005-a7ad2135616e/go.mod h1:Yow6lPLSAXx2ifx470yD/nUe22Dv5vBvxK/UK9UUTVs= -github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= @@ -864,17 +820,14 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE= @@ -899,7 +852,6 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= -github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0= github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0= @@ -912,27 +864,19 @@ github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqri github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ= github.com/upper/db/v4 v4.6.0 h1:0VmASnqrl/XN8Ehoq++HBgZ4zRD5j3GXygW8FhP0C5I= github.com/upper/db/v4 v4.6.0/go.mod h1:2mnRcPf+RcCXmVcD+o04LYlyu3UuF7ubamJia7CkN6s= -github.com/uptrace/bun v1.1.12 h1:sOjDVHxNTuM6dNGaba0wUuz7KvDE1BmNu9Gqs2gJSXQ= -github.com/uptrace/bun v1.1.12/go.mod h1:NPG6JGULBeQ9IU6yHp7YGELRa5Agmd7ATZdz4tGZ6z0= github.com/uptrace/bun v1.1.14 h1:S5vvNnjEynJ0CvnrBOD7MIRW7q/WbtvFXrdfy0lddAM= github.com/uptrace/bun v1.1.14/go.mod h1:RHk6DrIisO62dv10pUOJCz5MphXThuOTpVNYEYv7NI8= -github.com/uptrace/bun/dialect/pgdialect v1.1.12 h1:m/CM1UfOkoBTglGO5CUTKnIKKOApOYxkcP2qn0F9tJk= -github.com/uptrace/bun/dialect/pgdialect v1.1.12/go.mod h1:Ij6WIxQILxLlL2frUBxUBOZJtLElD2QQNDcu/PWDHTc= github.com/uptrace/bun/dialect/pgdialect v1.1.14 h1:b7+V1KDJPQSFYgkG/6YLXCl2uvwEY3kf/GSM7hTHRDY= github.com/uptrace/bun/dialect/pgdialect v1.1.14/go.mod h1:v6YiaXmnKQ2FlhRD2c0ZfKd+QXH09pYn4H8ojaavkKk= -github.com/uptrace/bun/driver/pgdriver v1.1.12 h1:3rRWB1GK0psTJrHwxzNfEij2MLibggiLdTqjTtfHc1w= -github.com/uptrace/bun/driver/pgdriver v1.1.12/go.mod h1:ssYUP+qwSEgeDDS1xm2XBip9el1y9Mi5mTAvLoiADLM= github.com/uptrace/bun/driver/pgdriver v1.1.14 h1:V2Etm7mLGS3mhx8ddxZcUnwZLX02Jmq9JTlo0sNVDhA= github.com/uptrace/bun/driver/pgdriver v1.1.14/go.mod h1:D4FjWV9arDYct6sjMJhFoyU71SpllZRHXFRRP2Kd0Kw= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/vmihailenco/bufpool v0.1.11 h1:gOq2WmBrq0i2yW5QJ16ykccQ4wH9UyEsgLm6czKAd94= github.com/vmihailenco/bufpool v0.1.11/go.mod h1:AFf/MOy3l2CFTKbxwt0mp2MwnqjNEs5H/UxrkA5jxTQ= -github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/msgpack/v5 v5.3.4/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= -github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= @@ -943,8 +887,6 @@ github.com/volatiletech/null/v8 v8.1.2 h1:kiTiX1PpwvuugKwfvUNX/SU/5A2KGZMXfGD0DU github.com/volatiletech/null/v8 v8.1.2/go.mod h1:98DbwNoKEpRrYtGjWFctievIfm4n4MxG0A6EBUcoS5g= github.com/volatiletech/randomize v0.0.1 h1:eE5yajattWqTB2/eN8df4dw+8jwAzBtbdo5sbWC4nMk= github.com/volatiletech/randomize v0.0.1/go.mod h1:GN3U0QYqfZ9FOJ67bzax1cqZ5q2xuj2mXrXBjWaRTlY= -github.com/volatiletech/sqlboiler/v4 v4.14.1 h1:oiJp3f3tJfLt78X9f5S0F7+IO+D5gBRATgWADwRmXro= -github.com/volatiletech/sqlboiler/v4 v4.14.1/go.mod h1:65288sb8jBLnTynTumBK6eU8C2JwWsiPjoPihEfC0/A= github.com/volatiletech/sqlboiler/v4 v4.14.2 h1:j5QnlR5/wYDmGDDTutI3BO+4oPBiqYoVrfReVr7VSxA= github.com/volatiletech/sqlboiler/v4 v4.14.2/go.mod h1:65288sb8jBLnTynTumBK6eU8C2JwWsiPjoPihEfC0/A= github.com/volatiletech/strmangle v0.0.1/go.mod h1:F6RA6IkB5vq0yTG4GQ0UsbbRcl3ni9P76i+JrTBKFFg= @@ -959,8 +901,6 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU= -github.com/zclconf/go-cty v1.8.0 h1:s4AvqaeQzJIu3ndv4gVIhplVD0krU+bgrcLSVUnaWuA= -github.com/zclconf/go-cty v1.8.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= github.com/zclconf/go-cty v1.13.2 h1:4GvrUxe/QUDYuJKAav4EYqdM47/kZa672LwmXFmEKT0= github.com/zclconf/go-cty v1.13.2/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= @@ -1025,7 +965,6 @@ golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220511200225-c6db032c6c88/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= @@ -1066,8 +1005,6 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1112,7 +1049,6 @@ golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= @@ -1131,7 +1067,6 @@ golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.6.0 h1:L4ZwwTvKW9gr0ZMS1yrHD9GZhIuVjOBBnaKH+SPQK0Q= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= @@ -1169,7 +1104,6 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= @@ -1230,7 +1164,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1274,7 +1207,6 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= @@ -1293,7 +1225,6 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= @@ -1356,7 +1287,6 @@ golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -1367,7 +1297,6 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.1-0.20230222164832-25d2519c8696 h1:8985/C5IvACpd9DDXckSnjSBLKDgbxXiyODgi94zOPM= golang.org/x/tools v0.8.1-0.20230428195545-5283a0178901 h1:0wxTF6pSjIIhNt7mo9GvjDfzyCOiWhmICgtO/Ah948s= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1377,7 +1306,6 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f h1:uF6paiQQebLeSXkrTqHqz0MXhXXS1KgF41eUdBNvxK0= golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= @@ -1562,8 +1490,8 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= @@ -1597,13 +1525,8 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/postgres v1.4.5 h1:mTeXTTtHAgnS9PgmhN2YeUbazYpLhUI1doLnw42XUZc= -gorm.io/driver/postgres v1.4.5/go.mod h1:GKNQYSJ14qvWkvPwXljMGehpKrhlDNsqYRr5HnYGncg= gorm.io/driver/postgres v1.5.2 h1:ytTDxxEv+MplXOfFe3Lzm7SjG09fcdb3Z/c056DTBx0= gorm.io/driver/postgres v1.5.2/go.mod h1:fmpX0m2I1PKuR7mKZiEluwrP3hbs+ps7JIGMUBpCgl8= -gorm.io/gorm v1.24.1-0.20221019064659-5dd2bb482755/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA= -gorm.io/gorm v1.24.6 h1:wy98aq9oFEetsc4CAbKD2SoBCdMzsbSIvSUUFJuHi5s= -gorm.io/gorm v1.24.6/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= gorm.io/gorm v1.25.1 h1:nsSALe5Pr+cM3V1qwwQ7rOkw+6UeLrX5O4v3llhHa64= gorm.io/gorm v1.25.1/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1773,7 +1696,6 @@ rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 h1:bvLlAPW1ZMTWA32LuZMBEGHAUOcATZjzHcotf3SWweM= xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= xorm.io/builder v0.3.12 h1:ASZYX7fQmy+o8UJdhlLHSW57JDOkM8DNhcAF5d0LiJM= xorm.io/builder v0.3.12/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= diff --git a/main.go b/main.go index 73a99e5..0b0a59f 100644 --- a/main.go +++ b/main.go @@ -20,7 +20,9 @@ var defaultBenchmarkNames = []string{ "beego", "bun", "dbr", "ent", "godb", "gorm", "gorm_prep", "gorp", "pg", "pgx", "pgx_pool", "pop", - "raw", "reform", + "raw", "reform", "rel", "sqlboiler", + "sqlc", "sqlx", "upper", "xorm", + "zorm", } type ListOpts []string @@ -93,6 +95,13 @@ func main() { "pop": benchs.CreatePop(200 * benchs.OrmMulti), "raw": benchs.CreateRaw(200 * benchs.OrmMulti), "reform": benchs.CreateReform(200 * benchs.OrmMulti), + "rel": benchs.CreateRel(200 * benchs.OrmMulti), + "sqlboiler": benchs.CreateSqlboiler(200 * benchs.OrmMulti), + "sqlc": benchs.CreateSqlc(200 * benchs.OrmMulti), + "sqlx": benchs.CreateSqlx(200 * benchs.OrmMulti), + "upper": benchs.CreateUpper(200 * benchs.OrmMulti), + "xorm": benchs.CreateXorm(200 * benchs.OrmMulti), + "zorm": benchs.CreateZorm(200 * benchs.OrmMulti), } for _, n := range orms {