200 lines
4.1 KiB
Go
200 lines
4.1 KiB
Go
package xorm
|
|
|
|
import (
|
|
"database/sql"
|
|
"testing"
|
|
|
|
_ "github.com/lib/pq"
|
|
)
|
|
|
|
//var connStr string = "dbname=xorm_test user=lunny password=1234 sslmode=disable"
|
|
|
|
var connStr string = "dbname=xorm_test sslmode=disable"
|
|
|
|
func newPostgresEngine() (*Engine, error) {
|
|
orm, err := NewEngine("postgres", connStr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
tables, err := orm.DBMetas()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, table := range tables {
|
|
_, err = orm.Exec("drop table \"" + table.Name + "\"")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return orm, err
|
|
}
|
|
|
|
func newPostgresDriverDB() (*sql.DB, error) {
|
|
return sql.Open("postgres", connStr)
|
|
}
|
|
|
|
func TestPostgres(t *testing.T) {
|
|
engine, err := newPostgresEngine()
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
defer engine.Close()
|
|
engine.ShowSQL = showTestSql
|
|
engine.ShowErr = showTestSql
|
|
engine.ShowWarn = showTestSql
|
|
engine.ShowDebug = showTestSql
|
|
|
|
testAll(engine, t)
|
|
testAllSnakeMapper(engine, t)
|
|
testAll2(engine, t)
|
|
testAll3(engine, t)
|
|
}
|
|
|
|
func TestPostgresWithCache(t *testing.T) {
|
|
engine, err := newPostgresEngine()
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
engine.SetDefaultCacher(NewLRUCacher(NewMemoryStore(), 1000))
|
|
defer engine.Close()
|
|
engine.ShowSQL = showTestSql
|
|
engine.ShowErr = showTestSql
|
|
engine.ShowWarn = showTestSql
|
|
engine.ShowDebug = showTestSql
|
|
|
|
testAll(engine, t)
|
|
testAllSnakeMapper(engine, t)
|
|
testAll2(engine, t)
|
|
}
|
|
|
|
func TestPostgresSameMapper(t *testing.T) {
|
|
engine, err := newPostgresEngine()
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
defer engine.Close()
|
|
engine.SetMapper(SameMapper{})
|
|
engine.ShowSQL = showTestSql
|
|
engine.ShowErr = showTestSql
|
|
engine.ShowWarn = showTestSql
|
|
engine.ShowDebug = showTestSql
|
|
|
|
testAll(engine, t)
|
|
testAllSameMapper(engine, t)
|
|
testAll2(engine, t)
|
|
testAll3(engine, t)
|
|
}
|
|
|
|
func TestPostgresWithCacheSameMapper(t *testing.T) {
|
|
engine, err := newPostgresEngine()
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
engine.SetDefaultCacher(NewLRUCacher(NewMemoryStore(), 1000))
|
|
defer engine.Close()
|
|
engine.SetMapper(SameMapper{})
|
|
engine.ShowSQL = showTestSql
|
|
engine.ShowErr = showTestSql
|
|
engine.ShowWarn = showTestSql
|
|
engine.ShowDebug = showTestSql
|
|
|
|
testAll(engine, t)
|
|
testAllSameMapper(engine, t)
|
|
testAll2(engine, t)
|
|
}
|
|
|
|
const (
|
|
createTablePostgres = `CREATE TABLE IF NOT EXISTS "big_struct" ("id" SERIAL PRIMARY KEY NOT NULL, "name" VARCHAR(255) NULL, "title" VARCHAR(255) NULL, "age" VARCHAR(255) NULL, "alias" VARCHAR(255) NULL, "nick_name" VARCHAR(255) NULL);`
|
|
dropTablePostgres = `DROP TABLE IF EXISTS "big_struct";`
|
|
)
|
|
|
|
func BenchmarkPostgresDriverInsert(t *testing.B) {
|
|
doBenchDriver(newPostgresDriverDB, createTablePostgres, dropTablePostgres,
|
|
doBenchDriverInsert, t)
|
|
}
|
|
|
|
func BenchmarkPostgresDriverFind(t *testing.B) {
|
|
doBenchDriver(newPostgresDriverDB, createTablePostgres, dropTablePostgres,
|
|
doBenchDriverFind, t)
|
|
}
|
|
|
|
func BenchmarkPostgresNoCacheInsert(t *testing.B) {
|
|
engine, err := newPostgresEngine()
|
|
|
|
defer engine.Close()
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
//engine.ShowSQL = true
|
|
doBenchInsert(engine, t)
|
|
}
|
|
|
|
func BenchmarkPostgresNoCacheFind(t *testing.B) {
|
|
engine, err := newPostgresEngine()
|
|
|
|
defer engine.Close()
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
//engine.ShowSQL = true
|
|
doBenchFind(engine, t)
|
|
}
|
|
|
|
func BenchmarkPostgresNoCacheFindPtr(t *testing.B) {
|
|
engine, err := newPostgresEngine()
|
|
|
|
defer engine.Close()
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
//engine.ShowSQL = true
|
|
doBenchFindPtr(engine, t)
|
|
}
|
|
|
|
func BenchmarkPostgresCacheInsert(t *testing.B) {
|
|
engine, err := newPostgresEngine()
|
|
|
|
defer engine.Close()
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
engine.SetDefaultCacher(NewLRUCacher(NewMemoryStore(), 1000))
|
|
|
|
doBenchInsert(engine, t)
|
|
}
|
|
|
|
func BenchmarkPostgresCacheFind(t *testing.B) {
|
|
engine, err := newPostgresEngine()
|
|
|
|
defer engine.Close()
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
engine.SetDefaultCacher(NewLRUCacher(NewMemoryStore(), 1000))
|
|
|
|
doBenchFind(engine, t)
|
|
}
|
|
|
|
func BenchmarkPostgresCacheFindPtr(t *testing.B) {
|
|
engine, err := newPostgresEngine()
|
|
|
|
defer engine.Close()
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
engine.SetDefaultCacher(NewLRUCacher(NewMemoryStore(), 1000))
|
|
|
|
doBenchFindPtr(engine, t)
|
|
}
|