From c191824366ef00cbd055af3fb374d7db24d1e4a0 Mon Sep 17 00:00:00 2001 From: wei2912 <wei2912_support@hotmail.com> Date: Fri, 28 Jun 2013 13:35:57 +0800 Subject: [PATCH] Add Begin&End Transaction optimizations. --- sqlite/sqlite_test.go | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/sqlite/sqlite_test.go b/sqlite/sqlite_test.go index f79ed251..f9ab023f 100644 --- a/sqlite/sqlite_test.go +++ b/sqlite/sqlite_test.go @@ -103,7 +103,6 @@ func TestTruncate(t *testing.T) { // Appends maps and structs. func TestAppend(t *testing.T) { - sess, err := db.Open(wrapperName, settings) if err != nil { @@ -189,7 +188,6 @@ func TestAppend(t *testing.T) { // Tries to find and fetch rows. func TestFind(t *testing.T) { - var err error var res db.Result @@ -320,7 +318,6 @@ func TestFind(t *testing.T) { // Tests limit and offset. func TestLimitOffset(t *testing.T) { - var err error sess, err := db.Open(wrapperName, settings) @@ -398,7 +395,6 @@ func TestUpdate(t *testing.T) { // Tries to add test data and relations. func TestPopulate(t *testing.T) { - sess, err := db.Open(wrapperName, settings) if err != nil { @@ -786,6 +782,42 @@ func BenchmarkAppendDbItem(b *testing.B) { } } +// Contributed by wei2912 +// See: https://github.com/gosexy/db/issues/20#issuecomment-20167939 +// Applying the BEGIN and END transaction optimizations. +func BenchmarkAppendDbItem_Transaction(b *testing.B) { + sess, err := db.Open(wrapperName, settings) + + if err != nil { + b.Fatalf(err.Error()) + } + + defer sess.Close() + + people := sess.ExistentCollection("people") + people.Truncate() + + driver := sess.Driver().(*sql.DB) + + b.ResetTimer() + _, err = driver.Exec(`BEGIN`) + if err != nil { + b.Fatalf(err.Error()) + } + + for i := 0; i < b.N; i++ { + _, err = people.Append(db.Item{"name": "john"}) + if err != nil { + b.Fatalf(err.Error()) + } + } + + _, err = driver.Exec(`END`) + if err != nil { + b.Fatalf(err.Error()) + } +} + func BenchmarkAppendStruct(b *testing.B) { sess, err := db.Open(wrapperName, settings) -- GitLab