From 9b5b72a549643a9e611f55ae8154fa801c808e5b Mon Sep 17 00:00:00 2001 From: Stefan Majewsky Date: Sun, 12 Apr 2026 17:59:16 +0200 Subject: add Store.SelectWhere, Store.SelectOneWhere --- benchmark/benchmark_test.go | 52 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 9 deletions(-) (limited to 'benchmark') 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) -- cgit v1.2.3