mirror of
https://github.com/glebarez/go-sqlite.git
synced 2025-10-05 15:56:52 +08:00
Add the first for comparing against cgo wrappers.
This commit is contained in:
1
AUTHORS
1
AUTHORS
@@ -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>
|
||||||
|
@@ -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
125
cgo_test.go
Normal 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
1
go.mod
@@ -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
2
go.sum
@@ -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=
|
||||||
|
Reference in New Issue
Block a user