@@ -103,7 +103,6 @@ func TestTruncate(t *testing.T) {
103103
104104// Appends maps and structs.
105105func TestAppend (t * testing.T ) {
106-
107106 sess , err := db .Open (wrapperName , settings )
108107
109108 if err != nil {
@@ -189,7 +188,6 @@ func TestAppend(t *testing.T) {
189188
190189// Tries to find and fetch rows.
191190func TestFind (t * testing.T ) {
192-
193191 var err error
194192 var res db.Result
195193
@@ -320,7 +318,6 @@ func TestFind(t *testing.T) {
320318
321319// Tests limit and offset.
322320func TestLimitOffset (t * testing.T ) {
323-
324321 var err error
325322
326323 sess , err := db .Open (wrapperName , settings )
@@ -398,7 +395,6 @@ func TestUpdate(t *testing.T) {
398395
399396// Tries to add test data and relations.
400397func TestPopulate (t * testing.T ) {
401-
402398 sess , err := db .Open (wrapperName , settings )
403399
404400 if err != nil {
@@ -786,6 +782,42 @@ func BenchmarkAppendDbItem(b *testing.B) {
786782 }
787783}
788784
785+ // Contributed by wei2912
786+ // See: https://github.com/gosexy/db/issues/20#issuecomment-20167939
787+ // Applying the BEGIN and END transaction optimizations.
788+ func BenchmarkAppendDbItem_Transaction (b * testing.B ) {
789+ sess , err := db .Open (wrapperName , settings )
790+
791+ if err != nil {
792+ b .Fatalf (err .Error ())
793+ }
794+
795+ defer sess .Close ()
796+
797+ people := sess .ExistentCollection ("people" )
798+ people .Truncate ()
799+
800+ driver := sess .Driver ().(* sql.DB )
801+
802+ b .ResetTimer ()
803+ _ , err = driver .Exec (`BEGIN` )
804+ if err != nil {
805+ b .Fatalf (err .Error ())
806+ }
807+
808+ for i := 0 ; i < b .N ; i ++ {
809+ _ , err = people .Append (db.Item {"name" : "john" })
810+ if err != nil {
811+ b .Fatalf (err .Error ())
812+ }
813+ }
814+
815+ _ , err = driver .Exec (`END` )
816+ if err != nil {
817+ b .Fatalf (err .Error ())
818+ }
819+ }
820+
789821func BenchmarkAppendStruct (b * testing.B ) {
790822 sess , err := db .Open (wrapperName , settings )
791823
0 commit comments