From d1a03383221998edd9aac23759fa2b78a038cc45 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 26 Dec 2013 18:23:40 +0800 Subject: [PATCH] add benchmark tests for mssql --- mssql_test.go | 82 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 75 insertions(+), 7 deletions(-) diff --git a/mssql_test.go b/mssql_test.go index cde4081a..a9093866 100644 --- a/mssql_test.go +++ b/mssql_test.go @@ -4,18 +4,16 @@ package xorm // +build windows import ( + "database/sql" "testing" _ "github.com/lunny/godbc" ) -/* -CREATE DATABASE IF NOT EXISTS xorm_test CHARACTER SET -utf8 COLLATE utf8_general_ci; -*/ +const mssqlConnStr = "driver={SQL Server};Server=192.168.20.135;Database=xorm_test; uid=sa; pwd=1234;" func newMssqlEngine() (*Engine, error) { - return NewEngine("odbc", "driver={SQL Server};Server=192.168.20.135;Database=xorm_test; uid=sa; pwd=1234;") + return NewEngine("odbc", mssqlConnStr) } func TestMssql(t *testing.T) { @@ -51,7 +49,41 @@ func TestMssqlWithCache(t *testing.T) { testAll2(engine, t) } -func BenchmarkMssqlNoCache(t *testing.B) { +func newMssqlDriverDB() (*sql.DB, error) { + return sql.Open("odbc", mssqlConnStr) +} + +const ( + createTableMssql = `IF NOT EXISTS (SELECT [name] FROM sys.tables WHERE [name] = 'big_struct' ) CREATE TABLE + "big_struct" ("id" BIGINT PRIMARY KEY IDENTITY NOT NULL, "name" VARCHAR(255) NULL, "title" VARCHAR(255) NULL, + "age" VARCHAR(255) NULL, "alias" VARCHAR(255) NULL, "nick_name" VARCHAR(255) NULL); + ` + + dropTableMssql = "IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'big_struct') and OBJECTPROPERTY(id, N'IsUserTable') = 1) DROP TABLE IF EXISTS `big_struct`;" +) + +func BenchmarkMssqlDriverInsert(t *testing.B) { + doBenchDriver(newMssqlDriverDB, createTableMssql, dropTableMssql, + doBenchDriverInsert, t) +} + +func BenchmarkMssqlDriverFind(t *testing.B) { + doBenchDriver(newMssqlDriverDB, createTableMssql, dropTableMssql, + doBenchDriverFind, t) +} + +func BenchmarkMssqlNoCacheInsert(t *testing.B) { + engine, err := newMssqlEngine() + defer engine.Close() + if err != nil { + t.Error(err) + return + } + //engine.ShowSQL = true + doBenchInsert(engine, t) +} + +func BenchmarkMssqlNoCacheFind(t *testing.B) { engine, err := newMssqlEngine() defer engine.Close() if err != nil { @@ -62,7 +94,18 @@ func BenchmarkMssqlNoCache(t *testing.B) { doBenchFind(engine, t) } -func BenchmarkMssqlCache(t *testing.B) { +func BenchmarkMssqlNoCacheFindPtr(t *testing.B) { + engine, err := newMssqlEngine() + defer engine.Close() + if err != nil { + t.Error(err) + return + } + //engine.ShowSQL = true + doBenchFindPtr(engine, t) +} + +func BenchmarkMssqlCacheInsert(t *testing.B) { engine, err := newMssqlEngine() defer engine.Close() if err != nil { @@ -70,5 +113,30 @@ func BenchmarkMssqlCache(t *testing.B) { return } engine.SetDefaultCacher(NewLRUCacher(NewMemoryStore(), 1000)) + + doBenchInsert(engine, t) +} + +func BenchmarkMssqlCacheFind(t *testing.B) { + engine, err := newMssqlEngine() + defer engine.Close() + if err != nil { + t.Error(err) + return + } + engine.SetDefaultCacher(NewLRUCacher(NewMemoryStore(), 1000)) + doBenchFind(engine, t) } + +func BenchmarkMssqlCacheFindPtr(t *testing.B) { + engine, err := newMssqlEngine() + defer engine.Close() + if err != nil { + t.Error(err) + return + } + engine.SetDefaultCacher(NewLRUCacher(NewMemoryStore(), 1000)) + + doBenchFindPtr(engine, t) +}