aboutsummaryrefslogtreecommitdiff
path: root/benchmark/benchmark_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'benchmark/benchmark_test.go')
-rw-r--r--benchmark/benchmark_test.go52
1 files changed, 43 insertions, 9 deletions
diff --git a/benchmark/benchmark_test.go b/benchmark/benchmark_test.go
index b60951a..edebc52 100644
--- a/benchmark/benchmark_test.go
+++ b/benchmark/benchmark_test.go
@@ -48,7 +48,7 @@ func makeTestDB(t testing.TB) (*sql.DB, error) {
return db, nil
}
-func BenchmarkSelect(b *testing.B) {
+func BenchmarkSelectMany(b *testing.B) {
db, err := makeTestDB(b)
if err != nil {
b.Fatal(err)
@@ -63,12 +63,16 @@ func BenchmarkSelect(b *testing.B) {
ID int `db:"id"`
Message string `db:"message"`
}
- store, err := oblast.NewStore[record](oblast.SqliteDialect())
+ store, err := oblast.NewStore[record](
+ oblast.SqliteDialect(),
+ oblast.TableNameIs("entries"),
+ )
if err != nil {
b.Fatal(err)
}
gdb := gorp.DbMap{Db: db, Dialect: gorp.SqliteDialect{}}
- query := `SELECT * FROM entries WHERE id < ` + strconv.Itoa(selectedRecordCount) //nolint:gosec
+ partialQuery := `id < ` + strconv.Itoa(selectedRecordCount)
+ query := `SELECT * FROM entries WHERE ` + partialQuery //nolint:gosec
selectWithOblast := func(b *testing.B) {
records, err := store.Select(db, query)
@@ -78,6 +82,14 @@ func BenchmarkSelect(b *testing.B) {
assert.Equal(b, len(records), selectedRecordCount)
}
+ selectWithOblastWhere := func(b *testing.B) {
+ records, err := store.SelectWhere(db, partialQuery)
+ if err != nil {
+ b.Error(err)
+ }
+ assert.Equal(b, len(records), selectedRecordCount)
+ }
+
selectWithGorp := func(b *testing.B) {
var records []record
_, err := gdb.Select(&records, query)
@@ -121,16 +133,21 @@ func BenchmarkSelect(b *testing.B) {
}
// run actual benchmark
- b.Run("via Gorp", func(b *testing.B) {
+ b.Run("via Gorp using Select", func(b *testing.B) {
for range b.N {
selectWithGorp(b)
}
})
- b.Run("via Oblast", func(b *testing.B) {
+ b.Run("via Oblast using Select", func(b *testing.B) {
for range b.N {
selectWithOblast(b)
}
})
+ b.Run("via Oblast using SelectWhere", func(b *testing.B) {
+ for range b.N {
+ selectWithOblastWhere(b)
+ }
+ })
b.Run("just SQLite", func(b *testing.B) {
for range b.N {
selectWithSqlite(b)
@@ -154,12 +171,16 @@ func BenchmarkSelectOne(b *testing.B) {
ID int `db:"id"`
Message string `db:"message"`
}
- store, err := oblast.NewStore[record](oblast.SqliteDialect())
+ store, err := oblast.NewStore[record](
+ oblast.SqliteDialect(),
+ oblast.TableNameIs("entries"),
+ )
if err != nil {
b.Fatal(err)
}
gdb := gorp.DbMap{Db: db, Dialect: gorp.SqliteDialect{}}
- query := `SELECT * FROM entries WHERE id = ` + strconv.Itoa(recordID)
+ partialQuery := `id = ` + strconv.Itoa(recordID)
+ query := `SELECT * FROM entries WHERE ` + partialQuery
selectWithOblast := func(b *testing.B) {
r, err := store.SelectOne(db, query)
@@ -169,6 +190,14 @@ func BenchmarkSelectOne(b *testing.B) {
assert.Equal(b, r.ID, recordID)
}
+ selectWithOblastWhere := func(b *testing.B) {
+ r, err := store.SelectOneWhere(db, partialQuery)
+ if err != nil {
+ b.Error(err)
+ }
+ assert.Equal(b, r.ID, recordID)
+ }
+
selectWithGorp := func(b *testing.B) {
var r record
err := gdb.SelectOne(&r, query)
@@ -198,16 +227,21 @@ func BenchmarkSelectOne(b *testing.B) {
}
// run actual benchmark
- b.Run("via Gorp", func(b *testing.B) {
+ b.Run("via Gorp using SelectOne", func(b *testing.B) {
for range b.N {
selectWithGorp(b)
}
})
- b.Run("via Oblast", func(b *testing.B) {
+ b.Run("via Oblast using SelectOne", func(b *testing.B) {
for range b.N {
selectWithOblast(b)
}
})
+ b.Run("via Oblast using SelectOneWhere", func(b *testing.B) {
+ for range b.N {
+ selectWithOblastWhere(b)
+ }
+ })
b.Run("just SQLite", func(b *testing.B) {
for range b.N {
selectWithSqlite(b)