go test add mysql and postgres drivers

This commit is contained in:
Lunny Xiao 2017-04-10 23:10:59 +08:00
parent df38e47fa2
commit 30dcce510d
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
5 changed files with 110 additions and 45 deletions

View File

@ -43,7 +43,6 @@ type Session struct {
prepareStmt bool prepareStmt bool
stmtCache map[uint32]*core.Stmt //key: hash.Hash32 of (queryStr, len(queryStr)) stmtCache map[uint32]*core.Stmt //key: hash.Hash32 of (queryStr, len(queryStr))
cascadeDeep int
// !evalphobia! stored the last executed query on this session // !evalphobia! stored the last executed query on this session
//beforeSQLExec func(string, ...interface{}) //beforeSQLExec func(string, ...interface{})

View File

@ -6,6 +6,7 @@ package xorm
import ( import (
"fmt" "fmt"
"strconv"
"testing" "testing"
"time" "time"
@ -84,8 +85,68 @@ func TestGetVar(t *testing.T) {
has, err = testEngine.Table("get_var").Get(&valuesSliceInter) has, err = testEngine.Table("get_var").Get(&valuesSliceInter)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, true, has) assert.Equal(t, true, has)
assert.EqualValues(t, 1, valuesSliceInter[0])
v1, err := convertInt(valuesSliceInter[0])
assert.NoError(t, err)
assert.EqualValues(t, 1, v1)
assert.Equal(t, "hi", fmt.Sprintf("%s", valuesSliceInter[1])) assert.Equal(t, "hi", fmt.Sprintf("%s", valuesSliceInter[1]))
assert.EqualValues(t, 28, valuesSliceInter[2])
assert.Equal(t, "1.5", fmt.Sprintf("%v", valuesSliceInter[3])) v3, err := convertInt(valuesSliceInter[2])
assert.NoError(t, err)
assert.EqualValues(t, 28, v3)
v4, err := convertFloat(valuesSliceInter[3])
assert.NoError(t, err)
assert.Equal(t, "1.5", fmt.Sprintf("%v", v4))
}
func convertFloat(v interface{}) (float64, error) {
switch v.(type) {
case float32:
return float64(v.(float32)), nil
case float64:
return v.(float64), nil
case string:
i, err := strconv.ParseFloat(v.(string), 64)
if err != nil {
return 0, err
}
return i, nil
case []byte:
i, err := strconv.ParseFloat(string(v.([]byte)), 64)
if err != nil {
return 0, err
}
return i, nil
}
return 0, fmt.Errorf("unsupported type: %v", v)
}
func convertInt(v interface{}) (int64, error) {
switch v.(type) {
case int:
return int64(v.(int)), nil
case int8:
return int64(v.(int8)), nil
case int16:
return int64(v.(int16)), nil
case int32:
return int64(v.(int32)), nil
case int64:
return v.(int64), nil
case []byte:
i, err := strconv.ParseInt(string(v.([]byte)), 10, 64)
if err != nil {
return 0, err
}
return i, nil
case string:
i, err := strconv.ParseInt(v.(string), 10, 64)
if err != nil {
return 0, err
}
return i, nil
}
return 0, fmt.Errorf("unsupported type: %v", v)
} }

View File

@ -26,6 +26,10 @@ var colStrTests = []struct {
} }
func TestColumnsStringGeneration(t *testing.T) { func TestColumnsStringGeneration(t *testing.T) {
if *db == "postgres" {
return
}
var statement *Statement var statement *Statement
for ndx, testCase := range colStrTests { for ndx, testCase := range colStrTests {

View File

@ -15,7 +15,7 @@ func TestArrayField(t *testing.T) {
type ArrayStruct struct { type ArrayStruct struct {
Id int64 Id int64
Name [20]byte `xorm:"char(20)"` Name [20]byte `xorm:"char(80)"`
} }
assert.NoError(t, testEngine.Sync2(new(ArrayStruct))) assert.NoError(t, testEngine.Sync2(new(ArrayStruct)))

View File

@ -1,72 +1,73 @@
package xorm package xorm
import ( import (
"errors"
"flag" "flag"
"fmt"
"os" "os"
"testing" "testing"
_ "github.com/go-sql-driver/mysql"
_ "github.com/lib/pq"
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
) )
var ( var (
testEngine *Engine testEngine *Engine
dbType string connString string
connStr string
db = flag.String("db", "sqlite3", "the tested database")
showSQL = flag.Bool("show_sql", true, "show generated SQLs")
ptrConnStr = flag.String("conn_str", "", "test database connection string")
mapType = flag.String("map_type", "snake", "indicate the name mapping")
cache = flag.Bool("cache", false, "if enable cache")
) )
func prepareSqlite3Engine() error { func createEngine(dbType, connStr string) error {
//if testEngine == nil {
os.Remove("./test.db")
var err error
testEngine, err = NewEngine("sqlite3", "./test.db")
if err != nil {
return err
}
testEngine.ShowSQL(*showSQL)
//}
return nil
}
func prepareMysqlEngine() error {
if testEngine == nil { if testEngine == nil {
var err error var err error
testEngine, err = NewEngine("mysql", connStr) testEngine, err = NewEngine(dbType, connStr)
if err != nil { if err != nil {
return err return err
} }
testEngine.ShowSQL(*showSQL) testEngine.ShowSQL(*showSQL)
_, err = testEngine.Exec("DROP DATABASE") }
tables, err := testEngine.DBMetas()
if err != nil { if err != nil {
return err return err
} }
var tableNames = make([]interface{}, 0, len(tables))
for _, table := range tables {
tableNames = append(tableNames, table.Name)
} }
return nil return testEngine.DropTables(tableNames...)
} }
func prepareEngine() error { func prepareEngine() error {
if dbType == "sqlite" { return createEngine(*db, connString)
return prepareSqlite3Engine()
} else if dbType == "mysql" {
return prepareMysqlEngine()
} }
return errors.New("Unknown test database driver")
}
var (
db = flag.String("db", "sqlite", "the tested database")
showSQL = flag.Bool("show_sql", true, "show generated SQLs")
)
func TestMain(m *testing.M) { func TestMain(m *testing.M) {
flag.Parse() flag.Parse()
if db != nil { if *db == "sqlite3" {
dbType = *db if ptrConnStr == nil {
connString = "./test.db"
} else {
connString = *ptrConnStr
}
} else {
if ptrConnStr == nil {
fmt.Println("you should indicate conn string")
return
}
connString = *ptrConnStr
} }
if err := prepareEngine(); err != nil { if err := prepareEngine(); err != nil {
panic(err) fmt.Println(err)
return
} }
os.Exit(m.Run()) os.Exit(m.Run())
} }