Add the first for comparing against cgo wrappers.

This commit is contained in:
Jaap Aarts
2021-01-06 14:01:00 +00:00
parent 7dd9360c99
commit 09647590b9
5 changed files with 130 additions and 0 deletions

View File

@@ -9,5 +9,6 @@
# Please keep the list sorted. # Please keep the list sorted.
Davsk Ltd Co <skinner.david@gmail.com> Davsk Ltd Co <skinner.david@gmail.com>
Jaap Aarts <jaap.aarts1@gmail.com>
Jan Mercl <0xjnml@gmail.com> Jan Mercl <0xjnml@gmail.com>
Steffen Butzer <steffen(dot)butzer@outlook.com> Steffen Butzer <steffen(dot)butzer@outlook.com>

View File

@@ -8,6 +8,7 @@
Alexander Menzhinsky <amenzhinsky@gmail.com> Alexander Menzhinsky <amenzhinsky@gmail.com>
David Skinner <skinner.david@gmail.com> David Skinner <skinner.david@gmail.com>
Jaap Aarts <jaap.aarts1@gmail.com>
Jan Mercl <0xjnml@gmail.com> Jan Mercl <0xjnml@gmail.com>
Steffen Butzer <steffen(dot)butzer@outlook.com> Steffen Butzer <steffen(dot)butzer@outlook.com>
Yaacov Akiba Slama <ya@slamail.org> Yaacov Akiba Slama <ya@slamail.org>

125
cgo_test.go Normal file
View File

@@ -0,0 +1,125 @@
// Copyright 2017 The Sqlite Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//+build cgo,cgobench
package sqlite // import "modernc.org/sqlite"
import (
"database/sql"
"fmt"
"os"
"testing"
_ "github.com/mattn/go-sqlite3"
)
const gcoDriver = "sqlite3"
func prepareDatabase() string {
//if this fails you should probably clean your folders
for i := 0; ; i++ {
path := fmt.Sprintf("%dbench.db", i)
_, err := os.Stat(path)
if os.IsNotExist(err) {
return path
}
}
}
var drivers = []string{
driverName,
gcoDriver,
}
var inMemory = []bool{
true,
false,
}
func makename(inMemory bool, driver string) string {
name := driver
if inMemory {
name += "InMemory"
} else {
name += "OnDisk"
}
return name
}
func reading1Memory(b *testing.B, drivername, file string) {
db, err := sql.Open(drivername, file)
if err != nil {
b.Fatal(err)
}
defer func() {
db.Close()
}()
if _, err := db.Exec(`
create table t(i int);
begin;
`); err != nil {
b.Fatal(err)
}
s, err := db.Prepare("insert into t values(?)")
if err != nil {
b.Fatal(err)
}
defer s.Close()
for i := 0; i < b.N; i++ {
if _, err := s.Exec(int64(i)); err != nil {
b.Fatal(err)
}
}
if _, err := db.Exec("commit"); err != nil {
b.Fatal(err)
}
r, err := db.Query("select * from t")
if err != nil {
b.Fatal(err)
}
defer r.Close()
dst := 0
b.ResetTimer()
for i := 0; i < b.N; i++ {
if !r.Next() {
b.Fatal(r.Err())
}
err = r.Scan(&dst)
if err != nil {
b.Fatal(err)
}
}
b.StopTimer()
if *oRecsPerSec {
b.SetBytes(1e6)
}
}
func BenchmarkReading1(b *testing.B) {
for _, memory := range inMemory {
filename := "file::memory:"
if !memory {
filename = prepareDatabase()
}
for _, driver := range drivers {
b.Run(makename(memory, driver), func(b *testing.B) {
reading1Memory(b, driver, filename)
if !memory {
err := os.Remove(filename)
if err != nil {
b.Fatal(err)
}
}
})
}
}
}

1
go.mod
View File

@@ -3,6 +3,7 @@ module modernc.org/sqlite
go 1.15 go 1.15
require ( require (
github.com/mattn/go-sqlite3 v1.14.6
modernc.org/libc v0.0.0-20210104224006-8ec70908d25a modernc.org/libc v0.0.0-20210104224006-8ec70908d25a
modernc.org/mathutil v1.2.1 modernc.org/mathutil v1.2.1
modernc.org/tcl v0.0.0-20210104224342-fd497555fca0 modernc.org/tcl v0.0.0-20210104224342-fd497555fca0

2
go.sum
View File

@@ -1,5 +1,7 @@
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg=
github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=